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
|
||||||
|
|||||||
27
png.c
27
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).
|
||||||
*/
|
*/
|
||||||
typedef png_int_32 png_icc_vector[3];
|
#if __GNUC__ == 4 && __GNUC_MINOR__ == 2
|
||||||
typedef png_int_32 (*PNG_RESTRICT png_icc_vectorrp)[3];
|
/* GCC 4.2 has an optimization bug which means that if this code is compiled
|
||||||
typedef const png_int_32 (*PNG_RESTRICT png_const_icc_vectorrp)[3];
|
* with any optimization (i.e. not -O0) it somehow manages to make casts to
|
||||||
#define png_cpv(vector) png_constcast(const png_icc_vector*,&vector)
|
* 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_RESTRICT png_icc_vectorrp)[3];
|
||||||
|
typedef PNG_ICC_CONST png_int_32 (*PNG_RESTRICT png_const_icc_vectorrp)[3];
|
||||||
|
#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