#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

Reply via email to