================
@@ -1721,6 +1721,70 @@ static std::string getMangledNameImpl(CIRGenModule &cgm,
GlobalDecl gd,
return std::string(out.str());
}
+static FunctionDecl *
+createOpenACCBindTempFunction(ASTContext &ctx, const IdentifierInfo *bindName,
+ const FunctionDecl *protoFunc) {
+ // If this is a C no-prototype function, we can take the 'easy' way out and
+ // just create a function with no arguments/functions, etc.
+ if (!protoFunc->hasPrototype())
+ return FunctionDecl::Create(
+ ctx, /*DC=*/ctx.getTranslationUnitDecl(),
+ /*StartLoc=*/SourceLocation{}, /*NLoc=*/SourceLocation{}, bindName,
+ protoFunc->getType(), /*TInfo=*/nullptr, StorageClass::SC_None);
+
+ QualType funcTy = protoFunc->getType();
+ auto *FPT = cast<FunctionProtoType>(protoFunc->getType());
+
+ // If this is a member function, add an explicit 'this' to the function type.
+ if (auto *methodDecl = dyn_cast<CXXMethodDecl>(protoFunc);
+ methodDecl && methodDecl->isImplicitObjectMemberFunction()) {
+ llvm::SmallVector<QualType> paramTypes{FPT->getParamTypes()};
+ paramTypes.insert(paramTypes.begin(), methodDecl->getThisType());
+
+ funcTy = ctx.getFunctionType(FPT->getReturnType(), paramTypes,
+ FPT->getExtProtoInfo());
+ FPT = cast<FunctionProtoType>(funcTy);
+ }
+
+ auto *tempFunc =
+ FunctionDecl::Create(ctx, /*DC=*/ctx.getTranslationUnitDecl(),
+ /*StartLoc=*/SourceLocation{},
+ /*NLoc=*/SourceLocation{}, bindName, funcTy,
+ /*TInfo=*/nullptr, StorageClass::SC_None);
+
+ SmallVector<ParmVarDecl *, 16> params;
----------------
andykaylor wrote:
Why 16? Can you drop that and reserve instead?
https://github.com/llvm/llvm-project/pull/171749
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits