[Bug c++/80783] New: Inconsistent constexpr diagnostic for some cstdlib functions
victor.nawothnig at gmail dot com
gcc-bugzilla@gcc.gnu.org
Tue May 16 17:09:00 GMT 2017
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80783
Bug ID: 80783
Summary: Inconsistent constexpr diagnostic for some cstdlib
functions
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: victor.nawothnig at gmail dot com
Target Milestone: ---
A set of functions from cstdlib suffers from incorrect constexpr diagnostic
"call to non-constexpr function"
#include <cstdlib>
constexpr size_t f() { exit(0); return 1; }
/* Bad: Silently compiles */
When f() is being evaluated in a constant expression, the diagnostic properly
triggers again, this reduces the impact of this bug:
#include <cstdlib>
constexpr size_t f() { exit(0); return 1; }
int arr[f()];
/* Good: triggers diagnostic */
Interestingly the error seems to be tied to specific function signatures,
rather than the standard library headers. Given the following (without
including any headers):
extern "C" void free(int);
constexpr void f() { free(0); }
/* Good: triggers diagnostic, free has a non-standard signature */
extern "C" void free(void *);
constexpr void f() { free(0); }
/* Bad: silently compiles, free has a standard signature */
It also is limited to only a particular set of cstdlib functionsincluding but
not limited to: free, malloc, exit, atoi. I have not found any other affected
headers yet, but I did not do an exhaustive search.
More information about the Gcc-bugs
mailing list