]> gcc.gnu.org Git - gcc.git/commitdiff
diagnostics: SARIF output: add "workingDirectory" property (§3.20.19)
authorDavid Malcolm <dmalcolm@redhat.com>
Wed, 24 Jul 2024 22:07:55 +0000 (18:07 -0400)
committerDavid Malcolm <dmalcolm@redhat.com>
Wed, 24 Jul 2024 22:07:55 +0000 (18:07 -0400)
gcc/ChangeLog:
* diagnostic-format-sarif.cc
(sarif_builder::make_artifact_location_object): Make public.
(sarif_invocation::sarif_invocation): Add param "builder".
Use it to potentially populate the "workingDirectory" property
with the result of pwd (§3.20.19).
(sarif_builder::sarif_builder): Pass *this to m_invocation_obj's
ctor.

gcc/testsuite/ChangeLog:
* c-c++-common/diagnostic-format-sarif-file-1.c: Verify that we have
a "workingDirectory" property.

Signed-off-by: David Malcolm <dmalcolm@redhat.com>
gcc/diagnostic-format-sarif.cc
gcc/testsuite/c-c++-common/diagnostic-format-sarif-file-1.c

index 847e1eb9bdfc797712372076c82b672e94da58a4..9be84fb268a5a2c8a69ac98e9e2812f9358492a4 100644 (file)
@@ -125,7 +125,7 @@ class sarif_tool_component : public sarif_object {};
 class sarif_invocation : public sarif_object
 {
 public:
-  sarif_invocation ();
+  sarif_invocation (sarif_builder &builder);
 
   void add_notification_for_ice (diagnostic_context &context,
                                 const diagnostic_info &diagnostic,
@@ -378,6 +378,9 @@ public:
   std::unique_ptr<sarif_artifact_content>
   maybe_make_artifact_content_object (const char *filename) const;
 
+  std::unique_ptr<sarif_artifact_location>
+  make_artifact_location_object (const char *filename);
+
 private:
   std::unique_ptr<sarif_result>
   make_result_object (diagnostic_context &context,
@@ -404,8 +407,6 @@ private:
   std::unique_ptr<sarif_artifact_location>
   make_artifact_location_object (location_t loc);
   std::unique_ptr<sarif_artifact_location>
-  make_artifact_location_object (const char *filename);
-  std::unique_ptr<sarif_artifact_location>
   make_artifact_location_object_for_pwd () const;
   std::unique_ptr<sarif_region>
   maybe_make_region_object (location_t loc,
@@ -512,10 +513,14 @@ sarif_object::get_or_create_properties ()
 
 /* class sarif_invocation : public sarif_object.  */
 
-sarif_invocation::sarif_invocation ()
+sarif_invocation::sarif_invocation (sarif_builder &builder)
 : m_notifications_arr (::make_unique<json::array> ()),
   m_success (true)
 {
+  // "workingDirectory" property (SARIF v2.1.0 section 3.20.19)
+  if (const char *pwd = getpwd ())
+    set<sarif_artifact_location> ("workingDirectory",
+                                 builder.make_artifact_location_object (pwd));
 }
 
 /* Handle an internal compiler error DIAGNOSTIC occurring on CONTEXT.
@@ -747,7 +752,7 @@ sarif_builder::sarif_builder (diagnostic_context &context,
                              const char *main_input_filename_,
                              bool formatted)
 : m_context (context),
-  m_invocation_obj (::make_unique<sarif_invocation> ()),
+  m_invocation_obj (::make_unique<sarif_invocation> (*this)),
   m_results_array (new json::array ()),
   m_cur_group_result (nullptr),
   m_seen_any_relative_paths (false),
index 50375465483de43a9254613db9e6661877312e0f..0a3778323792892eea6a1dffbc6d99b421d12b68 100644 (file)
@@ -32,6 +32,7 @@
          { dg-final { scan-sarif-file "\"informationUri\": \"" } }
 
      { dg-final { scan-sarif-file "\"invocations\": \\\[" } }
+       { dg-final { scan-sarif-file {"workingDirectory": } } }
        { dg-final { scan-sarif-file "\"toolExecutionNotifications\": \\\[\\\]" } }
        { dg-final { scan-sarif-file "\"executionSuccessful\": true" } }
 
This page took 0.062319 seconds and 5 git commands to generate.