[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