diff options
-rw-r--r-- | clang/include/clang/Basic/Attr.td | 1 | ||||
-rw-r--r-- | clang/test/SemaTemplate/alignas.cpp | 11 |
2 files changed, 12 insertions, 0 deletions
diff --git a/clang/include/clang/Basic/Attr.td b/clang/include/clang/Basic/Attr.td index 7bb6c30807b..a0dc1a2b9a2 100644 --- a/clang/include/clang/Basic/Attr.td +++ b/clang/include/clang/Basic/Attr.td @@ -552,6 +552,7 @@ def Aligned : InheritableAttr { Keyword<"_Alignas">]>, Accessor<"isDeclspec",[Declspec<"align">]>]; let Documentation = [Undocumented]; + let DuplicatesAllowedWhileMerging = 1; } def AlignValue : Attr { diff --git a/clang/test/SemaTemplate/alignas.cpp b/clang/test/SemaTemplate/alignas.cpp index 8a1f96e5bde..680f07b3299 100644 --- a/clang/test/SemaTemplate/alignas.cpp +++ b/clang/test/SemaTemplate/alignas.cpp @@ -21,3 +21,14 @@ struct C { char a[16]; }; static_assert(sizeof(my_union<A, B, C>) == 16, ""); static_assert(alignof(my_union<A, B, C>) == 8, ""); + +namespace PR35028 { + template<class X, int Alignment> struct alignas(X) alignas(long long) alignas(long double) alignas(Alignment) Aligned { + union { + long long align1; + long double align2; + char data[sizeof(X)]; + }; + }; + Aligned<int, 1> a; +} |