зеркало из https://github.com/microsoft/clang-1.git
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:
Родитель
9a3dcf2234
Коммит
fb51ddfafc
|
@ -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:
|
||||||
|
|
Загрузка…
Ссылка в новой задаче