Author: Timm Bäder Date: 2024-06-29T18:29:02+02:00 New Revision: df067e567f7793a7c82096df0387a6e6dd31a828
URL: https://github.com/llvm/llvm-project/commit/df067e567f7793a7c82096df0387a6e6dd31a828 DIFF: https://github.com/llvm/llvm-project/commit/df067e567f7793a7c82096df0387a6e6dd31a828.diff LOG: [clang][Interp][NFC] Pretty-print global temporary APValues Added: Modified: clang/lib/AST/Interp/Disasm.cpp Removed: ################################################################################ diff --git a/clang/lib/AST/Interp/Disasm.cpp b/clang/lib/AST/Interp/Disasm.cpp index 56c2b7032f6d5..d946a10c22dc3 100644 --- a/clang/lib/AST/Interp/Disasm.cpp +++ b/clang/lib/AST/Interp/Disasm.cpp @@ -156,15 +156,28 @@ LLVM_DUMP_METHOD void Program::dump(llvm::raw_ostream &OS) const { } Desc->dump(OS); - if (Desc->IsTemporary) { + if (GP.isInitialized() && Desc->IsTemporary) { if (const auto *MTE = dyn_cast_if_present<MaterializeTemporaryExpr>(Desc->asExpr()); MTE && MTE->getLifetimeExtendedTemporaryDecl()) { - const APValue *V = MTE->getLifetimeExtendedTemporaryDecl()->getValue(); - if (V->isInt()) - OS << " (global temporary value: " << V->getInt() << ")"; - else - OS << " (huh?)"; + if (const APValue *V = + MTE->getLifetimeExtendedTemporaryDecl()->getValue()) { + OS << " (global temporary value: "; + { + ColorScope SC(OS, true, {llvm::raw_ostream::BRIGHT_MAGENTA, true}); + std::string VStr; + llvm::raw_string_ostream SS(VStr); + V->dump(SS, Ctx.getASTContext()); + + for (unsigned I = 0; I != VStr.size(); ++I) { + if (VStr[I] == '\n') + VStr[I] = ' '; + } + VStr.pop_back(); // Remove the newline (or now space) at the end. + OS << VStr; + } + OS << ')'; + } } } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits