[llvm] r286640 - Fix a reference-to-temporary introduced in r286607.

Duncan P. N. Exon Smith via llvm-commits llvm-commits at lists.llvm.org
Fri Nov 11 14:02:35 PST 2016


> On 2016-Nov-11, at 13:48, Adrian Prantl via llvm-commits <llvm-commits at lists.llvm.org> wrote:
> 
> Author: adrian
> Date: Fri Nov 11 15:48:09 2016
> New Revision: 286640
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=286640&view=rev
> Log:
> Fix a reference-to-temporary introduced in r286607.
> 
> Modified:
>    llvm/trunk/lib/CodeGen/GlobalMerge.cpp
> 
> Modified: llvm/trunk/lib/CodeGen/GlobalMerge.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/GlobalMerge.cpp?rev=286640&r1=286639&r2=286640&view=diff
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/GlobalMerge.cpp (original)
> +++ llvm/trunk/lib/CodeGen/GlobalMerge.cpp Fri Nov 11 15:48:09 2016
> @@ -425,6 +425,7 @@ bool GlobalMerge::doMerge(const SmallVec
>   DEBUG(dbgs() << " Trying to merge set, starts with #"
>                << GlobalSet.find_first() << "\n");
> 
> +  StringRef ExternalName;
>   ssize_t i = GlobalSet.find_first();
>   while (i != -1) {
>     ssize_t j = 0;
> @@ -433,7 +434,6 @@ bool GlobalMerge::doMerge(const SmallVec
>     std::vector<Constant*> Inits;
> 
>     bool HasExternal = false;
> -    GlobalVariable *TheFirstExternal = nullptr;
>     for (j = i; j != -1; j = GlobalSet.find_next(j)) {
>       Type *Ty = Globals[j]->getValueType();
>       MergedSize += DL.getTypeAllocSize(Ty);
> @@ -445,7 +445,8 @@ bool GlobalMerge::doMerge(const SmallVec
> 
>       if (Globals[j]->hasExternalLinkage() && !HasExternal) {
>         HasExternal = true;
> -        TheFirstExternal = Globals[j];
> +        auto *TheFirstExternal = Globals[j];
> +        ExternalName = TheFirstExternal->getName();

Might be cleaner as a one-liner:

    ExternalName = Globals[j]->getName();


>       }
>     }
> 
> @@ -457,14 +458,15 @@ bool GlobalMerge::doMerge(const SmallVec
>     StructType *MergedTy = StructType::get(M.getContext(), Tys);
>     Constant *MergedInit = ConstantStruct::get(MergedTy, Inits);
> 
> -    // On Darwin external linkage needs to be preserved, otherwise dsymutil
> -    // cannot preserve the debug info for the merged variables.  If they have
> -    // external linkage, use the symbol name of the first variable merged as the
> -    // suffix of global symbol name.  This avoids a link-time naming conflict
> -    // for the _MergedGlobals symbols.
> +    // On Darwin external linkage needs to be preserved, otherwise
> +    // dsymutil cannot preserve the debug info for the merged
> +    // variables.  If they have external linkage, use the symbol name
> +    // of the first variable merged as the suffix of global symbol
> +    // name.  This avoids a link-time naming conflict for the
> +    // _MergedGlobals symbols.
>     Twine MergedName =
>         (IsMachO && HasExternal)
> -            ? "_MergedGlobals_" + TheFirstExternal->getName()
> +            ? "_MergedGlobals_" + ExternalName
>             : "_MergedGlobals";
>     auto MergedLinkage = IsMachO ? Linkage : GlobalValue::PrivateLinkage;
>     auto *MergedGV = new GlobalVariable(
> 
> 
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits



More information about the llvm-commits mailing list