Skip to content

Commit d315d30

Browse files
SC llvm teamSC llvm team
authored andcommitted
Merged main:b87110e298df into amd-gfx:265623ac31ed
Local branch amd-gfx 265623a Merged main:b120fe8d3288 into amd-gfx:225830a27ae5 Remote branch main b87110e [SimplifyCFG] Avoid use of ConstantExpr::getIntegerCast() (NFC)
2 parents 265623a + b87110e commit d315d30

File tree

96 files changed

+5777
-3355
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

96 files changed

+5777
-3355
lines changed

clang/docs/ReleaseNotes.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -670,6 +670,10 @@ Bug Fixes to C++ Support
670670
default initializing a base class in a constant expression context. Fixes:
671671
(`#69890 <https://github.com/llvm/llvm-project/issues/69890>`_)
672672

673+
- Fix crash when template class static member imported to other translation unit.
674+
Fixes:
675+
(`#68769 <https://github.com/llvm/llvm-project/issues/68769>`_)
676+
673677
Bug Fixes to AST Handling
674678
^^^^^^^^^^^^^^^^^^^^^^^^^
675679
- Fixed an import failure of recursive friend class template.

clang/include/clang/AST/DeclBase.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1422,6 +1422,14 @@ enum class ArgPassingKind {
14221422
CanNeverPassInRegs
14231423
};
14241424

1425+
enum class OMPDeclareReductionInitKind {
1426+
Call, // Initialized by function call.
1427+
Direct, // omp_priv(<expr>)
1428+
Copy // omp_priv = <expr>
1429+
};
1430+
1431+
enum class ObjCImplementationControl { None, Required, Optional };
1432+
14251433
/// DeclContext - This is used only as base class of specific decl types that
14261434
/// can act as declaration contexts. These decls are (only the top classes
14271435
/// that directly derive from DeclContext are mentioned, not their subclasses):

clang/include/clang/AST/DeclObjC.h

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -139,10 +139,6 @@ class ObjCMethodDecl : public NamedDecl, public DeclContext {
139139
// This class stores some data in DeclContext::ObjCMethodDeclBits
140140
// to save some space. Use the provided accessors to access it.
141141

142-
public:
143-
enum ImplementationControl { None, Required, Optional };
144-
145-
private:
146142
/// Return type of this method.
147143
QualType MethodDeclType;
148144

@@ -168,14 +164,14 @@ class ObjCMethodDecl : public NamedDecl, public DeclContext {
168164
/// constructed by createImplicitParams.
169165
ImplicitParamDecl *CmdDecl = nullptr;
170166

171-
ObjCMethodDecl(SourceLocation beginLoc, SourceLocation endLoc,
172-
Selector SelInfo, QualType T, TypeSourceInfo *ReturnTInfo,
173-
DeclContext *contextDecl, bool isInstance = true,
174-
bool isVariadic = false, bool isPropertyAccessor = false,
175-
bool isSynthesizedAccessorStub = false,
176-
bool isImplicitlyDeclared = false, bool isDefined = false,
177-
ImplementationControl impControl = None,
178-
bool HasRelatedResultType = false);
167+
ObjCMethodDecl(
168+
SourceLocation beginLoc, SourceLocation endLoc, Selector SelInfo,
169+
QualType T, TypeSourceInfo *ReturnTInfo, DeclContext *contextDecl,
170+
bool isInstance = true, bool isVariadic = false,
171+
bool isPropertyAccessor = false, bool isSynthesizedAccessorStub = false,
172+
bool isImplicitlyDeclared = false, bool isDefined = false,
173+
ObjCImplementationControl impControl = ObjCImplementationControl::None,
174+
bool HasRelatedResultType = false);
179175

180176
SelectorLocationsKind getSelLocsKind() const {
181177
return static_cast<SelectorLocationsKind>(ObjCMethodDeclBits.SelLocsKind);
@@ -235,7 +231,7 @@ class ObjCMethodDecl : public NamedDecl, public DeclContext {
235231
bool isVariadic = false, bool isPropertyAccessor = false,
236232
bool isSynthesizedAccessorStub = false,
237233
bool isImplicitlyDeclared = false, bool isDefined = false,
238-
ImplementationControl impControl = None,
234+
ObjCImplementationControl impControl = ObjCImplementationControl::None,
239235
bool HasRelatedResultType = false);
240236

241237
static ObjCMethodDecl *CreateDeserialized(ASTContext &C, unsigned ID);
@@ -495,16 +491,17 @@ class ObjCMethodDecl : public NamedDecl, public DeclContext {
495491
const ObjCPropertyDecl *findPropertyDecl(bool CheckOverrides = true) const;
496492

497493
// Related to protocols declared in \@protocol
498-
void setDeclImplementation(ImplementationControl ic) {
499-
ObjCMethodDeclBits.DeclImplementation = ic;
494+
void setDeclImplementation(ObjCImplementationControl ic) {
495+
ObjCMethodDeclBits.DeclImplementation = llvm::to_underlying(ic);
500496
}
501497

502-
ImplementationControl getImplementationControl() const {
503-
return ImplementationControl(ObjCMethodDeclBits.DeclImplementation);
498+
ObjCImplementationControl getImplementationControl() const {
499+
return static_cast<ObjCImplementationControl>(
500+
ObjCMethodDeclBits.DeclImplementation);
504501
}
505502

506503
bool isOptional() const {
507-
return getImplementationControl() == Optional;
504+
return getImplementationControl() == ObjCImplementationControl::Optional;
508505
}
509506

510507
/// Returns true if this specific method declaration is marked with the

clang/include/clang/AST/DeclOpenMP.h

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -171,14 +171,7 @@ class OMPThreadPrivateDecl final : public OMPDeclarativeDirective<Decl> {
171171
class OMPDeclareReductionDecl final : public ValueDecl, public DeclContext {
172172
// This class stores some data in DeclContext::OMPDeclareReductionDeclBits
173173
// to save some space. Use the provided accessors to access it.
174-
public:
175-
enum InitKind {
176-
CallInit, // Initialized by function call.
177-
DirectInit, // omp_priv(<expr>)
178-
CopyInit // omp_priv = <expr>
179-
};
180174

181-
private:
182175
friend class ASTDeclReader;
183176
/// Combiner for declare reduction construct.
184177
Expr *Combiner = nullptr;
@@ -239,8 +232,9 @@ class OMPDeclareReductionDecl final : public ValueDecl, public DeclContext {
239232
Expr *getInitializer() { return Initializer; }
240233
const Expr *getInitializer() const { return Initializer; }
241234
/// Get initializer kind.
242-
InitKind getInitializerKind() const {
243-
return static_cast<InitKind>(OMPDeclareReductionDeclBits.InitializerKind);
235+
OMPDeclareReductionInitKind getInitializerKind() const {
236+
return static_cast<OMPDeclareReductionInitKind>(
237+
OMPDeclareReductionDeclBits.InitializerKind);
244238
}
245239
/// Get Orig variable of the initializer.
246240
Expr *getInitOrig() { return Orig; }
@@ -249,9 +243,9 @@ class OMPDeclareReductionDecl final : public ValueDecl, public DeclContext {
249243
Expr *getInitPriv() { return Priv; }
250244
const Expr *getInitPriv() const { return Priv; }
251245
/// Set initializer expression for the declare reduction construct.
252-
void setInitializer(Expr *E, InitKind IK) {
246+
void setInitializer(Expr *E, OMPDeclareReductionInitKind IK) {
253247
Initializer = E;
254-
OMPDeclareReductionDeclBits.InitializerKind = IK;
248+
OMPDeclareReductionDeclBits.InitializerKind = llvm::to_underlying(IK);
255249
}
256250
/// Set initializer Orig and Priv vars.
257251
void setInitializerData(Expr *OrigE, Expr *PrivE) {

clang/lib/ARCMigrate/ObjCMT.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -636,7 +636,7 @@ ClassImplementsAllMethodsAndProperties(ASTContext &Ctx,
636636
for (const auto *MD : PDecl->methods()) {
637637
if (MD->isImplicit())
638638
continue;
639-
if (MD->getImplementationControl() == ObjCMethodDecl::Optional)
639+
if (MD->getImplementationControl() == ObjCImplementationControl::Optional)
640640
continue;
641641
DeclContext::lookup_result R = ImpDecl->lookup(MD->getDeclName());
642642
if (R.empty())

clang/lib/AST/ASTImporter.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4476,6 +4476,17 @@ ExpectedDecl ASTNodeImporter::VisitVarDecl(VarDecl *D) {
44764476
auto ToVTOrErr = import(D->getDescribedVarTemplate());
44774477
if (!ToVTOrErr)
44784478
return ToVTOrErr.takeError();
4479+
} else if (MemberSpecializationInfo *MSI = D->getMemberSpecializationInfo()) {
4480+
TemplateSpecializationKind SK = MSI->getTemplateSpecializationKind();
4481+
VarDecl *FromInst = D->getInstantiatedFromStaticDataMember();
4482+
if (Expected<VarDecl *> ToInstOrErr = import(FromInst))
4483+
ToVar->setInstantiationOfStaticDataMember(*ToInstOrErr, SK);
4484+
else
4485+
return ToInstOrErr.takeError();
4486+
if (ExpectedSLoc POIOrErr = import(MSI->getPointOfInstantiation()))
4487+
ToVar->getMemberSpecializationInfo()->setPointOfInstantiation(*POIOrErr);
4488+
else
4489+
return POIOrErr.takeError();
44794490
}
44804491

44814492
if (Error Err = ImportInitializer(D, ToVar))

clang/lib/AST/DeclObjC.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -825,7 +825,7 @@ ObjCMethodDecl::ObjCMethodDecl(
825825
QualType T, TypeSourceInfo *ReturnTInfo, DeclContext *contextDecl,
826826
bool isInstance, bool isVariadic, bool isPropertyAccessor,
827827
bool isSynthesizedAccessorStub, bool isImplicitlyDeclared, bool isDefined,
828-
ImplementationControl impControl, bool HasRelatedResultType)
828+
ObjCImplementationControl impControl, bool HasRelatedResultType)
829829
: NamedDecl(ObjCMethod, contextDecl, beginLoc, SelInfo),
830830
DeclContext(ObjCMethod), MethodDeclType(T), ReturnTInfo(ReturnTInfo),
831831
DeclEndLoc(endLoc) {
@@ -855,8 +855,8 @@ ObjCMethodDecl *ObjCMethodDecl::Create(
855855
Selector SelInfo, QualType T, TypeSourceInfo *ReturnTInfo,
856856
DeclContext *contextDecl, bool isInstance, bool isVariadic,
857857
bool isPropertyAccessor, bool isSynthesizedAccessorStub,
858-
bool isImplicitlyDeclared, bool isDefined, ImplementationControl impControl,
859-
bool HasRelatedResultType) {
858+
bool isImplicitlyDeclared, bool isDefined,
859+
ObjCImplementationControl impControl, bool HasRelatedResultType) {
860860
return new (C, contextDecl) ObjCMethodDecl(
861861
beginLoc, endLoc, SelInfo, T, ReturnTInfo, contextDecl, isInstance,
862862
isVariadic, isPropertyAccessor, isSynthesizedAccessorStub,

clang/lib/AST/DeclOpenMP.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ OMPDeclareReductionDecl::OMPDeclareReductionDecl(
104104
QualType Ty, OMPDeclareReductionDecl *PrevDeclInScope)
105105
: ValueDecl(DK, DC, L, Name, Ty), DeclContext(DK), Combiner(nullptr),
106106
PrevDeclInScope(PrevDeclInScope) {
107-
setInitializer(nullptr, CallInit);
107+
setInitializer(nullptr, OMPDeclareReductionInitKind::Call);
108108
}
109109

110110
void OMPDeclareReductionDecl::anchor() {}

clang/lib/AST/DeclPrinter.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1866,17 +1866,17 @@ void DeclPrinter::VisitOMPDeclareReductionDecl(OMPDeclareReductionDecl *D) {
18661866
if (auto *Init = D->getInitializer()) {
18671867
Out << " initializer(";
18681868
switch (D->getInitializerKind()) {
1869-
case OMPDeclareReductionDecl::DirectInit:
1869+
case OMPDeclareReductionInitKind::Direct:
18701870
Out << "omp_priv(";
18711871
break;
1872-
case OMPDeclareReductionDecl::CopyInit:
1872+
case OMPDeclareReductionInitKind::Copy:
18731873
Out << "omp_priv = ";
18741874
break;
1875-
case OMPDeclareReductionDecl::CallInit:
1875+
case OMPDeclareReductionInitKind::Call:
18761876
break;
18771877
}
18781878
Init->printPretty(Out, nullptr, Policy, 0, "\n", &Context);
1879-
if (D->getInitializerKind() == OMPDeclareReductionDecl::DirectInit)
1879+
if (D->getInitializerKind() == OMPDeclareReductionInitKind::Direct)
18801880
Out << ")";
18811881
Out << ")";
18821882
}

clang/lib/AST/ODRDiagsEmitter.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -461,8 +461,10 @@ bool ODRDiagsEmitter::diagnoseSubMismatchObjCMethod(
461461
}
462462
if (FirstMethod->getImplementationControl() !=
463463
SecondMethod->getImplementationControl()) {
464-
DiagError(ControlLevel) << FirstMethod->getImplementationControl();
465-
DiagNote(ControlLevel) << SecondMethod->getImplementationControl();
464+
DiagError(ControlLevel)
465+
<< llvm::to_underlying(FirstMethod->getImplementationControl());
466+
DiagNote(ControlLevel) << llvm::to_underlying(
467+
SecondMethod->getImplementationControl());
466468
return true;
467469
}
468470
if (FirstMethod->isThisDeclarationADesignatedInitializer() !=

clang/lib/AST/ODRHash.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -380,7 +380,7 @@ class ODRDeclVisitor : public ConstDeclVisitor<ODRDeclVisitor> {
380380
Hash.AddBoolean(Method->isThisDeclarationADesignatedInitializer());
381381
Hash.AddBoolean(Method->hasSkippedBody());
382382

383-
ID.AddInteger(Method->getImplementationControl());
383+
ID.AddInteger(llvm::to_underlying(Method->getImplementationControl()));
384384
ID.AddInteger(Method->getMethodFamily());
385385
ImplicitParamDecl *Cmd = Method->getCmdDecl();
386386
Hash.AddBoolean(Cmd);

clang/lib/AST/TextNodeDumper.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2078,13 +2078,13 @@ void TextNodeDumper::VisitOMPDeclareReductionDecl(
20782078
OS << " initializer";
20792079
dumpPointer(Initializer);
20802080
switch (D->getInitializerKind()) {
2081-
case OMPDeclareReductionDecl::DirectInit:
2081+
case OMPDeclareReductionInitKind::Direct:
20822082
OS << " omp_priv = ";
20832083
break;
2084-
case OMPDeclareReductionDecl::CopyInit:
2084+
case OMPDeclareReductionInitKind::Copy:
20852085
OS << " omp_priv ()";
20862086
break;
2087-
case OMPDeclareReductionDecl::CallInit:
2087+
case OMPDeclareReductionInitKind::Call:
20882088
break;
20892089
}
20902090
}

clang/lib/CodeGen/CGOpenMPRuntime.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1133,7 +1133,7 @@ void CGOpenMPRuntime::emitUserDefinedReduction(
11331133
if (const Expr *Init = D->getInitializer()) {
11341134
Initializer = emitCombinerOrInitializer(
11351135
CGM, D->getType(),
1136-
D->getInitializerKind() == OMPDeclareReductionDecl::CallInit ? Init
1136+
D->getInitializerKind() == OMPDeclareReductionInitKind::Call ? Init
11371137
: nullptr,
11381138
cast<VarDecl>(cast<DeclRefExpr>(D->getInitOrig())->getDecl()),
11391139
cast<VarDecl>(cast<DeclRefExpr>(D->getInitPriv())->getDecl()),

clang/lib/CodeGen/CodeGenModule.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6485,7 +6485,7 @@ void CodeGenModule::EmitObjCIvarInitializations(ObjCImplementationDecl *D) {
64856485
/*isInstance=*/true, /*isVariadic=*/false,
64866486
/*isPropertyAccessor=*/true, /*isSynthesizedAccessorStub=*/false,
64876487
/*isImplicitlyDeclared=*/true,
6488-
/*isDefined=*/false, ObjCMethodDecl::Required);
6488+
/*isDefined=*/false, ObjCImplementationControl::Required);
64896489
D->addInstanceMethod(DTORMethod);
64906490
CodeGenFunction(*this).GenerateObjCCtorDtorMethod(D, DTORMethod, false);
64916491
D->setHasDestructors(true);
@@ -6506,7 +6506,7 @@ void CodeGenModule::EmitObjCIvarInitializations(ObjCImplementationDecl *D) {
65066506
/*isVariadic=*/false,
65076507
/*isPropertyAccessor=*/true, /*isSynthesizedAccessorStub=*/false,
65086508
/*isImplicitlyDeclared=*/true,
6509-
/*isDefined=*/false, ObjCMethodDecl::Required);
6509+
/*isDefined=*/false, ObjCImplementationControl::Required);
65106510
D->addInstanceMethod(CTORMethod);
65116511
CodeGenFunction(*this).GenerateObjCCtorDtorMethod(D, CTORMethod, true);
65126512
D->setHasNonZeroConstructors(true);

clang/lib/Frontend/Rewrite/RewriteModernObjC.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6855,15 +6855,15 @@ void RewriteModernObjC::RewriteObjCProtocolMetaData(ObjCProtocolDecl *PDecl,
68556855
std::vector<ObjCMethodDecl *> InstanceMethods, ClassMethods;
68566856
std::vector<ObjCMethodDecl *> OptInstanceMethods, OptClassMethods;
68576857
for (auto *MD : PDecl->instance_methods()) {
6858-
if (MD->getImplementationControl() == ObjCMethodDecl::Optional) {
6858+
if (MD->getImplementationControl() == ObjCImplementationControl::Optional) {
68596859
OptInstanceMethods.push_back(MD);
68606860
} else {
68616861
InstanceMethods.push_back(MD);
68626862
}
68636863
}
68646864

68656865
for (auto *MD : PDecl->class_methods()) {
6866-
if (MD->getImplementationControl() == ObjCMethodDecl::Optional) {
6866+
if (MD->getImplementationControl() == ObjCImplementationControl::Optional) {
68676867
OptClassMethods.push_back(MD);
68686868
} else {
68696869
ClassMethods.push_back(MD);

clang/lib/Sema/SemaDeclObjC.cpp

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -2632,7 +2632,8 @@ void Sema::WarnExactTypedMethods(ObjCMethodDecl *ImpMethodDecl,
26322632
// don't issue warning when protocol method is optional because primary
26332633
// class is not required to implement it and it is safe for protocol
26342634
// to implement it.
2635-
if (MethodDecl->getImplementationControl() == ObjCMethodDecl::Optional)
2635+
if (MethodDecl->getImplementationControl() ==
2636+
ObjCImplementationControl::Optional)
26362637
return;
26372638
// don't issue warning when primary class's method is
26382639
// deprecated/unavailable.
@@ -2765,45 +2766,43 @@ static void CheckProtocolMethodDefs(
27652766
// check unimplemented instance methods.
27662767
if (!NSIDecl)
27672768
for (auto *method : PDecl->instance_methods()) {
2768-
if (method->getImplementationControl() != ObjCMethodDecl::Optional &&
2769+
if (method->getImplementationControl() !=
2770+
ObjCImplementationControl::Optional &&
27692771
!method->isPropertyAccessor() &&
27702772
!InsMap.count(method->getSelector()) &&
2771-
(!Super || !Super->lookupMethod(method->getSelector(),
2772-
true /* instance */,
2773-
false /* shallowCategory */,
2774-
true /* followsSuper */,
2775-
nullptr /* category */))) {
2776-
// If a method is not implemented in the category implementation but
2777-
// has been declared in its primary class, superclass,
2778-
// or in one of their protocols, no need to issue the warning.
2779-
// This is because method will be implemented in the primary class
2780-
// or one of its super class implementation.
2781-
2782-
// Ugly, but necessary. Method declared in protocol might have
2783-
// have been synthesized due to a property declared in the class which
2784-
// uses the protocol.
2785-
if (ObjCMethodDecl *MethodInClass =
2786-
IDecl->lookupMethod(method->getSelector(),
2787-
true /* instance */,
2788-
true /* shallowCategoryLookup */,
2789-
false /* followSuper */))
2790-
if (C || MethodInClass->isPropertyAccessor())
2791-
continue;
2792-
unsigned DIAG = diag::warn_unimplemented_protocol_method;
2793-
if (!S.Diags.isIgnored(DIAG, Impl->getLocation())) {
2794-
WarnUndefinedMethod(S, Impl, method, IncompleteImpl, DIAG, PDecl);
2795-
}
2796-
}
2773+
(!Super || !Super->lookupMethod(
2774+
method->getSelector(), true /* instance */,
2775+
false /* shallowCategory */, true /* followsSuper */,
2776+
nullptr /* category */))) {
2777+
// If a method is not implemented in the category implementation but
2778+
// has been declared in its primary class, superclass,
2779+
// or in one of their protocols, no need to issue the warning.
2780+
// This is because method will be implemented in the primary class
2781+
// or one of its super class implementation.
2782+
2783+
// Ugly, but necessary. Method declared in protocol might have
2784+
// have been synthesized due to a property declared in the class which
2785+
// uses the protocol.
2786+
if (ObjCMethodDecl *MethodInClass = IDecl->lookupMethod(
2787+
method->getSelector(), true /* instance */,
2788+
true /* shallowCategoryLookup */, false /* followSuper */))
2789+
if (C || MethodInClass->isPropertyAccessor())
2790+
continue;
2791+
unsigned DIAG = diag::warn_unimplemented_protocol_method;
2792+
if (!S.Diags.isIgnored(DIAG, Impl->getLocation())) {
2793+
WarnUndefinedMethod(S, Impl, method, IncompleteImpl, DIAG, PDecl);
2794+
}
2795+
}
27972796
}
27982797
// check unimplemented class methods
27992798
for (auto *method : PDecl->class_methods()) {
2800-
if (method->getImplementationControl() != ObjCMethodDecl::Optional &&
2799+
if (method->getImplementationControl() !=
2800+
ObjCImplementationControl::Optional &&
28012801
!ClsMap.count(method->getSelector()) &&
2802-
(!Super || !Super->lookupMethod(method->getSelector(),
2803-
false /* class method */,
2804-
false /* shallowCategoryLookup */,
2805-
true /* followSuper */,
2806-
nullptr /* category */))) {
2802+
(!Super || !Super->lookupMethod(
2803+
method->getSelector(), false /* class method */,
2804+
false /* shallowCategoryLookup */,
2805+
true /* followSuper */, nullptr /* category */))) {
28072806
// See above comment for instance method lookups.
28082807
if (C && IDecl->lookupMethod(method->getSelector(),
28092808
false /* class */,
@@ -4759,8 +4758,9 @@ Decl *Sema::ActOnMethodDeclaration(
47594758
MethodType == tok::minus, isVariadic,
47604759
/*isPropertyAccessor=*/false, /*isSynthesizedAccessorStub=*/false,
47614760
/*isImplicitlyDeclared=*/false, /*isDefined=*/false,
4762-
MethodDeclKind == tok::objc_optional ? ObjCMethodDecl::Optional
4763-
: ObjCMethodDecl::Required,
4761+
MethodDeclKind == tok::objc_optional
4762+
? ObjCImplementationControl::Optional
4763+
: ObjCImplementationControl::Required,
47644764
HasRelatedResultType);
47654765

47664766
SmallVector<ParmVarDecl*, 16> Params;

0 commit comments

Comments
 (0)