================ @@ -7513,6 +7516,41 @@ void Sema::checkCall(NamedDecl *FDecl, const FunctionProtoType *Proto, } } + auto *CallerFD = dyn_cast<FunctionDecl>(CurContext); + bool IsCalleeStreaming = ((ExtInfo.AArch64SMEAttributes & + FunctionType::SME_PStateSMEnabledMask) || + (ExtInfo.AArch64SMEAttributes & + FunctionType::SME_PStateSMCompatibleMask)); + bool IsBuiltin = (FD && FD->getBuiltinID()); + + if (CallerFD && Context.getTargetInfo().hasFeature("sme") && !IsBuiltin) { + // If the callee has an AArch64 SME __arm_locally_streaming attribute + // warn if this function returns VL-based value or pass any such argument, + // the streaming and non-streaming vector lengths may be different. + ArmStreamingType CallerFnType = getArmStreamingFnType(CallerFD); + // If the caller is a non-streaming function and the callee has a + // streaming attribute. If it passed any VL-based arguments or return + // VL-based value, then warn that the streaming and non-streaming vector + // lengths may be different. + if (CallerFnType != ArmStreaming) { + if (IsCalleeStreaming) { + if (AnyScalableArgs) + Diag(Loc, diag::warn_sme_streaming_pass_return_vl_to_non_streaming); + if (Proto->getReturnType()->isSizelessVectorType()) + Diag(Loc, diag::warn_sme_streaming_pass_return_vl_to_non_streaming); + } + } else if (!IsCalleeStreaming) { + // If the callee is a non-streaming function and the caller has + // streaming attribute. If it passed any VL-based arguments or return + // VL-based value, then warn that the streaming and non-streaming vector + // lengths may be different. + if (AnyScalableArgs) + Diag(Loc, diag::warn_sme_streaming_pass_return_vl_to_non_streaming); + if (Proto->getReturnType()->isSizelessVectorType()) + Diag(Loc, diag::warn_sme_streaming_pass_return_vl_to_non_streaming); + } ---------------- sdesmalen-arm wrote:
Does this code support the following case: ``` void test_sc_to_n(sv_ty arg) __arm_streaming_compatible { n(arg); } // expect a diagnostic ``` ? https://github.com/llvm/llvm-project/pull/79842 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits