more cleanups. Emit the .local directive even on cygwin/mingw.
authorChris Lattner <sabre@nondot.org>
Tue, 19 Jan 2010 04:59:55 +0000 (04:59 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 19 Jan 2010 04:59:55 +0000 (04:59 +0000)
I'm not sure that this is correct, but it causes no test failures,
and just emitting a .comm without protecting its linkage somehow
is surely not right.

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

lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp

index bb7647a5eeaa8077168ae3e6c77ba417afb47fa2..358bb70e2cbd178caff95ba5c4ef1a1fd0f22989 100644 (file)
@@ -660,17 +660,15 @@ void X86AsmPrinter::PrintGlobalVariable(const GlobalVariable* GVar) {
   
   SectionKind GVKind = TargetLoweringObjectFile::getKindForGlobal(GVar, TM);
 
-  const Type *Type = GVar->getType()->getElementType();
-  
   const TargetData *TD = TM.getTargetData();
-  unsigned Size = TD->getTypeAllocSize(Type);
+  unsigned Size = TD->getTypeAllocSize(GVar->getType()->getElementType());
   unsigned AlignLog = TD->getPreferredAlignmentLog(GVar);
   
   // Handle normal common symbols.
   if (GVKind.isCommon()) {
     if (Size == 0) Size = 1;   // .comm Foo, 0 is undefined, avoid it.
     
-    O << ".comm " << *GVarSym << ',' << Size;
+    O << MAI->getCOMMDirective() << *GVarSym << ',' << Size;
     if (MAI->getCOMMDirectiveTakesAlignment())
       O << ',' << (MAI->getAlignmentIsInBytes() ? (1 << AlignLog) : AlignLog);
     
@@ -693,8 +691,7 @@ void X86AsmPrinter::PrintGlobalVariable(const GlobalVariable* GVar) {
           O << ',' << AlignLog;
       }
     } else {
-      if (!Subtarget->isTargetCygMing())
-        O << "\t.local\t" << *GVarSym << '\n';
+      O << "\t.local\t" << *GVarSym << '\n';
       O << MAI->getCOMMDirective() << *GVarSym << ',' << Size;
       if (MAI->getCOMMDirectiveTakesAlignment())
         O << ',' << (MAI->getAlignmentIsInBytes() ? (1 << AlignLog) : AlignLog);