blob: ee5b2e57b59d3ba9c64e3163e61e57b1d051b619 [file] [log] [blame]
Daniel Dunbara5728872009-12-15 20:14:24 +00001// RUN: %clang_cc1 -fsyntax-only -verify -std=c++0x %s
Sean Huntbbd37c62009-11-21 08:43:09 +00002
Peter Collingbourne82d0b0a2011-09-29 18:04:28 +00003int align_illegal alignas(3); //expected-error {{requested alignment is not a power of 2}}
4char align_big alignas(int);
5int align_small alignas(1); // FIXME: this should be rejected
6int align_multiple alignas(1) alignas(8) alignas(1);
Sean Huntbbd37c62009-11-21 08:43:09 +00007
8struct align_member {
Peter Collingbourne82d0b0a2011-09-29 18:04:28 +00009 int member alignas(8);
Sean Huntbbd37c62009-11-21 08:43:09 +000010};
11
Peter Collingbourne82d0b0a2011-09-29 18:04:28 +000012typedef char align_typedef alignas(8);
Richard Smith3e4c6c42011-05-05 21:57:07 +000013template<typename T> using align_alias_template = align_typedef;
14
Sean Huntbbd37c62009-11-21 08:43:09 +000015static_assert(alignof(align_big) == alignof(int), "k's alignment is wrong");
John McCall4081a5c2010-10-08 18:24:19 +000016static_assert(alignof(align_small) == 1, "j's alignment is wrong");
Sean Huntbbd37c62009-11-21 08:43:09 +000017static_assert(alignof(align_multiple) == 8, "l's alignment is wrong");
18static_assert(alignof(align_member) == 8, "quuux's alignment is wrong");
19static_assert(sizeof(align_member) == 8, "quuux's size is wrong");
Richard Smith3e4c6c42011-05-05 21:57:07 +000020static_assert(alignof(align_typedef) == 8, "typedef's alignment is wrong");
21static_assert(alignof(align_alias_template<int>) == 8, "alias template's alignment is wrong");