[clang] [Sema][AArch64] Emit error for mismatched VLs on streaming mode transitions (PR #159131)
Sander de Smalen via cfe-commits
cfe-commits at lists.llvm.org
Thu Sep 18 05:59:47 PDT 2025
================
@@ -46,25 +46,25 @@ void sme_streaming_calling_non_streaming_with_return_vl(void) __arm_streaming {
void sme_streaming_compatible_calling_streaming_with_vl_args(__SVInt8_t arg) __arm_streaming_compatible {
// expected-noflags-warning at +2 {{passing a VL-dependent argument to a function with a different streaming-mode is undefined behaviour when the streaming and non-streaming vector lengths are different at runtime}}
- // expected-flags-warning at +1 {{passing a VL-dependent argument to a function with a different streaming-mode is undefined behaviour when the streaming and non-streaming vector lengths are different at runtime}}
+ // expected-flags-warning at +1 {{passing a VL-dependent argument to a streaming-compatible function is undefined behaviour when the callee is in a different streaming mode because the streaming vector length (128 bit) and non-streaming vector length (256 bit) differ}}
sme_streaming_with_vl_arg(arg);
}
void sme_streaming_compatible_calling_sme_streaming_return_vl(void) __arm_streaming_compatible {
// expected-noflags-warning at +2 {{returning a VL-dependent argument from a function with a different streaming-mode is undefined behaviour when the streaming and non-streaming vector lengths are different at runtime}}
- // expected-flags-warning at +1 {{returning a VL-dependent argument from a function with a different streaming-mode is undefined behaviour when the streaming and non-streaming vector lengths are different at runtime}}
+ // expected-flags-warning at +1 {{returning a VL-dependent argument from a streaming-compatible function is undefined behaviour when the callee is in a different streaming mode because the streaming vector length (128 bit) and non-streaming vector length (256 bit) differ}}
__SVInt8_t r = sme_streaming_returns_vl();
}
void sme_streaming_compatible_calling_no_streaming_with_vl_args(__SVInt8_t arg) __arm_streaming_compatible {
// expected-noflags-warning at +2 {{passing a VL-dependent argument to a function with a different streaming-mode is undefined behaviour when the streaming and non-streaming vector lengths are different at runtime}}
- // expected-flags-warning at +1 {{passing a VL-dependent argument to a function with a different streaming-mode is undefined behaviour when the streaming and non-streaming vector lengths are different at runtime}}
+ // expected-flags-warning at +1 {{passing a VL-dependent argument to a streaming-compatible function is undefined behaviour when the callee is in a different streaming mode because the streaming vector length (128 bit) and non-streaming vector length (256 bit) differ}}
sme_no_streaming_with_vl_arg(arg);
}
void sme_streaming_compatible_calling_no_sme_streaming_return_vl(void) __arm_streaming_compatible {
// expected-noflags-warning at +2 {{returning a VL-dependent argument from a function with a different streaming-mode is undefined behaviour when the streaming and non-streaming vector lengths are different at runtime}}
- // expected-flags-warning at +1 {{returning a VL-dependent argument from a function with a different streaming-mode is undefined behaviour when the streaming and non-streaming vector lengths are different at runtime}}
+ // expected-flags-warning at +1 {{returning a VL-dependent argument from a streaming-compatible function is undefined behaviour when the callee is in a different streaming mode because the streaming vector length (128 bit) and non-streaming vector length (256 bit) differ}}
----------------
sdesmalen-arm wrote:
I think 128 and 256 bit here are reversed? streaming should be 256, and non-streaming should be 128, from looking at the cc1 flags.
https://github.com/llvm/llvm-project/pull/159131
More information about the cfe-commits
mailing list