From 7d82131abef5e1653b0798abd220768d0ca5c704 Mon Sep 17 00:00:00 2001 From: David Majnemer Date: Tue, 3 Feb 2015 07:35:55 +0000 Subject: [PATCH] MS ABI: Records with required alignment can't have common linkage This fixes PR22441. llvm-svn: 227950 --- clang/lib/AST/ASTContext.cpp | 1 + clang/test/CodeGen/ms-align-tentative.c | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/clang/lib/AST/ASTContext.cpp b/clang/lib/AST/ASTContext.cpp index c72c239..57f82ed 100644 --- a/clang/lib/AST/ASTContext.cpp +++ b/clang/lib/AST/ASTContext.cpp @@ -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(); break; } diff --git a/clang/test/CodeGen/ms-align-tentative.c b/clang/test/CodeGen/ms-align-tentative.c index ccd7616..13d7440 100644 --- a/clang/test/CodeGen/ms-align-tentative.c +++ b/clang/test/CodeGen/ms-align-tentative.c @@ -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 -- 2.7.4