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.

llvm-svn: 227950

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

index c72c239..57f82ed 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 ccd7616..13d7440 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