@@ -648,21 +648,30 @@ static void instantiateDependentAMDGPUMaxNumWorkGroupsAttr(
648648 EnterExpressionEvaluationContext Unevaluated (
649649 S, Sema::ExpressionEvaluationContext::ConstantEvaluated);
650650
651- ExprResult ResultX = S.SubstExpr (Attr.getMaxNumWorkGroupsX (), TemplateArgs);
652- if (!ResultX.isUsable ())
653- return ;
654- ExprResult ResultY = S.SubstExpr (Attr.getMaxNumWorkGroupsY (), TemplateArgs);
655- if (!ResultY.isUsable ())
656- return ;
657- ExprResult ResultZ = S.SubstExpr (Attr.getMaxNumWorkGroupsZ (), TemplateArgs);
658- if (!ResultZ.isUsable ())
659- return ;
651+ Expr *XExpr = nullptr ;
652+ Expr *YExpr = nullptr ;
653+ Expr *ZExpr = nullptr ;
654+
655+ if (Attr.getMaxNumWorkGroupsX ()) {
656+ ExprResult ResultX = S.SubstExpr (Attr.getMaxNumWorkGroupsX (), TemplateArgs);
657+ if (ResultX.isUsable ())
658+ XExpr = ResultX.getAs <Expr>();
659+ }
660+
661+ if (Attr.getMaxNumWorkGroupsY ()) {
662+ ExprResult ResultY = S.SubstExpr (Attr.getMaxNumWorkGroupsY (), TemplateArgs);
663+ if (ResultY.isUsable ())
664+ YExpr = ResultY.getAs <Expr>();
665+ }
660666
661- Expr *XExpr = ResultX.getAs <Expr>();
662- Expr *YExpr = ResultY.getAs <Expr>();
663- Expr *ZExpr = ResultZ.getAs <Expr>();
667+ if (Attr.getMaxNumWorkGroupsZ ()) {
668+ ExprResult ResultZ = S.SubstExpr (Attr.getMaxNumWorkGroupsZ (), TemplateArgs);
669+ if (ResultZ.isUsable ())
670+ ZExpr = ResultZ.getAs <Expr>();
671+ }
664672
665- S.AMDGPU ().addAMDGPUMaxNumWorkGroupsAttr (New, Attr, XExpr, YExpr, ZExpr);
673+ if (XExpr)
674+ S.AMDGPU ().addAMDGPUMaxNumWorkGroupsAttr (New, Attr, XExpr, YExpr, ZExpr);
666675}
667676
668677// This doesn't take any template parameters, but we have a custom action that
0 commit comments