1 | // RUN: %clang_cc1 -fsyntax-only -verify %s -triple x86_64-linux-gnu |
2 | |
3 | // PR15216 |
4 | // Don't crash when taking computing the offset of structs with large arrays. |
5 | const unsigned long Size = (1l << 60); |
6 | |
7 | struct Chunk1 { |
8 | char padding[Size]; |
9 | char more_padding[1][Size]; |
10 | char data; |
11 | }; |
12 | |
13 | int test1 = __builtin_offsetof(struct Chunk1, data); |
14 | |
15 | struct Chunk2 { |
16 | char padding[Size][Size][Size]; // expected-error 2{{array is too large}} |
17 | char data; |
18 | }; |
19 | |
20 | // FIXME: Remove this error when the constant evaluator learns to |
21 | // ignore bad types. |
22 | int test2 = __builtin_offsetof(struct Chunk2, data); // expected-error{{initializer element is not a compile-time constant}} |
23 | |