13573b2c84372d9484296fa658f5276f6c09acb92Daniel Dunbar// RUN: %clang_cc1 -fsyntax-only -verify %s
2cb67b17f999ff3b77dfbbed46e955ccb14b4869bAnders Carlssontemplate <typename T>
3cb67b17f999ff3b77dfbbed46e955ccb14b4869bAnders Carlssonstruct A {
4cb67b17f999ff3b77dfbbed46e955ccb14b4869bAnders Carlsson  char a __attribute__((aligned(16)));
579e8303f24b8cf409b8338a5434ee364bd401094Douglas Gregor
679e8303f24b8cf409b8338a5434ee364bd401094Douglas Gregor  struct B {
779e8303f24b8cf409b8338a5434ee364bd401094Douglas Gregor    typedef T __attribute__((aligned(16))) i16;
879e8303f24b8cf409b8338a5434ee364bd401094Douglas Gregor    i16 x;
979e8303f24b8cf409b8338a5434ee364bd401094Douglas Gregor  };
10cb67b17f999ff3b77dfbbed46e955ccb14b4869bAnders Carlsson};
11cb67b17f999ff3b77dfbbed46e955ccb14b4869bAnders Carlssonint a[sizeof(A<int>) == 16 ? 1 : -1];
1279e8303f24b8cf409b8338a5434ee364bd401094Douglas Gregorint a2[sizeof(A<int>::B) == 16 ? 1 : -1];
13cb67b17f999ff3b77dfbbed46e955ccb14b4869bAnders Carlsson
1465dedc26687385b4fdc094fd51f3776e0a63f479John McCall// rdar://problem/8243419
1565dedc26687385b4fdc094fd51f3776e0a63f479John McCallnamespace test1 {
1665dedc26687385b4fdc094fd51f3776e0a63f479John McCall  template <typename T> struct A {
1765dedc26687385b4fdc094fd51f3776e0a63f479John McCall    int a;
1865dedc26687385b4fdc094fd51f3776e0a63f479John McCall    T b[0];
1965dedc26687385b4fdc094fd51f3776e0a63f479John McCall  } __attribute__((packed));
2065dedc26687385b4fdc094fd51f3776e0a63f479John McCall
2165dedc26687385b4fdc094fd51f3776e0a63f479John McCall  typedef A<unsigned long> type;
2265dedc26687385b4fdc094fd51f3776e0a63f479John McCall
2365dedc26687385b4fdc094fd51f3776e0a63f479John McCall  int test0[sizeof(type) == 4 ? 1 : -1];
2465dedc26687385b4fdc094fd51f3776e0a63f479John McCall  int test1[__builtin_offsetof(type, a) == 0 ? 1 : -1];
2565dedc26687385b4fdc094fd51f3776e0a63f479John McCall  int test2[__builtin_offsetof(type, b) == 4 ? 1 : -1];
2665dedc26687385b4fdc094fd51f3776e0a63f479John McCall}
27