
The implementation mostly reuses C++ code paths where possible, including narrowing check in order to provide diagnostic messages in case initializer for constexpr variable is not exactly representable in target type. The following won't work due to lack of support for other features: - Diagnosing of underspecified declarations involving constexpr - Constexpr attached to compound literals Also due to lack of support for char8_t some of examples with utf-8 strings don't work properly. Fixes https://github.com/llvm/llvm-project/issues/64742
16 lines
918 B
C
16 lines
918 B
C
// RUN: %clang_cc1 -fsyntax-only -verify=c23 -std=c23 %s -Wpre-c2x-compat
|
|
// RUN: %clang_cc1 -fsyntax-only -verify=c17 -std=c17 %s
|
|
|
|
constexpr int a = 0; // c17-error {{unknown type name 'constexpr'}} \
|
|
c23-warning {{'constexpr' is incompatible with C standards before C23}}
|
|
|
|
void func(int array[constexpr]); // c23-error {{expected expression}} \
|
|
// c17-error {{use of undeclared}}
|
|
|
|
_Atomic constexpr int b = 0; // c23-error {{constexpr variable cannot have type 'const _Atomic(int)'}} \
|
|
// c23-warning {{'constexpr' is incompatible with C standards before C23}} \
|
|
// c17-error {{unknown type name 'constexpr'}}
|
|
|
|
int static constexpr c = 1; // c17-error {{expected ';' after top level declarator}} \
|
|
// c23-warning {{'constexpr' is incompatible with C standards before C23}}
|