mirror of
				https://git.code.sf.net/p/libpng/code.git
				synced 2025-07-10 18:04:09 +02:00 
			
		
		
		
	[libpng16] Added a work around for GCC 4.2 optimization bug
This commit is contained in:
		
							parent
							
								
									b257147015
								
							
						
					
					
						commit
						48cbba8e8e
					
				
							
								
								
									
										1
									
								
								ANNOUNCE
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								ANNOUNCE
									
									
									
									
									
								
							@ -514,6 +514,7 @@ Version 1.6.0beta30 [September 6, 2012]
 | 
				
			|||||||
    elements of the png_icc_matrix and png_icc_vector types. The accidental
 | 
					    elements of the png_icc_matrix and png_icc_vector types. The accidental
 | 
				
			||||||
    (harmless) 'const' previously applied to the parameters of two of the
 | 
					    (harmless) 'const' previously applied to the parameters of two of the
 | 
				
			||||||
    functions have also been removed.
 | 
					    functions have also been removed.
 | 
				
			||||||
 | 
					  Added a work around for GCC 4.2 optimiztion bug
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Send comments/corrections/commendations to png-mng-implement at lists.sf.net
 | 
					Send comments/corrections/commendations to png-mng-implement at lists.sf.net
 | 
				
			||||||
(subscription required; visit
 | 
					(subscription required; visit
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										1
									
								
								CHANGES
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								CHANGES
									
									
									
									
									
								
							@ -4266,6 +4266,7 @@ Version 1.6.0beta30 [September 6, 2012]
 | 
				
			|||||||
    elements of the png_icc_matrix and png_icc_vector types. The accidental
 | 
					    elements of the png_icc_matrix and png_icc_vector types. The accidental
 | 
				
			||||||
    (harmless) 'const' previously applied to the parameters of two of the
 | 
					    (harmless) 'const' previously applied to the parameters of two of the
 | 
				
			||||||
    functions have also been removed.
 | 
					    functions have also been removed.
 | 
				
			||||||
 | 
					  Added a work around for GCC 4.2 optimiztion bug
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Send comments/corrections/commendations to png-mng-implement at lists.sf.net
 | 
					Send comments/corrections/commendations to png-mng-implement at lists.sf.net
 | 
				
			||||||
(subscription required; visit
 | 
					(subscription required; visit
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										19
									
								
								png.c
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								png.c
									
									
									
									
									
								
							@ -2155,15 +2155,26 @@ png_find_icc_tag(png_const_bytep profile, png_uint_32 tag, png_uint_32p length)
 | 
				
			|||||||
 * png_int_32)[], not (const (png_int_32[])), consequently a compiler may object
 | 
					 * png_int_32)[], not (const (png_int_32[])), consequently a compiler may object
 | 
				
			||||||
 * to passing a (png_int_32[]) (which does not have const elements).
 | 
					 * to passing a (png_int_32[]) (which does not have const elements).
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					#if __GNUC__ == 4 && __GNUC_MINOR__ == 2
 | 
				
			||||||
 | 
					   /* GCC 4.2 has an optimization bug which means that if this code is compiled
 | 
				
			||||||
 | 
					    * with any optimization (i.e. not -O0) it somehow manages to make casts to
 | 
				
			||||||
 | 
					    * png_const_icc_matrixrp not work in some cases and so warns for some
 | 
				
			||||||
 | 
					    * function calls.  This works round the problem without harming optimization
 | 
				
			||||||
 | 
					    * with other compilers.
 | 
				
			||||||
 | 
					    */
 | 
				
			||||||
 | 
					#  define PNG_ICC_CONST
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					#  define PNG_ICC_CONST const
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
typedef png_int_32                              png_icc_vector[3];
 | 
					typedef png_int_32                              png_icc_vector[3];
 | 
				
			||||||
typedef png_int_32 (*PNG_RESTRICT               png_icc_vectorrp)[3];
 | 
					typedef png_int_32 (*PNG_RESTRICT               png_icc_vectorrp)[3];
 | 
				
			||||||
typedef const png_int_32 (*PNG_RESTRICT png_const_icc_vectorrp)[3];
 | 
					typedef PNG_ICC_CONST png_int_32 (*PNG_RESTRICT png_const_icc_vectorrp)[3];
 | 
				
			||||||
#define png_cpv(vector) png_constcast(const png_icc_vector*,&vector)
 | 
					#define png_cpv(vector) png_constcast(PNG_ICC_CONST png_icc_vector*,&vector)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef png_int_32                              png_icc_matrix[3][3];
 | 
					typedef png_int_32                              png_icc_matrix[3][3];
 | 
				
			||||||
typedef png_int_32 (*PNG_RESTRICT               png_icc_matrixrp)[3][3];
 | 
					typedef png_int_32 (*PNG_RESTRICT               png_icc_matrixrp)[3][3];
 | 
				
			||||||
typedef const png_int_32 (*PNG_RESTRICT png_const_icc_matrixrp)[3][3];
 | 
					typedef PNG_ICC_CONST png_int_32 (*PNG_RESTRICT png_const_icc_matrixrp)[3][3];
 | 
				
			||||||
#define png_cpm(matrix) png_constcast(const png_icc_matrix*,&matrix)
 | 
					#define png_cpm(matrix) png_constcast(PNG_ICC_CONST png_icc_matrix*,&matrix)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* These two painfully complex routines are to detect under or overflow on
 | 
					/* These two painfully complex routines are to detect under or overflow on
 | 
				
			||||||
 * addition or subtraction of two 32-bit signed integers.  There's probably a
 | 
					 * addition or subtraction of two 32-bit signed integers.  There's probably a
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user