Add test for native to wasm value conversions#525
Open
leonm1 wants to merge 15 commits intoproxy-wasm:mainfrom
Open
Add test for native to wasm value conversions#525leonm1 wants to merge 15 commits intoproxy-wasm:mainfrom
leonm1 wants to merge 15 commits intoproxy-wasm:mainfrom
Conversation
Signed-off-by: Matt Leon <mattleon@google.com>
PiotrSikora
reviewed
Mar 17, 2026
Member
PiotrSikora
left a comment
There was a problem hiding this comment.
Could you change bigendian to endianness everywhere? We're verifying that values are not incorrectly converted on little-endian systems as well.
Signed-off-by: Matt Leon <mattleon@google.com>
Signed-off-by: Matt Leon <mattleon@google.com>
Signed-off-by: Matt Leon <mattleon@google.com>
Signed-off-by: Matt Leon <mattleon@google.com>
There's enough test cases that this warrants being run in parallel via its own test target. Signed-off-by: Matt Leon <mattleon@google.com>
Uses bswap64 by default to handle int64 and uint64 values. For float and doubles, uses appropriate-size bswap operators by first bit-casting floats and doubles to their same-size int types. Otherwise, they will be coerced to an int type before conversion and be returned as int values. Signed-off-by: Matt Leon <mattleon@google.com>
Without first converting to uint32_t, the getters for wasm_val_t for wamr, wasmtime, and wasmedge returned a signed integer type. For uint32 values high enough to be in the negative range, sign extension would be applied when the value was coerced into proxy_wasm::Word. This resulted in Word values that did not match the comment on Word ``` // Represents a Wasm-native word-sized datum. On 32-bit VMs, the high bits are always zero. // The Wasm/VM API treats all bits as significant. ``` nor the exact value returned from the wasm plugin. Signed-off-by: Matt Leon <mattleon@google.com>
Signed-off-by: Matt Leon <mattleon@google.com>
Signed-off-by: Matt Leon <mattleon@google.com>
Signed-off-by: Matt Leon <mattleon@google.com>
Signed-off-by: Matt Leon <mattleon@google.com>
Signed-off-by: Matt Leon <mattleon@google.com>
PiotrSikora
reviewed
Mar 19, 2026
Signed-off-by: Matt Leon <mattleon@google.com>
PiotrSikora
reviewed
Mar 20, 2026
src/wamr/wamr.cc
Outdated
| } | ||
| template <> Word convertValueTypeToArg<Word>(wasm_val_t val) { return val.of.i32; } | ||
| template <> Word convertValueTypeToArg<Word>(wasm_val_t val) { | ||
| return std::bit_cast<uint32_t>(val.of.i32); |
Member
There was a problem hiding this comment.
Should we use static_cast here to be consistent with the surrounding code?
Signed-off-by: Matt Leon <mattleon@google.com>
PiotrSikora
approved these changes
Mar 20, 2026
Member
PiotrSikora
left a comment
There was a problem hiding this comment.
LGTM, sans the remaining nits.
| template <> constexpr auto convertArgToValKind<int64_t>() { return wasm::ValKind::I64; }; | ||
| template <> constexpr auto convertArgToValKind<uint64_t>() { return wasm::ValKind::I64; }; | ||
| template <> constexpr auto convertArgToValKind<double>() { return wasm::ValKind::F64; }; | ||
| template <> constexpr auto convertArgToValKind<float>() { return wasm::ValKind::F32; }; |
| return WasmEdge_ValueGenI64(static_cast<int64_t>(t)); | ||
| } | ||
| template <> WasmEdge_Value makeVal(double t) { return WasmEdge_ValueGenF64(t); } | ||
| template <> WasmEdge_Value makeVal(float t) { return WasmEdge_ValueGenF32(t); } |
| pub extern "C" fn test_return_u64(_: f32) -> u64 { | ||
| return 11111111111111111111; | ||
| } | ||
|
|
Member
There was a problem hiding this comment.
Add test_return_i64 for completness?
Comment on lines
+61
to
+62
| name = "arg_passing.wasm", | ||
| srcs = ["arg_passing.rs"], |
Member
There was a problem hiding this comment.
This should be really called endianness (not a blocker, just saying...).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This test explicitly tests the bounds of various native and wasm types to ensure passing data across the ABI boundary is not lossy.