Allow align(1) for global variables.

This reverts a39997d326, and fixes the invalid tests in std.conv.
This commit is contained in:
Johan Engelen 2016-10-11 21:37:45 +02:00
parent a90fdfe624
commit 7e572e6f03
3 changed files with 13 additions and 7 deletions

View file

@ -846,10 +846,10 @@ void DtoResolveVariable(VarDeclaration *vd) {
linkage, nullptr, llName, vd->isThreadlocal());
getIrGlobal(vd)->value = gvar;
// Set the alignment and use the target pointer size as lower bound.
unsigned alignment =
std::max(DtoAlignment(vd), gDataLayout->getPointerSize());
gvar->setAlignment(alignment);
// Set the alignment (it is important not to use type->alignsize because
// VarDeclarations can have an align() attribute independent of the type
// as well).
gvar->setAlignment(DtoAlignment(vd));
applyVarDeclUDAs(vd, gvar);

@ -1 +1 @@
Subproject commit fe82475369dd9bd426e40fbb968d19a11f60f71d
Subproject commit def73b22bcc46416f59fc2b7bc070a4143ad9d77

View file

@ -6,10 +6,14 @@
align(32) struct Outer { int a; }
struct Inner { align(32) int a; }
align(1) ubyte globalByte1;
// CHECK-DAG: align11globalByte1h = {{.*}} align 1
static Outer globalOuter;
// CHECK: constant %align.Outer_init zeroinitializer{{(, comdat)?}}, align 32
// CHECK-DAG: constant %align.Outer_init zeroinitializer{{(, comdat)?}}, align 32
// CHECK-DAG: align11globalOuterS5align5Outer = {{.*}} align 32
static Inner globalInner;
// CHECK: constant %align.Inner_init zeroinitializer{{(, comdat)?}}, align 32
// CHECK-DAG: constant %align.Inner_init zeroinitializer{{(, comdat)?}}, align 32
// CHECK-DAG: align11globalInnerS5align5Inner = {{.*}} align 32
Outer passAndReturnOuterByVal(Outer arg) { return arg; }
// CHECK: define{{.*}} void @{{.*}}_D5align23passAndReturnOuterByValFS5align5OuterZS5align5Outer
@ -29,6 +33,8 @@ void main() {
Inner inner;
// CHECK: %inner = alloca %align.Inner, align 32
align(1) byte byte1;
// CHECK: %byte1 = alloca i8, align 1
align(16) byte byte16;
// CHECK: %byte16 = alloca i8, align 16
align(64) Outer outer64;