diff options
-rw-r--r-- | clang/lib/Frontend/PrintPreprocessedOutput.cpp | 6 | ||||
-rw-r--r-- | clang/test/Preprocessor/print-assembler.s | 16 |
2 files changed, 22 insertions, 0 deletions
diff --git a/clang/lib/Frontend/PrintPreprocessedOutput.cpp b/clang/lib/Frontend/PrintPreprocessedOutput.cpp index 8ae9038316c..2e023294f1e 100644 --- a/clang/lib/Frontend/PrintPreprocessedOutput.cpp +++ b/clang/lib/Frontend/PrintPreprocessedOutput.cpp @@ -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. diff --git a/clang/test/Preprocessor/print-assembler.s b/clang/test/Preprocessor/print-assembler.s new file mode 100644 index 00000000000..c4e2e031f2d --- /dev/null +++ b/clang/test/Preprocessor/print-assembler.s @@ -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 |