[ModuleSummaryAnalysis] Don't crash when referencing unnamed globals.
Instead, just be conservative as these are unfrequent enough. Thanks to Peter Collingbourne for the discussion about this on IRC. llvm-svn: 295861
This commit is contained in:
parent
7ea5adfff4
commit
e122d6885a
|
@ -447,6 +447,12 @@ ModuleSummaryIndex llvm::buildModuleSummaryIndex(
|
||||||
auto &Summary = GlobalList.second[0];
|
auto &Summary = GlobalList.second[0];
|
||||||
bool AllRefsCanBeExternallyReferenced =
|
bool AllRefsCanBeExternallyReferenced =
|
||||||
llvm::all_of(Summary->refs(), [&](const ValueInfo &VI) {
|
llvm::all_of(Summary->refs(), [&](const ValueInfo &VI) {
|
||||||
|
// If a global value definition references an unnamed global,
|
||||||
|
// be conservative. They're valid IR so we don't want to crash
|
||||||
|
// when we encounter any of them but they're infrequent enough
|
||||||
|
// that we don't bother optimizing them.
|
||||||
|
if (!VI.getValue()->hasName())
|
||||||
|
return false;
|
||||||
return !CantBePromoted.count(VI.getValue()->getGUID());
|
return !CantBePromoted.count(VI.getValue()->getGUID());
|
||||||
});
|
});
|
||||||
if (!AllRefsCanBeExternallyReferenced) {
|
if (!AllRefsCanBeExternallyReferenced) {
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
; Make sure we don't crash when referencing an unnamed global.
|
||||||
|
; RUN: opt %s -module-summary-analysis -S
|
||||||
|
|
||||||
|
@0 = external global [1 x { i64 }]
|
||||||
|
|
||||||
|
define internal void @tinkywinky() {
|
||||||
|
call void @patatino(i64 ptrtoint ([1 x { i64 }]* @0 to i64), i64 4)
|
||||||
|
ret void
|
||||||
|
}
|
||||||
|
declare void @patatino(i64, i64)
|
Loading…
Reference in New Issue