Ensure we have atleast 2-byte alignment for member functions.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@83337 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Mike Stump 2009-10-05 22:49:20 +00:00
Родитель 9a3dcf2234
Коммит fb51ddfafc
2 изменённых файлов: 14 добавлений и 3 удалений

Просмотреть файл

@ -348,6 +348,9 @@ void CodeGenModule::SetLLVMFunctionAttributesForDefinition(const Decl *D,
if (const AlignedAttr *AA = D->getAttr<AlignedAttr>()) if (const AlignedAttr *AA = D->getAttr<AlignedAttr>())
F->setAlignment(AA->getAlignment()/8); F->setAlignment(AA->getAlignment()/8);
// C++ ABI requires 2-byte alignment for member functions.
if (F->getAlignment() < 16 && isa<CXXMethodDecl>(D))
F->setAlignment(16/8);
} }
void CodeGenModule::SetCommonAttributes(const Decl *D, void CodeGenModule::SetCommonAttributes(const Decl *D,

Просмотреть файл

@ -10,8 +10,9 @@ int foo() { }
class C { class C {
virtual void bar1() __attribute__((aligned(2))); virtual void bar1() __attribute__((aligned(1)));
virtual void bar2() __attribute__((aligned(1024))); virtual void bar2() __attribute__((aligned(2)));
virtual void bar3() __attribute__((aligned(1024)));
} c; } c;
void C::bar1() { } void C::bar1() { }
@ -23,6 +24,13 @@ void C::bar1() { }
void C::bar2() { } void C::bar2() { }
// CHECK:.align 10, 0x90 // CHECK:.align 1, 0x90
// CHECK-NEXT:.globl __ZN1C4bar2Ev // CHECK-NEXT:.globl __ZN1C4bar2Ev
// CHECK-NEXT:__ZN1C4bar2Ev: // CHECK-NEXT:__ZN1C4bar2Ev:
void C::bar3() { }
// CHECK:.align 10, 0x90
// CHECK-NEXT:.globl __ZN1C4bar3Ev
// CHECK-NEXT:__ZN1C4bar3Ev: