@@ -648,21 +648,30 @@ static void instantiateDependentAMDGPUMaxNumWorkGroupsAttr(
648
648
EnterExpressionEvaluationContext Unevaluated (
649
649
S, Sema::ExpressionEvaluationContext::ConstantEvaluated);
650
650
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
+ }
660
666
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
+ }
664
672
665
- S.AMDGPU ().addAMDGPUMaxNumWorkGroupsAttr (New, Attr, XExpr, YExpr, ZExpr);
673
+ if (XExpr)
674
+ S.AMDGPU ().addAMDGPUMaxNumWorkGroupsAttr (New, Attr, XExpr, YExpr, ZExpr);
666
675
}
667
676
668
677
// This doesn't take any template parameters, but we have a custom action that
0 commit comments