Skip to content

Commit

Permalink
Revert "[WebAssembly] Handle exception specifications"
Browse files Browse the repository at this point in the history
This reverts commit bca3475.

This broke clang/test/Misc/warning-flags.c, because the newly added
warning option in this commit didn't have a matching flag.
  • Loading branch information
aheejin committed May 16, 2020
1 parent bca3475 commit 945ad14
Show file tree
Hide file tree
Showing 3 changed files with 1 addition and 41 deletions.
2 changes: 0 additions & 2 deletions clang/include/clang/Basic/DiagnosticSemaKinds.td
Original file line number Diff line number Diff line change
Expand Up @@ -1590,8 +1590,6 @@ def err_exception_spec_cycle : Error<
"exception specification of %0 uses itself">;
def err_exception_spec_incomplete_type : Error<
"exception specification needed for member of incomplete class %0">;
def warn_wasm_dynamic_exception_spec_ignored : Warning<
"dynamic exception specifications with types are currently ignored in wasm">;

// C++ access checking
def err_class_redeclared_with_different_access : Error<
Expand Down
21 changes: 0 additions & 21 deletions clang/lib/CodeGen/CGException.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
#include "clang/AST/StmtCXX.h"
#include "clang/AST/StmtObjC.h"
#include "clang/AST/StmtVisitor.h"
#include "clang/Basic/DiagnosticSema.h"
#include "clang/Basic/TargetBuiltins.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/Intrinsics.h"
Expand Down Expand Up @@ -469,18 +468,6 @@ void CodeGenFunction::EmitStartEHSpec(const Decl *D) {
// encode these in an object file but MSVC doesn't do anything with it.
if (getTarget().getCXXABI().isMicrosoft())
return;
// 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 (EST == EST_DynamicNone)
EHStack.pushTerminate();
else
CGM.getDiags().Report(D->getLocation(),
diag::warn_wasm_dynamic_exception_spec_ignored)
<< FD->getExceptionSpecSourceRange();
return;
}
unsigned NumExceptions = Proto->getNumExceptions();
EHFilterScope *Filter = EHStack.pushFilter(NumExceptions);

Expand Down Expand Up @@ -557,14 +544,6 @@ void CodeGenFunction::EmitEndEHSpec(const Decl *D) {
// encode these in an object file but MSVC doesn't do anything with it.
if (getTarget().getCXXABI().isMicrosoft())
return;
// 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 (EST == EST_DynamicNone)
EHStack.popTerminate();
return;
}
EHFilterScope &filterScope = cast<EHFilterScope>(*EHStack.begin());
emitFilterDispatchBlock(*this, filterScope);
EHStack.popFilter();
Expand Down
19 changes: 1 addition & 18 deletions clang/test/CodeGenCXX/wasm-eh.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
// REQUIRES: webassembly-registered-target
// 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 | FileCheck %s
// RUN: %clang_cc1 %s -triple wasm64-unknown-unknown -fms-extensions -fexceptions -fcxx-exceptions -fwasm-exceptions -target-feature +exception-handling -emit-llvm -o - -std=c++11 | FileCheck %s
// RUN: %clang_cc1 %s -triple wasm32-unknown-unknown -fms-extensions -fexceptions -fcxx-exceptions -fwasm-exceptions -target-feature +exception-handling -S -o - -std=c++11 | FileCheck %s --check-prefix=ASSEMBLY

void may_throw();
void dont_throw() noexcept;
Expand Down Expand Up @@ -384,27 +385,9 @@ void test8() {

// CHECK: unreachable

// RUN: %clang_cc1 %s -triple wasm32-unknown-unknown -fms-extensions -fexceptions -fcxx-exceptions -fwasm-exceptions -target-feature +exception-handling -emit-llvm -std=c++11 2>&1 | FileCheck %s --check-prefix=WARNING

// Wasm ignores dynamic exception specifications with types at the moment.
// Checks if a warning message is printed.
void test9() throw(int) {
}
// WARNING: 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.
void test10() throw() {
throw 3;
}
// WARNING: warning: 'test10' has a non-throwing exception specification but can still throw
// WARNING: function declared non-throwing here

// Here we only check if the command enables wasm exception handling in the
// backend so that exception handling instructions can be generated in .s file.

// RUN: %clang_cc1 %s -triple wasm32-unknown-unknown -fms-extensions -fexceptions -fcxx-exceptions -fwasm-exceptions -target-feature +exception-handling -S -o - -std=c++11 | FileCheck %s --check-prefix=ASSEMBLY

// ASSEMBLY: try
// ASSEMBLY: catch
// ASSEMBLY: rethrow
Expand Down

0 comments on commit 945ad14

Please sign in to comment.