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]; // expected-warning {{folded to constant}} 9 char more_padding[1][Size]; // expected-warning {{folded to constant}} 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 {{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