]> granicus.if.org Git - clang/commitdiff
PR35028: Retain duplicate alignas attributes in template instantiation.
authorRichard Smith <richard-llvm@metafoo.co.uk>
Thu, 4 Jan 2018 01:02:18 +0000 (01:02 +0000)
committerRichard Smith <richard-llvm@metafoo.co.uk>
Thu, 4 Jan 2018 01:02:18 +0000 (01:02 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@321777 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/Attr.td
test/SemaTemplate/alignas.cpp

index 7bb6c30807b85edbae3d6c5ddd1a10aa32afae45..a0dc1a2b9a2e449aaa644fe5f7fa92d04c604d47 100644 (file)
@@ -552,6 +552,7 @@ def Aligned : InheritableAttr {
                                           Keyword<"_Alignas">]>,
                    Accessor<"isDeclspec",[Declspec<"align">]>];
   let Documentation = [Undocumented];
+  let DuplicatesAllowedWhileMerging = 1;
 }
 
 def AlignValue : Attr {
index 8a1f96e5bdeca79d4514e2e4c5f8dcf810df79ec..680f07b32998f0ee06ca87d679e867d4af95011e 100644 (file)
@@ -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;
+}