Author: Kirstóf Umann Date: 2020-09-11T13:29:14+02:00 New Revision: 1c08da38676d15600b5c707cf7522eb4273a5347
URL: https://github.com/llvm/llvm-project/commit/1c08da38676d15600b5c707cf7522eb4273a5347 DIFF: https://github.com/llvm/llvm-project/commit/1c08da38676d15600b5c707cf7522eb4273a5347.diff LOG: [analyzer][MacroExpansion] Add a few dumps functions Added: Modified: clang/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp Removed: ################################################################################ diff --git a/clang/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp b/clang/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp index ed62778623a8..c4b66da676aa 100644 --- a/clang/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp +++ b/clang/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp @@ -825,13 +825,31 @@ void PlistDiagnostics::FlushDiagnosticsImpl( namespace { -using ExpArgTokens = llvm::SmallVector<Token, 2>; +using ExpArgTokensTy = llvm::SmallVector<Token, 2>; +} // end of anonymous namespace + +LLVM_DUMP_METHOD static void +dumpExpArgTokensToStream(llvm::raw_ostream &Out, const Preprocessor &PP, + const ExpArgTokensTy &Toks); + +LLVM_DUMP_METHOD static void dumpExpArgTokens(const Preprocessor &PP, + const ExpArgTokensTy &Toks) { + dumpExpArgTokensToStream(llvm::errs(), PP, Toks); +} + +namespace { /// Maps unexpanded macro arguments to expanded arguments. A macro argument may /// need to expanded further when it is nested inside another macro. -class MacroArgMap : public std::map<const IdentifierInfo *, ExpArgTokens> { +class MacroArgMap : public std::map<const IdentifierInfo *, ExpArgTokensTy> { public: void expandFromPrevMacro(const MacroArgMap &Super); + LLVM_DUMP_METHOD void dump(const Preprocessor &PP) const { + dumpToStream(llvm::errs(), PP); + } + + LLVM_DUMP_METHOD void dumpToStream(llvm::raw_ostream &Out, + const Preprocessor &PP) const; }; struct MacroNameAndArgs { @@ -1225,7 +1243,7 @@ static const MacroInfo *getMacroInfoForLocation(const Preprocessor &PP, void MacroArgMap::expandFromPrevMacro(const MacroArgMap &Super) { for (value_type &Pair : *this) { - ExpArgTokens &CurrExpArgTokens = Pair.second; + ExpArgTokensTy &CurrExpArgTokens = Pair.second; // For each token in the expanded macro argument. auto It = CurrExpArgTokens.begin(); @@ -1244,7 +1262,7 @@ void MacroArgMap::expandFromPrevMacro(const MacroArgMap &Super) { continue; } - const ExpArgTokens &SuperExpArgTokens = Super.at(II); + const ExpArgTokensTy &SuperExpArgTokens = Super.at(II); It = CurrExpArgTokens.insert( It, SuperExpArgTokens.begin(), SuperExpArgTokens.end()); @@ -1254,6 +1272,23 @@ void MacroArgMap::expandFromPrevMacro(const MacroArgMap &Super) { } } +void MacroArgMap::dumpToStream(llvm::raw_ostream &Out, + const Preprocessor &PP) const { + for (const std::pair<const IdentifierInfo *, ExpArgTokensTy> Pair : *this) { + Out << Pair.first->getName() << " -> "; + dumpExpArgTokensToStream(Out, PP, Pair.second); + Out << '\n'; + } +} + +static void dumpExpArgTokensToStream(llvm::raw_ostream &Out, + const Preprocessor &PP, + const ExpArgTokensTy &Toks) { + TokenPrinter Printer(Out, PP); + for (Token Tok : Toks) + Printer.printToken(Tok); +} + void TokenPrinter::printToken(const Token &Tok) { // If this is the first token to be printed, don't print space. if (PrevTok.isNot(tok::unknown)) { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits