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:
Reid Kleckner 2017-10-16 23:07:15 +00:00
parent 73c1500cc3
commit f98dea105e
2 changed files with 22 additions and 0 deletions

View File

@ -720,6 +720,12 @@ static void PrintPreprocessedTokens(Preprocessor &PP, Token &Tok,
// -traditional-cpp the lexer keeps /all/ whitespace, including comments.
SourceLocation StartLoc = Tok.getLocation();
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)) {
// PrintPPOutputPPCallbacks::InclusionDirective handles producing
// appropriate output here. Ignore this token entirely.

View File

@ -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