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.
5const unsigned long Size = (1l << 60);
6
7struct Chunk1 {
8  char padding[Size];
9  char more_padding[1][Size];
10  char data;
11};
12
13int test1 = __builtin_offsetof(struct Chunk1, data);
14
15struct 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.
22int test2 = __builtin_offsetof(struct Chunk2, data);  // expected-error{{initializer element is not a compile-time constant}}
23