https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69960
Bug ID: 69960 Summary: "initializer element is not constant" Product: gcc Version: 5.3.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: felix-gcc at fefe dot de Target Milestone: --- This is the code: #define TOLOWER(x) (x&~0x20) #define Word(s) \ s[1] ? s[2] ? s[3] ? \ (TOLOWER(s[0]) << 24) + (TOLOWER(s[1]) << 16) + (TOLOWER(s[2]) << 8) + TOLOWER(s[3]) : \ (TOLOWER(s[0]) << 16) + (TOLOWER(s[1]) << 8) + TOLOWER(s[2]) : \ (TOLOWER(s[0]) << 8) + TOLOWER(s[1]) : \ TOLOWER(s[0]) const unsigned int _the = Word("the"); When compiling, this happens: test.c:9:32: error: initializer element is not constant const unsigned int _the = Word("the"); ^ test.c:3:3: note: in definition of macro ‘Word’ s[1] ? s[2] ? s[3] ? \ ^ How is this not constant? clang thinks it is constant.