mirror of https://github.com/microsoft/clang.git
Don't print end-of-directive tokens in -E output
This comes up when pre-processing standalone .s files containing hash-prefixed comments. The pre-processor should skip the unknown directive and not emit an extra newline as we were doing. Fixes PR34950 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@315953 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
73c1500cc3
commit
f98dea105e
|
@ -720,6 +720,12 @@ static void PrintPreprocessedTokens(Preprocessor &PP, Token &Tok,
|
||||||
// -traditional-cpp the lexer keeps /all/ whitespace, including comments.
|
// -traditional-cpp the lexer keeps /all/ whitespace, including comments.
|
||||||
SourceLocation StartLoc = Tok.getLocation();
|
SourceLocation StartLoc = Tok.getLocation();
|
||||||
Callbacks->MoveToLine(StartLoc.getLocWithOffset(Tok.getLength()));
|
Callbacks->MoveToLine(StartLoc.getLocWithOffset(Tok.getLength()));
|
||||||
|
} else if (Tok.is(tok::eod)) {
|
||||||
|
// Don't print end of directive tokens, since they are typically newlines
|
||||||
|
// that mess up our line tracking. These come from unknown pre-processor
|
||||||
|
// directives or hash-prefixed comments in standalone assembly files.
|
||||||
|
PP.Lex(Tok);
|
||||||
|
continue;
|
||||||
} else if (Tok.is(tok::annot_module_include)) {
|
} else if (Tok.is(tok::annot_module_include)) {
|
||||||
// PrintPPOutputPPCallbacks::InclusionDirective handles producing
|
// PrintPPOutputPPCallbacks::InclusionDirective handles producing
|
||||||
// appropriate output here. Ignore this token entirely.
|
// appropriate output here. Ignore this token entirely.
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
// RUN: %clang_cc1 -E -x assembler-with-cpp %s -o - | FileCheck %s --strict-whitespace
|
||||||
|
|
||||||
|
.intel_syntax noprefix
|
||||||
|
.text
|
||||||
|
.global _main
|
||||||
|
_main:
|
||||||
|
# asdf
|
||||||
|
# asdf
|
||||||
|
mov bogus_name, 20
|
||||||
|
mov rax, 5
|
||||||
|
ret
|
||||||
|
|
||||||
|
// CHECK-LABEL: _main:
|
||||||
|
// CHECK-NEXT: {{^}} # asdf
|
||||||
|
// CHECK-NEXT: {{^}} # asdf
|
||||||
|
// CHECK-NEXT: mov bogus_name, 20
|
Loading…
Reference in New Issue