[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