@@ -506,6 +506,14 @@ class OpenACCClauseWithExprs : public OpenACCClauseWithParams {
506
506
Exprs = NewExprs;
507
507
}
508
508
509
+ // / Used only for initialization, the leaf class can initialize this to
510
+ // / trailing storage, and initialize the data in the trailing storage as well.
511
+ void setExprs (MutableArrayRef<Expr *> NewStorage, ArrayRef<Expr *> Exprs) {
512
+ assert (NewStorage.size () == Exprs.size ());
513
+ llvm::uninitialized_copy (Exprs, NewStorage.begin ());
514
+ setExprs (NewStorage);
515
+ }
516
+
509
517
// / Gets the entire list of expressions, but leave it to the
510
518
// / individual clauses to expose this how they'd like.
511
519
llvm::ArrayRef<Expr *> getExprs () const { return Exprs; }
@@ -578,8 +586,7 @@ class OpenACCNumGangsClause final
578
586
ArrayRef<Expr *> IntExprs, SourceLocation EndLoc)
579
587
: OpenACCClauseWithExprs(OpenACCClauseKind::NumGangs, BeginLoc, LParenLoc,
580
588
EndLoc) {
581
- llvm::uninitialized_copy (IntExprs, getTrailingObjects<Expr *>());
582
- setExprs (getTrailingObjects<Expr *>(IntExprs.size ()));
589
+ setExprs (getTrailingObjects<Expr *>(IntExprs.size ()), IntExprs);
583
590
}
584
591
585
592
public:
@@ -607,8 +614,7 @@ class OpenACCTileClause final
607
614
ArrayRef<Expr *> SizeExprs, SourceLocation EndLoc)
608
615
: OpenACCClauseWithExprs(OpenACCClauseKind::Tile, BeginLoc, LParenLoc,
609
616
EndLoc) {
610
- llvm::uninitialized_copy (SizeExprs, getTrailingObjects<Expr *>());
611
- setExprs (getTrailingObjects<Expr *>(SizeExprs.size ()));
617
+ setExprs (getTrailingObjects<Expr *>(SizeExprs.size ()), SizeExprs);
612
618
}
613
619
614
620
public:
@@ -845,8 +851,7 @@ class OpenACCPrivateClause final
845
851
ArrayRef<Expr *> VarList, SourceLocation EndLoc)
846
852
: OpenACCClauseWithVarList(OpenACCClauseKind::Private, BeginLoc,
847
853
LParenLoc, EndLoc) {
848
- llvm::uninitialized_copy (VarList, getTrailingObjects<Expr *>());
849
- setExprs (getTrailingObjects<Expr *>(VarList.size ()));
854
+ setExprs (getTrailingObjects<Expr *>(VarList.size ()), VarList);
850
855
}
851
856
852
857
public:
@@ -867,8 +872,7 @@ class OpenACCFirstPrivateClause final
867
872
ArrayRef<Expr *> VarList, SourceLocation EndLoc)
868
873
: OpenACCClauseWithVarList(OpenACCClauseKind::FirstPrivate, BeginLoc,
869
874
LParenLoc, EndLoc) {
870
- llvm::uninitialized_copy (VarList, getTrailingObjects<Expr *>());
871
- setExprs (getTrailingObjects<Expr *>(VarList.size ()));
875
+ setExprs (getTrailingObjects<Expr *>(VarList.size ()), VarList);
872
876
}
873
877
874
878
public:
@@ -889,8 +893,7 @@ class OpenACCDevicePtrClause final
889
893
ArrayRef<Expr *> VarList, SourceLocation EndLoc)
890
894
: OpenACCClauseWithVarList(OpenACCClauseKind::DevicePtr, BeginLoc,
891
895
LParenLoc, EndLoc) {
892
- llvm::uninitialized_copy (VarList, getTrailingObjects<Expr *>());
893
- setExprs (getTrailingObjects<Expr *>(VarList.size ()));
896
+ setExprs (getTrailingObjects<Expr *>(VarList.size ()), VarList);
894
897
}
895
898
896
899
public:
@@ -911,8 +914,7 @@ class OpenACCAttachClause final
911
914
ArrayRef<Expr *> VarList, SourceLocation EndLoc)
912
915
: OpenACCClauseWithVarList(OpenACCClauseKind::Attach, BeginLoc, LParenLoc,
913
916
EndLoc) {
914
- llvm::uninitialized_copy (VarList, getTrailingObjects<Expr *>());
915
- setExprs (getTrailingObjects<Expr *>(VarList.size ()));
917
+ setExprs (getTrailingObjects<Expr *>(VarList.size ()), VarList);
916
918
}
917
919
918
920
public:
@@ -933,8 +935,7 @@ class OpenACCDetachClause final
933
935
ArrayRef<Expr *> VarList, SourceLocation EndLoc)
934
936
: OpenACCClauseWithVarList(OpenACCClauseKind::Detach, BeginLoc, LParenLoc,
935
937
EndLoc) {
936
- llvm::uninitialized_copy (VarList, getTrailingObjects<Expr *>());
937
- setExprs (getTrailingObjects<Expr *>(VarList.size ()));
938
+ setExprs (getTrailingObjects<Expr *>(VarList.size ()), VarList);
938
939
}
939
940
940
941
public:
@@ -955,8 +956,7 @@ class OpenACCDeleteClause final
955
956
ArrayRef<Expr *> VarList, SourceLocation EndLoc)
956
957
: OpenACCClauseWithVarList(OpenACCClauseKind::Delete, BeginLoc, LParenLoc,
957
958
EndLoc) {
958
- llvm::uninitialized_copy (VarList, getTrailingObjects<Expr *>());
959
- setExprs (getTrailingObjects<Expr *>(VarList.size ()));
959
+ setExprs (getTrailingObjects<Expr *>(VarList.size ()), VarList);
960
960
}
961
961
962
962
public:
@@ -977,8 +977,7 @@ class OpenACCUseDeviceClause final
977
977
ArrayRef<Expr *> VarList, SourceLocation EndLoc)
978
978
: OpenACCClauseWithVarList(OpenACCClauseKind::UseDevice, BeginLoc,
979
979
LParenLoc, EndLoc) {
980
- llvm::uninitialized_copy (VarList, getTrailingObjects<Expr *>());
981
- setExprs (getTrailingObjects<Expr *>(VarList.size ()));
980
+ setExprs (getTrailingObjects<Expr *>(VarList.size ()), VarList);
982
981
}
983
982
984
983
public:
@@ -999,8 +998,7 @@ class OpenACCNoCreateClause final
999
998
ArrayRef<Expr *> VarList, SourceLocation EndLoc)
1000
999
: OpenACCClauseWithVarList(OpenACCClauseKind::NoCreate, BeginLoc,
1001
1000
LParenLoc, EndLoc) {
1002
- llvm::uninitialized_copy (VarList, getTrailingObjects<Expr *>());
1003
- setExprs (getTrailingObjects<Expr *>(VarList.size ()));
1001
+ setExprs (getTrailingObjects<Expr *>(VarList.size ()), VarList);
1004
1002
}
1005
1003
1006
1004
public:
@@ -1021,8 +1019,7 @@ class OpenACCPresentClause final
1021
1019
ArrayRef<Expr *> VarList, SourceLocation EndLoc)
1022
1020
: OpenACCClauseWithVarList(OpenACCClauseKind::Present, BeginLoc,
1023
1021
LParenLoc, EndLoc) {
1024
- llvm::uninitialized_copy (VarList, getTrailingObjects<Expr *>());
1025
- setExprs (getTrailingObjects<Expr *>(VarList.size ()));
1022
+ setExprs (getTrailingObjects<Expr *>(VarList.size ()), VarList);
1026
1023
}
1027
1024
1028
1025
public:
@@ -1042,8 +1039,7 @@ class OpenACCHostClause final
1042
1039
ArrayRef<Expr *> VarList, SourceLocation EndLoc)
1043
1040
: OpenACCClauseWithVarList(OpenACCClauseKind::Host, BeginLoc, LParenLoc,
1044
1041
EndLoc) {
1045
- llvm::uninitialized_copy (VarList, getTrailingObjects<Expr *>());
1046
- setExprs (getTrailingObjects<Expr *>(VarList.size ()));
1042
+ setExprs (getTrailingObjects<Expr *>(VarList.size ()), VarList);
1047
1043
}
1048
1044
1049
1045
public:
@@ -1065,8 +1061,7 @@ class OpenACCDeviceClause final
1065
1061
ArrayRef<Expr *> VarList, SourceLocation EndLoc)
1066
1062
: OpenACCClauseWithVarList(OpenACCClauseKind::Device, BeginLoc, LParenLoc,
1067
1063
EndLoc) {
1068
- llvm::uninitialized_copy (VarList, getTrailingObjects<Expr *>());
1069
- setExprs (getTrailingObjects<Expr *>(VarList.size ()));
1064
+ setExprs (getTrailingObjects<Expr *>(VarList.size ()), VarList);
1070
1065
}
1071
1066
1072
1067
public:
@@ -1093,8 +1088,7 @@ class OpenACCCopyClause final
1093
1088
Spelling == OpenACCClauseKind::PCopy ||
1094
1089
Spelling == OpenACCClauseKind::PresentOrCopy) &&
1095
1090
" Invalid clause kind for copy-clause" );
1096
- llvm::uninitialized_copy (VarList, getTrailingObjects<Expr *>());
1097
- setExprs (getTrailingObjects<Expr *>(VarList.size ()));
1091
+ setExprs (getTrailingObjects<Expr *>(VarList.size ()), VarList);
1098
1092
}
1099
1093
1100
1094
public:
@@ -1127,8 +1121,7 @@ class OpenACCCopyInClause final
1127
1121
Spelling == OpenACCClauseKind::PCopyIn ||
1128
1122
Spelling == OpenACCClauseKind::PresentOrCopyIn) &&
1129
1123
" Invalid clause kind for copyin-clause" );
1130
- llvm::uninitialized_copy (VarList, getTrailingObjects<Expr *>());
1131
- setExprs (getTrailingObjects<Expr *>(VarList.size ()));
1124
+ setExprs (getTrailingObjects<Expr *>(VarList.size ()), VarList);
1132
1125
}
1133
1126
1134
1127
public:
@@ -1160,8 +1153,7 @@ class OpenACCCopyOutClause final
1160
1153
Spelling == OpenACCClauseKind::PCopyOut ||
1161
1154
Spelling == OpenACCClauseKind::PresentOrCopyOut) &&
1162
1155
" Invalid clause kind for copyout-clause" );
1163
- llvm::uninitialized_copy (VarList, getTrailingObjects<Expr *>());
1164
- setExprs (getTrailingObjects<Expr *>(VarList.size ()));
1156
+ setExprs (getTrailingObjects<Expr *>(VarList.size ()), VarList);
1165
1157
}
1166
1158
1167
1159
public:
@@ -1193,8 +1185,7 @@ class OpenACCCreateClause final
1193
1185
Spelling == OpenACCClauseKind::PCreate ||
1194
1186
Spelling == OpenACCClauseKind::PresentOrCreate) &&
1195
1187
" Invalid clause kind for create-clause" );
1196
- llvm::uninitialized_copy (VarList, getTrailingObjects<Expr *>());
1197
- setExprs (getTrailingObjects<Expr *>(VarList.size ()));
1188
+ setExprs (getTrailingObjects<Expr *>(VarList.size ()), VarList);
1198
1189
}
1199
1190
1200
1191
public:
@@ -1223,8 +1214,7 @@ class OpenACCReductionClause final
1223
1214
: OpenACCClauseWithVarList(OpenACCClauseKind::Reduction, BeginLoc,
1224
1215
LParenLoc, EndLoc),
1225
1216
Op (Operator) {
1226
- llvm::uninitialized_copy (VarList, getTrailingObjects<Expr *>());
1227
- setExprs (getTrailingObjects<Expr *>(VarList.size ()));
1217
+ setExprs (getTrailingObjects<Expr *>(VarList.size ()), VarList);
1228
1218
}
1229
1219
1230
1220
public:
@@ -1249,8 +1239,7 @@ class OpenACCLinkClause final
1249
1239
ArrayRef<Expr *> VarList, SourceLocation EndLoc)
1250
1240
: OpenACCClauseWithVarList(OpenACCClauseKind::Link, BeginLoc, LParenLoc,
1251
1241
EndLoc) {
1252
- llvm::uninitialized_copy (VarList, getTrailingObjects<Expr *>());
1253
- setExprs (getTrailingObjects<Expr *>(VarList.size ()));
1242
+ setExprs (getTrailingObjects<Expr *>(VarList.size ()), VarList);
1254
1243
}
1255
1244
1256
1245
public:
@@ -1273,8 +1262,7 @@ class OpenACCDeviceResidentClause final
1273
1262
ArrayRef<Expr *> VarList, SourceLocation EndLoc)
1274
1263
: OpenACCClauseWithVarList(OpenACCClauseKind::DeviceResident, BeginLoc,
1275
1264
LParenLoc, EndLoc) {
1276
- llvm::uninitialized_copy (VarList, getTrailingObjects<Expr *>());
1277
- setExprs (getTrailingObjects<Expr *>(VarList.size ()));
1265
+ setExprs (getTrailingObjects<Expr *>(VarList.size ()), VarList);
1278
1266
}
1279
1267
1280
1268
public:
0 commit comments