[clang] 6cda73e - [CodeGen] Add ParmVarDecls to FunctionDecls that are created to generate
Akira Hatanaka via cfe-commits
cfe-commits at lists.llvm.org
Tue Jun 29 16:27:58 PDT 2021
Author: Akira Hatanaka
Date: 2021-06-29T16:27:24-07:00
New Revision: 6cda73e3c44968eb6fff4b73cb6f1d0ef7d861f4
URL: https://github.com/llvm/llvm-project/commit/6cda73e3c44968eb6fff4b73cb6f1d0ef7d861f4
DIFF: https://github.com/llvm/llvm-project/commit/6cda73e3c44968eb6fff4b73cb6f1d0ef7d861f4.diff
LOG: [CodeGen] Add ParmVarDecls to FunctionDecls that are created to generate
ObjC property getter/setter functions
This is needed to prevent clang from crashing when we make the changes
proposed in https://reviews.llvm.org/D98799.
Differential Revision: https://reviews.llvm.org/D104883
Added:
Modified:
clang/lib/CodeGen/CGObjC.cpp
Removed:
################################################################################
diff --git a/clang/lib/CodeGen/CGObjC.cpp b/clang/lib/CodeGen/CGObjC.cpp
index 63429b1d4f65..b865780ffe93 100644
--- a/clang/lib/CodeGen/CGObjC.cpp
+++ b/clang/lib/CodeGen/CGObjC.cpp
@@ -3698,12 +3698,18 @@ CodeGenFunction::GenerateObjCAtomicSetterCopyHelperFunction(
FunctionTy, nullptr, SC_Static, false, false);
FunctionArgList args;
- ImplicitParamDecl DstDecl(C, FD, SourceLocation(), /*Id=*/nullptr, DestTy,
- ImplicitParamDecl::Other);
- args.push_back(&DstDecl);
- ImplicitParamDecl SrcDecl(C, FD, SourceLocation(), /*Id=*/nullptr, SrcTy,
- ImplicitParamDecl::Other);
- args.push_back(&SrcDecl);
+ ParmVarDecl *Params[2];
+ ParmVarDecl *DstDecl = ParmVarDecl::Create(
+ C, FD, SourceLocation(), SourceLocation(), nullptr, DestTy,
+ C.getTrivialTypeSourceInfo(DestTy, SourceLocation()), SC_None,
+ /*DefArg=*/nullptr);
+ args.push_back(Params[0] = DstDecl);
+ ParmVarDecl *SrcDecl = ParmVarDecl::Create(
+ C, FD, SourceLocation(), SourceLocation(), nullptr, SrcTy,
+ C.getTrivialTypeSourceInfo(SrcTy, SourceLocation()), SC_None,
+ /*DefArg=*/nullptr);
+ args.push_back(Params[1] = SrcDecl);
+ FD->setParams(Params);
const CGFunctionInfo &FI =
CGM.getTypes().arrangeBuiltinFunctionDeclaration(ReturnTy, args);
@@ -3719,12 +3725,12 @@ CodeGenFunction::GenerateObjCAtomicSetterCopyHelperFunction(
StartFunction(FD, ReturnTy, Fn, FI, args);
- DeclRefExpr DstExpr(C, &DstDecl, false, DestTy, VK_PRValue, SourceLocation());
+ DeclRefExpr DstExpr(C, DstDecl, false, DestTy, VK_PRValue, SourceLocation());
UnaryOperator *DST = UnaryOperator::Create(
C, &DstExpr, UO_Deref, DestTy->getPointeeType(), VK_LValue, OK_Ordinary,
SourceLocation(), false, FPOptionsOverride());
- DeclRefExpr SrcExpr(C, &SrcDecl, false, SrcTy, VK_PRValue, SourceLocation());
+ DeclRefExpr SrcExpr(C, SrcDecl, false, SrcTy, VK_PRValue, SourceLocation());
UnaryOperator *SRC = UnaryOperator::Create(
C, &SrcExpr, UO_Deref, SrcTy->getPointeeType(), VK_LValue, OK_Ordinary,
SourceLocation(), false, FPOptionsOverride());
@@ -3782,12 +3788,18 @@ CodeGenFunction::GenerateObjCAtomicGetterCopyHelperFunction(
FunctionTy, nullptr, SC_Static, false, false);
FunctionArgList args;
- ImplicitParamDecl DstDecl(C, FD, SourceLocation(), /*Id=*/nullptr, DestTy,
- ImplicitParamDecl::Other);
- args.push_back(&DstDecl);
- ImplicitParamDecl SrcDecl(C, FD, SourceLocation(), /*Id=*/nullptr, SrcTy,
- ImplicitParamDecl::Other);
- args.push_back(&SrcDecl);
+ ParmVarDecl *Params[2];
+ ParmVarDecl *DstDecl = ParmVarDecl::Create(
+ C, FD, SourceLocation(), SourceLocation(), nullptr, DestTy,
+ C.getTrivialTypeSourceInfo(DestTy, SourceLocation()), SC_None,
+ /*DefArg=*/nullptr);
+ args.push_back(Params[0] = DstDecl);
+ ParmVarDecl *SrcDecl = ParmVarDecl::Create(
+ C, FD, SourceLocation(), SourceLocation(), nullptr, SrcTy,
+ C.getTrivialTypeSourceInfo(SrcTy, SourceLocation()), SC_None,
+ /*DefArg=*/nullptr);
+ args.push_back(Params[1] = SrcDecl);
+ FD->setParams(Params);
const CGFunctionInfo &FI =
CGM.getTypes().arrangeBuiltinFunctionDeclaration(ReturnTy, args);
@@ -3802,7 +3814,7 @@ CodeGenFunction::GenerateObjCAtomicGetterCopyHelperFunction(
StartFunction(FD, ReturnTy, Fn, FI, args);
- DeclRefExpr SrcExpr(getContext(), &SrcDecl, false, SrcTy, VK_PRValue,
+ DeclRefExpr SrcExpr(getContext(), SrcDecl, false, SrcTy, VK_PRValue,
SourceLocation());
UnaryOperator *SRC = UnaryOperator::Create(
@@ -3829,7 +3841,7 @@ CodeGenFunction::GenerateObjCAtomicGetterCopyHelperFunction(
CXXConstExpr->getConstructionKind(),
SourceRange());
- DeclRefExpr DstExpr(getContext(), &DstDecl, false, DestTy, VK_PRValue,
+ DeclRefExpr DstExpr(getContext(), DstDecl, false, DestTy, VK_PRValue,
SourceLocation());
RValue DV = EmitAnyExpr(&DstExpr);
More information about the cfe-commits
mailing list