#4703: fix erroneous warnings of gcc < 5
-------------------------------------------------+-------------------------
Reporter: Forgon | Owner:
Type: patch (an actual patch, not a | Status: new
request for one) | Milestone:
Priority: normal | unspecified
Component: other | Version:
Keywords: | git/master
Blocking: | Blocked By:
| Operating System: All
| /Non-Specific
-------------------------------------------------+-------------------------
With some versions of gcc < 5, `make` prints the following
warnings/errors:
{{{
make[2]: Entering directory `/home/x/warzone2100/lib/framework'
depbase=`echo crc.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
g++ -DHAVE_CONFIG_H -I. -I../.. -DYY_NO_INPUT -D_REENTRANT
-I/usr/include/SDL2 -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -DDEBUG
-DWZ_DATADIR="\"/usr/local/share/warzone2100\""
-DLOCALEDIR="\"/usr/local/share/locale\"" -I../.. -I../../3rdparty
-I/usr/include/qt5/QtCore -I/usr/include/qt5 -I/usr/include/qt5/QtGui
-I/usr/include/qt5/QtWidgets -I/usr/include/qt5/QtScript -O0 -ggdb
-Werror -Wno-enum-compare -Wall -Wextra -Wno-unused-parameter -Wno-sign-
compare -Wcast-align -Wwrite-strings -Wpointer-arith -Wno-format-security
-I/usr/include/harfbuzz -I/usr/include/freetype2
-I/usr/include/qt5/QtCore -I/usr/include/qt5 -I/usr/include/qt5/QtGui
-I/usr/include/qt5/QtWidgets -I/usr/include/qt5/QtScript -fPIC
-std=c++11 -fstack-protector -MT crc.o -MD -MP -MF $depbase.Tpo -c -o
crc.o crc.cpp &&\
mv -f $depbase.Tpo $depbase.Po
crc.cpp: In static member function ‘static
ecPrivateKeyDERExternalRepresentation::ecCurveData
ecPrivateKeyDERExternalRepresentation::getCurveData(CurveID)’:
crc.cpp:331:26: error: missing initializer for member
‘ecPrivateKeyDERExternalRepresentation::ecCurveData::curveID’ [-Werror
=missing-field-initializers]
return ecCurveData { };
^
crc.cpp:331:26: error: missing initializer for member
‘ecPrivateKeyDERExternalRepresentation::ecCurveData::prelude’ [-Werror
=missing-field-initializers]
crc.cpp:331:26: error: missing initializer for member
‘ecPrivateKeyDERExternalRepresentation::ecCurveData::prelude_len’ [-Werror
=missing-field-initializers]
crc.cpp:331:26: error: missing initializer for member
‘ecPrivateKeyDERExternalRepresentation::ecCurveData::numPrivateKeyBytes’
[-Werror=missing-field-initializers]
crc.cpp:331:26: error: missing initializer for member
‘ecPrivateKeyDERExternalRepresentation::ecCurveData::ecDomainParameters’
[-Werror=missing-field-initializers]
crc.cpp:331:26: error: missing initializer for member
‘ecPrivateKeyDERExternalRepresentation::ecCurveData::ecDomainParameters_len’
[-Werror=missing-field-initializers]
crc.cpp:331:26: error: missing initializer for member
‘ecPrivateKeyDERExternalRepresentation::ecCurveData::publicKeyPrelude’
[-Werror=missing-field-initializers]
crc.cpp:331:26: error: missing initializer for member
‘ecPrivateKeyDERExternalRepresentation::ecCurveData::publicKeyPrelude_len’
[-Werror=missing-field-initializers]
crc.cpp:331:26: error: missing initializer for member
‘ecPrivateKeyDERExternalRepresentation::ecCurveData::numPublicKeyBytes’
[-Werror=missing-field-initializers]
crc.cpp: In static member function ‘static
ecPrivateKeyDERExternalRepresentation::ecCurveData
ecPrivateKeyDERExternalRepresentation::curveData_secp224r1()’:
crc.cpp:336:24: error: missing initializer for member
‘ecPrivateKeyDERExternalRepresentation::ecCurveData::curveID’ [-Werror
=missing-field-initializers]
ecCurveData data = { };
^
crc.cpp:336:24: error: missing initializer for member
‘ecPrivateKeyDERExternalRepresentation::ecCurveData::prelude’ [-Werror
=missing-field-initializers]
crc.cpp:336:24: error: missing initializer for member
‘ecPrivateKeyDERExternalRepresentation::ecCurveData::prelude_len’ [-Werror
=missing-field-initializers]
crc.cpp:336:24: error: missing initializer for member
‘ecPrivateKeyDERExternalRepresentation::ecCurveData::numPrivateKeyBytes’
[-Werror=missing-field-initializers]
crc.cpp:336:24: error: missing initializer for member
‘ecPrivateKeyDERExternalRepresentation::ecCurveData::ecDomainParameters’
[-Werror=missing-field-initializers]
crc.cpp:336:24: error: missing initializer for member
‘ecPrivateKeyDERExternalRepresentation::ecCurveData::ecDomainParameters_len’
[-Werror=missing-field-initializers]
crc.cpp:336:24: error: missing initializer for member
‘ecPrivateKeyDERExternalRepresentation::ecCurveData::publicKeyPrelude’
[-Werror=missing-field-initializers]
crc.cpp:336:24: error: missing initializer for member
‘ecPrivateKeyDERExternalRepresentation::ecCurveData::publicKeyPrelude_len’
[-Werror=missing-field-initializers]
crc.cpp:336:24: error: missing initializer for member
‘ecPrivateKeyDERExternalRepresentation::ecCurveData::numPublicKeyBytes’
[-Werror=missing-field-initializers]
crc.cpp: In static member function ‘static
ecPrivateKeyDERExternalRepresentation::ecCurveData
ecPrivateKeyDERExternalRepresentation::curveData_secp256r1()’:
crc.cpp:350:24: error: missing initializer for member
‘ecPrivateKeyDERExternalRepresentation::ecCurveData::curveID’ [-Werror
=missing-field-initializers]
ecCurveData data = { };
^
crc.cpp:350:24: error: missing initializer for member
‘ecPrivateKeyDERExternalRepresentation::ecCurveData::prelude’ [-Werror
=missing-field-initializers]
crc.cpp:350:24: error: missing initializer for member
‘ecPrivateKeyDERExternalRepresentation::ecCurveData::prelude_len’ [-Werror
=missing-field-initializers]
crc.cpp:350:24: error: missing initializer for member
‘ecPrivateKeyDERExternalRepresentation::ecCurveData::numPrivateKeyBytes’
[-Werror=missing-field-initializers]
crc.cpp:350:24: error: missing initializer for member
‘ecPrivateKeyDERExternalRepresentation::ecCurveData::ecDomainParameters’
[-Werror=missing-field-initializers]
crc.cpp:350:24: error: missing initializer for member
‘ecPrivateKeyDERExternalRepresentation::ecCurveData::ecDomainParameters_len’
[-Werror=missing-field-initializers]
crc.cpp:350:24: error: missing initializer for member
‘ecPrivateKeyDERExternalRepresentation::ecCurveData::publicKeyPrelude’
[-Werror=missing-field-initializers]
crc.cpp:350:24: error: missing initializer for member
‘ecPrivateKeyDERExternalRepresentation::ecCurveData::publicKeyPrelude_len’
[-Werror=missing-field-initializers]
crc.cpp:350:24: error: missing initializer for member
‘ecPrivateKeyDERExternalRepresentation::ecCurveData::numPublicKeyBytes’
[-Werror=missing-field-initializers]
cc1plus: all warnings being treated as errors
make[2]: *** [crc.o] Error 1
make[2]: Leaving directory `/home/x/warzone2100/lib/framework'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/x/warzone2100'
make: *** [all] Error 2
}}}
The problem was introduced with
`
commit f1c474153f7c55b5b39a9fdb805a7a7a4c1819c8
Author: past-due <[email protected]>
Date: Tue Aug 15 22:19:48 2017 -0400
Replace OpenSSL
Use much smaller, portable micro-ECC and SHA2 libraries.
'
Its cause is a bug where value initialization for an aggregate is confused
with the absense of field initializers (read the
[https://gcc.gnu.org/bugzilla/show_bug.cgi?id=55805 bug report]). I
suppressed the resulting warning ([-Wmissing-field-initializers]) with
[https://gcc.gnu.org/onlinedocs/gcc/Diagnostic-Pragmas.html diagnostic
pragmas]. They are indented for readability, which may be unusual yet is
legal with all post-ANSI C compilers.
--
Ticket URL: <http://developer.wz2100.net/ticket/4703>
Warzone 2100 Trac <http://developer.wz2100.net/>
The Warzone 2100 Project
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Warzone2100-project mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/warzone2100-project