Here is the g++ commandline:
g++ -MMD -MF obj/third_party/angle/libGLESv2/entry_points_gles_ext_autogen.o.d -DLIBGLESV2_IMPLEMENTATION -DUSE_UDEV -DUSE_AURA=1 -DUSE_GLIB=1 -DUSE_NSS_CERTS=1 -DUSE_X11=1 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D_FORTIFY_SOURCE=2 -DCOMPONENT_BUILD -DNDEBUG -DNVALGRIND -DDYNAMIC_ANNOTATIONS_ENABLED=0 -DANGLE_IS_64_BIT_CPU -DGL_APICALL=__attribute__\(\(visibility\(\"default\"\)\)\) -DGL_API=__attribute__\(\(visibility\(\"default\"\)\)\) -DGL_GLES_PROTOTYPES=1 -DEGL_EGL_PROTOTYPES=1 -DGL_GLEXT_PROTOTYPES -DEGL_EGLEXT_PROTOTYPES -DANGLE_CAPTURE_ENABLED=0 -DLIBANGLE_IMPLEMENTATION -DANGLE_USE_X11 -DANGLE_ENABLE_OPENGL -DANGLE_ENABLE_OPENGL_NULL -DANGLE_ENABLE_NULL -DANGLE_ENABLE_VULKAN -DANGLE_ENABLE_SWIFTSHADER -DANGLE_USE_CUSTOM_VULKAN_CMD_BUFFERS=1 -DANGLE_ENABLE_VULKAN -DANGLE_ENABLE_SWIFTSHADER -DANGLE_USE_CUSTOM_VULKAN_CMD_BUFFERS=1 -I../../third_party/angle/include -I../../third_party/angle/src -Igen/angle -I../../third_party/angle/src/common/third_party/base -I../../third_party/angle/include -I../../third_party/angle/include -I../../third_party/angle/src -I../../third_party/angle/include -fno-strict-aliasing --param=ssp-buffer-size=4 -fstack-protector -funwind-tables -fPIC -pipe -pthread -m64 -march=x86-64 -Wno-builtin-macro-redefined -D__DATE__= -D__TIME__= -D__TIMESTAMP__= -Wall -Wno-unused-local-typedefs -Wno-maybe-uninitialized -Wno-deprecated-declarations -Wno-comments -Wno-packed-not-aligned -Wno-missing-field-initializers -Wno-unused-parameter -O2 -fno-ident -fdata-sections -ffunction-sections -fno-omit-frame-pointer -g0 -fvisibility=hidden -std=gnu++14 -Wno-narrowing -Wno-class-memaccess -fno-exceptions -fno-rtti -fvisibility-inlines-hidden -c ../../third_party/angle/src/libGLESv2/entry_points_gles_ext_autogen.cpp -o obj/third_party/angle/libGLESv2/entry_points_gles_ext_autogen.o
The error with gcc 10:
In file included from ../../third_party/angle/src/libANGLE/Context.h:18,
from ../../third_party/angle/src/libGLESv2/entry_points_gles_ext_autogen.cpp:13:
../../third_party/angle/src/libANGLE/angletypes.h:427:2: in 'constexpr' expansion of 'angle::PackedEnumMap<gl::ComponentType, unsigned int>(std::initializer_list<std::pair<gl::ComponentType, unsigned int> >{((const std::pair<gl::ComponentType, unsigned int>*)(& const std::pair<gl::ComponentType, unsigned int> [3]{std::pair<gl::ComponentType, unsigned int>{gl::ComponentType::Float, 65537}, std::pair<gl::ComponentType, unsigned int>{gl::ComponentType::Int, 1}, std::pair<gl::ComponentType, unsigned int>{gl::ComponentType::UnsignedInt, 65536}})), 3})'
../../third_party/angle/src/common/PackedEnums.h:89:72: error: modifying a const object '(unsigned int&)(&(&(const Storage&)(&((angle::PackedEnumMap<gl::ComponentType, unsigned int>*)this)->angle::PackedEnumMap<gl::ComponentType, unsigned int>::mPrivateData))->std::array<unsigned int, 4>::operator[](((std::array<unsigned int, 4>::size_type)((angle::PackedEnumMap<gl::ComponentType, unsigned int>::UnderlyingType)it->std::pair<gl::ComponentType, unsigned int>::first))))' is not allowed in a constant expression
88 | const_cast<T &>(const_cast<const Storage &>(
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
89 | mPrivateData)[static_cast<UnderlyingType>(it->first)]) = it->second;
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
In file included from ../../third_party/angle/src/libANGLE/Caps.h:12,
from ../../third_party/angle/src/libANGLE/Context.h:20,
from ../../third_party/angle/src/libGLESv2/entry_points_gles_ext_autogen.cpp:13:
../../third_party/angle/src/libANGLE/angletypes.h:427:2: note: originally declared 'const' here
427 | }};
| ^
In file included from ../../third_party/angle/src/libANGLE/Context.h:18,
from ../../third_party/angle/src/libGLESv2/entry_points_gles_ext_autogen.cpp:13:
../../third_party/angle/src/libANGLE/Context.inl.h:36:2: in 'constexpr' expansion of 'angle::PackedEnumMap<gl::PrimitiveMode, int>(std::initializer_list<std::pair<gl::PrimitiveMode, int> >{((const std::pair<gl::PrimitiveMode, int>*)(& const std::pair<gl::PrimitiveMode, int> [11]{std::pair<gl::PrimitiveMode, int>{gl::PrimitiveMode::Points, 1}, std::pair<gl::PrimitiveMode, int>{gl::PrimitiveMode::Lines, 2}, std::pair<gl::PrimitiveMode, int>{gl::PrimitiveMode::LineLoop, 2}, std::pair<gl::PrimitiveMode, int>{gl::PrimitiveMode::LineStrip, 2}, std::pair<gl::PrimitiveMode, int>{gl::PrimitiveMode::Triangles, 3}, std::pair<gl::PrimitiveMode, int>{gl::PrimitiveMode::TriangleStrip, 3}, std::pair<gl::PrimitiveMode, int>{gl::PrimitiveMode::TriangleFan, 3}, std::pair<gl::PrimitiveMode, int>{gl::PrimitiveMode::LinesAdjacency, 2}, std::pair<gl::PrimitiveMode, int>{gl::PrimitiveMode::LineStripAdjacency, 2}, std::pair<gl::PrimitiveMode, int>{gl::PrimitiveMode::TrianglesAdjacency, 3}, std::pair<gl::PrimitiveMode, int>{gl::PrimitiveMode::TriangleStripAdjacency, 3}})), 11})'
../../third_party/angle/src/common/PackedEnums.h:89:72: error: modifying a const object '(int&)(&(&(const Storage&)(&((angle::PackedEnumMap<gl::PrimitiveMode, int>*)this)->angle::PackedEnumMap<gl::PrimitiveMode, int>::mPrivateData))->std::array<int, 14>::operator[](((std::array<int, 14>::size_type)((angle::PackedEnumMap<gl::PrimitiveMode, int>::UnderlyingType)it->std::pair<gl::PrimitiveMode, int>::first))))' is not allowed in a constant expression
88 | const_cast<T &>(const_cast<const Storage &>(
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
89 | mPrivateData)[static_cast<UnderlyingType>(it->first)]) = it->second;
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
In file included from ../../third_party/angle/src/libGLESv2/entry_points_gles_ext_autogen.cpp:14:
../../third_party/angle/src/libANGLE/Context.inl.h:36:2: note: originally declared 'const' here
36 | }};
| ^
As requested, preprocessed sources (gcc -E) from gcc 9.2.0 and gcc-10.0.1-0.8.fc32.x86_64 are available here:
I think this failure is occurring because of this reference in the GCC10 changelog:
* G++ can now detect modifying constant objects in constexpr evaluation (which is undefined behavior).
I understand that it is undefined behavior in the C++14 standard, but given that it is explicitly permitted in C++17 (and that it was implicitly permitted with this hack in C++14), it feels like this is a regression. Nevertheless, I would appreciate any help in resolving this so that we have a working Chromium in Fedora 32.
Thanks in advance,
Tom