rust/tests/codegen
Matthias Krüger 6a20f681d5
Rollup merge of #113247 - mirkootter:test-wasm-exceptions-nostd, r=Mark-Simulacrum
Add Tests for native wasm exceptions

### Motivation
In PR #111322, I added support for native WASM exceptions. I was asked by ``@davidtwco`` to add some tests for it in a follow up PR, which seems like a very good idea.

This PR adds three tests for this feature:
* codegen: ensure the correct LLVM instructions are used
* assembly: ensure the correct WASM instructions are used
* run-make: ensure the exception handling works; the WASM code is run using a small nodejs script which demonstrates the exception handling

### Complications
There are a few changes beside adding the tests, which were necessary
* Tests for the wasm32-unknown-unknown target are (as far as I know) only run on `test-various`. Its docker image uses nodejs-15, which is very old. Experimental support for wasm-exceptions was added in nodejs16. In nodejs 18.12 (LTS), they are stable.
  - --> increase nodejs to 18.12 in `test-various`
* codegen/assembly tests are not performed for the wasm32-unknown-unknown target yet
  - --> add those to `test-various` as well

Due to the last point, some tests are run which have not run before (assembly+codegen tests for wasm32-unknown-unknown). I added `// ignore wasm32-bare` for those which failed

### Local testing
I run all tests locally using both `test-various` and `wasm32`. As far as I know, none of the other systems run any test for wasm32 targets.
2023-07-09 16:33:36 +02:00
..
auxiliary
avr Always name the return place. 2023-07-08 15:38:40 +02:00
dllimports
instrument-xray
intrinsics Always name the return place. 2023-07-08 15:38:40 +02:00
issues cg_llvm: use index-based loop in write_operand_repeatedly 2023-06-11 00:04:53 -04:00
loongarch-abi tests: Add tests for LoongArch64 2023-04-30 00:06:26 +08:00
non-terminate
remap_path_prefix Give the cross-crate generic some work to do 2023-04-07 15:46:45 -04:00
riscv-abi Always name the return place. 2023-07-08 15:38:40 +02:00
simd-intrinsic Always name the return place. 2023-07-08 15:38:40 +02:00
src-hash-algorithm
unwind-abis codegen: add needs-unwind to tests that require it 2023-05-23 16:54:35 +02:00
abi-efiapi.rs
abi-main-signature-16bit-c-int.rs tests: Add tests for LoongArch64 2023-04-30 00:06:26 +08:00
abi-main-signature-32bit-c-int.rs
abi-repr-ext.rs
abi-sysv64.rs
abi-x86_64_sysv.rs
abi-x86-interrupt.rs
addr-of-mutate.rs allow mutating function args through &raw const 2023-05-13 00:00:51 +02:00
adjustments.rs
align-enum.rs
align-fn.rs Allow all associated functions and add test 2023-04-16 06:31:08 +00:00
align-offset.rs assume the runtime range of align_offset 2023-05-05 04:22:51 -07:00
align-struct.rs
alloc-optimisation.rs Prevent insta-stable no alloc shim support 2023-05-11 14:35:09 +00:00
array-clone.rs
array-codegen.rs Always name the return place. 2023-07-08 15:38:40 +02:00
array-equality.rs
array-map.rs Remove array_zip 2023-05-30 00:40:39 -07:00
ascii-char.rs Add the basic ascii::Char type 2023-05-03 22:09:33 -07:00
asm-clobber_abi.rs
asm-clobbers.rs
asm-may_unwind.rs
asm-multiple-options.rs
asm-options.rs
asm-powerpc-clobbers.rs
asm-sanitize-llvm.rs
asm-target-clobbers.rs
async-fn-debug-awaitee-field.rs
async-fn-debug-msvc.rs
async-fn-debug.rs
atomic-operations.rs
autovectorize-f32x4.rs Test from_fn autovectorizes 2023-05-30 20:45:40 -07:00
binary-search-index-no-bound-check.rs Stop checking for the absense of something that doesn't exist 2023-05-12 21:59:26 -07:00
bool-cmp.rs
box-maybe-uninit-llvm14.rs codegen: allow the dso_local attribute 2023-05-23 16:54:33 +02:00
box-maybe-uninit.rs codegen: do not require the uwtables attribute 2023-05-23 16:54:34 +02:00
bpf-alu32.rs
branch-protection.rs
c-variadic-copy.rs
c-variadic-opt.rs
c-variadic.rs
call-llvm-intrinsics.rs tests: Add tests for LoongArch64 2023-04-30 00:06:26 +08:00
call-metadata.rs codegen: allow extra attributes to functions when panic=abort 2023-05-23 16:54:30 +02:00
catch-unwind.rs tests: Add tests for LoongArch64 2023-04-30 00:06:26 +08:00
cdylib-external-inline-fns.rs
cf-protection.rs
cfguard-checks.rs
cfguard-disabled.rs
cfguard-nochecks.rs
cfguard-non-msvc.rs
codemodels.rs
coercions.rs
cold-call-declare-and-call.rs
comparison-operators-2-tuple.rs
comparison-operators-newtype.rs
const_scalar_pair.rs Explain the reason for why a test exists 2023-05-31 14:07:16 +00:00
consts.rs Always name the return place. 2023-07-08 15:38:40 +02:00
dealloc-no-unwind.rs
debug-alignment.rs
debug-column-msvc.rs
debug-column.rs codegen: allow extra attributes to functions when panic=abort 2023-05-23 16:54:30 +02:00
debug-compile-unit-path.rs
debug-limited.rs
debug-line-directives-only.rs
debug-line-tables-only.rs
debug-linkage-name.rs
debug-vtable.rs Fix test 2023-05-11 14:35:10 +00:00
debuginfo-constant-locals.rs Turn on ConstDebugInfo pass. 2023-04-22 23:41:48 +02:00
debuginfo-generic-closure-env-names.rs
deduced-param-attrs.rs
default-requires-uwtable.rs
drop-in-place-noalias.rs drop-in-place-noalias test: needs -O to ensure attributes are added on nopt builders 2023-05-22 20:20:45 -04:00
drop.rs codegen: add needs-unwind to tests that require it 2023-05-23 16:54:35 +02:00
dst-vtable-align-nonzero.rs
dst-vtable-size-range.rs
enable-lto-unit-splitting.rs Add cross-language LLVM CFI support to the Rust compiler 2023-05-03 22:41:29 +00:00
enum-bounds-check-derived-idx.rs
enum-bounds-check-issue-13926.rs
enum-bounds-check-issue-82871.rs
enum-bounds-check.rs
enum-debug-clike.rs
enum-debug-niche-2.rs Fix codegen tests 2023-06-10 08:31:06 +00:00
enum-debug-niche.rs
enum-debug-tagged.rs
enum-discriminant-value.rs
enum-match.rs Always name the return place. 2023-07-08 15:38:40 +02:00
enum-u128.rs Add test 2023-06-10 16:58:51 +00:00
export-no-mangle.rs
external-no-mangle-fns.rs
external-no-mangle-statics.rs codegen: allow the dso_local attribute 2023-05-23 16:54:33 +02:00
fastcall-inreg.rs
fatptr.rs
fewer-names.rs Always name the return place. 2023-07-08 15:38:40 +02:00
ffi-const.rs
ffi-out-of-bounds-loads.rs
ffi-pure.rs
ffi-returns-twice.rs
float_math.rs
fn-impl-trait-self.rs
foo.s
force-frame-pointers.rs
force-no-unwind-tables.rs
force-unwind-tables.rs
frame-pointer.rs
function-arguments-noopt.rs Always name the return place. 2023-07-08 15:38:40 +02:00
function-arguments.rs Always name the return place. 2023-07-08 15:38:40 +02:00
gdb_debug_script_load.rs
generator-debug-msvc.rs
generator-debug.rs
generic-debug.rs
global_asm_include.rs tests: Add tests for LoongArch64 2023-04-30 00:06:26 +08:00
global_asm_x2.rs tests: Add tests for LoongArch64 2023-04-30 00:06:26 +08:00
global_asm.rs tests: Add tests for LoongArch64 2023-04-30 00:06:26 +08:00
i686-macosx-deployment-target.rs
i686-no-macosx-deployment-target.rs
inherit_overflow.rs
inline-always-works-always.rs
inline-debuginfo.rs
inline-function-args-debug-info.rs Preserve argument indexes when inlining MIR 2023-04-11 11:07:48 +10:00
inline-hint.rs Permit MIR inlining without #[inline] 2023-04-07 15:46:43 -04:00
instrument-coverage.rs
instrument-mcount.rs
integer-cmp.rs
integer-overflow.rs
internalize-closures.rs
intrinsic-no-unnamed-attr.rs
iter-repeat-n-trivial-drop.rs
layout-size-checks.rs
lifetime_start_end.rs
link_section.rs codegen: allow the dso_local attribute 2023-05-23 16:54:33 +02:00
link-dead-code.rs
loads.rs
local-generics-in-exe-internalized.rs Permit MIR inlining without #[inline] 2023-04-07 15:46:43 -04:00
lto-removes-invokes.rs
mainsubprogram.rs
mainsubprogramstart.rs
match-optimized.rs Always name the return place. 2023-07-08 15:38:40 +02:00
match-optimizes-away.rs
match-unoptimized.rs
mem-replace-big-type.rs Always name the return place. 2023-07-08 15:38:40 +02:00
mem-replace-simple-type.rs Always name the return place. 2023-07-08 15:38:40 +02:00
merge-functions.rs
mir_zst_stores.rs
mir-inlined-line-numbers.rs codegen: allow extra attributes to functions when panic=abort 2023-05-23 16:54:30 +02:00
move-operands.rs
naked-functions.rs
naked-nocoverage.rs update codegent test to be independent of panic strategy 2023-06-14 12:52:02 +02:00
naked-noinline.rs codegen: allow the dso_local attribute 2023-05-23 16:54:33 +02:00
no-assumes-on-casts.rs
no-dllimport-w-cross-lang-lto.rs
no-jump-tables.rs
no-plt.rs
noalias-box-off.rs make noalias-box-off filecheck more precise 2023-05-20 19:41:28 -04:00
noalias-box.rs
noalias-flag.rs
noalias-refcell.rs
noalias-rwlockreadguard.rs
noalias-unpin.rs
noreturn-uninhabited.rs
noreturnflag.rs
nounwind.rs
nrvo.rs Disable nrvo mir opt 2023-05-08 03:55:41 -07:00
optimize-attr-1.rs typos 2023-04-17 09:16:07 +02:00
option-as-slice.rs ci: add a runner for vanilla LLVM 16 2023-04-16 11:50:20 -07:00
option-nonzero-eq.rs Also assume wrap-around discriminants in as MIR building 2023-05-18 10:28:36 -07:00
packed.rs
panic-abort-windows.rs
panic-in-drop-abort.rs
panic-unwind-default-uwtable.rs
personality_lifetimes.rs codegen: add needs-unwind to tests that require it 2023-05-23 16:54:35 +02:00
pgo-counter-bias.rs
pgo-instrumentation.rs
pic-relocation-model.rs
pie-relocation-model.rs
ptr-read-metadata.rs codegen: allow the dso_local attribute 2023-05-23 16:54:33 +02:00
README.md
refs.rs
repeat-trusted-len.rs Always name the return place. 2023-07-08 15:38:40 +02:00
repr-transparent-aggregates-1.rs test-various: run codegen and assembly tests 2023-07-02 02:22:22 +02:00
repr-transparent-aggregates-2.rs tests: Add tests for LoongArch64 2023-04-30 00:06:26 +08:00
repr-transparent-aggregates-3.rs
repr-transparent-sysv64.rs
repr-transparent.rs tests: Add tests for LoongArch64 2023-04-30 00:06:26 +08:00
sanitizer_memtag_attr_check.rs
sanitizer_scs_attr_check.rs
sanitizer-cfi-add-canonical-jump-tables-flag.rs Add cross-language LLVM CFI support to the Rust compiler 2023-05-03 22:41:29 +00:00
sanitizer-cfi-add-enable-split-lto-unit-flag.rs Add cross-language LLVM CFI support to the Rust compiler 2023-05-03 22:41:29 +00:00
sanitizer-cfi-emit-type-checks-attr-no-sanitize.rs Add cross-language LLVM CFI support to the Rust compiler 2023-05-03 22:41:29 +00:00
sanitizer-cfi-emit-type-checks.rs Add cross-language LLVM CFI support to the Rust compiler 2023-05-03 22:41:29 +00:00
sanitizer-cfi-emit-type-metadata-attr-cfi-encoding.rs Add cross-language LLVM CFI support to the Rust compiler 2023-05-03 22:41:29 +00:00
sanitizer-cfi-emit-type-metadata-id-itanium-cxx-abi.rs Fix a codegen test 2023-06-22 15:36:46 +00:00
sanitizer-cfi-emit-type-metadata-itanium-cxx-abi-generalized.rs Add cross-language LLVM CFI support to the Rust compiler 2023-05-03 22:41:29 +00:00
sanitizer-cfi-emit-type-metadata-itanium-cxx-abi-normalized-generalized.rs Add cross-language LLVM CFI support to the Rust compiler 2023-05-03 22:41:29 +00:00
sanitizer-cfi-emit-type-metadata-itanium-cxx-abi-normalized.rs Add cross-language LLVM CFI support to the Rust compiler 2023-05-03 22:41:29 +00:00
sanitizer-cfi-emit-type-metadata-itanium-cxx-abi.rs Add cross-language LLVM CFI support to the Rust compiler 2023-05-03 22:41:29 +00:00
sanitizer-cfi-emit-type-metadata-trait-objects.rs CFI: Fix encode_region: unexpected ReEarlyBound(0, 'a) 2023-05-23 16:44:03 +00:00
sanitizer-cfi-generalize-pointers.rs Add cross-language LLVM CFI support to the Rust compiler 2023-05-03 22:41:29 +00:00
sanitizer-cfi-normalize-integers.rs Add cross-language LLVM CFI support to the Rust compiler 2023-05-03 22:41:29 +00:00
sanitizer-kasan-emits-instrumentation.rs
sanitizer-kcfi-add-kcfi-flag.rs
sanitizer-kcfi-emit-kcfi-operand-bundle-attr-no-sanitize.rs Add cross-language LLVM CFI support to the Rust compiler 2023-05-03 22:41:29 +00:00
sanitizer-kcfi-emit-kcfi-operand-bundle-itanium-cxx-abi-generalized.rs Add cross-language LLVM CFI support to the Rust compiler 2023-05-03 22:41:29 +00:00
sanitizer-kcfi-emit-kcfi-operand-bundle-itanium-cxx-abi-normalized-generalized.rs Add cross-language LLVM CFI support to the Rust compiler 2023-05-03 22:41:29 +00:00
sanitizer-kcfi-emit-kcfi-operand-bundle-itanium-cxx-abi-normalized.rs Add cross-language LLVM CFI support to the Rust compiler 2023-05-03 22:41:29 +00:00
sanitizer-kcfi-emit-kcfi-operand-bundle-itanium-cxx-abi.rs Add cross-language LLVM CFI support to the Rust compiler 2023-05-03 22:41:29 +00:00
sanitizer-kcfi-emit-kcfi-operand-bundle.rs Add cross-language LLVM CFI support to the Rust compiler 2023-05-03 22:41:29 +00:00
sanitizer-kcfi-emit-type-metadata-trait-objects.rs CFI: Fix encode_region: unexpected ReEarlyBound(0, 'a) 2023-05-23 16:44:03 +00:00
sanitizer-memory-track-orgins.rs
sanitizer-no-sanitize-inlining.rs
sanitizer-no-sanitize.rs
sanitizer-recover.rs
sanitizer-safestack-attr-check.rs Add SafeStack support to rustc 2023-05-26 15:18:54 -04:00
scalar-pair-bool.rs
set-discriminant-invalid.rs
simd_arith_offset.rs Always name the return place. 2023-07-08 15:38:40 +02:00
simd-wide-sum.rs
slice_as_from_ptr_range.rs
slice-as_chunks.rs
slice-indexing.rs
slice-init.rs
slice-iter-fold.rs add codegen test for slice::Iter::fold 2023-06-12 23:47:08 +02:00
slice-iter-len-eq-zero.rs Always name the return place. 2023-07-08 15:38:40 +02:00
slice-iter-nonnull.rs Remove useless assumes from slice::iter(_mut) 2023-05-12 17:34:55 -07:00
slice-position-bounds-check.rs
slice-ref-equality.rs
slice-reverse.rs
slice-windows-no-bounds-check.rs
some-abis-do-extend-params-to-32-bits.rs
some-global-nonnull.rs
sparc-struct-abi.rs
split-lto-unit.rs Add cross-language LLVM CFI support to the Rust compiler 2023-05-03 22:41:29 +00:00
sse42-implies-crc32.rs
stack-probes-call.rs
stack-probes-inline.rs
stack-protector.rs tests: be even more permissive on attributes in one test 2023-06-23 09:48:00 -04:00
static-relocation-model-msvc.rs
staticlib-external-inline-fns.rs
stores.rs
swap-large-types.rs
swap-simd-types.rs Use load-store instead of memcpy for short integer arrays 2023-06-04 00:51:49 -07:00
swap-small-types.rs Use load-store instead of memcpy for short integer arrays 2023-06-04 00:51:49 -07:00
target-cpu-on-functions.rs
target-feature-overrides.rs
thread-local.rs tests: adapt for LLVM change 5b386b864c7619897c51a1da97d78f1cf6f3eff6 2023-04-17 10:53:18 -04:00
tied-features-strength.rs Create a structure to define the features from to_llvm_features. 2023-05-22 14:46:40 +01:00
to_vec.rs
transmute-optimized.rs Add transmute optimization tests and some extra comments 2023-04-19 23:17:35 -07:00
transmute-scalar.rs Always name the return place. 2023-07-08 15:38:40 +02:00
try_identity.rs
try_question_mark_nop.rs
tune-cpu-on-functions.rs
tuple-layout-opt.rs codegen: allow the dso_local attribute 2023-05-23 16:54:33 +02:00
unchecked_shifts.rs [libs] Simplify unchecked_{shl,shr} 2023-06-16 16:03:19 -07:00
unchecked-float-casts.rs
uninit-consts.rs Always name the return place. 2023-07-08 15:38:40 +02:00
union-abi.rs Always name the return place. 2023-07-08 15:38:40 +02:00
unpadded-simd.rs
unwind-and-panic-abort.rs
unwind-extern-exports.rs codegen: add needs-unwind to tests that require it 2023-05-23 16:54:35 +02:00
unwind-extern-imports.rs codegen: add needs-unwind to tests that require it 2023-05-23 16:54:35 +02:00
used_with_arg.rs
var-names.rs Always name the return place. 2023-07-08 15:38:40 +02:00
vec-as-ptr.rs
vec-calloc-llvm14.rs
vec-calloc.rs
vec-in-place.rs
vec-iter-collect-len.rs
vec-optimizes-away.rs Prevent insta-stable no alloc shim support 2023-05-11 14:35:09 +00:00
vec-shrink-panik.rs use indexed loop instead of ptr bumping 2023-06-14 22:22:41 +02:00
vecdeque_no_panic.rs
virtual-function-elimination-32bit.rs
virtual-function-elimination.rs
wasm_casts_trapping.rs
wasm_exceptions.rs add codegen-test: wasm-exceptions 2023-07-01 20:24:15 +02:00
x86_64-macosx-deployment-target.rs
x86_64-no-macosx-deployment-target.rs
zip.rs
zst-offset.rs

The files here use the LLVM FileCheck framework, documented at https://llvm.org/docs/CommandGuide/FileCheck.html.

One extension worth noting is the use of revisions as custom prefixes for FileCheck. If your codegen test has different behavior based on the chosen target or different compiler flags that you want to exercise, you can use a revisions annotation, like so:

// revisions: aaa bbb
// [bbb] compile-flags: --flags-for-bbb

After specifying those variations, you can write different expected, or explicitly unexpected output by using <prefix>-SAME: and <prefix>-NOT:, like so:

// CHECK: expected code
// aaa-SAME: emitted-only-for-aaa
// aaa-NOT:                        emitted-only-for-bbb
// bbb-NOT:  emitted-only-for-aaa
// bbb-SAME:                       emitted-only-for-bbb