From: Justin Bogner Date: Tue, 23 Jun 2015 20:29:09 +0000 (+0000) Subject: InstrProf: Fix a crash when an implicit def appears in a macro X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7f949a04e3055184810a14620a0c8176af2ace8a;p=clang InstrProf: Fix a crash when an implicit def appears in a macro git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@240452 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CoverageMappingGen.cpp b/lib/CodeGen/CoverageMappingGen.cpp index 9ad5d14edf..d8a946030d 100644 --- a/lib/CodeGen/CoverageMappingGen.cpp +++ b/lib/CodeGen/CoverageMappingGen.cpp @@ -475,7 +475,8 @@ struct CounterCoverageMappingBuilder /// files, this adjusts our current region stack and creates the file regions /// for the exited file. void handleFileExit(SourceLocation NewLoc) { - if (SM.isWrittenInSameFile(MostRecentLocation, NewLoc)) + if (NewLoc.isInvalid() || + SM.isWrittenInSameFile(MostRecentLocation, NewLoc)) return; // If NewLoc is not in a file that contains MostRecentLocation, walk up to diff --git a/test/CoverageMapping/implicit-def-in-macro.m b/test/CoverageMapping/implicit-def-in-macro.m new file mode 100644 index 0000000000..7e563acc54 --- /dev/null +++ b/test/CoverageMapping/implicit-def-in-macro.m @@ -0,0 +1,16 @@ +// RUN: %clang_cc1 -fprofile-instr-generate -fcoverage-mapping -dump-coverage-mapping -emit-llvm-only -triple x86_64-apple-darwin -fobjc-runtime=macosx-10.10.0 -fblocks -fobjc-arc %s | FileCheck %s + +@interface Foo +@end +#define Bar Foo + +@implementation Blah +// CHECK-LABEL: +[Blah load]: ++ load { // CHECK: File 0, [[@LINE]]:8 -> [[END:[0-9:]+]] = #0 + return 0; + // CHECK: Expansion,File 0, [[@LINE+1]]:3 -> [[@LINE+1]]:6 = 0 + Bar *attribute; // CHECK: File 0, [[@LINE]]:6 -> [[END]] = 0 +} +@end + +int main() {}