// RUN: %clang_cc1 -std=gnu++11 -fsyntax-only -verify %s namespace attribute_aligned { template struct X { char c[1] __attribute__((__aligned__((N)))); // expected-error {{alignment is not a power of 2}} }; template struct check { int check_failed[X ? 1 : -1]; // expected-error {{array with a negative size}} }; template struct check_alignment { typedef check)> t; // expected-note {{in instantiation}} }; check_alignment<1>::t c1; check_alignment<2>::t c2; check_alignment<3>::t c3; // expected-note 2 {{in instantiation}} check_alignment<4>::t c4; template class my_aligned_storage { __attribute__((align(Align))) char storage[Size]; }; template class C { public: C() { static_assert(sizeof(t) == sizeof(T), "my_aligned_storage size wrong"); static_assert(alignof(t) == alignof(T), "my_aligned_storage align wrong"); // expected-warning{{'alignof' applied to an expression is a GNU extension}} } private: my_aligned_storage t; }; C cd; } namespace PR9049 { extern const void *CFRetain(const void *ref); template __attribute__((cf_returns_retained)) inline T WBCFRetain(T aValue) { return aValue ? (T)CFRetain(aValue) : (T)0; } extern void CFRelease(const void *ref); template inline void WBCFRelease(__attribute__((cf_consumed)) T aValue) { if(aValue) CFRelease(aValue); } }