| // RUN: %clang_cc1 -triple x86_64-linux %s -std=c2y -verify=expected,both -fexperimental-new-constant-interpreter |
| // RUN: %clang_cc1 -triple x86_64-linux %s -std=c2y -verify=ref,both |
| |
| // both-no-diagnostics |
| |
| struct S { |
| int x; |
| char c; |
| float f; |
| }; |
| |
| #define DECL_BUFFER(Ty, Name) alignas(Ty) unsigned char Name[sizeof(Ty)] |
| |
| struct T { |
| DECL_BUFFER(struct S, buffer); |
| }; |
| |
| int quorble() { |
| DECL_BUFFER(struct T, buffer); |
| ((struct S *)((struct T *)buffer)->buffer)->x = 12; |
| const struct S *s_ptr = (struct S *)((struct T *)buffer)->buffer; |
| return s_ptr->x; |
| } |