diff --git a/clang/lib/Lex/Preprocessor.cpp b/clang/lib/Lex/Preprocessor.cpp index e003ad3a95570..1d1b7c2358a03 100644 --- a/clang/lib/Lex/Preprocessor.cpp +++ b/clang/lib/Lex/Preprocessor.cpp @@ -59,6 +59,7 @@ #include "llvm/ADT/StringRef.h" #include "llvm/Support/Capacity.h" #include "llvm/Support/ErrorHandling.h" +#include "llvm/Support/FormatVariadic.h" #include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/raw_ostream.h" #include @@ -234,14 +235,21 @@ void Preprocessor::FinalizeForModelFile() { } void Preprocessor::DumpToken(const Token &Tok, bool DumpFlags) const { - llvm::errs() << tok::getTokenName(Tok.getKind()); + llvm::errs() << llvm::formatv("{0,-16} ", tok::getTokenName(Tok.getKind())); - if (!Tok.isAnnotation()) - llvm::errs() << " '" << getSpelling(Tok) << "'"; + std::string Spelling; + if (!Tok.isAnnotation()) { + Spelling = "'" + getSpelling(Tok) + "'"; + } + + llvm::errs() << llvm::formatv("{0,-32} ", Spelling); if (!DumpFlags) return; - llvm::errs() << "\t"; + llvm::errs() << "Loc=<"; + DumpLocation(Tok.getLocation()); + llvm::errs() << ">"; + if (Tok.isAtStartOfLine()) llvm::errs() << " [StartOfLine]"; if (Tok.hasLeadingSpace()) @@ -253,10 +261,6 @@ void Preprocessor::DumpToken(const Token &Tok, bool DumpFlags) const { llvm::errs() << " [UnClean='" << StringRef(Start, Tok.getLength()) << "']"; } - - llvm::errs() << "\tLoc=<"; - DumpLocation(Tok.getLocation()); - llvm::errs() << ">"; } void Preprocessor::DumpLocation(SourceLocation Loc) const { diff --git a/clang/test/Preprocessor/dump-tokens.cpp b/clang/test/Preprocessor/dump-tokens.cpp new file mode 100644 index 0000000000000..3774894943b87 --- /dev/null +++ b/clang/test/Preprocessor/dump-tokens.cpp @@ -0,0 +1,16 @@ +// RUN: %clang_cc1 -dump-tokens %s 2>&1 | FileCheck %s + +-> // CHECK: arrow '->' +5 // CHECK: numeric_constant '5' +id // CHECK: identifier 'id' +& // CHECK: amp '&' +) // CHECK: r_paren ')' +unsigned // CHECK: unsigned 'unsigned' +~ // CHECK: tilde '~' +long_variable_name_very_long // CHECK: identifier 'long_variable_name_very_long' +union // CHECK: union 'union' +42 // CHECK: numeric_constant '42' +j // CHECK: identifier 'j' +&= // CHECK: ampequal '&=' +15 // CHECK: numeric_constant '15' +