[Bug c++/60399] New: constexpr ctor that does not init an attribute should be rejected but isn't

wouter at voti dot nl gcc-bugzilla@gcc.gnu.org
Mon Mar 3 10:23:00 GMT 2014


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60399

            Bug ID: 60399
           Summary: constexpr ctor that does not init an attribute should
                    be rejected but isn't
           Product: gcc
           Version: 4.8.3
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: wouter at voti dot nl

Created attachment 32250
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=32250&action=edit
cpp stanalone main file that shows the problem

AFAIK A constexpr constructor that does not initialize all attributes should be
rejected. In the attached code, which is accepted by the compiler, such a
constructor is invoked in the initialization of a static class attribute.

To my surprise the compiler generates an init_array entry for this (which is
what triggered me to dig into this, I work with a linkerscript that does not
allow any int_array entries). The generated entry is basically empty, just

static done = false;
if( ! done ){
   done = true;
}

When I make the constexpr constructor initialize the attribute the init_array
entry is gone.

I use GCC for ARM, 4.8.3

"C:/Program Files (x86)/GNU Tools ARM Embedded/4.8
2013q4/bin/arm-none-eabi-g++" -nostartfiles  -mcpu=cortex-m0 -mthumb
-fomit-frame-pointer -march=armv6-m -Wall -Werror -Wno-unused-local-typedefs
-Wno-maybe-uninitialized -fdata-sections -ffunction-sections -Os -fno-rtti
-fno-exceptions  -fno-threadsafe-statics -fno-use-cxa-get-exception-ptr
-std=c++11 -c -o main.o main.cpp



More information about the Gcc-bugs mailing list