[PATCH] D123976: [CUDA][HIP] Fix delete operator for -fopenmp

Yaxun Liu via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Apr 19 11:47:56 PDT 2022


This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG800f26386cd9: [CUDA][HIP] Fix delete operator for -fopenmp (authored by yaxunl).
Herald added a project: clang.

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D123976/new/

https://reviews.llvm.org/D123976

Files:
  clang/lib/Sema/SemaExprCXX.cpp
  clang/test/SemaCUDA/openmp-parallel.cu


Index: clang/test/SemaCUDA/openmp-parallel.cu
===================================================================
--- clang/test/SemaCUDA/openmp-parallel.cu
+++ clang/test/SemaCUDA/openmp-parallel.cu
@@ -1,4 +1,5 @@
 // RUN: %clang_cc1 -fopenmp -fsyntax-only -verify %s
+// RUN: %clang_cc1 -fopenmp -fexceptions -fsyntax-only -verify %s
 
 #include "Inputs/cuda.h"
 
@@ -7,13 +8,17 @@
 
 int main() {
   #pragma omp parallel
-  for (int i = 0; i < 100; i++)
+  for (int i = 0; i < 100; i++) {
     foo(1); // expected-error {{no matching function for call to 'foo'}}
-  
+    new int;
+  }
+
   auto Lambda = []() {
     #pragma omp parallel
-    for (int i = 0; i < 100; i++)
+    for (int i = 0; i < 100; i++) {
       foo(1); // expected-error {{reference to __device__ function 'foo' in __host__ __device__ function}}
-    };
+      new int;
+    }
+  };
   Lambda(); // expected-note {{called by 'main'}}
 }
Index: clang/lib/Sema/SemaExprCXX.cpp
===================================================================
--- clang/lib/Sema/SemaExprCXX.cpp
+++ clang/lib/Sema/SemaExprCXX.cpp
@@ -1597,7 +1597,7 @@
 
 bool Sema::isUsualDeallocationFunction(const CXXMethodDecl *Method) {
   // [CUDA] Ignore this function, if we can't call it.
-  const FunctionDecl *Caller = dyn_cast<FunctionDecl>(CurContext);
+  const FunctionDecl *Caller = getCurFunctionDecl(/*AllowLambda=*/true);
   if (getLangOpts().CUDA) {
     auto CallPreference = IdentifyCUDAPreference(Caller, Method);
     // If it's not callable at all, it's not the right function.
@@ -1691,7 +1691,7 @@
 
       // In CUDA, determine how much we'd like / dislike to call this.
       if (S.getLangOpts().CUDA)
-        if (auto *Caller = dyn_cast<FunctionDecl>(S.CurContext))
+        if (auto *Caller = S.getCurFunctionDecl(/*AllowLambda=*/true))
           CUDAPref = S.IdentifyCUDAPreference(Caller, FD);
     }
 
@@ -2830,7 +2830,8 @@
     }
 
     if (getLangOpts().CUDA)
-      EraseUnwantedCUDAMatches(dyn_cast<FunctionDecl>(CurContext), Matches);
+      EraseUnwantedCUDAMatches(getCurFunctionDecl(/*AllowLambda=*/true),
+                               Matches);
   } else {
     // C++1y [expr.new]p22:
     //   For a non-placement allocation function, the normal deallocation


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D123976.423694.patch
Type: text/x-patch
Size: 2250 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20220419/523fd04f/attachment.bin>


More information about the cfe-commits mailing list