1 // RUN: %clang_cc1 -std=gnu++11 -fsyntax-only -verify %s 2 3 namespace attribute_aligned { 4 template<int N> 5 struct X { 6 char c[1] __attribute__((__aligned__((N)))); // expected-error {{alignment is not a power of 2}} 7 }; 8 9 template <bool X> struct check { 10 int check_failed[X ? 1 : -1]; // expected-error {{array with a negative size}} 11 }; 12 13 template <int N> struct check_alignment { 14 typedef check<N == sizeof(X<N>)> t; // expected-note {{in instantiation}} 15 }; 16 17 check_alignment<1>::t c1; 18 check_alignment<2>::t c2; 19 check_alignment<3>::t c3; // expected-note 2 {{in instantiation}} 20 check_alignment<4>::t c4; 21 22 template<unsigned Size, unsigned Align> 23 class my_aligned_storage 24 { 25 __attribute__((aligned(Align))) char storage[Size]; 26 }; 27 28 template<typename T> 29 class C { 30 public: C()31 C() { 32 static_assert(sizeof(t) == sizeof(T), "my_aligned_storage size wrong"); 33 static_assert(alignof(t) == alignof(T), "my_aligned_storage align wrong"); // expected-warning{{'alignof' applied to an expression is a GNU extension}} 34 } 35 36 private: 37 my_aligned_storage<sizeof(T), alignof(T)> t; 38 }; 39 40 C<double> cd; 41 } 42 43 namespace PR9049 { 44 extern const void *CFRetain(const void *ref); 45 46 template<typename T> __attribute__((cf_returns_retained)) WBCFRetain(T aValue)47 inline T WBCFRetain(T aValue) { return aValue ? (T)CFRetain(aValue) : (T)0; } 48 49 50 extern void CFRelease(const void *ref); 51 52 template<typename T> WBCFRelease(T aValue)53 inline void WBCFRelease(__attribute__((cf_consumed)) T aValue) { if(aValue) CFRelease(aValue); } 54 } 55