]> granicus.if.org Git - clang/commitdiff
MS ABI: Records with required alignment can't have common linkage
authorDavid Majnemer <david.majnemer@gmail.com>
Tue, 3 Feb 2015 07:35:55 +0000 (07:35 +0000)
committerDavid Majnemer <david.majnemer@gmail.com>
Tue, 3 Feb 2015 07:35:55 +0000 (07:35 +0000)
This fixes PR22441.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@227950 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AST/ASTContext.cpp
test/CodeGen/ms-align-tentative.c

index c72c239320dcf50cb76930c835e38e41f22064c4..57f82ed7ce2aa1b5abad3c01c3563f812963a5db 100644 (file)
@@ -1685,6 +1685,7 @@ TypeInfo ASTContext::getTypeInfoImpl(const Type *T) const {
     const ASTRecordLayout &Layout = getASTRecordLayout(RT->getDecl());
     Width = toBits(Layout.getSize());
     Align = toBits(Layout.getAlignment());
+    AlignIsRequired = RT->getDecl()->hasAttr<AlignedAttr>();
     break;
   }
 
index ccd761616471252dbd4ae410092be202a8d4b681..13d7440e8809486175a810846bb22fb029430ca4 100644 (file)
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -triple i386-pc-win32 %s -emit-llvm -fms-compatibility -o - | FileCheck %s
+// RUN: %clang_cc1 -triple i386-pc-win32 -emit-llvm -fms-compatibility -o - < %s | FileCheck %s
 
 char __declspec(align(8192)) x;
 // CHECK-DAG: @x = global i8 0, align 8192
@@ -13,3 +13,8 @@ T __declspec(align(8192)) z;
 int __declspec(align(16)) redef;
 int __declspec(align(32)) redef = 8;
 // CHECK-DAG: @redef = global i32 8, align 32
+
+struct __declspec(align(64)) S {
+  char fd;
+} s;
+// CHECK-DAG: @s = global %struct.S zeroinitializer, align 64