@@ -784,29 +784,37 @@ bool Parser::ParseOpenACCClauseParams(OpenACCDirectiveKind DirKind,
784
784
ExprResult CondExpr = ParseOpenACCConditionalExpr (*this );
785
785
// An invalid expression can be just about anything, so just give up on
786
786
// this clause list.
787
- if (CondExpr.isInvalid ())
788
- return true ;
787
+ if (CondExpr.isInvalid ()) {
788
+ Parens.skipToEnd ();
789
+ return false ;
790
+ }
789
791
break ;
790
792
}
791
793
case OpenACCClauseKind::CopyIn:
792
794
tryParseAndConsumeSpecialTokenKind (
793
795
*this , OpenACCSpecialTokenKind::ReadOnly, Kind);
794
- if (ParseOpenACCClauseVarList (Kind))
795
- return true ;
796
+ if (ParseOpenACCClauseVarList (Kind)) {
797
+ Parens.skipToEnd ();
798
+ return false ;
799
+ }
796
800
break ;
797
801
case OpenACCClauseKind::Create:
798
802
case OpenACCClauseKind::CopyOut:
799
803
tryParseAndConsumeSpecialTokenKind (*this , OpenACCSpecialTokenKind::Zero,
800
804
Kind);
801
- if (ParseOpenACCClauseVarList (Kind))
802
- return true ;
805
+ if (ParseOpenACCClauseVarList (Kind)) {
806
+ Parens.skipToEnd ();
807
+ return false ;
808
+ }
803
809
break ;
804
810
case OpenACCClauseKind::Reduction:
805
811
// If we're missing a clause-kind (or it is invalid), see if we can parse
806
812
// the var-list anyway.
807
813
ParseReductionOperator (*this );
808
- if (ParseOpenACCClauseVarList (Kind))
809
- return true ;
814
+ if (ParseOpenACCClauseVarList (Kind)) {
815
+ Parens.skipToEnd ();
816
+ return false ;
817
+ }
810
818
break ;
811
819
case OpenACCClauseKind::Self:
812
820
// The 'self' clause is a var-list instead of a 'condition' in the case of
@@ -828,22 +836,28 @@ bool Parser::ParseOpenACCClauseParams(OpenACCDirectiveKind DirKind,
828
836
case OpenACCClauseKind::Present:
829
837
case OpenACCClauseKind::Private:
830
838
case OpenACCClauseKind::UseDevice:
831
- if (ParseOpenACCClauseVarList (Kind))
832
- return true ;
839
+ if (ParseOpenACCClauseVarList (Kind)) {
840
+ Parens.skipToEnd ();
841
+ return false ;
842
+ }
833
843
break ;
834
844
case OpenACCClauseKind::Collapse: {
835
845
tryParseAndConsumeSpecialTokenKind (*this , OpenACCSpecialTokenKind::Force,
836
846
Kind);
837
847
ExprResult NumLoops =
838
848
getActions ().CorrectDelayedTyposInExpr (ParseConstantExpression ());
839
- if (NumLoops.isInvalid ())
840
- return true ;
849
+ if (NumLoops.isInvalid ()) {
850
+ Parens.skipToEnd ();
851
+ return false ;
852
+ }
841
853
break ;
842
854
}
843
855
case OpenACCClauseKind::Bind: {
844
856
ExprResult BindArg = ParseOpenACCBindClauseArgument ();
845
- if (BindArg.isInvalid ())
846
- return true ;
857
+ if (BindArg.isInvalid ()) {
858
+ Parens.skipToEnd ();
859
+ return false ;
860
+ }
847
861
break ;
848
862
}
849
863
case OpenACCClauseKind::NumGangs:
@@ -852,8 +866,10 @@ bool Parser::ParseOpenACCClauseParams(OpenACCDirectiveKind DirKind,
852
866
case OpenACCClauseKind::DefaultAsync:
853
867
case OpenACCClauseKind::VectorLength: {
854
868
ExprResult IntExpr = ParseOpenACCIntExpr ();
855
- if (IntExpr.isInvalid ())
856
- return true ;
869
+ if (IntExpr.isInvalid ()) {
870
+ Parens.skipToEnd ();
871
+ return false ;
872
+ }
857
873
break ;
858
874
}
859
875
case OpenACCClauseKind::DType:
@@ -863,12 +879,15 @@ bool Parser::ParseOpenACCClauseParams(OpenACCDirectiveKind DirKind,
863
879
// device_type in Sema.
864
880
ConsumeToken ();
865
881
} else if (ParseOpenACCDeviceTypeList ()) {
866
- return true ;
882
+ Parens.skipToEnd ();
883
+ return false ;
867
884
}
868
885
break ;
869
886
case OpenACCClauseKind::Tile:
870
- if (ParseOpenACCSizeExprList ())
871
- return true ;
887
+ if (ParseOpenACCSizeExprList ()) {
888
+ Parens.skipToEnd ();
889
+ return false ;
890
+ }
872
891
break ;
873
892
default :
874
893
llvm_unreachable (" Not a required parens type?" );
@@ -883,8 +902,10 @@ bool Parser::ParseOpenACCClauseParams(OpenACCDirectiveKind DirKind,
883
902
ExprResult CondExpr = ParseOpenACCConditionalExpr (*this );
884
903
// An invalid expression can be just about anything, so just give up on
885
904
// this clause list.
886
- if (CondExpr.isInvalid ())
887
- return true ;
905
+ if (CondExpr.isInvalid ()) {
906
+ Parens.skipToEnd ();
907
+ return false ;
908
+ }
888
909
break ;
889
910
}
890
911
case OpenACCClauseKind::Vector:
@@ -895,19 +916,25 @@ bool Parser::ParseOpenACCClauseParams(OpenACCDirectiveKind DirKind,
895
916
: OpenACCSpecialTokenKind::Num,
896
917
Kind);
897
918
ExprResult IntExpr = ParseOpenACCIntExpr ();
898
- if (IntExpr.isInvalid ())
899
- return true ;
919
+ if (IntExpr.isInvalid ()) {
920
+ Parens.skipToEnd ();
921
+ return false ;
922
+ }
900
923
break ;
901
924
}
902
925
case OpenACCClauseKind::Async: {
903
926
ExprResult AsyncArg = ParseOpenACCAsyncArgument ();
904
- if (AsyncArg.isInvalid ())
905
- return true ;
927
+ if (AsyncArg.isInvalid ()) {
928
+ Parens.skipToEnd ();
929
+ return false ;
930
+ }
906
931
break ;
907
932
}
908
933
case OpenACCClauseKind::Gang:
909
- if (ParseOpenACCGangArgList ())
910
- return true ;
934
+ if (ParseOpenACCGangArgList ()) {
935
+ Parens.skipToEnd ();
936
+ return false ;
937
+ }
911
938
break ;
912
939
case OpenACCClauseKind::Wait:
913
940
if (ParseOpenACCWaitArgument ()) {
0 commit comments