Index: test/tools/llvm-extract/recursive.ll =================================================================== --- test/tools/llvm-extract/recursive.ll +++ test/tools/llvm-extract/recursive.ll @@ -1,6 +1,7 @@ ; RUN: llvm-extract -func=a --recursive %s -S | FileCheck --check-prefix=CHECK-AB %s ; RUN: llvm-extract -func=a --recursive --delete %s -S | FileCheck --check-prefix=CHECK-CD %s ; RUN: llvm-extract -func=d --recursive %s -S | FileCheck --check-prefix=CHECK-CD %s +; RUN: llvm-extract -func=e --recursive %s -S | FileCheck --check-prefix=CHECK-CD %s ; CHECK-AB: define void @a ; CHECK-AB: define void @b @@ -30,3 +31,10 @@ call void @c() ret void } + +define void @e() { + invoke void @c() + to label %L unwind label %L +L: + ret void +} \ No newline at end of file Index: tools/llvm-extract/llvm-extract.cpp =================================================================== --- tools/llvm-extract/llvm-extract.cpp +++ tools/llvm-extract/llvm-extract.cpp @@ -270,10 +270,11 @@ ExitOnErr(F->materialize()); for (auto &BB : *F) { for (auto &I : BB) { - auto *CI = dyn_cast(&I); - if (!CI) + Function *CF = nullptr; + CallBase *CB = dyn_cast(&I); + if (!CB) continue; - Function *CF = CI->getCalledFunction(); + CF = CB->getCalledFunction(); if (!CF) continue; if (CF->isDeclaration() || GVs.count(CF))