diff --git a/mlir/lib/Analysis/DataFlow/DeadCodeAnalysis.cpp b/mlir/lib/Analysis/DataFlow/DeadCodeAnalysis.cpp index 3c190d4e99191..e805e21d878bf 100644 --- a/mlir/lib/Analysis/DataFlow/DeadCodeAnalysis.cpp +++ b/mlir/lib/Analysis/DataFlow/DeadCodeAnalysis.cpp @@ -186,6 +186,8 @@ void DeadCodeAnalysis::initializeSymbolCallables(Operation *top) { // If a callable symbol has a non-call use, then we can't be guaranteed to // know all callsites. Operation *symbol = symbolTable.lookupSymbolIn(top, use.getSymbolRef()); + if (!symbol) + continue; auto *state = getOrCreate(getProgramPointAfter(symbol)); propagateIfChanged(state, state->setHasUnknownPredecessors()); } diff --git a/mlir/test/Analysis/DataFlow/test-dead-code-analysis.mlir b/mlir/test/Analysis/DataFlow/test-dead-code-analysis.mlir index 70becc72beb96..1ae6855351506 100644 --- a/mlir/test/Analysis/DataFlow/test-dead-code-analysis.mlir +++ b/mlir/test/Analysis/DataFlow/test-dead-code-analysis.mlir @@ -265,3 +265,7 @@ func.func @test_dca_doesnt_crash() -> () { } return } + +func.func @test_dca_doesnt_crash_2() -> () attributes {symbol = @notexistant} { + return +}