https://github.com/usx95 updated https://github.com/llvm/llvm-project/pull/106277
>From b2bb29ec61f4e9a7b3b7f9bcd0f5b7a12c844d14 Mon Sep 17 00:00:00 2001 From: Utkarsh Saxena <u...@google.com> Date: Tue, 27 Aug 2024 19:44:34 +0000 Subject: [PATCH 1/2] [clang] Properly set file and line info for -ftime-trace --- clang/lib/Parse/Parser.cpp | 9 +++++++-- ...-trace-ParseDeclarationOrFunctionDefinition.cpp | 3 ++- clang/unittests/Support/TimeProfilerTest.cpp | 14 +++++++------- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/clang/lib/Parse/Parser.cpp b/clang/lib/Parse/Parser.cpp index 5ebe71e496a2e8..cc16a9d98d0ca6 100644 --- a/clang/lib/Parse/Parser.cpp +++ b/clang/lib/Parse/Parser.cpp @@ -16,6 +16,7 @@ #include "clang/AST/ASTLambda.h" #include "clang/AST/DeclTemplate.h" #include "clang/Basic/FileManager.h" +#include "clang/Basic/SourceManager.h" #include "clang/Parse/ParseDiagnostic.h" #include "clang/Parse/RAIIObjectsForParser.h" #include "clang/Sema/DeclSpec.h" @@ -1255,8 +1256,12 @@ Parser::DeclGroupPtrTy Parser::ParseDeclarationOrFunctionDefinition( // Add an enclosing time trace scope for a bunch of small scopes with // "EvaluateAsConstExpr". llvm::TimeTraceScope TimeScope("ParseDeclarationOrFunctionDefinition", [&]() { - return Tok.getLocation().printToString( - Actions.getASTContext().getSourceManager()); + llvm::TimeTraceMetadata M; + const SourceManager &SM = Actions.getASTContext().getSourceManager(); + auto Loc = SM.getExpansionLoc(Tok.getLocation()); + M.File = SM.getFilename(Loc); + M.Line = SM.getExpansionLineNumber(Loc); + return M; }); if (DS) { diff --git a/clang/test/Driver/check-time-trace-ParseDeclarationOrFunctionDefinition.cpp b/clang/test/Driver/check-time-trace-ParseDeclarationOrFunctionDefinition.cpp index f854cddadbfcc1..8a1127752b325b 100644 --- a/clang/test/Driver/check-time-trace-ParseDeclarationOrFunctionDefinition.cpp +++ b/clang/test/Driver/check-time-trace-ParseDeclarationOrFunctionDefinition.cpp @@ -4,7 +4,8 @@ // RUN: | FileCheck %s // CHECK-DAG: "name": "ParseDeclarationOrFunctionDefinition" -// CHECK-DAG: "detail": "{{.*}}check-time-trace-ParseDeclarationOrFunctionDefinition.cpp:15:1" +// CHECK-DAG: "file": "{{.*}}check-time-trace-ParseDeclarationOrFunctionDefinition.cpp" +// CHECK-DAG: "line": 16 // CHECK-DAG: "name": "ParseFunctionDefinition" // CHECK-DAG: "detail": "foo" // CHECK-DAG: "name": "ParseFunctionDefinition" diff --git a/clang/unittests/Support/TimeProfilerTest.cpp b/clang/unittests/Support/TimeProfilerTest.cpp index f53fe71d630bf5..6d8b4e0453294f 100644 --- a/clang/unittests/Support/TimeProfilerTest.cpp +++ b/clang/unittests/Support/TimeProfilerTest.cpp @@ -210,8 +210,8 @@ constexpr int slow_init_list[] = {1, 1, 2, 3, 5, 8, 13, 21}; // 25th line std::string Json = teardownProfiler(); ASSERT_EQ(R"( Frontend (test.cc) -| ParseDeclarationOrFunctionDefinition (test.cc:2:1) -| ParseDeclarationOrFunctionDefinition (test.cc:6:1) +| ParseDeclarationOrFunctionDefinition (test.cc:2) +| ParseDeclarationOrFunctionDefinition (test.cc:6) | | ParseFunctionDefinition (slow_func) | | | EvaluateAsRValue (<test.cc:8:21>) | | | EvaluateForOverflow (<test.cc:8:21, col:25>) @@ -223,15 +223,15 @@ Frontend (test.cc) | | | | EvaluateAsRValue (<test.cc:8:21, col:25>) | | | EvaluateAsBooleanCondition (<test.cc:8:21, col:25>) | | | | EvaluateAsRValue (<test.cc:8:21, col:25>) -| ParseDeclarationOrFunctionDefinition (test.cc:16:1) +| ParseDeclarationOrFunctionDefinition (test.cc:16) | | ParseFunctionDefinition (slow_test) | | | EvaluateAsInitializer (slow_value) | | | EvaluateAsConstantExpr (<test.cc:17:33, col:59>) | | | EvaluateAsConstantExpr (<test.cc:18:11, col:37>) -| ParseDeclarationOrFunctionDefinition (test.cc:22:1) +| ParseDeclarationOrFunctionDefinition (test.cc:22) | | EvaluateAsConstantExpr (<test.cc:23:31, col:57>) | | EvaluateAsRValue (<test.cc:22:14, line:23:58>) -| ParseDeclarationOrFunctionDefinition (test.cc:25:1) +| ParseDeclarationOrFunctionDefinition (test.cc:25) | | EvaluateAsInitializer (slow_init_list) | PerformPendingInstantiations )", @@ -270,7 +270,7 @@ Frontend (test.cc) | ParseFunctionDefinition (fooB) | ParseFunctionDefinition (fooMTA) | ParseFunctionDefinition (fooA) -| ParseDeclarationOrFunctionDefinition (test.cc:3:5) +| ParseDeclarationOrFunctionDefinition (test.cc:3) | | ParseFunctionDefinition (user) | PerformPendingInstantiations | | InstantiateFunction (fooA<int>, a.h:7) @@ -292,7 +292,7 @@ struct { std::string Json = teardownProfiler(); ASSERT_EQ(R"( Frontend (test.c) -| ParseDeclarationOrFunctionDefinition (test.c:2:1) +| ParseDeclarationOrFunctionDefinition (test.c:2) | | isIntegerConstantExpr (<test.c:3:18>) | | EvaluateKnownConstIntCheckOverflow (<test.c:3:18>) | PerformPendingInstantiations >From 126fbc39d71d1ae674cfa2a0b23f994c7420ad9b Mon Sep 17 00:00:00 2001 From: Utkarsh Saxena <u...@google.com> Date: Tue, 27 Aug 2024 20:03:42 +0000 Subject: [PATCH 2/2] Add release notes --- clang/docs/ReleaseNotes.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index b165f6e65636d9..60d4e78dcc48c4 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -136,6 +136,9 @@ Improvements to Clang's diagnostics Improvements to Clang's time-trace ---------------------------------- +- Clang now adds file and line information for -ftime-trace profile as separate fields + (as ``event["args"]["file"]`` and ``event["args"]["line"]`` respectively). + Improvements to Coverage Mapping -------------------------------- _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits