[clang] [Clang] fix crash in codegen caused by deferred asm diagnostics under -fopenmp (PR #147163)

Oleksandr T. via cfe-commits cfe-commits at lists.llvm.org
Fri Jul 11 07:58:28 PDT 2025


================
@@ -2092,18 +2092,36 @@ Sema::SemaDiagnosticBuilder::~SemaDiagnosticBuilder() {
 }
 
 Sema::SemaDiagnosticBuilder
-Sema::targetDiag(SourceLocation Loc, unsigned DiagID, const FunctionDecl *FD) {
+Sema::targetDiag(SourceLocation Loc, unsigned DiagID, FunctionDecl *FD) {
   FD = FD ? FD : getCurFunctionDecl();
-  if (LangOpts.OpenMP)
-    return LangOpts.OpenMPIsTargetDevice
-               ? OpenMP().diagIfOpenMPDeviceCode(Loc, DiagID, FD)
-               : OpenMP().diagIfOpenMPHostCode(Loc, DiagID, FD);
-  if (getLangOpts().CUDA)
-    return getLangOpts().CUDAIsDevice ? CUDA().DiagIfDeviceCode(Loc, DiagID)
-                                      : CUDA().DiagIfHostCode(Loc, DiagID);
-
-  if (getLangOpts().SYCLIsDevice)
+
+  if (LangOpts.OpenMP) {
+    if (LangOpts.OpenMPIsTargetDevice) {
+      return OpenMP().diagIfOpenMPDeviceCode(Loc, DiagID, FD);
+    }
+
+    SemaDiagnosticBuilder SDB = OpenMP().diagIfOpenMPHostCode(Loc, DiagID, FD);
+    if (SDB.isDeferred()) {
+      FD->setInvalidDecl();
+    }
+    return SDB;
+  }
+
+  if (getLangOpts().CUDA) {
+    if (getLangOpts().CUDAIsDevice) {
+      return CUDA().DiagIfDeviceCode(Loc, DiagID);
+    }
+
+    SemaDiagnosticBuilder SDB = CUDA().DiagIfHostCode(Loc, DiagID);
+    if (SDB.isDeferred()) {
+      FD->setInvalidDecl();
+    }
+    return SDB;
+  }
+
+  if (getLangOpts().SYCLIsDevice) {
     return SYCL().DiagIfDeviceCode(Loc, DiagID);
+  }
----------------
a-tarasyuk wrote:

@alexey-bataev removed. thanks

https://github.com/llvm/llvm-project/pull/147163


More information about the cfe-commits mailing list