[Buildroot] [PATCH] package/libfreeimage: fix C++11 compliance with gcc-6
Peter Korsgaard
peter at korsgaard.com
Mon Aug 29 10:14:12 UTC 2016
>>>>> "Yann" == Yann E MORIN <yann.morin.1998 at free.fr> writes:
> Like in cbe01f6, 38249d5, 97fe953, fix C++11 compliance regarding
> narrowing types.
> Fixes:
> http://autobuild.buildroot.org/results/081/0811531872f69f9febbdc482dfbdd7fb5c35d1c8/
> http://autobuild.buildroot.org/results/90c/90c9cb4ffe705b8c91f4fb602e33e2ba9bcdee77/
> and a few others...
> Signed-off-by: "Yann E. MORIN" <yann.morin.1998 at free.fr>
> ---
> package/libfreeimage/0004-fix-gcc-6.patch | 31 +++++++++++++++++++++++++++++++
> 1 file changed, 31 insertions(+)
> create mode 100644 package/libfreeimage/0004-fix-gcc-6.patch
> diff --git a/package/libfreeimage/0004-fix-gcc-6.patch b/package/libfreeimage/0004-fix-gcc-6.patch
> new file mode 100644
> index 0000000..53702d1
> --- /dev/null
> +++ b/package/libfreeimage/0004-fix-gcc-6.patch
> @@ -0,0 +1,31 @@
> +libraw/dc_raw: fix gcc-6 failures
> +
> +With gcc-6, it is no longer allowed to narrow the type of constants in
> +a constant array declaration.
> +
> +Fixes:
> + http://autobuild.buildroot.org/results/081/0811531872f69f9febbdc482dfbdd7fb5c35d1c8/build-end.log
> +
> +Signed-off-by: "Yann E. MORIN" <yann.morin.1998 at free.fr>
> +
> +diff -durN a/Source/LibRawLite/internal/dcraw_common.cpp b/Source/LibRawLite/internal/dcraw_common.cpp
> +--- a/Source/LibRawLite/internal/dcraw_common.cpp
> ++++ b/Source/LibRawLite/internal/dcraw_common.cpp
> +@@ -2479,7 +2479,7 @@
> +
> + void CLASS kodak_radc_load_raw()
> + {
> +- static const char src[] = {
> ++ static const int src[] = {
> + 1,1, 2,3, 3,4, 4,2, 5,7, 6,5, 7,6, 7,8,
> + 1,0, 2,1, 3,3, 4,4, 5,2, 6,7, 7,6, 8,5, 8,8,
> + 2,1, 2,3, 3,0, 3,2, 3,4, 4,6, 5,5, 6,7, 6,8,
Why not signed char? There doesn't seem to any numbers outside the
signed char range and I see the code assumes elements are 1 byte big:
for (s=i=0; i < sizeof src; i+=2)
So I've changed it to signed char.
> +@@ -4519,7 +4519,7 @@
> + */
> + void CLASS vng_interpolate()
> + {
> +- static const signed char *cp, terms[] = {
> ++ static const int *cp, terms[] = {
> + -2,-2,+0,-1,0,0x01, -2,-2,+0,+0,1,0x01, -2,-1,-1,+0,0,0x01,
> + -2,-1,+0,-1,0,0x02, -2,-1,+0,+0,0,0x03, -2,-1,+0,+1,1,0x01,
> + -2,+0,+0,-1,0,0x06, -2,+0,+0,+0,1,0x02, -2,+0,+0,+1,0,0x03,
According to the error message this was a real functional bug, and not
just something to fix for gcc 6 compliance:
Source/LibRawLite/./internal/dcraw_common.cpp:4545:3: error: narrowing conversion of '136' from 'int' to 'signed char' inside { } [-Wnarrowing]
Source/LibRawLite/./internal/dcraw_common.cpp:4545:3: error: narrowing conversion of '128' from 'int' to 'signed char' inside { } [-Wnarrowing]
Source/LibRawLite/./internal/dcraw_common.cpp:4545:3: error: narrowing conversion of '136' from 'int' to 'signed char' inside { } [-Wnarrowing]
So please submit the (fixed) patch upstream, thanks.
Committed, thanks.
--
Bye, Peter Korsgaard
More information about the buildroot
mailing list