================
@@ -2261,6 +2261,21 @@ void Sema::checkTypeSupport(QualType Ty, SourceLocation 
Loc, ValueDecl *D) {
         }
       }
     }
+
+    if (auto *VT = Ty->getAs<VectorType>();
+        VT && FD &&
+        (VT->getVectorKind() == VectorKind::SveFixedLengthData ||
+         VT->getVectorKind() == VectorKind::SveFixedLengthPredicate)) {
+      if (IsArmStreamingFunction(FD, /*IncludeLocallyStreaming=*/true)) {
+        Diag(Loc, diag::err_sve_fixed_vector_in_streaming_function) << Ty << 0;
+      } else if (const auto *FTy = FD->getType()->getAs<FunctionProtoType>()) {
+        if (FTy->getAArch64SMEAttributes() &
+            FunctionType::SME_PStateSMCompatibleMask) {
+          Diag(Loc, diag::err_sve_fixed_vector_in_streaming_function)
----------------
sdesmalen-arm wrote:

> Your last two testcases are the same: the conversion happens in the caller, 
> so the first case reduces to the second.

Yes, I agree. I just wasn't sure if it would somehow take a slightly different 
path in clang somehow.

> Which is an issue, I guess, but not directly related to this patch

This patch adds extra information that proves this conversion is not valid, 
whereas before the compiler could not prove it and assumed the user knew what 
they were doing. I'm happy for it to be done as a follow-up though.

https://github.com/llvm/llvm-project/pull/144611
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to