[clang] 7af0eff - Revert "[OpenMP] Allow exceptions in target regions when offloading to GPUs"

via cfe-commits cfe-commits at lists.llvm.org
Tue Aug 29 16:01:25 PDT 2023


Author: antonrydahl
Date: 2023-08-29T15:59:47-07:00
New Revision: 7af0eff5405bb88dc96c0b19892da0fbb44db433

URL: https://github.com/llvm/llvm-project/commit/7af0eff5405bb88dc96c0b19892da0fbb44db433
DIFF: https://github.com/llvm/llvm-project/commit/7af0eff5405bb88dc96c0b19892da0fbb44db433.diff

LOG: Revert "[OpenMP] Allow exceptions in target regions when offloading to GPUs"

This reverts commit 4c62e943b7178127861ca39163a0ed4caeb14943.

Added: 
    

Modified: 
    clang/include/clang/Basic/DiagnosticCommonKinds.td
    clang/include/clang/Basic/DiagnosticGroups.td
    clang/lib/CodeGen/CGException.cpp
    clang/lib/Sema/SemaExprCXX.cpp
    clang/lib/Sema/SemaStmt.cpp
    clang/test/OpenMP/nvptx_target_exceptions_messages.cpp

Removed: 
    clang/test/OpenMP/amdgpu_exceptions.cpp
    clang/test/OpenMP/amdgpu_throw.cpp
    clang/test/OpenMP/amdgpu_throw_trap.cpp
    clang/test/OpenMP/amdgpu_try_catch.cpp
    clang/test/OpenMP/nvptx_exceptions.cpp
    clang/test/OpenMP/nvptx_throw.cpp
    clang/test/OpenMP/nvptx_throw_trap.cpp
    clang/test/OpenMP/nvptx_try_catch.cpp
    clang/test/OpenMP/x86_target_exceptions.cpp
    clang/test/OpenMP/x86_target_throw.cpp
    clang/test/OpenMP/x86_target_try_catch.cpp


################################################################################
diff  --git a/clang/include/clang/Basic/DiagnosticCommonKinds.td b/clang/include/clang/Basic/DiagnosticCommonKinds.td
index f2df283c74829f..cd72e254ea3b1a 100644
--- a/clang/include/clang/Basic/DiagnosticCommonKinds.td
+++ b/clang/include/clang/Basic/DiagnosticCommonKinds.td
@@ -425,13 +425,4 @@ def err_opencl_extension_and_feature_
diff ers : Error<
   "options %0 and %1 are set to 
diff erent values">;
 def err_opencl_feature_requires : Error<
   "feature %0 requires support of %1 feature">;
-
-def warn_throw_not_valid_on_target : Warning<
-  "target '%0' does not support exception handling;"
-  " 'throw' is assumed to be never reached">,
-  InGroup<OpenMPTargetException>;
-def warn_try_not_valid_on_target : Warning<
-  "target '%0' does not support exception handling;"
-  " 'catch' block is ignored">,
-  InGroup<OpenMPTargetException>;
 }

diff  --git a/clang/include/clang/Basic/DiagnosticGroups.td b/clang/include/clang/Basic/DiagnosticGroups.td
index 00c458fb23e73e..d1aa51393ef357 100644
--- a/clang/include/clang/Basic/DiagnosticGroups.td
+++ b/clang/include/clang/Basic/DiagnosticGroups.td
@@ -1292,10 +1292,9 @@ def OpenMPTarget : DiagGroup<"openmp-target", [OpenMPMapping]>;
 def OpenMPPre51Compat : DiagGroup<"pre-openmp-51-compat">;
 def OpenMP51Ext : DiagGroup<"openmp-51-extensions">;
 def OpenMPExtensions : DiagGroup<"openmp-extensions">;
-def OpenMPTargetException : DiagGroup<"openmp-target-exception">;
 def OpenMP : DiagGroup<"openmp", [
     SourceUsesOpenMP, OpenMPClauses, OpenMPLoopForm, OpenMPTarget,
-    OpenMPMapping, OpenMP51Ext, OpenMPExtensions, OpenMPTargetException
+    OpenMPMapping, OpenMP51Ext, OpenMPExtensions
   ]>;
 
 // Backend warnings.

diff  --git a/clang/lib/CodeGen/CGException.cpp b/clang/lib/CodeGen/CGException.cpp
index 3996f2948349cb..9cb7d4c7731deb 100644
--- a/clang/lib/CodeGen/CGException.cpp
+++ b/clang/lib/CodeGen/CGException.cpp
@@ -440,15 +440,6 @@ llvm::Value *CodeGenFunction::getSelectorFromSlot() {
 
 void CodeGenFunction::EmitCXXThrowExpr(const CXXThrowExpr *E,
                                        bool KeepInsertionPoint) {
-  // If the exception is being emitted in an OpenMP target region,
-  // and the target is a GPU, we do not support exception handling.
-  // Therefore, we emit a trap which will abort the program, and
-  // prompt a warning indicating that a trap will be emitted.
-  const llvm::Triple &T = Target.getTriple();
-  if (CGM.getLangOpts().OpenMPIsTargetDevice && (T.isNVPTX() || T.isAMDGCN())) {
-    EmitTrapCall(llvm::Intrinsic::trap);
-    return;
-  }
   if (const Expr *SubExpr = E->getSubExpr()) {
     QualType ThrowType = SubExpr->getType();
     if (ThrowType->isObjCObjectPointerType()) {
@@ -618,16 +609,9 @@ void CodeGenFunction::EmitEndEHSpec(const Decl *D) {
 }
 
 void CodeGenFunction::EmitCXXTryStmt(const CXXTryStmt &S) {
-  const llvm::Triple &T = Target.getTriple();
-  // If we encounter a try statement on in an OpenMP target region offloaded to
-  // a GPU, we treat it as a basic block.
-  const bool IsTargetDevice =
-      (CGM.getLangOpts().OpenMPIsTargetDevice && (T.isNVPTX() || T.isAMDGCN()));
-  if (!IsTargetDevice)
-    EnterCXXTryStmt(S);
+  EnterCXXTryStmt(S);
   EmitStmt(S.getTryBlock());
-  if (!IsTargetDevice)
-    ExitCXXTryStmt(S);
+  ExitCXXTryStmt(S);
 }
 
 void CodeGenFunction::EnterCXXTryStmt(const CXXTryStmt &S, bool IsFnTryBlock) {

diff  --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp
index 472fbdbdb5d0e6..a6e0a8abf81b9a 100644
--- a/clang/lib/Sema/SemaExprCXX.cpp
+++ b/clang/lib/Sema/SemaExprCXX.cpp
@@ -864,21 +864,13 @@ Sema::ActOnCXXThrow(Scope *S, SourceLocation OpLoc, Expr *Ex) {
 
 ExprResult Sema::BuildCXXThrow(SourceLocation OpLoc, Expr *Ex,
                                bool IsThrownVarInScope) {
-  const llvm::Triple &T = Context.getTargetInfo().getTriple();
-  const bool IsOpenMPGPUTarget =
-      getLangOpts().OpenMPIsTargetDevice && (T.isNVPTX() || T.isAMDGCN());
-  // Don't report an error if 'throw' is used in system headers or in an OpenMP
-  // target region compiled for a GPU architecture.
-  if (!IsOpenMPGPUTarget && !getLangOpts().CXXExceptions &&
+  // Don't report an error if 'throw' is used in system headers.
+  if (!getLangOpts().CXXExceptions &&
       !getSourceManager().isInSystemHeader(OpLoc) && !getLangOpts().CUDA) {
     // Delay error emission for the OpenMP device code.
     targetDiag(OpLoc, diag::err_exceptions_disabled) << "throw";
   }
 
-  // In OpenMP target regions, we replace 'throw' with a trap on GPU targets.
-  if (IsOpenMPGPUTarget)
-    targetDiag(OpLoc, diag::warn_throw_not_valid_on_target) << T.str();
-
   // Exceptions aren't allowed in CUDA device code.
   if (getLangOpts().CUDA)
     CUDADiagIfDeviceCode(OpLoc, diag::err_cuda_device_exceptions)

diff  --git a/clang/lib/Sema/SemaStmt.cpp b/clang/lib/Sema/SemaStmt.cpp
index 88ea3f1c3349dd..70a549938d080d 100644
--- a/clang/lib/Sema/SemaStmt.cpp
+++ b/clang/lib/Sema/SemaStmt.cpp
@@ -4471,22 +4471,13 @@ class CatchTypePublicBases {
 /// handlers and creates a try statement from them.
 StmtResult Sema::ActOnCXXTryBlock(SourceLocation TryLoc, Stmt *TryBlock,
                                   ArrayRef<Stmt *> Handlers) {
-  const llvm::Triple &T = Context.getTargetInfo().getTriple();
-  const bool IsOpenMPGPUTarget =
-      getLangOpts().OpenMPIsTargetDevice && (T.isNVPTX() || T.isAMDGCN());
-  // Don't report an error if 'try' is used in system headers or in an OpenMP
-  // target region compiled for a GPU architecture.
-  if (!IsOpenMPGPUTarget && !getLangOpts().CXXExceptions &&
+  // Don't report an error if 'try' is used in system headers.
+  if (!getLangOpts().CXXExceptions &&
       !getSourceManager().isInSystemHeader(TryLoc) && !getLangOpts().CUDA) {
     // Delay error emission for the OpenMP device code.
     targetDiag(TryLoc, diag::err_exceptions_disabled) << "try";
   }
 
-  // In OpenMP target regions, we assume that catch is never reached on GPU
-  // targets.
-  if (IsOpenMPGPUTarget)
-    targetDiag(TryLoc, diag::warn_try_not_valid_on_target) << T.str();
-
   // Exceptions aren't allowed in CUDA device code.
   if (getLangOpts().CUDA)
     CUDADiagIfDeviceCode(TryLoc, diag::err_cuda_device_exceptions)

diff  --git a/clang/test/OpenMP/amdgpu_exceptions.cpp b/clang/test/OpenMP/amdgpu_exceptions.cpp
deleted file mode 100644
index d0104247de98ae..00000000000000
--- a/clang/test/OpenMP/amdgpu_exceptions.cpp
+++ /dev/null
@@ -1,48 +0,0 @@
-// REQUIRES: amdgpu-registered-target
-
-/**
- * The first four lines test that a warning is produced when enabling 
- * -Wopenmp-target-exception no matter what combination of -fexceptions and 
- * -fcxx-exceptions are set, as we want OpenMP to always allow exceptions in the
- * target region but emit a warning instead.
-*/
-
-// RUN: %clang_cc1 -fopenmp -triple amdgcn-amd-amdhsa -fopenmp-is-target-device -fcxx-exceptions -fexceptions %s -emit-llvm -S -verify=with -Wopenmp-target-exception -analyze
-// RUN: %clang_cc1 -fopenmp -triple amdgcn-amd-amdhsa -fopenmp-is-target-device -fcxx-exceptions -fexceptions %s -emit-llvm -S -verify=with -Wopenmp-target-exception -analyze
-// RUN: %clang_cc1 -fopenmp -triple amdgcn-amd-amdhsa -fopenmp-is-target-device -fexceptions %s -emit-llvm -S -verify=with -Wopenmp-target-exception -analyze
-// RUN: %clang_cc1 -fopenmp -triple amdgcn-amd-amdhsa -fopenmp-is-target-device %s -emit-llvm -S -verify=with -Wopenmp-target-exception -analyze
-
-/**
- * The following four lines test that no warning is emitted when providing 
- * -Wno-openmp-target-exception no matter the combination of -fexceptions and 
- * -fcxx-exceptions.
-*/
-
-// RUN: %clang_cc1 -fopenmp -triple amdgcn-amd-amdhsa -fopenmp-is-target-device -fcxx-exceptions -fexceptions %s -emit-llvm -S -verify=without -Wno-openmp-target-exception -analyze
-// RUN: %clang_cc1 -fopenmp -triple amdgcn-amd-amdhsa -fopenmp-is-target-device -fcxx-exceptions %s -emit-llvm -S -verify=without -Wno-openmp-target-exception -analyze
-// RUN: %clang_cc1 -fopenmp -triple amdgcn-amd-amdhsa -fopenmp-is-target-device -fexceptions %s -emit-llvm -S -verify=without -Wno-openmp-target-exception -analyze
-// RUN: %clang_cc1 -fopenmp -triple amdgcn-amd-amdhsa -fopenmp-is-target-device %s -emit-llvm -S -verify=without -Wno-openmp-target-exception -analyze
-
-/**
- * Finally we should test that we only ignore exceptions in the OpenMP 
- * offloading tool-chain
-*/
-
-// RUN: %clang_cc1 -triple amdgcn-amd-amdhsa %s -emit-llvm -S -verify=noexceptions -o -
-
-// noexceptions-error at 37 {{cannot use 'try' with exceptions disabled}}
-// noexceptions-error at 38 {{cannot use 'throw' with exceptions disabled}}
-
-#pragma omp declare target
-int foo(void) {
-	int error = -1;
-	try { // with-warning {{target 'amdgcn-amd-amdhsa' does not support exception handling; 'catch' block is ignored}}
-		throw 404; // with-warning {{target 'amdgcn-amd-amdhsa' does not support exception handling; 'throw' is assumed to be never reached}}
-	}
-	catch (int e){ 
-		error = e;
-	}
-	return error;
-}
-#pragma omp end declare target
-// without-no-diagnostics

diff  --git a/clang/test/OpenMP/amdgpu_throw.cpp b/clang/test/OpenMP/amdgpu_throw.cpp
deleted file mode 100644
index 9afa7261a511b2..00000000000000
--- a/clang/test/OpenMP/amdgpu_throw.cpp
+++ /dev/null
@@ -1,40 +0,0 @@
-// REQUIRES: amdgpu-registered-target
-
-/**
- * The first four lines test that a warning is produced when enabling 
- * -Wopenmp-target-exception no matter what combination of -fexceptions and 
- * -fcxx-exceptions are set, as we want OpenMP to always allow exceptions in the
- * target region but emit a warning instead.
-*/
-
-// RUN: %clang_cc1 -fopenmp -triple amdgcn-amd-amdhsa -fopenmp-is-target-device -fcxx-exceptions -fexceptions %s -emit-llvm -S -verify=with -Wopenmp-target-exception -analyze
-// RUN: %clang_cc1 -fopenmp -triple amdgcn-amd-amdhsa -fopenmp-is-target-device -fcxx-exceptions -fexceptions %s -emit-llvm -S -verify=with -Wopenmp-target-exception -analyze
-// RUN: %clang_cc1 -fopenmp -triple amdgcn-amd-amdhsa -fopenmp-is-target-device -fexceptions %s -emit-llvm -S -verify=with -Wopenmp-target-exception -analyze
-// RUN: %clang_cc1 -fopenmp -triple amdgcn-amd-amdhsa -fopenmp-is-target-device %s -emit-llvm -S -verify=with -Wopenmp-target-exception -analyze
-
-/**
- * The following four lines test that no warning is emitted when providing 
- * -Wno-openmp-target-exception no matter the combination of -fexceptions and 
- * -fcxx-exceptions.
-*/
-
-// RUN: %clang_cc1 -fopenmp -triple amdgcn-amd-amdhsa -fopenmp-is-target-device -fcxx-exceptions -fexceptions %s -emit-llvm -S -verify=without -Wno-openmp-target-exception -analyze
-// RUN: %clang_cc1 -fopenmp -triple amdgcn-amd-amdhsa -fopenmp-is-target-device -fcxx-exceptions %s -emit-llvm -S -verify=without -Wno-openmp-target-exception -analyze
-// RUN: %clang_cc1 -fopenmp -triple amdgcn-amd-amdhsa -fopenmp-is-target-device -fexceptions %s -emit-llvm -S -verify=without -Wno-openmp-target-exception -analyze
-// RUN: %clang_cc1 -fopenmp -triple amdgcn-amd-amdhsa -fopenmp-is-target-device %s -emit-llvm -S -verify=without -Wno-openmp-target-exception -analyze
-
-/**
- * Finally we should test that we only ignore exceptions in the OpenMP 
- * offloading tool-chain
-*/
-
-// RUN: %clang_cc1 -triple amdgcn-amd-amdhsa %s -emit-llvm -S -verify=noexceptions -o -
-
-// noexceptions-error at 35 {{cannot use 'throw' with exceptions disabled}}
-
-#pragma omp declare target
-void foo(void) {
-	throw 404; // with-warning {{target 'amdgcn-amd-amdhsa' does not support exception handling; 'throw' is assumed to be never reached}}
-}
-#pragma omp end declare target
-// without-no-diagnostics

diff  --git a/clang/test/OpenMP/amdgpu_throw_trap.cpp b/clang/test/OpenMP/amdgpu_throw_trap.cpp
deleted file mode 100644
index f1152f78bec192..00000000000000
--- a/clang/test/OpenMP/amdgpu_throw_trap.cpp
+++ /dev/null
@@ -1,13 +0,0 @@
-// REQUIRES: amdgpu-registered-target
-
-// RUN: %clang_cc1 -fopenmp -triple amdgcn-amd-amdhsa -fopenmp-is-target-device %s -emit-llvm -S -Wno-openmp-target-exception -o - | FileCheck -check-prefix=DEVICE %s
-// RUN: %clang_cc1 -fopenmp -triple x86_64-pc-linux-gnu -fopenmp-is-target-device -fcxx-exceptions %s -emit-llvm -S -Wno-openmp-target-exception -o - | FileCheck -check-prefix=HOST %s
-// DEVICE: s_trap
-// DEVICE-NOT: __cxa_throw
-// HOST: __cxa_throw
-// HOST-NOT: s_trap
-#pragma omp declare target
-void foo(void) {
-	throw 404; 
-}
-#pragma omp end declare target

diff  --git a/clang/test/OpenMP/amdgpu_try_catch.cpp b/clang/test/OpenMP/amdgpu_try_catch.cpp
deleted file mode 100644
index b82656400270d5..00000000000000
--- a/clang/test/OpenMP/amdgpu_try_catch.cpp
+++ /dev/null
@@ -1,47 +0,0 @@
-// REQUIRES: amdgpu-registered-target
-
-/**
- * The first four lines test that a warning is produced when enabling 
- * -Wopenmp-target-exception no matter what combination of -fexceptions and 
- * -fcxx-exceptions are set, as we want OpenMP to always allow exceptions in the
- * target region but emit a warning instead.
-*/
-
-// RUN: %clang_cc1 -fopenmp -triple amdgcn-amd-amdhsa -fopenmp-is-target-device -fcxx-exceptions -fexceptions %s -emit-llvm -S -verify=with -Wopenmp-target-exception -analyze
-// RUN: %clang_cc1 -fopenmp -triple amdgcn-amd-amdhsa -fopenmp-is-target-device -fcxx-exceptions -fexceptions %s -emit-llvm -S -verify=with -Wopenmp-target-exception -analyze
-// RUN: %clang_cc1 -fopenmp -triple amdgcn-amd-amdhsa -fopenmp-is-target-device -fexceptions %s -emit-llvm -S -verify=with -Wopenmp-target-exception -analyze
-// RUN: %clang_cc1 -fopenmp -triple amdgcn-amd-amdhsa -fopenmp-is-target-device %s -emit-llvm -S -verify=with -Wopenmp-target-exception -analyze
-
-/**
- * The following four lines test that no warning is emitted when providing 
- * -Wno-openmp-target-exception no matter the combination of -fexceptions and 
- * -fcxx-exceptions.
-*/
-
-// RUN: %clang_cc1 -fopenmp -triple amdgcn-amd-amdhsa -fopenmp-is-target-device -fcxx-exceptions -fexceptions %s -emit-llvm -S -verify=without -Wno-openmp-target-exception -analyze
-// RUN: %clang_cc1 -fopenmp -triple amdgcn-amd-amdhsa -fopenmp-is-target-device -fcxx-exceptions %s -emit-llvm -S -verify=without -Wno-openmp-target-exception -analyze
-// RUN: %clang_cc1 -fopenmp -triple amdgcn-amd-amdhsa -fopenmp-is-target-device -fexceptions %s -emit-llvm -S -verify=without -Wno-openmp-target-exception -analyze
-// RUN: %clang_cc1 -fopenmp -triple amdgcn-amd-amdhsa -fopenmp-is-target-device %s -emit-llvm -S -verify=without -Wno-openmp-target-exception -analyze
-
-/**
- * Finally we should test that we only ignore exceptions in the OpenMP 
- * offloading tool-chain
-*/
-
-// RUN: %clang_cc1 -triple amdgcn-amd-amdhsa %s -emit-llvm -S -verify=noexceptions -o -
-
-// noexceptions-error at 36 {{cannot use 'try' with exceptions disabled}}
-
-#pragma omp declare target
-int foo(void) {
-	int error = -1;
-	try { // with-warning {{target 'amdgcn-amd-amdhsa' does not support exception handling; 'catch' block is ignored}}
-		error = 1;
-	}
-	catch (int e){ 
-		error = e;
-	}
-	return error;
-}
-#pragma omp end declare target
-// without-no-diagnostics

diff  --git a/clang/test/OpenMP/nvptx_exceptions.cpp b/clang/test/OpenMP/nvptx_exceptions.cpp
deleted file mode 100644
index 89f62dc33e47a4..00000000000000
--- a/clang/test/OpenMP/nvptx_exceptions.cpp
+++ /dev/null
@@ -1,48 +0,0 @@
-// REQUIRES: nvptx-registered-target
-
-/**
- * The first four lines test that a warning is produced when enabling 
- * -Wopenmp-target-exception no matter what combination of -fexceptions and 
- * -fcxx-exceptions are set, as we want OpenMP to always allow exceptions in the
- * target region but emit a warning instead.
-*/
-
-// RUN: %clang_cc1 -fopenmp -triple nvptx64 -fopenmp-is-target-device -fcxx-exceptions -fexceptions %s -emit-llvm -S -verify=with -Wopenmp-target-exception -analyze
-// RUN: %clang_cc1 -fopenmp -triple nvptx64 -fopenmp-is-target-device -fcxx-exceptions -fexceptions %s -emit-llvm -S -verify=with -Wopenmp-target-exception -analyze
-// RUN: %clang_cc1 -fopenmp -triple nvptx64 -fopenmp-is-target-device -fexceptions %s -emit-llvm -S -verify=with -Wopenmp-target-exception -analyze
-// RUN: %clang_cc1 -fopenmp -triple nvptx64 -fopenmp-is-target-device %s -emit-llvm -S -verify=with -Wopenmp-target-exception -analyze
-
-/**
- * The following four lines test that no warning is emitted when providing 
- * -Wno-openmp-target-exception no matter the combination of -fexceptions and 
- * -fcxx-exceptions.
-*/
-
-// RUN: %clang_cc1 -fopenmp -triple nvptx64 -fopenmp-is-target-device -fcxx-exceptions -fexceptions %s -emit-llvm -S -verify=without -Wno-openmp-target-exception -analyze
-// RUN: %clang_cc1 -fopenmp -triple nvptx64 -fopenmp-is-target-device -fcxx-exceptions %s -emit-llvm -S -verify=without -Wno-openmp-target-exception -analyze
-// RUN: %clang_cc1 -fopenmp -triple nvptx64 -fopenmp-is-target-device -fexceptions %s -emit-llvm -S -verify=without -Wno-openmp-target-exception -analyze
-// RUN: %clang_cc1 -fopenmp -triple nvptx64 -fopenmp-is-target-device %s -emit-llvm -S -verify=without -Wno-openmp-target-exception -analyze
-
-/**
- * Finally we should test that we only ignore exceptions in the OpenMP 
- * offloading tool-chain
-*/
-
-// RUN: %clang_cc1 -triple nvptx64 %s -emit-llvm -S -verify=noexceptions -o -
-
-// noexceptions-error at 37 {{cannot use 'try' with exceptions disabled}}
-// noexceptions-error at 38 {{cannot use 'throw' with exceptions disabled}}
-
-#pragma omp declare target
-int foo(void) {
-	int error = -1;
-	try { // with-warning {{target 'nvptx64' does not support exception handling; 'catch' block is ignored}}
-		throw 404; // with-warning {{target 'nvptx64' does not support exception handling; 'throw' is assumed to be never reached}}
-	}
-	catch (int e){ 
-		error = e;
-	}
-	return error;
-}
-#pragma omp end declare target
-// without-no-diagnostics

diff  --git a/clang/test/OpenMP/nvptx_target_exceptions_messages.cpp b/clang/test/OpenMP/nvptx_target_exceptions_messages.cpp
index 5d1d46cadff260..9f267f5606e2d7 100644
--- a/clang/test/OpenMP/nvptx_target_exceptions_messages.cpp
+++ b/clang/test/OpenMP/nvptx_target_exceptions_messages.cpp
@@ -34,7 +34,7 @@ T FA() {
 #pragma omp declare target
 struct S {
   int a;
-  S(int a) : a(a) { throw 1; } // expected-warning {{target 'nvptx64-unknown-unknown' does not support exception handling; 'throw' is assumed to be never reached}}
+  S(int a) : a(a) { throw 1; } // expected-error {{cannot use 'throw' with exceptions disabled}}
 };
 
 int foo() { return 0; }
@@ -57,7 +57,7 @@ int maini1() {
     static long aaa = 23;
     a = foo() + bar() + b + c + d + aa + aaa + FA<int>(); // expected-note{{called by 'maini1'}}
     if (!a)
-      throw "Error"; // expected-warning {{target 'nvptx64-unknown-unknown' does not support exception handling; 'throw' is assumed to be never reached}}
+      throw "Error"; // expected-error {{cannot use 'throw' with exceptions disabled}}
   }
   } catch(...) {
   }
@@ -67,14 +67,14 @@ int maini1() {
 int baz3() { return 2 + baz2(); }
 int baz2() {
 #pragma omp target
-  try { // expected-warning {{target 'nvptx64-unknown-unknown' does not support exception handling; 'catch' block is ignored}}
+  try { // expected-error {{cannot use 'try' with exceptions disabled}}
   ++c;
   } catch (...) {
   }
   return 2 + baz3();
 }
 
-int baz1() { throw 1; } // expected-warning {{target 'nvptx64-unknown-unknown' does not support exception handling; 'throw' is assumed to be never reached}}
+int baz1() { throw 1; } // expected-error {{cannot use 'throw' with exceptions disabled}}
 
 int foobar1();
 int foobar2();
@@ -85,7 +85,7 @@ int (*B)() = &foobar2;
 #pragma omp end declare target
 
 int foobar1() { throw 1; }
-int foobar2() { throw 1; } // expected-warning {{target 'nvptx64-unknown-unknown' does not support exception handling; 'throw' is assumed to be never reached}}
+int foobar2() { throw 1; } // expected-error {{cannot use 'throw' with exceptions disabled}}
 
 
 int foobar3();
@@ -95,7 +95,7 @@ int (*C)() = &foobar3; // expected-warning {{declaration is not declared in any
 int (*D)() = C; // expected-note {{used here}}
                 // host-note at -1 {{used here}}
 #pragma omp end declare target
-int foobar3() { throw 1; } // expected-warning {{target 'nvptx64-unknown-unknown' does not support exception handling; 'throw' is assumed to be never reached}}
+int foobar3() { throw 1; } // expected-error {{cannot use 'throw' with exceptions disabled}}
 
 // Check no infinite recursion in deferred diagnostic emitter.
 long E = (long)&E;

diff  --git a/clang/test/OpenMP/nvptx_throw.cpp b/clang/test/OpenMP/nvptx_throw.cpp
deleted file mode 100644
index f17f75b401007b..00000000000000
--- a/clang/test/OpenMP/nvptx_throw.cpp
+++ /dev/null
@@ -1,40 +0,0 @@
-// REQUIRES: nvptx-registered-target
-
-/**
- * The first four lines test that a warning is produced when enabling 
- * -Wopenmp-target-exception no matter what combination of -fexceptions and 
- * -fcxx-exceptions are set, as we want OpenMP to always allow exceptions in the
- * target region but emit a warning instead.
-*/
-
-// RUN: %clang_cc1 -fopenmp -triple nvptx64 -fopenmp-is-target-device -fcxx-exceptions -fexceptions %s -emit-llvm -S -verify=with -Wopenmp-target-exception -analyze
-// RUN: %clang_cc1 -fopenmp -triple nvptx64 -fopenmp-is-target-device -fcxx-exceptions -fexceptions %s -emit-llvm -S -verify=with -Wopenmp-target-exception -analyze
-// RUN: %clang_cc1 -fopenmp -triple nvptx64 -fopenmp-is-target-device -fexceptions %s -emit-llvm -S -verify=with -Wopenmp-target-exception -analyze
-// RUN: %clang_cc1 -fopenmp -triple nvptx64 -fopenmp-is-target-device %s -emit-llvm -S -verify=with -Wopenmp-target-exception -analyze
-
-/**
- * The following four lines test that no warning is emitted when providing 
- * -Wno-openmp-target-exception no matter the combination of -fexceptions and 
- * -fcxx-exceptions.
-*/
-
-// RUN: %clang_cc1 -fopenmp -triple nvptx64 -fopenmp-is-target-device -fcxx-exceptions -fexceptions %s -emit-llvm -S -verify=without -Wno-openmp-target-exception -analyze
-// RUN: %clang_cc1 -fopenmp -triple nvptx64 -fopenmp-is-target-device -fcxx-exceptions %s -emit-llvm -S -verify=without -Wno-openmp-target-exception -analyze
-// RUN: %clang_cc1 -fopenmp -triple nvptx64 -fopenmp-is-target-device -fexceptions %s -emit-llvm -S -verify=without -Wno-openmp-target-exception -analyze
-// RUN: %clang_cc1 -fopenmp -triple nvptx64 -fopenmp-is-target-device %s -emit-llvm -S -verify=without -Wno-openmp-target-exception -analyze
-
-/**
- * Finally we should test that we only ignore exceptions in the OpenMP 
- * offloading tool-chain
-*/
-
-// RUN: %clang_cc1 -triple nvptx64 %s -emit-llvm -S -verify=noexceptions -o -
-
-// noexceptions-error at 35 {{cannot use 'throw' with exceptions disabled}}
-
-#pragma omp declare target
-void foo(void) {
-	throw 404; // with-warning {{target 'nvptx64' does not support exception handling; 'throw' is assumed to be never reached}}
-}
-#pragma omp end declare target
-// without-no-diagnostics

diff  --git a/clang/test/OpenMP/nvptx_throw_trap.cpp b/clang/test/OpenMP/nvptx_throw_trap.cpp
deleted file mode 100644
index c1c76c4e1b18c9..00000000000000
--- a/clang/test/OpenMP/nvptx_throw_trap.cpp
+++ /dev/null
@@ -1,13 +0,0 @@
-// REQUIRES: nvptx-registered-target
-
-// RUN: %clang_cc1 -fopenmp -triple nvptx64 -fopenmp-is-target-device %s -emit-llvm -S -Wno-openmp-target-exception -o - | FileCheck -check-prefix=DEVICE %s
-// RUN: %clang_cc1 -fopenmp -triple x86_64-pc-linux-gnu -fopenmp-is-target-device -fcxx-exceptions %s -emit-llvm -S -Wno-openmp-target-exception -o - | FileCheck -check-prefix=HOST %s
-// DEVICE: trap;
-// DEVICE-NOT: __cxa_throw
-// HOST: __cxa_throw
-// HOST-NOT: trap;
-#pragma omp declare target
-void foo(void) {
-	throw 404; 
-}
-#pragma omp end declare target

diff  --git a/clang/test/OpenMP/nvptx_try_catch.cpp b/clang/test/OpenMP/nvptx_try_catch.cpp
deleted file mode 100644
index c57aa91d851a4c..00000000000000
--- a/clang/test/OpenMP/nvptx_try_catch.cpp
+++ /dev/null
@@ -1,47 +0,0 @@
-// REQUIRES: nvptx-registered-target
-
-/**
- * The first four lines test that a warning is produced when enabling 
- * -Wopenmp-target-exception no matter what combination of -fexceptions and 
- * -fcxx-exceptions are set, as we want OpenMP to always allow exceptions in the
- * target region but emit a warning instead.
-*/
-
-// RUN: %clang_cc1 -fopenmp -triple nvptx64 -fopenmp-is-target-device -fcxx-exceptions -fexceptions %s -emit-llvm -S -verify=with -Wopenmp-target-exception -analyze
-// RUN: %clang_cc1 -fopenmp -triple nvptx64 -fopenmp-is-target-device -fcxx-exceptions -fexceptions %s -emit-llvm -S -verify=with -Wopenmp-target-exception -analyze
-// RUN: %clang_cc1 -fopenmp -triple nvptx64 -fopenmp-is-target-device -fexceptions %s -emit-llvm -S -verify=with -Wopenmp-target-exception -analyze
-// RUN: %clang_cc1 -fopenmp -triple nvptx64 -fopenmp-is-target-device %s -emit-llvm -S -verify=with -Wopenmp-target-exception -analyze
-
-/**
- * The following four lines test that no warning is emitted when providing 
- * -Wno-openmp-target-exception no matter the combination of -fexceptions and 
- * -fcxx-exceptions.
-*/
-
-// RUN: %clang_cc1 -fopenmp -triple nvptx64 -fopenmp-is-target-device -fcxx-exceptions -fexceptions %s -emit-llvm -S -verify=without -Wno-openmp-target-exception -analyze
-// RUN: %clang_cc1 -fopenmp -triple nvptx64 -fopenmp-is-target-device -fcxx-exceptions %s -emit-llvm -S -verify=without -Wno-openmp-target-exception -analyze
-// RUN: %clang_cc1 -fopenmp -triple nvptx64 -fopenmp-is-target-device -fexceptions %s -emit-llvm -S -verify=without -Wno-openmp-target-exception -analyze
-// RUN: %clang_cc1 -fopenmp -triple nvptx64 -fopenmp-is-target-device %s -emit-llvm -S -verify=without -Wno-openmp-target-exception -analyze
-
-/**
- * Finally we should test that we only ignore exceptions in the OpenMP 
- * offloading tool-chain
-*/
-
-// RUN: %clang_cc1 -triple nvptx64 %s -emit-llvm -S -verify=noexceptions -o -
-
-// noexceptions-error at 36 {{cannot use 'try' with exceptions disabled}}
-
-#pragma omp declare target
-int foo(void) {
-	int error = -1;
-	try { // with-warning {{target 'nvptx64' does not support exception handling; 'catch' block is ignored}}
-		error = 1;
-	}
-	catch (int e){ 
-		error = e;
-	}
-	return error;
-}
-#pragma omp end declare target
-// without-no-diagnostics

diff  --git a/clang/test/OpenMP/x86_target_exceptions.cpp b/clang/test/OpenMP/x86_target_exceptions.cpp
deleted file mode 100644
index effa76f0016dbe..00000000000000
--- a/clang/test/OpenMP/x86_target_exceptions.cpp
+++ /dev/null
@@ -1,16 +0,0 @@
-// REQUIRES: x86-registered-target
-
-// RUN: %clang_cc1 -fopenmp -triple x86_64-pc-linux-gnu -fopenmp-is-target-device -fcxx-exceptions -fexceptions %s -emit-llvm -S -verify -Wopenmp-target-exception -analyze
-#pragma omp declare target
-int foo(void) {
-	int error = -1;
-	try {
-		throw 404;
-	}
-	catch (int e){ 
-		error = e;
-	}
-	return error;
-}
-#pragma omp end declare target
-// expected-no-diagnostics

diff  --git a/clang/test/OpenMP/x86_target_throw.cpp b/clang/test/OpenMP/x86_target_throw.cpp
deleted file mode 100644
index b55775287daa69..00000000000000
--- a/clang/test/OpenMP/x86_target_throw.cpp
+++ /dev/null
@@ -1,9 +0,0 @@
-// REQUIRES: x86-registered-target
-
-// RUN: %clang_cc1 -fopenmp -triple x86_64-pc-linux-gnu -fopenmp-is-target-device -fcxx-exceptions -fexceptions %s -emit-llvm -S -verify -Wopenmp-target-exception -analyze
-#pragma omp declare target
-void foo(void) {
-	throw 404;
-}
-#pragma omp end declare target
-// expected-no-diagnostics

diff  --git a/clang/test/OpenMP/x86_target_try_catch.cpp b/clang/test/OpenMP/x86_target_try_catch.cpp
deleted file mode 100644
index f18e6aaf99f90a..00000000000000
--- a/clang/test/OpenMP/x86_target_try_catch.cpp
+++ /dev/null
@@ -1,16 +0,0 @@
-// REQUIRES: x86-registered-target
-
-// RUN: %clang_cc1 -fopenmp -triple x86_64-pc-linux-gnu -fopenmp-is-target-device -fcxx-exceptions -fexceptions %s -emit-llvm -S -verify -Wopenmp-target-exception -analyze
-#pragma omp declare target
-int foo(void) {
-	int error = -1;
-	try {
-		error = 1;
-	}
-	catch (int e){ 
-		error = e;
-	}
-	return error;
-}
-#pragma omp end declare target
-// expected-no-diagnostics


        


More information about the cfe-commits mailing list