[pkg-d-commits] [ldc] 80/211: Allow align(1) for global variables.

Matthias Klumpp mak at moszumanska.debian.org
Sun Apr 23 22:36:11 UTC 2017


This is an automated email from the git hooks/post-receive script.

mak pushed a commit to annotated tag v1.1.0
in repository ldc.

commit 7e572e6f03270f278619653a0531b936fd1b4f9d
Author: Johan Engelen <jbc.engelen at gmail.com>
Date:   Tue Oct 11 21:37:45 2016 +0200

    Allow align(1) for global variables.
    
    This reverts a39997d326f0d3da353d8b9f27ffd559e6fcc5d7, and fixes the invalid tests in std.conv.
---
 gen/llvmhelpers.cpp   |  8 ++++----
 runtime/phobos        |  2 +-
 tests/codegen/align.d | 10 ++++++++--
 3 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/gen/llvmhelpers.cpp b/gen/llvmhelpers.cpp
index 6abec42..59a72f5 100644
--- a/gen/llvmhelpers.cpp
+++ b/gen/llvmhelpers.cpp
@@ -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);
 
diff --git a/runtime/phobos b/runtime/phobos
index fe82475..def73b2 160000
--- a/runtime/phobos
+++ b/runtime/phobos
@@ -1 +1 @@
-Subproject commit fe82475369dd9bd426e40fbb968d19a11f60f71d
+Subproject commit def73b22bcc46416f59fc2b7bc070a4143ad9d77
diff --git a/tests/codegen/align.d b/tests/codegen/align.d
index 30c61df..6a809a1 100644
--- a/tests/codegen/align.d
+++ b/tests/codegen/align.d
@@ -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;

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-d/ldc.git



More information about the pkg-d-commits mailing list