Index: llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp =================================================================== --- llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp +++ llvm/trunk/lib/Bitcode/Reader/BitcodeReader.cpp @@ -1796,22 +1796,16 @@ return Err; Value *V = ValOrErr.get(); - auto *GO = dyn_cast(V); - if (!GO) { - // If this is an alias, need to get the actual Function object - // it aliases, in order to set up the DeferredFunctionInfo entry below. - auto *GA = dyn_cast(V); - if (GA) - GO = GA->getBaseObject(); - assert(GO); - } + auto *F = dyn_cast(V); + // Ignore function offsets emitted for aliases of functions in older + // versions of LLVM. + if (!F) + break; // Note that we subtract 1 here because the offset is relative to one word // before the start of the identification or module block, which was // historically always the start of the regular bitcode header. uint64_t FuncWordOffset = Record[1] - 1; - Function *F = dyn_cast(GO); - assert(F); uint64_t FuncBitOffset = FuncWordOffset * 32; DeferredFunctionInfo[F] = FuncBitOffset + FuncBitcodeOffsetDelta; // Set the LastFunctionBlockBit to point to the last function block. Index: llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp =================================================================== --- llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp +++ llvm/trunk/lib/Bitcode/Writer/BitcodeWriter.cpp @@ -2924,13 +2924,6 @@ NameVals.push_back(VE.getValueID(Name.getValue())); Function *F = dyn_cast(Name.getValue()); - if (!F) { - // If value is an alias, need to get the aliased base object to - // see if it is a function. - auto *GA = dyn_cast(Name.getValue()); - if (GA && GA->getBaseObject()) - F = dyn_cast(GA->getBaseObject()); - } // VST_CODE_ENTRY: [valueid, namechar x N] // VST_CODE_FNENTRY: [valueid, funcoffset, namechar x N] Index: llvm/trunk/test/Bitcode/thinlto-function-summary.ll =================================================================== --- llvm/trunk/test/Bitcode/thinlto-function-summary.ll +++ llvm/trunk/test/Bitcode/thinlto-function-summary.ll @@ -17,7 +17,7 @@ ; BC-NEXT: record string = 'variadic' ; BC-NEXT: record string = 'foo' ; BC-NEXT: record string = 'bar' -; BC-NEXT: record string = 'f' +; BC-NEXT: record string = 'f' ; BC-NEXT: record string = 'anon.