diff options
author | Reid Kleckner <rnk@google.com> | 2015-09-03 20:18:29 +0000 |
---|---|---|
committer | Reid Kleckner <rnk@google.com> | 2015-09-03 20:18:29 +0000 |
commit | df52337bfc6bd210835ef0b22be2a9ad6b0a2e51 (patch) | |
tree | 89c682653a3ef13a8452dac9a2817fc9ca43a118 /llvm/lib | |
parent | 32eeb76a4fbe77d4885826aa4d370ee15b9a4d8a (diff) | |
download | bcm5719-llvm-df52337bfc6bd210835ef0b22be2a9ad6b0a2e51.tar.gz bcm5719-llvm-df52337bfc6bd210835ef0b22be2a9ad6b0a2e51.zip |
[sancov] Disable sanitizer coverage on functions using SEH
Splitting basic blocks really messes up WinEHPrepare. We can remove this
change when SEH uses the new EH IR.
llvm-svn: 246799
Diffstat (limited to 'llvm/lib')
-rw-r--r-- | llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp b/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp index 3bcb8de1c4f..b021f31e652 100644 --- a/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp +++ b/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp @@ -31,6 +31,7 @@ #include "llvm/Transforms/Instrumentation.h" #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/SmallVector.h" +#include "llvm/Analysis/LibCallSemantics.h" #include "llvm/IR/CallSite.h" #include "llvm/IR/DataLayout.h" #include "llvm/IR/DebugInfo.h" @@ -290,6 +291,12 @@ bool SanitizerCoverageModule::runOnFunction(Function &F) { if (F.empty()) return false; if (F.getName().find(".module_ctor") != std::string::npos) return false; // Should not instrument sanitizer init functions. + // Don't instrument functions using SEH for now. Splitting basic blocks like + // we do for coverage breaks WinEHPrepare. + // FIXME: Remove this when SEH no longer uses landingpad pattern matching. + if (F.hasPersonalityFn() && + isAsynchronousEHPersonality(classifyEHPersonality(F.getPersonalityFn()))) + return false; if (Options.CoverageType >= SanitizerCoverageOptions::SCK_Edge) SplitAllCriticalEdges(F); SmallVector<Instruction*, 8> IndirCalls; |