forked from OSchip/llvm-project
[Lexer] Fix missing coverage line after #endif
Summary: bug reported here: https://bugs.llvm.org/show_bug.cgi?id=46660 Reviewers: vsk, efriedma, arphaman Reviewed By: vsk Subscribers: dexonsmith, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D83514
This commit is contained in:
parent
5ffec46720
commit
672ae621e9
|
@ -432,6 +432,7 @@ void Preprocessor::SkipExcludedConditionalBlock(SourceLocation HashTokenLoc,
|
|||
// Skip to the next '#endif' / '#else' / '#elif'.
|
||||
CurLexer->skipOver(*SkipLength);
|
||||
}
|
||||
SourceLocation endifLoc;
|
||||
while (true) {
|
||||
CurLexer->Lex(Tok);
|
||||
|
||||
|
@ -538,7 +539,7 @@ void Preprocessor::SkipExcludedConditionalBlock(SourceLocation HashTokenLoc,
|
|||
// Restore the value of LexingRawMode so that trailing comments
|
||||
// are handled correctly, if we've reached the outermost block.
|
||||
CurPPLexer->LexingRawMode = false;
|
||||
CheckEndOfDirective("endif");
|
||||
endifLoc = CheckEndOfDirective("endif");
|
||||
CurPPLexer->LexingRawMode = true;
|
||||
if (Callbacks)
|
||||
Callbacks->Endif(Tok.getLocation(), CondInfo.IfLoc);
|
||||
|
@ -621,7 +622,9 @@ void Preprocessor::SkipExcludedConditionalBlock(SourceLocation HashTokenLoc,
|
|||
// by the end of the preamble; we'll resume parsing after the preamble.
|
||||
if (Callbacks && (Tok.isNot(tok::eof) || !isRecordingPreamble()))
|
||||
Callbacks->SourceRangeSkipped(
|
||||
SourceRange(HashTokenLoc, CurPPLexer->getSourceLocation()),
|
||||
SourceRange(HashTokenLoc, endifLoc.isValid()
|
||||
? endifLoc
|
||||
: CurPPLexer->getSourceLocation()),
|
||||
Tok.getLocation());
|
||||
}
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
// CHECK: func
|
||||
void func() { // CHECK: File 0, [[@LINE]]:13 -> [[@LINE+5]]:2 = #0
|
||||
int i = 0;
|
||||
#ifdef MACRO // CHECK-NEXT: Skipped,File 0, [[@LINE]]:1 -> [[@LINE+3]]:1 = 0
|
||||
#ifdef MACRO // CHECK-NEXT: Skipped,File 0, [[@LINE]]:1 -> [[@LINE+2]]:7 = 0
|
||||
int x = i;
|
||||
#endif
|
||||
}
|
||||
|
@ -11,7 +11,7 @@ void func() { // CHECK: File 0, [[@LINE]]:13 -> [[@LINE+5]]:2 = #0
|
|||
// CHECK: main
|
||||
int main() { // CHECK-NEXT: File 0, [[@LINE]]:12 -> {{[0-9]+}}:2 = #0
|
||||
int i = 0;
|
||||
# if 0 // CHECK-NEXT: Skipped,File 0, [[@LINE]]:1 -> [[@LINE+5]]:1 = 0
|
||||
# if 0 // CHECK-NEXT: Skipped,File 0, [[@LINE]]:1 -> [[@LINE+4]]:29 = 0
|
||||
if(i == 0) {
|
||||
i = 1;
|
||||
}
|
||||
|
@ -22,44 +22,44 @@ int main() { // CHECK-NEXT: File 0, [[@LINE]]:12 -> {{[0-9]+}}:2 = #0
|
|||
if(i == 0) { // CHECK: File 0, [[@LINE]]:14 -> [[@LINE+2]]:4 = #1
|
||||
i = 1;
|
||||
}
|
||||
#else // CHECK-NEXT: Skipped,File 0, [[@LINE]]:1 -> [[@LINE+6]]:1 = 0
|
||||
#else // CHECK-NEXT: Skipped,File 0, [[@LINE]]:1 -> [[@LINE+5]]:7 = 0
|
||||
if(i == 1) {
|
||||
i = 0;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
// CHECK-NEXT: Skipped,File 0, [[@LINE+1]]:1 -> [[@LINE+5]]:1
|
||||
// CHECK-NEXT: Skipped,File 0, [[@LINE+1]]:1 -> [[@LINE+4]]:24
|
||||
#\
|
||||
if 0
|
||||
#\
|
||||
endif // also skipped
|
||||
|
||||
#if 1
|
||||
// CHECK-NEXT: Skipped,File 0, [[@LINE+1]]:1 -> [[@LINE+4]]:1
|
||||
// CHECK-NEXT: Skipped,File 0, [[@LINE+1]]:1 -> [[@LINE+3]]:7
|
||||
#\
|
||||
elif 0
|
||||
#endif
|
||||
|
||||
#if 1
|
||||
// CHECK-NEXT: Skipped,File 0, [[@LINE+1]]:1 -> [[@LINE+4]]:1
|
||||
// CHECK-NEXT: Skipped,File 0, [[@LINE+1]]:1 -> [[@LINE+3]]:7
|
||||
#\
|
||||
else
|
||||
#endif
|
||||
|
||||
// CHECK-NEXT: Skipped,File 0, [[@LINE+1]]:1 -> [[@LINE+5]]:1
|
||||
// CHECK-NEXT: Skipped,File 0, [[@LINE+1]]:1 -> [[@LINE+4]]:8
|
||||
#\
|
||||
ifdef NOT_DEFINED
|
||||
#\
|
||||
endif
|
||||
|
||||
// CHECK-NEXT: Skipped,File 0, [[@LINE+1]]:1 -> [[@LINE+5]]:1
|
||||
// CHECK-NEXT: Skipped,File 0, [[@LINE+1]]:1 -> [[@LINE+4]]:8
|
||||
#\
|
||||
ifndef __FILE__
|
||||
#\
|
||||
endif
|
||||
|
||||
// CHECK-NEXT: Skipped,File 0, [[@LINE+1]]:1 -> [[@LINE+7]]:1
|
||||
// CHECK-NEXT: Skipped,File 0, [[@LINE+1]]:1 -> [[@LINE+6]]:26
|
||||
#\
|
||||
ifdef NOT_DEFINED
|
||||
#\
|
||||
|
|
Loading…
Reference in New Issue