[llvm] r226173 - Revert Don't create new comdats in CodeGen

Timur Iskhodzhanov timurrrr at google.com
Thu Jan 15 08:14:35 PST 2015


Author: timurrrr
Date: Thu Jan 15 10:14:34 2015
New Revision: 226173

URL: http://llvm.org/viewvc/llvm-project?rev=226173&view=rev
Log:
Revert Don't create new comdats in CodeGen

It breaks AddressSanitizer on Windows.

Added:
    llvm/trunk/test/CodeGen/ARM/odr_comdat.ll
      - copied unchanged from r226037, llvm/trunk/test/CodeGen/ARM/odr_comdat.ll
    llvm/trunk/test/CodeGen/X86/odr_comdat.ll
      - copied unchanged from r226037, llvm/trunk/test/CodeGen/X86/odr_comdat.ll
    llvm/trunk/test/MC/COFF/weak-symbol.ll
      - copied unchanged from r226037, llvm/trunk/test/MC/COFF/weak-symbol.ll
Modified:
    llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp
    llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp
    llvm/trunk/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
    llvm/trunk/lib/Target/XCore/XCoreAsmPrinter.cpp
    llvm/trunk/test/Bitcode/linkage-types-3.2.ll
    llvm/trunk/test/CodeGen/ARM/section-name.ll
    llvm/trunk/test/CodeGen/X86/dllexport-x86_64.ll
    llvm/trunk/test/CodeGen/X86/dllexport.ll
    llvm/trunk/test/CodeGen/X86/global-sections.ll
    llvm/trunk/test/CodeGen/X86/pic_jumptable.ll
    llvm/trunk/test/MC/COFF/bss_section.ll
    llvm/trunk/test/MC/COFF/const-gv-with-rel-init.ll

Modified: llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp?rev=226173&r1=226172&r2=226173&view=diff
==============================================================================
--- llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp (original)
+++ llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp Thu Jan 15 10:14:34 2015
@@ -156,27 +156,19 @@ static bool ConvertToString(ArrayRef<uin
   return false;
 }
 
-static bool hasImplicitComdat(size_t Val) {
-  switch (Val) {
-  default:
-    return false;
-  case 1:  // Old WeakAnyLinkage
-  case 4:  // Old LinkOnceAnyLinkage
-  case 10: // Old WeakODRLinkage
-  case 11: // Old LinkOnceODRLinkage
-    return true;
-  }
-}
-
 static GlobalValue::LinkageTypes getDecodedLinkage(unsigned Val) {
   switch (Val) {
   default: // Map unknown/new linkages to external
   case 0:
     return GlobalValue::ExternalLinkage;
+  case 1:
+    return GlobalValue::WeakAnyLinkage;
   case 2:
     return GlobalValue::AppendingLinkage;
   case 3:
     return GlobalValue::InternalLinkage;
+  case 4:
+    return GlobalValue::LinkOnceAnyLinkage;
   case 5:
     return GlobalValue::ExternalLinkage; // Obsolete DLLImportLinkage
   case 6:
@@ -187,6 +179,10 @@ static GlobalValue::LinkageTypes getDeco
     return GlobalValue::CommonLinkage;
   case 9:
     return GlobalValue::PrivateLinkage;
+  case 10:
+    return GlobalValue::WeakODRLinkage;
+  case 11:
+    return GlobalValue::LinkOnceODRLinkage;
   case 12:
     return GlobalValue::AvailableExternallyLinkage;
   case 13:
@@ -195,18 +191,6 @@ static GlobalValue::LinkageTypes getDeco
     return GlobalValue::PrivateLinkage; // Obsolete LinkerPrivateWeakLinkage
   case 15:
     return GlobalValue::ExternalLinkage; // Obsolete LinkOnceODRAutoHideLinkage
-  case 1: // Old value with implicit comdat.
-  case 16:
-    return GlobalValue::WeakAnyLinkage;
-  case 10: // Old value with implicit comdat.
-  case 17:
-    return GlobalValue::WeakODRLinkage;
-  case 4: // Old value with implicit comdat.
-  case 18:
-    return GlobalValue::LinkOnceAnyLinkage;
-  case 11: // Old value with implicit comdat.
-  case 19:
-    return GlobalValue::LinkOnceODRLinkage;
   }
 }
 
@@ -1134,10 +1118,6 @@ std::error_code BitcodeReader::ParseValu
       Value *V = ValueList[ValueID];
 
       V->setName(StringRef(ValueName.data(), ValueName.size()));
-      if (auto *GO = dyn_cast<GlobalObject>(V)) {
-        if (GO->getComdat() == reinterpret_cast<Comdat *>(1))
-          GO->setComdat(TheModule->getOrInsertComdat(V->getName()));
-      }
       ValueName.clear();
       break;
     }
@@ -2160,8 +2140,7 @@ std::error_code BitcodeReader::ParseModu
       Ty = cast<PointerType>(Ty)->getElementType();
 
       bool isConstant = Record[1];
-      uint64_t RawLinkage = Record[3];
-      GlobalValue::LinkageTypes Linkage = getDecodedLinkage(RawLinkage);
+      GlobalValue::LinkageTypes Linkage = getDecodedLinkage(Record[3]);
       unsigned Alignment = (1 << Record[4]) >> 1;
       std::string Section;
       if (Record[5]) {
@@ -2199,7 +2178,7 @@ std::error_code BitcodeReader::ParseModu
       if (Record.size() > 10)
         NewGV->setDLLStorageClass(GetDecodedDLLStorageClass(Record[10]));
       else
-        UpgradeDLLImportExportLinkage(NewGV, RawLinkage);
+        UpgradeDLLImportExportLinkage(NewGV, Record[3]);
 
       ValueList.push_back(NewGV);
 
@@ -2207,14 +2186,11 @@ std::error_code BitcodeReader::ParseModu
       if (unsigned InitID = Record[2])
         GlobalInits.push_back(std::make_pair(NewGV, InitID-1));
 
-      if (Record.size() > 11) {
+      if (Record.size() > 11)
         if (unsigned ComdatID = Record[11]) {
           assert(ComdatID <= ComdatList.size());
           NewGV->setComdat(ComdatList[ComdatID - 1]);
         }
-      } else if (hasImplicitComdat(RawLinkage)) {
-        NewGV->setComdat(reinterpret_cast<Comdat *>(1));
-      }
       break;
     }
     // FUNCTION:  [type, callingconv, isproto, linkage, paramattr,
@@ -2238,8 +2214,7 @@ std::error_code BitcodeReader::ParseModu
 
       Func->setCallingConv(static_cast<CallingConv::ID>(Record[1]));
       bool isProto = Record[2];
-      uint64_t RawLinkage = Record[3];
-      Func->setLinkage(getDecodedLinkage(RawLinkage));
+      Func->setLinkage(getDecodedLinkage(Record[3]));
       Func->setAttributes(getAttributes(Record[4]));
 
       Func->setAlignment((1 << Record[5]) >> 1);
@@ -2267,16 +2242,13 @@ std::error_code BitcodeReader::ParseModu
       if (Record.size() > 11)
         Func->setDLLStorageClass(GetDecodedDLLStorageClass(Record[11]));
       else
-        UpgradeDLLImportExportLinkage(Func, RawLinkage);
+        UpgradeDLLImportExportLinkage(Func, Record[3]);
 
-      if (Record.size() > 12) {
+      if (Record.size() > 12)
         if (unsigned ComdatID = Record[12]) {
           assert(ComdatID <= ComdatList.size());
           Func->setComdat(ComdatList[ComdatID - 1]);
         }
-      } else if (hasImplicitComdat(RawLinkage)) {
-        Func->setComdat(reinterpret_cast<Comdat *>(1));
-      }
 
       if (Record.size() > 13 && Record[13] != 0)
         FunctionPrefixes.push_back(std::make_pair(Func, Record[13]-1));

Modified: llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp?rev=226173&r1=226172&r2=226173&view=diff
==============================================================================
--- llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp (original)
+++ llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp Thu Jan 15 10:14:34 2015
@@ -480,13 +480,13 @@ static unsigned getEncodedLinkage(const
   case GlobalValue::ExternalLinkage:
     return 0;
   case GlobalValue::WeakAnyLinkage:
-    return 16;
+    return 1;
   case GlobalValue::AppendingLinkage:
     return 2;
   case GlobalValue::InternalLinkage:
     return 3;
   case GlobalValue::LinkOnceAnyLinkage:
-    return 18;
+    return 4;
   case GlobalValue::ExternalWeakLinkage:
     return 7;
   case GlobalValue::CommonLinkage:
@@ -494,9 +494,9 @@ static unsigned getEncodedLinkage(const
   case GlobalValue::PrivateLinkage:
     return 9;
   case GlobalValue::WeakODRLinkage:
-    return 17;
+    return 10;
   case GlobalValue::LinkOnceODRLinkage:
-    return 19;
+    return 11;
   case GlobalValue::AvailableExternallyLinkage:
     return 12;
   }
@@ -629,7 +629,7 @@ static void WriteModuleInfo(const Module
                               Log2_32_Ceil(MaxGlobalType+1)));
     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 1));      // Constant.
     Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::VBR, 6));        // Initializer.
-    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 5));      // Linkage.
+    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 4));      // Linkage.
     if (MaxAlignment == 0)                                      // Alignment.
       Abbv->Add(BitCodeAbbrevOp(0));
     else {

Modified: llvm/trunk/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/TargetLoweringObjectFileImpl.cpp?rev=226173&r1=226172&r2=226173&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/TargetLoweringObjectFileImpl.cpp (original)
+++ llvm/trunk/lib/CodeGen/TargetLoweringObjectFileImpl.cpp Thu Jan 15 10:14:34 2015
@@ -257,7 +257,8 @@ SelectSectionForGlobal(const GlobalValue
 
   // If this global is linkonce/weak and the target handles this by emitting it
   // into a 'uniqued' section name, create and return the section now.
-  if ((EmitUniquedSection && !Kind.isCommon()) || GV->hasComdat()) {
+  if ((GV->isWeakForLinker() || EmitUniquedSection || GV->hasComdat()) &&
+      !Kind.isCommon()) {
     StringRef Prefix = getSectionPrefixForGlobal(Kind);
 
     SmallString<128> Name(Prefix);
@@ -265,9 +266,12 @@ SelectSectionForGlobal(const GlobalValue
 
     StringRef Group = "";
     unsigned Flags = getELFSectionFlags(Kind);
-    if (const Comdat *C = getELFComdat(GV)) {
+    if (GV->isWeakForLinker() || GV->hasComdat()) {
+      if (const Comdat *C = getELFComdat(GV))
+        Group = C->getName();
+      else
+        Group = Name.substr(Prefix.size());
       Flags |= ELF::SHF_GROUP;
-      Group = C->getName();
     }
 
     return getContext().getELFSection(Name.str(),
@@ -797,7 +801,7 @@ const MCSection *TargetLoweringObjectFil
   unsigned Characteristics = getCOFFSectionFlags(Kind);
   StringRef Name = GV->getSection();
   StringRef COMDATSymName = "";
-  if (GV->hasComdat()) {
+  if ((GV->isWeakForLinker() || GV->hasComdat()) && !Kind.isCommon()) {
     Selection = getSelectionForCOFF(GV);
     const GlobalValue *ComdatGV;
     if (Selection == COFF::IMAGE_COMDAT_SELECT_ASSOCIATIVE)
@@ -844,7 +848,12 @@ SelectSectionForGlobal(const GlobalValue
   else
     EmitUniquedSection = TM.getDataSections();
 
-  if ((EmitUniquedSection && !Kind.isCommon()) || GV->hasComdat()) {
+  // If this global is linkonce/weak and the target handles this by emitting it
+  // into a 'uniqued' section name, create and return the section now.
+  // Section names depend on the name of the symbol which is not feasible if the
+  // symbol has private linkage.
+  if ((GV->isWeakForLinker() || EmitUniquedSection || GV->hasComdat()) &&
+      !Kind.isCommon()) {
     const char *Name = getCOFFSectionNameForUniqueGlobal(Kind);
     unsigned Characteristics = getCOFFSectionFlags(Kind);
 

Modified: llvm/trunk/lib/Target/XCore/XCoreAsmPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/XCore/XCoreAsmPrinter.cpp?rev=226173&r1=226172&r2=226173&view=diff
==============================================================================
--- llvm/trunk/lib/Target/XCore/XCoreAsmPrinter.cpp (original)
+++ llvm/trunk/lib/Target/XCore/XCoreAsmPrinter.cpp Thu Jan 15 10:14:34 2015
@@ -105,6 +105,7 @@ void XCoreAsmPrinter::emitArrayBound(MCS
                                                       OutContext));
     if (GV->hasWeakLinkage() || GV->hasLinkOnceLinkage() ||
         GV->hasCommonLinkage()) {
+      // TODO Use COMDAT groups for LinkOnceLinkage
       OutStreamer.EmitSymbolAttribute(SymGlob, MCSA_Weak);
     }
   }
@@ -139,6 +140,7 @@ void XCoreAsmPrinter::EmitGlobalVariable
     emitArrayBound(GVSym, GV);
     OutStreamer.EmitSymbolAttribute(GVSym, MCSA_Global);
 
+    // TODO Use COMDAT groups for LinkOnceLinkage
     if (GV->hasWeakLinkage() || GV->hasLinkOnceLinkage() ||
         GV->hasCommonLinkage())
       OutStreamer.EmitSymbolAttribute(GVSym, MCSA_Weak);

Modified: llvm/trunk/test/Bitcode/linkage-types-3.2.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Bitcode/linkage-types-3.2.ll?rev=226173&r1=226172&r2=226173&view=diff
==============================================================================
--- llvm/trunk/test/Bitcode/linkage-types-3.2.ll (original)
+++ llvm/trunk/test/Bitcode/linkage-types-3.2.ll Thu Jan 15 10:14:34 2015
@@ -33,13 +33,13 @@
 ; CHECK: @available_externally.var = available_externally constant i32 0{{$}}
 
 @linkonce.var = linkonce constant i32 0
-; CHECK: @linkonce.var = linkonce constant i32 0, comdat{{$}}
+; CHECK: @linkonce.var = linkonce constant i32 0{{$}}
 
 @weak.var = weak constant i32 0
-; CHECK: @weak.var = weak constant i32 0, comdat{{$}}
+; CHECK: @weak.var = weak constant i32 0{{$}}
 
 @linkonce_odr.var = linkonce_odr constant i32 0
-; CHECK: @linkonce_odr.var = linkonce_odr constant i32 0, comdat{{$}}
+; CHECK: @linkonce_odr.var = linkonce_odr constant i32 0{{$}}
 
 @linkonce_odr_auto_hide.var = linkonce_odr_auto_hide constant i32 0
 ; CHECK: @linkonce_odr_auto_hide.var = constant i32 0{{$}}
@@ -90,19 +90,19 @@ define available_externally void @availa
 }
 
 define linkonce void @linkonce()
-; CHECK: define linkonce void @linkonce() comdat {
+; CHECK: define linkonce void @linkonce() {
 {
   ret void
 }
 
 define weak void @weak()
-; CHECK: define weak void @weak() comdat {
+; CHECK: define weak void @weak() {
 {
   ret void
 }
 
 define linkonce_odr void @linkonce_odr()
-; CHECK: define linkonce_odr void @linkonce_odr() comdat {
+; CHECK: define linkonce_odr void @linkonce_odr() {
 {
   ret void
 }

Modified: llvm/trunk/test/CodeGen/ARM/section-name.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/section-name.ll?rev=226173&r1=226172&r2=226173&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/ARM/section-name.ll (original)
+++ llvm/trunk/test/CodeGen/ARM/section-name.ll Thu Jan 15 10:14:34 2015
@@ -16,7 +16,7 @@ entry:
   ret void
 }
 
-; CHECK: .text
+; CHECK: .section .text.test3,"axG",%progbits,test3,comdat
 ; CHECK: .weak test3
 ; CHECK: .type test3,%function
 define linkonce_odr void @test3() {

Modified: llvm/trunk/test/CodeGen/X86/dllexport-x86_64.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/dllexport-x86_64.ll?rev=226173&r1=226172&r2=226173&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/dllexport-x86_64.ll (original)
+++ llvm/trunk/test/CodeGen/X86/dllexport-x86_64.ll Thu Jan 15 10:14:34 2015
@@ -17,16 +17,19 @@ define dllexport void @f2() unnamed_addr
 	ret void
 }
 
+; CHECK: .section .text,"xr",discard,lnk1
 ; CHECK: .globl lnk1
 define linkonce_odr dllexport void @lnk1() {
 	ret void
 }
 
+; CHECK: .section .text,"xr",discard,lnk2
 ; CHECK: .globl lnk2
 define linkonce_odr dllexport void @lnk2() alwaysinline {
 	ret void
 }
 
+; CHECK: .section .text,"xr",discard,weak1
 ; CHECK: .globl weak1
 define weak_odr dllexport void @weak1() {
 	ret void
@@ -44,9 +47,11 @@ define weak_odr dllexport void @weak1()
 ; CHECK: .comm Var3
 @Var3 = common dllexport global i32 0, align 4
 
+; CHECK: .section .data,"wd",discard,WeakVar1
 ; CHECK: .globl WeakVar1
 @WeakVar1 = weak_odr dllexport global i32 1, align 4
 
+; CHECK: .section .rdata,"rd",discard,WeakVar2
 ; CHECK: .globl WeakVar2
 @WeakVar2 = weak_odr dllexport unnamed_addr constant i32 1
 

Modified: llvm/trunk/test/CodeGen/X86/dllexport.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/dllexport.ll?rev=226173&r1=226172&r2=226173&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/dllexport.ll (original)
+++ llvm/trunk/test/CodeGen/X86/dllexport.ll Thu Jan 15 10:14:34 2015
@@ -36,16 +36,19 @@ define dllexport x86_thiscallcc void @th
 	ret void
 }
 
+; CHECK: .section .text,"xr",discard,_lnk1
 ; CHECK: .globl _lnk1
 define linkonce_odr dllexport void @lnk1() {
 	ret void
 }
 
+; CHECK: .section .text,"xr",discard,_lnk2
 ; CHECK: .globl _lnk2
 define linkonce_odr dllexport void @lnk2() alwaysinline {
 	ret void
 }
 
+; CHECK: .section .text,"xr",discard,_weak1
 ; CHECK: .globl _weak1
 define weak_odr dllexport void @weak1() {
 	ret void
@@ -63,9 +66,11 @@ define weak_odr dllexport void @weak1()
 ; CHECK: .comm _Var3
 @Var3 = common dllexport global i32 0, align 4
 
+; CHECK: .section .data,"wd",discard,_WeakVar1
 ; CHECK: .globl _WeakVar1
 @WeakVar1 = weak_odr dllexport global i32 1, align 4
 
+; CHECK: .section .rdata,"rd",discard,_WeakVar2
 ; CHECK: .globl _WeakVar2
 @WeakVar2 = weak_odr dllexport unnamed_addr constant i32 1
 

Modified: llvm/trunk/test/CodeGen/X86/global-sections.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/global-sections.ll?rev=226173&r1=226172&r2=226173&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/global-sections.ll (original)
+++ llvm/trunk/test/CodeGen/X86/global-sections.ll Thu Jan 15 10:14:34 2015
@@ -85,6 +85,7 @@ define void @F1() {
 @"foo bar" = linkonce global i32 42
 
 ; LINUX: .type  "foo bar", at object
+; LINUX: .section ".data.foo bar","aGw", at progbits,"foo bar",comdat
 ; LINUX: .weak  "foo bar"
 ; LINUX: "foo bar":
 
@@ -97,6 +98,7 @@ define void @F1() {
 @G6 = weak_odr unnamed_addr constant [1 x i8] c"\01"
 
 ; LINUX:   .type        G6, at object
+; LINUX:   .section     .rodata.G6,"aG", at progbits,G6,comdat
 ; LINUX:   .weak        G6
 ; LINUX: G6:
 ; LINUX:   .byte        1

Modified: llvm/trunk/test/CodeGen/X86/pic_jumptable.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/pic_jumptable.ll?rev=226173&r1=226172&r2=226173&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/pic_jumptable.ll (original)
+++ llvm/trunk/test/CodeGen/X86/pic_jumptable.ll Thu Jan 15 10:14:34 2015
@@ -10,7 +10,7 @@
 
 declare void @_Z3bari(i32)
 
-; CHECK-LINUX: _Z3fooILi1EEvi:
+; CHECK-LINUX: .text._Z3fooILi1EEvi,"axG", at progbits,_Z3fooILi1EEvi,comdat
 define linkonce void @_Z3fooILi1EEvi(i32 %Y) nounwind {
 entry:
 ; CHECK:       L0$pb

Modified: llvm/trunk/test/MC/COFF/bss_section.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/COFF/bss_section.ll?rev=226173&r1=226172&r2=226173&view=diff
==============================================================================
--- llvm/trunk/test/MC/COFF/bss_section.ll (original)
+++ llvm/trunk/test/MC/COFF/bss_section.ll Thu Jan 15 10:14:34 2015
@@ -5,6 +5,5 @@
 @"\01?thingy@@3Ufoo@@B" = global %struct.foo zeroinitializer, align 4
 ; CHECK: .bss
 
-$thingy_linkonce = comdat any
- at thingy_linkonce = linkonce_odr global %struct.foo zeroinitializer, comdat, align 4
+ at thingy_linkonce = linkonce_odr global %struct.foo zeroinitializer, align 4
 ; CHECK: .section .bss,"wb",discard,_thingy_linkonce

Modified: llvm/trunk/test/MC/COFF/const-gv-with-rel-init.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/COFF/const-gv-with-rel-init.ll?rev=226173&r1=226172&r2=226173&view=diff
==============================================================================
--- llvm/trunk/test/MC/COFF/const-gv-with-rel-init.ll (original)
+++ llvm/trunk/test/MC/COFF/const-gv-with-rel-init.ll Thu Jan 15 10:14:34 2015
@@ -8,4 +8,4 @@ define void @f() {
 ; CHECK:  .section  .CRT$XLB,"rd"
 
 @weak_array = weak_odr unnamed_addr constant [1 x i8*] [i8* bitcast (void ()* @f to i8*)]
-; CHECK:  .section  .rdata,"rd"
+; CHECK:  .section  .rdata,"rd",discard,weak_array





More information about the llvm-commits mailing list