#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 <30942300+past-...@users.noreply.github.com> 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 Warzone2100-project@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/warzone2100-project