https://github.com/kazutakahirata created 
https://github.com/llvm/llvm-project/pull/236619

PointerUnion::dyn_cast has been soft-deprecated in favor of
llvm::dyn_cast and llvm::dyn_cast_if_present.  This patch replaces
PointerUnion::dyn_cast with llvm::dyn_cast_if_present in
SARIFDiagnostic::emitDiagnosticMessage, and adds a test case to cover
the null operand case.

Note that DiagnosticRenderer::emitSingleMacroExpansion invokes
emitDiagnosticMessage with a null DiagOrStoredDiag when emitting a
macro expansion note.

This patch completes the migration away from PointerUnion::dyn_cast
under clang/.

Assisted-by: Antigravity


>From b21d5400e7e83db67adc3b40b6e585283e45e905 Mon Sep 17 00:00:00 2001
From: Kazu Hirata <[email protected]>
Date: Mon, 26 Oct 2026 02:10:53 -0700
Subject: [PATCH] [clang] Replace PointerUnion::dyn_cast with
 llvm::dyn_cast_if_present (NFC)

PointerUnion::dyn_cast has been soft-deprecated in favor of
llvm::dyn_cast and llvm::dyn_cast_if_present.  This patch replaces
PointerUnion::dyn_cast with llvm::dyn_cast_if_present in
SARIFDiagnostic::emitDiagnosticMessage, and adds a test case to cover
the null operand case.

Note that DiagnosticRenderer::emitSingleMacroExpansion invokes
emitDiagnosticMessage with a null DiagOrStoredDiag when emitting a
macro expansion note.

This patch completes the migration away from PointerUnion::dyn_cast
under clang/.

Assisted-by: Antigravity
---
 clang/lib/Frontend/SARIFDiagnostic.cpp        |  2 +-
 .../sarif-diagnostics.cpp.sarif               | 37 ++++++++++++++++++-
 clang/test/Frontend/sarif-diagnostics.cpp     |  3 ++
 3 files changed, 40 insertions(+), 2 deletions(-)

diff --git a/clang/lib/Frontend/SARIFDiagnostic.cpp 
b/clang/lib/Frontend/SARIFDiagnostic.cpp
index 5183462b76f413..f6f3feb7bd86cd 100644
--- a/clang/lib/Frontend/SARIFDiagnostic.cpp
+++ b/clang/lib/Frontend/SARIFDiagnostic.cpp
@@ -41,7 +41,7 @@ void SARIFDiagnostic::emitDiagnosticMessage(
     StringRef Message, ArrayRef<clang::CharSourceRange> Ranges,
     DiagOrStoredDiag D) {
 
-  const auto *Diag = D.dyn_cast<const Diagnostic *>();
+  const auto *Diag = dyn_cast_if_present<const Diagnostic *>(D);
 
   if (!Diag)
     return;
diff --git 
a/clang/test/Frontend/Inputs/expected-sarif/sarif-diagnostics.cpp.sarif 
b/clang/test/Frontend/Inputs/expected-sarif/sarif-diagnostics.cpp.sarif
index 21f06bf0a1b234..df46841bc624af 100644
--- a/clang/test/Frontend/Inputs/expected-sarif/sarif-diagnostics.cpp.sarif
+++ b/clang/test/Frontend/Inputs/expected-sarif/sarif-diagnostics.cpp.sarif
@@ -295,6 +295,29 @@ clang: warning: diagnostic formatting in SARIF mode is 
currently unstable [-Wsar
           },
           "ruleId": "err_typecheck_invalid_operands",
           "ruleIndex": 8
+        },
+        {
+          "level": "error",
+          "locations": [
+            {
+              "physicalLocation": {
+                "artifactLocation": {
+                  "index": 0,
+                  "uri": "file:///[...]/sarif-diagnostics.cpp"
+                },
+                "region": {
+                  "endColumn": 9,
+                  "startColumn": 9,
+                  "startLine": 31
+                }
+              }
+            }
+          ],
+          "message": {
+            "text": "expected expression"
+          },
+          "ruleId": "err_expected_expression",
+          "ruleIndex": 9
         }
       ],
       "tool": {
@@ -411,6 +434,18 @@ clang: warning: diagnostic formatting in SARIF mode is 
currently unstable [-Wsar
               },
               "id": "err_typecheck_invalid_operands",
               "name": ""
+            },
+            {
+              "defaultConfiguration": {
+                "enabled": true,
+                "level": "error",
+                "rank": 50
+              },
+              "fullDescription": {
+                "text": ""
+              },
+              "id": "err_expected_expression",
+              "name": ""
             }
           ],
           "version": "[clang version]"
@@ -421,4 +456,4 @@ clang: warning: diagnostic formatting in SARIF mode is 
currently unstable [-Wsar
   "version": "[SARIF version]"
 }
 
-2 warnings and 6 errors generated.
\ No newline at end of file
+2 warnings and 7 errors generated.
\ No newline at end of file
diff --git a/clang/test/Frontend/sarif-diagnostics.cpp 
b/clang/test/Frontend/sarif-diagnostics.cpp
index 04cd19516fc0aa..99a6fa46d0f722 100644
--- a/clang/test/Frontend/sarif-diagnostics.cpp
+++ b/clang/test/Frontend/sarif-diagnostics.cpp
@@ -26,3 +26,6 @@ struct t1 { };
 void f1(t1 x, t1 y) {
     x + y;
 }
+
+#define BAD ;
+int x = BAD;

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to