[llvm] r226038 - Don't create new comdats in CodeGen.

Timur Iskhodzhanov timurrrr at google.com
Thu Jan 15 07:45:19 PST 2015


Hi Rafael,

This change has completely broken down AddressSanitizer on Windows (ninja
check-asan), it fails to link anything due to multiple defined vftables,
e.g.

libcpmt.lib(xdateord.obj) : error LNK2005: "const
std::_System_error_category::`vftable'"
(??_7_System_error_category at std@@6B@) already defined in
sanitizer_allocator_test.cc.i386.o

I'm going to revert your change.

Please coordinate with David and Kostya if you have any questions on how
COMDATs interplay with AddressSanitizer.

––
Tim

On Wed Jan 14 2015 at 11:59:29 PM Rafael Espindola <
rafael.espindola at gmail.com> wrote:

> Author: rafael
> Date: Wed Jan 14 14:55:48 2015
> New Revision: 226038
>
> URL: http://llvm.org/viewvc/llvm-project?rev=226038&view=rev
> Log:
> Don't create new comdats in CodeGen.
>
> This patch stops the implicit creation of comdats during codegen.
>
> Clang now sets the comdat explicitly when it is required. With this patch
> clang and gcc
> now produce the same result in pr19848.
>
> Removed:
>     llvm/trunk/test/CodeGen/ARM/odr_comdat.ll
>     llvm/trunk/test/CodeGen/X86/odr_comdat.ll
>     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=226038&r1=226037&r2=226038&view=diff
> ============================================================
> ==================
> --- llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp (original)
> +++ llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp Wed Jan 14 14:55:48
> 2015
> @@ -156,19 +156,27 @@ 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:
> @@ -179,10 +187,6 @@ 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:
> @@ -191,6 +195,18 @@ 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;
>    }
>  }
>
> @@ -1118,6 +1134,10 @@ 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;
>      }
> @@ -2140,7 +2160,8 @@ std::error_code BitcodeReader::ParseModu
>        Ty = cast<PointerType>(Ty)->getElementType();
>
>        bool isConstant = Record[1];
> -      GlobalValue::LinkageTypes Linkage = getDecodedLinkage(Record[3]);
> +      uint64_t RawLinkage = Record[3];
> +      GlobalValue::LinkageTypes Linkage = getDecodedLinkage(RawLinkage);
>        unsigned Alignment = (1 << Record[4]) >> 1;
>        std::string Section;
>        if (Record[5]) {
> @@ -2178,7 +2199,7 @@ std::error_code BitcodeReader::ParseModu
>        if (Record.size() > 10)
>          NewGV->setDLLStorageClass(GetDecodedDLLStorageClass(Record[10]));
>        else
> -        UpgradeDLLImportExportLinkage(NewGV, Record[3]);
> +        UpgradeDLLImportExportLinkage(NewGV, RawLinkage);
>
>        ValueList.push_back(NewGV);
>
> @@ -2186,11 +2207,14 @@ 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,
> @@ -2214,7 +2238,8 @@ std::error_code BitcodeReader::ParseModu
>
>        Func->setCallingConv(static_cast<CallingConv::ID>(Record[1]));
>        bool isProto = Record[2];
> -      Func->setLinkage(getDecodedLinkage(Record[3]));
> +      uint64_t RawLinkage = Record[3];
> +      Func->setLinkage(getDecodedLinkage(RawLinkage));
>        Func->setAttributes(getAttributes(Record[4]));
>
>        Func->setAlignment((1 << Record[5]) >> 1);
> @@ -2242,13 +2267,16 @@ std::error_code BitcodeReader::ParseModu
>        if (Record.size() > 11)
>          Func->setDLLStorageClass(GetDecodedDLLStorageClass(Record[11]));
>        else
> -        UpgradeDLLImportExportLinkage(Func, Record[3]);
> +        UpgradeDLLImportExportLinkage(Func, RawLinkage);
>
> -      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=226038&r1=226037&r2=226038&view=diff
> ============================================================
> ==================
> --- llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp (original)
> +++ llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp Wed Jan 14 14:55:48
> 2015
> @@ -480,13 +480,13 @@ static unsigned getEncodedLinkage(const
>    case GlobalValue::ExternalLinkage:
>      return 0;
>    case GlobalValue::WeakAnyLinkage:
> -    return 1;
> +    return 16;
>    case GlobalValue::AppendingLinkage:
>      return 2;
>    case GlobalValue::InternalLinkage:
>      return 3;
>    case GlobalValue::LinkOnceAnyLinkage:
> -    return 4;
> +    return 18;
>    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 10;
> +    return 17;
>    case GlobalValue::LinkOnceODRLinkage:
> -    return 11;
> +    return 19;
>    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, 4));      //
> Linkage.
> +    Abbv->Add(BitCodeAbbrevOp(BitCodeAbbrevOp::Fixed, 5));      //
> 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=226038&r1=226037&r2=226038&view=diff
> ============================================================
> ==================
> --- llvm/trunk/lib/CodeGen/TargetLoweringObjectFileImpl.cpp (original)
> +++ llvm/trunk/lib/CodeGen/TargetLoweringObjectFileImpl.cpp Wed Jan 14
> 14:55:48 2015
> @@ -257,8 +257,7 @@ 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 ((GV->isWeakForLinker() || EmitUniquedSection || GV->hasComdat()) &&
> -      !Kind.isCommon()) {
> +  if ((EmitUniquedSection && !Kind.isCommon()) || GV->hasComdat()) {
>      StringRef Prefix = getSectionPrefixForGlobal(Kind);
>
>      SmallString<128> Name(Prefix);
> @@ -266,12 +265,9 @@ SelectSectionForGlobal(const GlobalValue
>
>      StringRef Group = "";
>      unsigned Flags = getELFSectionFlags(Kind);
> -    if (GV->isWeakForLinker() || GV->hasComdat()) {
> -      if (const Comdat *C = getELFComdat(GV))
> -        Group = C->getName();
> -      else
> -        Group = Name.substr(Prefix.size());
> +    if (const Comdat *C = getELFComdat(GV)) {
>        Flags |= ELF::SHF_GROUP;
> +      Group = C->getName();
>      }
>
>      return getContext().getELFSection(Name.str(),
> @@ -801,7 +797,7 @@ const MCSection *TargetLoweringObjectFil
>    unsigned Characteristics = getCOFFSectionFlags(Kind);
>    StringRef Name = GV->getSection();
>    StringRef COMDATSymName = "";
> -  if ((GV->isWeakForLinker() || GV->hasComdat()) && !Kind.isCommon()) {
> +  if (GV->hasComdat()) {
>      Selection = getSelectionForCOFF(GV);
>      const GlobalValue *ComdatGV;
>      if (Selection == COFF::IMAGE_COMDAT_SELECT_ASSOCIATIVE)
> @@ -848,12 +844,7 @@ SelectSectionForGlobal(const GlobalValue
>    else
>      EmitUniquedSection = TM.getDataSections();
>
> -  // 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()) {
> +  if ((EmitUniquedSection && !Kind.isCommon()) || GV->hasComdat()) {
>      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=226038&r1=226037&r2=226038&view=diff
> ============================================================
> ==================
> --- llvm/trunk/lib/Target/XCore/XCoreAsmPrinter.cpp (original)
> +++ llvm/trunk/lib/Target/XCore/XCoreAsmPrinter.cpp Wed Jan 14 14:55:48
> 2015
> @@ -105,7 +105,6 @@ void XCoreAsmPrinter::emitArrayBound(MCS
>                                                        OutContext));
>      if (GV->hasWeakLinkage() || GV->hasLinkOnceLinkage() ||
>          GV->hasCommonLinkage()) {
> -      // TODO Use COMDAT groups for LinkOnceLinkage
>        OutStreamer.EmitSymbolAttribute(SymGlob, MCSA_Weak);
>      }
>    }
> @@ -140,7 +139,6 @@ 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=226038&r1=226037&r2=226038&view=diff
> ============================================================
> ==================
> --- llvm/trunk/test/Bitcode/linkage-types-3.2.ll (original)
> +++ llvm/trunk/test/Bitcode/linkage-types-3.2.ll Wed Jan 14 14:55:48 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{{$}}
> +; CHECK: @linkonce.var = linkonce constant i32 0, comdat{{$}}
>
>  @weak.var = weak constant i32 0
> -; CHECK: @weak.var = weak constant i32 0{{$}}
> +; CHECK: @weak.var = weak constant i32 0, comdat{{$}}
>
>  @linkonce_odr.var = linkonce_odr constant i32 0
> -; CHECK: @linkonce_odr.var = linkonce_odr constant i32 0{{$}}
> +; CHECK: @linkonce_odr.var = linkonce_odr constant i32 0, comdat{{$}}
>
>  @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() {
> +; CHECK: define linkonce void @linkonce() comdat {
>  {
>    ret void
>  }
>
>  define weak void @weak()
> -; CHECK: define weak void @weak() {
> +; CHECK: define weak void @weak() comdat {
>  {
>    ret void
>  }
>
>  define linkonce_odr void @linkonce_odr()
> -; CHECK: define linkonce_odr void @linkonce_odr() {
> +; CHECK: define linkonce_odr void @linkonce_odr() comdat {
>  {
>    ret void
>  }
>
> Removed: llvm/trunk/test/CodeGen/ARM/odr_comdat.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/
> CodeGen/ARM/odr_comdat.ll?rev=226037&view=auto
> ============================================================
> ==================
> --- llvm/trunk/test/CodeGen/ARM/odr_comdat.ll (original)
> +++ llvm/trunk/test/CodeGen/ARM/odr_comdat.ll (removed)
> @@ -1,16 +0,0 @@
> -; RUN: llc < %s -mtriple=arm-linux-gnueabi | FileCheck %s
> -check-prefix=ARMGNUEABI
> -
> -; Checking that a comdat group gets generated correctly for a static
> member
> -; of instantiated C++ templates.
> -; see http://sourcery.mentor.com/public/cxx-abi/abi.html#vague-itemplate
> -; section 5.2.6 Instantiated templates
> -; "Any static member data object is emitted in a COMDAT identified by its
> mangled
> -;  name, in any object file with a reference to its name symbol."
> -
> -; Case 1: variable is not explicitly initialized, and ends up in a .bss
> section
> -; ARMGNUEABI: .section        .bss._ZN1CIiE1iE,"aGw",%
> nobits,_ZN1CIiE1iE,comdat
> - at _ZN1CIiE1iE = weak_odr global i32 0, align 4
> -
> -; Case 2: variable is explicitly initialized, and ends up in a .data
> section
> -; ARMGNUEABI: .section        .data._ZN1CIiE1jE,"aGw",%
> progbits,_ZN1CIiE1jE,comdat
> - at _ZN1CIiE1jE = weak_odr global i32 12, align 4
>
> 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=226038&r1=226037&r2=226038&view=diff
> ============================================================
> ==================
> --- llvm/trunk/test/CodeGen/ARM/section-name.ll (original)
> +++ llvm/trunk/test/CodeGen/ARM/section-name.ll Wed Jan 14 14:55:48 2015
> @@ -16,7 +16,7 @@ entry:
>    ret void
>  }
>
> -; CHECK: .section .text.test3,"axG",%progbits,test3,comdat
> +; CHECK: .text
>  ; 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=226038&r1=226037&r2=226038&view=diff
> ============================================================
> ==================
> --- llvm/trunk/test/CodeGen/X86/dllexport-x86_64.ll (original)
> +++ llvm/trunk/test/CodeGen/X86/dllexport-x86_64.ll Wed Jan 14 14:55:48
> 2015
> @@ -17,19 +17,16 @@ 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
> @@ -47,11 +44,9 @@ 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=226038&r1=226037&r2=226038&view=diff
> ============================================================
> ==================
> --- llvm/trunk/test/CodeGen/X86/dllexport.ll (original)
> +++ llvm/trunk/test/CodeGen/X86/dllexport.ll Wed Jan 14 14:55:48 2015
> @@ -36,19 +36,16 @@ 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
> @@ -66,11 +63,9 @@ 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=226038&r1=226037&r2=226038&view=diff
> ============================================================
> ==================
> --- llvm/trunk/test/CodeGen/X86/global-sections.ll (original)
> +++ llvm/trunk/test/CodeGen/X86/global-sections.ll Wed Jan 14 14:55:48
> 2015
> @@ -85,7 +85,6 @@ 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":
>
> @@ -98,7 +97,6 @@ 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
>
> Removed: llvm/trunk/test/CodeGen/X86/odr_comdat.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/
> CodeGen/X86/odr_comdat.ll?rev=226037&view=auto
> ============================================================
> ==================
> --- llvm/trunk/test/CodeGen/X86/odr_comdat.ll (original)
> +++ llvm/trunk/test/CodeGen/X86/odr_comdat.ll (removed)
> @@ -1,16 +0,0 @@
> -; RUN: llc < %s -mtriple=x86_64-unknown-linux-gnu | FileCheck %s
> -check-prefix=X86LINUX
> -
> -; Checking that a comdat group gets generated correctly for a static
> member
> -; of instantiated C++ templates.
> -; see http://sourcery.mentor.com/public/cxx-abi/abi.html#vague-itemplate
> -; section 5.2.6 Instantiated templates
> -; "Any static member data object is emitted in a COMDAT identified by its
> mangled
> -;  name, in any object file with a reference to its name symbol."
> -
> -; Case 1: variable is not explicitly initialized, and ends up in a .bss
> section
> -; X86LINUX:   .section        .bss._ZN1CIiE1iE,"aGw",@
> nobits,_ZN1CIiE1iE,comdat
> - at _ZN1CIiE1iE = weak_odr global i32 0, align 4
> -
> -; Case 2: variable is explicitly initialized, and ends up in a .data
> section
> -; X86LINUX:   .section        .data._ZN1CIiE1jE,"aGw",@
> progbits,_ZN1CIiE1jE,comdat
> - at _ZN1CIiE1jE = weak_odr global i32 12, align 4
>
> 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=226038&r1=226037&r2=226038&view=diff
> ============================================================
> ==================
> --- llvm/trunk/test/CodeGen/X86/pic_jumptable.ll (original)
> +++ llvm/trunk/test/CodeGen/X86/pic_jumptable.ll Wed Jan 14 14:55:48 2015
> @@ -10,7 +10,7 @@
>
>  declare void @_Z3bari(i32)
>
> -; CHECK-LINUX: .text._Z3fooILi1EEvi,"axG", at progbits,_Z3fooILi1EEvi,comdat
> +; CHECK-LINUX: _Z3fooILi1EEvi:
>  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=226038&r1=226037&r2=226038&view=diff
> ============================================================
> ==================
> --- llvm/trunk/test/MC/COFF/bss_section.ll (original)
> +++ llvm/trunk/test/MC/COFF/bss_section.ll Wed Jan 14 14:55:48 2015
> @@ -5,5 +5,6 @@
>  @"\01?thingy@@3Ufoo@@B" = global %struct.foo zeroinitializer, align 4
>  ; CHECK: .bss
>
> - at thingy_linkonce = linkonce_odr global %struct.foo zeroinitializer, align
> 4
> +$thingy_linkonce = comdat any
> + at thingy_linkonce = linkonce_odr global %struct.foo zeroinitializer,
> comdat, 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=226038&r1=226037&r2=226038&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 Wed Jan 14 14:55:48
> 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",discard,weak_array
> +; CHECK:  .section  .rdata,"rd"
>
> Removed: llvm/trunk/test/MC/COFF/weak-symbol.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/
> COFF/weak-symbol.ll?rev=226037&view=auto
> ============================================================
> ==================
> --- llvm/trunk/test/MC/COFF/weak-symbol.ll (original)
> +++ llvm/trunk/test/MC/COFF/weak-symbol.ll (removed)
> @@ -1,48 +0,0 @@
> -; Test that weak functions and globals are placed into selectany COMDAT
> -; sections with the mangled name as suffix. Ensure that the weak linkage
> -; type is not ignored by the backend if the section was specialized.
> -;
> -; RUN: llc -mtriple=i686-pc-win32 %s     -o - | FileCheck %s
> --check-prefix=X86
> -; RUN: llc -mtriple=i686-pc-mingw32 %s   -o - | FileCheck %s
> --check-prefix=X86
> -; RUN: llc -mtriple=x86_64-pc-win32 %s   -o - | FileCheck %s
> --check-prefix=X64
> -; RUN: llc -mtriple=x86_64-pc-mingw32 %s -o - | FileCheck %s
> --check-prefix=X64
> -
> -; Mangled function
> -; X86: .section .text,"xr",discard,__Z3foo
> -; X86: .globl __Z3foo
> -;
> -; X64: .section .text,"xr",discard,_Z3foo
> -; X64: .globl _Z3foo
> -define weak void @_Z3foo() {
> -  ret void
> -}
> -
> -; Unmangled function
> -; X86: .section .sect,"xr",discard,_f
> -; X86: .globl _f
> -;
> -; X64: .section .sect,"xr",discard,f
> -; X64: .globl f
> -define weak void @f() section ".sect" {
> -  ret void
> -}
> -
> -; Weak global
> -; X86: .section .data,"rd",discard,_a
> -; X86: .globl _a
> -; X86: .zero 12
> -;
> -; X64: .section .data,"rd",discard,a
> -; X64: .globl a
> -; X64: .zero 12
> - at a = weak unnamed_addr constant { i32, i32, i32 } { i32 0, i32 0, i32 0},
> section ".data"
> -
> -; X86:  .section        .tls$,"wd",discard,_b
> -; X86:  .globl  _b
> -; X86:  .long   0
> -;
> -; X64:  .section        .tls$,"wd",discard,b
> -; X64:  .globl  b
> -; X64:  .long   0
> -
> - at b = weak_odr thread_local global i32 0, align 4
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150115/8b5f522c/attachment.html>


More information about the llvm-commits mailing list