]> granicus.if.org Git - clang/commitdiff
Fix r350643 to limit COFF emission to <= 32 BYTES instead of BITS.
authorErich Keane <erich.keane@intel.com>
Thu, 7 Feb 2019 15:14:11 +0000 (15:14 +0000)
committerErich Keane <erich.keane@intel.com>
Thu, 7 Feb 2019 15:14:11 +0000 (15:14 +0000)
The patch in r350643 incorrectly sets the COFF emission based on bits
instead of bytes. This patch converts the 32 via CharUnits to bits to
compare the correct values.

Change-Id: Icf38a16470ad5ae3531374969c033557ddb0d323

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@353411 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CodeGenModule.cpp
test/CodeGen/microsoft-no-common-align.c

index 5f1e65683889be20d6a4d9a4ca0f4da2a5bd3651..e6c6da203857c14fc14371ef275708fa7eeb5f89 100644 (file)
@@ -3775,13 +3775,15 @@ static bool isVarDeclStrongDefinition(const ASTContext &Context,
     }
   }
 
-  // Microsoft's link.exe doesn't support alignments greater than 32 for common
-  // symbols, so symbols with greater alignment requirements cannot be common.
+  // Microsoft's link.exe doesn't support alignments greater than 32 bytes for
+  // common symbols, so symbols with greater alignment requirements cannot be
+  // common.
   // Other COFF linkers (ld.bfd and LLD) support arbitrary power-of-two
   // alignments for common symbols via the aligncomm directive, so this
   // restriction only applies to MSVC environments.
   if (Context.getTargetInfo().getTriple().isKnownWindowsMSVCEnvironment() &&
-      Context.getTypeAlignIfKnown(D->getType()) > 32)
+      Context.getTypeAlignIfKnown(D->getType()) >
+          Context.toBits(CharUnits::fromQuantity(32)))
     return true;
 
   return false;
index fc46946c00ed23a5c42d3e8ed14030a984b9b988..a7a27a062704faf8707956e735b0a12bac5dfed2 100644 (file)
@@ -6,3 +6,6 @@ TooLargeAlignment TooBig;
 // CHECK: @TooBig = dso_local global <16 x float>  zeroinitializer, align 64
 NormalAlignment JustRight;
 // CHECK: @JustRight = common dso_local global <1 x float>  zeroinitializer, align 4
+
+TooLargeAlignment *IsAPointer;
+// CHECK: @IsAPointer = common dso_local global <16 x float>* null, align 8