[clang] 48acac3 - [WebAssembly] Warn on exception spec only when Wasm EH is used

Heejin Ahn via cfe-commits cfe-commits at lists.llvm.org
Thu May 21 17:10:30 PDT 2020


Author: Heejin Ahn
Date: 2020-05-21T17:08:35-07:00
New Revision: 48acac36293805cef10b448d49d336da7db7bfa9

URL: https://github.com/llvm/llvm-project/commit/48acac36293805cef10b448d49d336da7db7bfa9
DIFF: https://github.com/llvm/llvm-project/commit/48acac36293805cef10b448d49d336da7db7bfa9.diff

LOG: [WebAssembly] Warn on exception spec only when Wasm EH is used

Summary:
In D80061 we added warning for exception specifications with types (such
as `throw(int)`), but it was enabled every time the target was wasm,
which means it warned (and ignored) exception specifications even if
wasm EH was not used. This fixes it and we only have the warning when we
enable `-fwasm-exceptions`.

Reviewers: dschuff

Subscribers: sbc100, jgravelle-google, sunfish, cfe-commits

Tags: #clang

Differential Revision: https://reviews.llvm.org/D80362

Added: 
    

Modified: 
    clang/lib/CodeGen/CGException.cpp
    clang/test/CodeGenCXX/wasm-eh.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/CodeGen/CGException.cpp b/clang/lib/CodeGen/CGException.cpp
index d821eb2d5595..de3d1b129146 100644
--- a/clang/lib/CodeGen/CGException.cpp
+++ b/clang/lib/CodeGen/CGException.cpp
@@ -472,7 +472,7 @@ void CodeGenFunction::EmitStartEHSpec(const Decl *D) {
     // In wasm we currently treat 'throw()' in the same way as 'noexcept'. In
     // case of throw with types, we ignore it and print a warning for now.
     // TODO Correctly handle exception specification in wasm
-    if (getTarget().getCXXABI() == TargetCXXABI::WebAssembly) {
+    if (CGM.getLangOpts().WasmExceptions) {
       if (EST == EST_DynamicNone)
         EHStack.pushTerminate();
       else
@@ -560,7 +560,7 @@ void CodeGenFunction::EmitEndEHSpec(const Decl *D) {
     // In wasm we currently treat 'throw()' in the same way as 'noexcept'. In
     // case of throw with types, we ignore it and print a warning for now.
     // TODO Correctly handle exception specification in wasm
-    if (getTarget().getCXXABI() == TargetCXXABI::WebAssembly) {
+    if (CGM.getLangOpts().WasmExceptions) {
       if (EST == EST_DynamicNone)
         EHStack.popTerminate();
       return;

diff  --git a/clang/test/CodeGenCXX/wasm-eh.cpp b/clang/test/CodeGenCXX/wasm-eh.cpp
index cd18ed406d7e..13f1e63d9a87 100644
--- a/clang/test/CodeGenCXX/wasm-eh.cpp
+++ b/clang/test/CodeGenCXX/wasm-eh.cpp
@@ -393,17 +393,18 @@ void test8() {
 // RUN: %clang_cc1 %s -triple wasm32-unknown-unknown -fms-extensions -fexceptions -fcxx-exceptions -fwasm-exceptions -target-feature +exception-handling -emit-llvm -o - -std=c++11 2>&1 | FileCheck %s --check-prefix=WARNING-DEFAULT
 // RUN: %clang_cc1 %s -triple wasm32-unknown-unknown -fms-extensions -fexceptions -fcxx-exceptions -fwasm-exceptions -target-feature +exception-handling -Wwasm-exception-spec -emit-llvm -o - -std=c++11 2>&1 | FileCheck %s --check-prefix=WARNING-ON
 // RUN: %clang_cc1 %s -triple wasm32-unknown-unknown -fms-extensions -fexceptions -fcxx-exceptions -fwasm-exceptions -target-feature +exception-handling -Wno-wasm-exception-spec -emit-llvm -o - -std=c++11 2>&1 | FileCheck %s --check-prefix=WARNING-OFF
+// RUN: %clang_cc1 %s -triple wasm32-unknown-unknown -fexceptions -fcxx-exceptions -emit-llvm -o - -std=c++11 2>&1 | FileCheck %s --check-prefix=NOT-WASM-EH
 
-// Wasm ignores dynamic exception specifications with types at the moment. This
-// is controlled by -Wwasm-exception-spec, which is on by default. This warning
-// can be suppressed with -Wno-wasm-exception-spec.
-// Checks if a warning message is correctly printed or not printed depending on
-// the options.
+// Wasm EH ignores dynamic exception specifications with types at the moment.
+// This is controlled by -Wwasm-exception-spec, which is on by default. This
+// warning can be suppressed with -Wno-wasm-exception-spec. Checks if a warning
+// message is correctly printed or not printed depending on the options.
 void test9() throw(int) {
 }
 // WARNING-DEFAULT: warning: dynamic exception specifications with types are currently ignored in wasm
 // WARNING-ON: warning: dynamic exception specifications with types are currently ignored in wasm
 // WARNING-OFF-NOT: warning: dynamic exception specifications with types are currently ignored in wasm
+// NOT-WASM-EH-NOT: warning: dynamic exception specifications with types are currently ignored in wasm
 
 // Wasm curremtly treats 'throw()' in the same way as 'noexept'. Check if the
 // same warning message is printed as if when a 'noexcept' function throws.


        


More information about the cfe-commits mailing list