| // RUN: %clang_cc1 -fsyntax-only -verify -std=c23 %s |
| |
| // Compound literal doesn't need a constant expression inside a initializer-list if it is already inside a function |
| // see: https://github.com/llvm/llvm-project/issues/87867 |
| int foo(int *a, int b) { |
| return 0; |
| } |
| |
| int x; |
| struct{int t;} a = (struct { |
| typeof(foo(&(struct { int t; }){.t = x}.t, 0)) t; // expected-error {{initializer element is not a compile-time constant}} |
| }){0}; |
| |
| void inside_a_func(){ |
| int x; |
| (void)(struct { |
| typeof(foo(&(struct { int t; }){.t = x}.t, 0)) t; |
| }){0}; |
| } |
| |
| // see: https://github.com/llvm/llvm-project/issues/143613 |
| #define bitcast(type, value) \ |
| (((union{ typeof(value) src; type dst; }){ (value) }).dst) |
| |
| double placeholder = 10.0; |
| double bar = bitcast(double, placeholder); // expected-error {{initializer element is not a compile-time constant}} |
| |
| int main(void) |
| { |
| int foo = 4; |
| foo = bitcast(int, bitcast(double, foo)); |
| return 0; |
| } |