================
@@ -2589,6 +2589,59 @@ SemaOpenACC::ActOnOpenACCAsteriskSizeExpr(SourceLocation
AsteriskLoc) {
return BuildOpenACCAsteriskSizeExpr(AsteriskLoc);
}
+/// Loops through a type and generates an appropriate InitListExpr to generate
+/// type initialization.
+static Expr *GenerateReductionInitRecipeExpr(ASTContext &Context,
+ SourceRange ExprRange,
+ QualType Ty) {
+ Ty = Ty.getCanonicalType();
+ llvm::SmallVector<Expr *> Exprs;
+
+ if (const RecordDecl *RD = Ty->getAsRecordDecl()) {
+ for (auto *F : RD->fields()) {
+ if (Expr *NewExpr =
+ GenerateReductionInitRecipeExpr(Context, ExprRange,
F->getType()))
+ Exprs.push_back(NewExpr);
+ else
+ return nullptr;
+ }
+ } else if (const ConstantArrayType *AT = Context.getAsConstantArrayType(Ty))
{
----------------
erichkeane wrote:
`ConstantArrayType` means 'not a VLA' in this context (not that it is constant,
it is that it is a constant size).
At the moment, we CAN get here with a pointer/VLA, but I haven't figured out
how to implement that yet, and will probably do so next (for a few things). I
probably could use a NYI in the normal init generation for pointer types at the
moment. BUT since that is not Reduction specific, I'll do that in a separate
patch if thats OK.
https://github.com/llvm/llvm-project/pull/156122
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits