================ @@ -7745,6 +7746,38 @@ static bool checkMutualExclusion(TypeProcessingState &state, return true; } +static bool handleArmAgnosticAttribute(Sema &S, + FunctionProtoType::ExtProtoInfo &EPI, + ParsedAttr &Attr) { + if (!Attr.getNumArgs()) { + S.Diag(Attr.getLoc(), diag::err_missing_arm_state) << Attr; + Attr.setInvalid(); + return true; + } + + for (unsigned I = 0; I < Attr.getNumArgs(); ++I) { + StringRef StateName; + SourceLocation LiteralLoc; + if (!S.checkStringLiteralArgumentAttr(Attr, I, StateName, &LiteralLoc)) + return true; + + if (StateName == "sme_za_state") { + if (EPI.AArch64SMEAttributes & + (FunctionType::SME_ZAMask | FunctionType::SME_ZT0Mask)) { + S.Diag(Attr.getLoc(), diag::err_conflicting_attributes_arm_agnostic); + Attr.setInvalid(); + return true; + } + EPI.setArmSMEAttribute(FunctionType::SME_AgnosticZAStateMask); + } else { + S.Diag(LiteralLoc, diag::err_unknown_arm_state) << StateName; + Attr.setInvalid(); + return true; ---------------- MacDue wrote:
nit: Flip the condition to `StateName != "sme_za_state` and exit early (avoids one level of nesting). https://github.com/llvm/llvm-project/pull/121788 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits