aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp
diff options
context:
space:
mode:
authorHeejin Ahn <aheejin@gmail.com>2024-05-28 11:36:48 -0700
committerGitHub <noreply@github.com>2024-05-28 11:36:48 -0700
commit08de0b3cf54e4998799673f835e9a7d5ead8efab (patch)
treee1e82d634cdc4055dbceab1f6492b072d549bf89 /llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp
parent196a0809822ba4ac0fc669a46cbacee8afbe36c2 (diff)
downloadllvm-08de0b3cf54e4998799673f835e9a7d5ead8efab.zip
llvm-08de0b3cf54e4998799673f835e9a7d5ead8efab.tar.gz
llvm-08de0b3cf54e4998799673f835e9a7d5ead8efab.tar.bz2
[WebAssembly] Add tests for EH/SjLj option errors (#93583)
This adds tests for EH/SjLj option errors and swaps the error checking order for unimportant cosmetic reasons (I think checking EH/SjLj conflicts is more important than the model checking)
Diffstat (limited to 'llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp')
-rw-r--r--llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp34
1 files changed, 18 insertions, 16 deletions
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp
index de342e8..6812699 100644
--- a/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp
+++ b/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp
@@ -388,15 +388,29 @@ using WebAssembly::WasmEnableEmSjLj;
using WebAssembly::WasmEnableSjLj;
static void basicCheckForEHAndSjLj(TargetMachine *TM) {
- // Before checking, we make sure TargetOptions.ExceptionModel is the same as
+
+ // You can't enable two modes of EH at the same time
+ if (WasmEnableEmEH && WasmEnableEH)
+ report_fatal_error(
+ "-enable-emscripten-cxx-exceptions not allowed with -wasm-enable-eh");
+ // You can't enable two modes of SjLj at the same time
+ if (WasmEnableEmSjLj && WasmEnableSjLj)
+ report_fatal_error(
+ "-enable-emscripten-sjlj not allowed with -wasm-enable-sjlj");
+ // You can't mix Emscripten EH with Wasm SjLj.
+ if (WasmEnableEmEH && WasmEnableSjLj)
+ report_fatal_error(
+ "-enable-emscripten-cxx-exceptions not allowed with -wasm-enable-sjlj");
+
+ // Here we make sure TargetOptions.ExceptionModel is the same as
// MCAsmInfo.ExceptionsType. Normally these have to be the same, because clang
// stores the exception model info in LangOptions, which is later transferred
// to TargetOptions and MCAsmInfo. But when clang compiles bitcode directly,
// clang's LangOptions is not used and thus the exception model info is not
// correctly transferred to TargetOptions and MCAsmInfo, so we make sure we
- // have the correct exception model in WebAssemblyMCAsmInfo constructor.
- // But in this case TargetOptions is still not updated, so we make sure they
- // are the same.
+ // have the correct exception model in WebAssemblyMCAsmInfo constructor. But
+ // in this case TargetOptions is still not updated, so we make sure they are
+ // the same.
TM->Options.ExceptionModel = TM->getMCAsmInfo()->getExceptionHandlingType();
// Basic Correctness checking related to -exception-model
@@ -418,18 +432,6 @@ static void basicCheckForEHAndSjLj(TargetMachine *TM) {
"-exception-model=wasm only allowed with at least one of "
"-wasm-enable-eh or -wasm-enable-sjlj");
- // You can't enable two modes of EH at the same time
- if (WasmEnableEmEH && WasmEnableEH)
- report_fatal_error(
- "-enable-emscripten-cxx-exceptions not allowed with -wasm-enable-eh");
- // You can't enable two modes of SjLj at the same time
- if (WasmEnableEmSjLj && WasmEnableSjLj)
- report_fatal_error(
- "-enable-emscripten-sjlj not allowed with -wasm-enable-sjlj");
- // You can't mix Emscripten EH with Wasm SjLj.
- if (WasmEnableEmEH && WasmEnableSjLj)
- report_fatal_error(
- "-enable-emscripten-cxx-exceptions not allowed with -wasm-enable-sjlj");
// Currently it is allowed to mix Wasm EH with Emscripten SjLj as an interim
// measure, but some code will error out at compile time in this combination.
// See WebAssemblyLowerEmscriptenEHSjLj pass for details.