Skip to content

Commit bcb8853

Browse files
committed
Merge remote-tracking branch 'origin/main' into laa-nonconst-dist-forward
2 parents 2e5a807 + 5964c94 commit bcb8853

File tree

362 files changed

+15773
-11231
lines changed

Some content is hidden

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

362 files changed

+15773
-11231
lines changed

clang-tools-extra/clangd/unittests/HoverTests.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1983,10 +1983,14 @@ TEST(Hover, All) {
19831983
HI.Kind = index::SymbolKind::Macro;
19841984
HI.Definition =
19851985
R"cpp(#define MACRO \
1986-
{ return 0; }
1986+
{ \
1987+
return 0; \
1988+
}
19871989
19881990
// Expands to
1989-
{ return 0; })cpp";
1991+
{
1992+
return 0;
1993+
})cpp";
19901994
}},
19911995
{
19921996
R"cpp(// Forward class declaration

clang/docs/HIPSupport.rst

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,20 @@ Host Code Compilation
208208
- These relocatable objects are then linked together.
209209
- Host code within a TU can call host functions and launch kernels from another TU.
210210

211+
Syntax Difference with CUDA
212+
===========================
213+
214+
Clang's front end, used for both CUDA and HIP programming models, shares the same parsing and semantic analysis mechanisms. This includes the resolution of overloads concerning device and host functions. While there exists a comprehensive documentation on the syntax differences between Clang and NVCC for CUDA at `Dialect Differences Between Clang and NVCC <https://llvm.org/docs/CompileCudaWithLLVM.html#dialect-differences-between-clang-and-nvcc>`_, it is important to note that these differences also apply to HIP code compilation.
215+
216+
Predefined Macros for Differentiation
217+
-------------------------------------
218+
219+
To facilitate differentiation between HIP and CUDA code, as well as between device and host compilations within HIP, Clang defines specific macros:
220+
221+
- ``__HIP__`` : This macro is defined only when compiling HIP code. It can be used to conditionally compile code specific to HIP, enabling developers to write portable code that can be compiled for both CUDA and HIP.
222+
223+
- ``__HIP_DEVICE_COMPILE__`` : Defined exclusively during HIP device compilation, this macro allows for conditional compilation of device-specific code. It provides a mechanism to segregate device and host code, ensuring that each can be optimized for their respective execution environments.
224+
211225
Function Pointers Support
212226
=========================
213227

clang/docs/ReleaseNotes.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -646,6 +646,9 @@ Fixed Point Support in Clang
646646
AST Matchers
647647
------------
648648

649+
- Fixes a long-standing performance issue in parent map generation for
650+
ancestry-based matchers such as ``hasParent`` and ``hasAncestor``, making
651+
them significantly faster.
649652
- ``isInStdNamespace`` now supports Decl declared with ``extern "C++"``.
650653
- Add ``isExplicitObjectMemberFunction``.
651654
- Fixed ``forEachArgumentWithParam`` and ``forEachArgumentWithParamType`` to

clang/docs/tools/clang-formatted-files.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2147,8 +2147,10 @@ flang/include/flang/Parser/message.h
21472147
flang/include/flang/Parser/parse-state.h
21482148
flang/include/flang/Parser/parse-tree-visitor.h
21492149
flang/include/flang/Parser/parsing.h
2150+
flang/include/flang/Parser/preprocessor.h
21502151
flang/include/flang/Parser/provenance.h
21512152
flang/include/flang/Parser/source.h
2153+
flang/include/flang/Parser/token-sequence.h
21522154
flang/include/flang/Parser/tools.h
21532155
flang/include/flang/Parser/unparse.h
21542156
flang/include/flang/Parser/user-state.h
@@ -2319,7 +2321,6 @@ flang/lib/Parser/openmp-parsers.cpp
23192321
flang/lib/Parser/parse-tree.cpp
23202322
flang/lib/Parser/parsing.cpp
23212323
flang/lib/Parser/preprocessor.cpp
2322-
flang/lib/Parser/preprocessor.h
23232324
flang/lib/Parser/prescan.cpp
23242325
flang/lib/Parser/prescan.h
23252326
flang/lib/Parser/program-parsers.cpp
@@ -2328,7 +2329,6 @@ flang/lib/Parser/source.cpp
23282329
flang/lib/Parser/stmt-parser.h
23292330
flang/lib/Parser/token-parsers.h
23302331
flang/lib/Parser/token-sequence.cpp
2331-
flang/lib/Parser/token-sequence.h
23322332
flang/lib/Parser/tools.cpp
23332333
flang/lib/Parser/type-parser-implementation.h
23342334
flang/lib/Parser/type-parsers.h

clang/include/clang/AST/ASTContext.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3411,13 +3411,13 @@ const StreamingDiagnostic &operator<<(const StreamingDiagnostic &DB,
34113411

34123412
/// Utility function for constructing a nullary selector.
34133413
inline Selector GetNullarySelector(StringRef name, ASTContext &Ctx) {
3414-
IdentifierInfo* II = &Ctx.Idents.get(name);
3414+
const IdentifierInfo *II = &Ctx.Idents.get(name);
34153415
return Ctx.Selectors.getSelector(0, &II);
34163416
}
34173417

34183418
/// Utility function for constructing an unary selector.
34193419
inline Selector GetUnarySelector(StringRef name, ASTContext &Ctx) {
3420-
IdentifierInfo* II = &Ctx.Idents.get(name);
3420+
const IdentifierInfo *II = &Ctx.Idents.get(name);
34213421
return Ctx.Selectors.getSelector(1, &II);
34223422
}
34233423

clang/include/clang/AST/Decl.h

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1731,7 +1731,7 @@ class ImplicitParamDecl : public VarDecl {
17311731
static ImplicitParamDecl *CreateDeserialized(ASTContext &C, unsigned ID);
17321732

17331733
ImplicitParamDecl(ASTContext &C, DeclContext *DC, SourceLocation IdLoc,
1734-
IdentifierInfo *Id, QualType Type,
1734+
const IdentifierInfo *Id, QualType Type,
17351735
ImplicitParamKind ParamKind)
17361736
: VarDecl(ImplicitParam, C, DC, IdLoc, IdLoc, Id, Type,
17371737
/*TInfo=*/nullptr, SC_None) {
@@ -1765,7 +1765,7 @@ class ParmVarDecl : public VarDecl {
17651765

17661766
protected:
17671767
ParmVarDecl(Kind DK, ASTContext &C, DeclContext *DC, SourceLocation StartLoc,
1768-
SourceLocation IdLoc, IdentifierInfo *Id, QualType T,
1768+
SourceLocation IdLoc, const IdentifierInfo *Id, QualType T,
17691769
TypeSourceInfo *TInfo, StorageClass S, Expr *DefArg)
17701770
: VarDecl(DK, C, DC, StartLoc, IdLoc, Id, T, TInfo, S) {
17711771
assert(ParmVarDeclBits.HasInheritedDefaultArg == false);
@@ -1777,10 +1777,10 @@ class ParmVarDecl : public VarDecl {
17771777

17781778
public:
17791779
static ParmVarDecl *Create(ASTContext &C, DeclContext *DC,
1780-
SourceLocation StartLoc,
1781-
SourceLocation IdLoc, IdentifierInfo *Id,
1782-
QualType T, TypeSourceInfo *TInfo,
1783-
StorageClass S, Expr *DefArg);
1780+
SourceLocation StartLoc, SourceLocation IdLoc,
1781+
const IdentifierInfo *Id, QualType T,
1782+
TypeSourceInfo *TInfo, StorageClass S,
1783+
Expr *DefArg);
17841784

17851785
static ParmVarDecl *CreateDeserialized(ASTContext &C, unsigned ID);
17861786

@@ -3095,7 +3095,7 @@ class FieldDecl : public DeclaratorDecl, public Mergeable<FieldDecl> {
30953095

30963096
protected:
30973097
FieldDecl(Kind DK, DeclContext *DC, SourceLocation StartLoc,
3098-
SourceLocation IdLoc, IdentifierInfo *Id, QualType T,
3098+
SourceLocation IdLoc, const IdentifierInfo *Id, QualType T,
30993099
TypeSourceInfo *TInfo, Expr *BW, bool Mutable,
31003100
InClassInitStyle InitStyle)
31013101
: DeclaratorDecl(DK, DC, IdLoc, Id, T, TInfo, StartLoc), BitField(false),
@@ -3111,7 +3111,7 @@ class FieldDecl : public DeclaratorDecl, public Mergeable<FieldDecl> {
31113111

31123112
static FieldDecl *Create(const ASTContext &C, DeclContext *DC,
31133113
SourceLocation StartLoc, SourceLocation IdLoc,
3114-
IdentifierInfo *Id, QualType T,
3114+
const IdentifierInfo *Id, QualType T,
31153115
TypeSourceInfo *TInfo, Expr *BW, bool Mutable,
31163116
InClassInitStyle InitStyle);
31173117

@@ -3332,8 +3332,9 @@ class IndirectFieldDecl : public ValueDecl,
33323332
friend class ASTDeclReader;
33333333

33343334
static IndirectFieldDecl *Create(ASTContext &C, DeclContext *DC,
3335-
SourceLocation L, IdentifierInfo *Id,
3336-
QualType T, llvm::MutableArrayRef<NamedDecl *> CH);
3335+
SourceLocation L, const IdentifierInfo *Id,
3336+
QualType T,
3337+
llvm::MutableArrayRef<NamedDecl *> CH);
33373338

33383339
static IndirectFieldDecl *CreateDeserialized(ASTContext &C, unsigned ID);
33393340

@@ -3381,9 +3382,9 @@ class TypeDecl : public NamedDecl {
33813382
void anchor() override;
33823383

33833384
protected:
3384-
TypeDecl(Kind DK, DeclContext *DC, SourceLocation L, IdentifierInfo *Id,
3385+
TypeDecl(Kind DK, DeclContext *DC, SourceLocation L, const IdentifierInfo *Id,
33853386
SourceLocation StartL = SourceLocation())
3386-
: NamedDecl(DK, DC, L, Id), LocStart(StartL) {}
3387+
: NamedDecl(DK, DC, L, Id), LocStart(StartL) {}
33873388

33883389
public:
33893390
// Low-level accessor. If you just want the type defined by this node,
@@ -3425,7 +3426,7 @@ class TypedefNameDecl : public TypeDecl, public Redeclarable<TypedefNameDecl> {
34253426
protected:
34263427
TypedefNameDecl(Kind DK, ASTContext &C, DeclContext *DC,
34273428
SourceLocation StartLoc, SourceLocation IdLoc,
3428-
IdentifierInfo *Id, TypeSourceInfo *TInfo)
3429+
const IdentifierInfo *Id, TypeSourceInfo *TInfo)
34293430
: TypeDecl(DK, DC, IdLoc, Id, StartLoc), redeclarable_base(C),
34303431
MaybeModedTInfo(TInfo, 0) {}
34313432

@@ -3512,13 +3513,14 @@ class TypedefNameDecl : public TypeDecl, public Redeclarable<TypedefNameDecl> {
35123513
/// type specifier.
35133514
class TypedefDecl : public TypedefNameDecl {
35143515
TypedefDecl(ASTContext &C, DeclContext *DC, SourceLocation StartLoc,
3515-
SourceLocation IdLoc, IdentifierInfo *Id, TypeSourceInfo *TInfo)
3516+
SourceLocation IdLoc, const IdentifierInfo *Id,
3517+
TypeSourceInfo *TInfo)
35163518
: TypedefNameDecl(Typedef, C, DC, StartLoc, IdLoc, Id, TInfo) {}
35173519

35183520
public:
35193521
static TypedefDecl *Create(ASTContext &C, DeclContext *DC,
35203522
SourceLocation StartLoc, SourceLocation IdLoc,
3521-
IdentifierInfo *Id, TypeSourceInfo *TInfo);
3523+
const IdentifierInfo *Id, TypeSourceInfo *TInfo);
35223524
static TypedefDecl *CreateDeserialized(ASTContext &C, unsigned ID);
35233525

35243526
SourceRange getSourceRange() const override LLVM_READONLY;
@@ -3535,14 +3537,15 @@ class TypeAliasDecl : public TypedefNameDecl {
35353537
TypeAliasTemplateDecl *Template;
35363538

35373539
TypeAliasDecl(ASTContext &C, DeclContext *DC, SourceLocation StartLoc,
3538-
SourceLocation IdLoc, IdentifierInfo *Id, TypeSourceInfo *TInfo)
3540+
SourceLocation IdLoc, const IdentifierInfo *Id,
3541+
TypeSourceInfo *TInfo)
35393542
: TypedefNameDecl(TypeAlias, C, DC, StartLoc, IdLoc, Id, TInfo),
35403543
Template(nullptr) {}
35413544

35423545
public:
35433546
static TypeAliasDecl *Create(ASTContext &C, DeclContext *DC,
35443547
SourceLocation StartLoc, SourceLocation IdLoc,
3545-
IdentifierInfo *Id, TypeSourceInfo *TInfo);
3548+
const IdentifierInfo *Id, TypeSourceInfo *TInfo);
35463549
static TypeAliasDecl *CreateDeserialized(ASTContext &C, unsigned ID);
35473550

35483551
SourceRange getSourceRange() const override LLVM_READONLY;

clang/include/clang/AST/DeclObjC.h

Lines changed: 42 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -772,7 +772,7 @@ class ObjCPropertyDecl : public NamedDecl {
772772
// Synthesize ivar for this property
773773
ObjCIvarDecl *PropertyIvarDecl = nullptr;
774774

775-
ObjCPropertyDecl(DeclContext *DC, SourceLocation L, IdentifierInfo *Id,
775+
ObjCPropertyDecl(DeclContext *DC, SourceLocation L, const IdentifierInfo *Id,
776776
SourceLocation AtLocation, SourceLocation LParenLocation,
777777
QualType T, TypeSourceInfo *TSI, PropertyControl propControl)
778778
: NamedDecl(ObjCProperty, DC, L, Id), AtLoc(AtLocation),
@@ -782,10 +782,12 @@ class ObjCPropertyDecl : public NamedDecl {
782782
PropertyImplementation(propControl) {}
783783

784784
public:
785-
static ObjCPropertyDecl *
786-
Create(ASTContext &C, DeclContext *DC, SourceLocation L, IdentifierInfo *Id,
787-
SourceLocation AtLocation, SourceLocation LParenLocation, QualType T,
788-
TypeSourceInfo *TSI, PropertyControl propControl = None);
785+
static ObjCPropertyDecl *Create(ASTContext &C, DeclContext *DC,
786+
SourceLocation L, const IdentifierInfo *Id,
787+
SourceLocation AtLocation,
788+
SourceLocation LParenLocation, QualType T,
789+
TypeSourceInfo *TSI,
790+
PropertyControl propControl = None);
789791

790792
static ObjCPropertyDecl *CreateDeserialized(ASTContext &C, unsigned ID);
791793

@@ -952,7 +954,7 @@ class ObjCContainerDecl : public NamedDecl, public DeclContext {
952954
void anchor() override;
953955

954956
public:
955-
ObjCContainerDecl(Kind DK, DeclContext *DC, IdentifierInfo *Id,
957+
ObjCContainerDecl(Kind DK, DeclContext *DC, const IdentifierInfo *Id,
956958
SourceLocation nameLoc, SourceLocation atStartLoc);
957959

958960
// Iterator access to instance/class properties.
@@ -1240,7 +1242,7 @@ class ObjCInterfaceDecl : public ObjCContainerDecl
12401242
llvm::PointerIntPair<DefinitionData *, 1, bool> Data;
12411243

12421244
ObjCInterfaceDecl(const ASTContext &C, DeclContext *DC, SourceLocation AtLoc,
1243-
IdentifierInfo *Id, ObjCTypeParamList *typeParamList,
1245+
const IdentifierInfo *Id, ObjCTypeParamList *typeParamList,
12441246
SourceLocation CLoc, ObjCInterfaceDecl *PrevDecl,
12451247
bool IsInternal);
12461248

@@ -1271,13 +1273,11 @@ class ObjCInterfaceDecl : public ObjCContainerDecl
12711273
}
12721274

12731275
public:
1274-
static ObjCInterfaceDecl *Create(const ASTContext &C, DeclContext *DC,
1275-
SourceLocation atLoc,
1276-
IdentifierInfo *Id,
1277-
ObjCTypeParamList *typeParamList,
1278-
ObjCInterfaceDecl *PrevDecl,
1279-
SourceLocation ClassLoc = SourceLocation(),
1280-
bool isInternal = false);
1276+
static ObjCInterfaceDecl *
1277+
Create(const ASTContext &C, DeclContext *DC, SourceLocation atLoc,
1278+
const IdentifierInfo *Id, ObjCTypeParamList *typeParamList,
1279+
ObjCInterfaceDecl *PrevDecl,
1280+
SourceLocation ClassLoc = SourceLocation(), bool isInternal = false);
12811281

12821282
static ObjCInterfaceDecl *CreateDeserialized(const ASTContext &C, unsigned ID);
12831283

@@ -1338,7 +1338,8 @@ class ObjCInterfaceDecl : public ObjCContainerDecl
13381338
ObjCImplementationDecl *getImplementation() const;
13391339
void setImplementation(ObjCImplementationDecl *ImplD);
13401340

1341-
ObjCCategoryDecl *FindCategoryDeclaration(IdentifierInfo *CategoryId) const;
1341+
ObjCCategoryDecl *
1342+
FindCategoryDeclaration(const IdentifierInfo *CategoryId) const;
13421343

13431344
// Get the local instance/class method declared in a category.
13441345
ObjCMethodDecl *getCategoryInstanceMethod(Selector Sel) const;
@@ -1794,9 +1795,9 @@ class ObjCInterfaceDecl : public ObjCContainerDecl
17941795
data().CategoryList = category;
17951796
}
17961797

1797-
ObjCPropertyDecl
1798-
*FindPropertyVisibleInPrimaryClass(IdentifierInfo *PropertyId,
1799-
ObjCPropertyQueryKind QueryKind) const;
1798+
ObjCPropertyDecl *
1799+
FindPropertyVisibleInPrimaryClass(const IdentifierInfo *PropertyId,
1800+
ObjCPropertyQueryKind QueryKind) const;
18001801

18011802
void collectPropertiesToImplement(PropertyMap &PM) const override;
18021803

@@ -1954,8 +1955,8 @@ class ObjCIvarDecl : public FieldDecl {
19541955

19551956
private:
19561957
ObjCIvarDecl(ObjCContainerDecl *DC, SourceLocation StartLoc,
1957-
SourceLocation IdLoc, IdentifierInfo *Id,
1958-
QualType T, TypeSourceInfo *TInfo, AccessControl ac, Expr *BW,
1958+
SourceLocation IdLoc, const IdentifierInfo *Id, QualType T,
1959+
TypeSourceInfo *TInfo, AccessControl ac, Expr *BW,
19591960
bool synthesized)
19601961
: FieldDecl(ObjCIvar, DC, StartLoc, IdLoc, Id, T, TInfo, BW,
19611962
/*Mutable=*/false, /*HasInit=*/ICIS_NoInit),
@@ -1964,10 +1965,9 @@ class ObjCIvarDecl : public FieldDecl {
19641965
public:
19651966
static ObjCIvarDecl *Create(ASTContext &C, ObjCContainerDecl *DC,
19661967
SourceLocation StartLoc, SourceLocation IdLoc,
1967-
IdentifierInfo *Id, QualType T,
1968-
TypeSourceInfo *TInfo,
1969-
AccessControl ac, Expr *BW = nullptr,
1970-
bool synthesized=false);
1968+
const IdentifierInfo *Id, QualType T,
1969+
TypeSourceInfo *TInfo, AccessControl ac,
1970+
Expr *BW = nullptr, bool synthesized = false);
19711971

19721972
static ObjCIvarDecl *CreateDeserialized(ASTContext &C, unsigned ID);
19731973

@@ -2343,7 +2343,7 @@ class ObjCCategoryDecl : public ObjCContainerDecl {
23432343

23442344
ObjCCategoryDecl(DeclContext *DC, SourceLocation AtLoc,
23452345
SourceLocation ClassNameLoc, SourceLocation CategoryNameLoc,
2346-
IdentifierInfo *Id, ObjCInterfaceDecl *IDecl,
2346+
const IdentifierInfo *Id, ObjCInterfaceDecl *IDecl,
23472347
ObjCTypeParamList *typeParamList,
23482348
SourceLocation IvarLBraceLoc = SourceLocation(),
23492349
SourceLocation IvarRBraceLoc = SourceLocation());
@@ -2354,15 +2354,13 @@ class ObjCCategoryDecl : public ObjCContainerDecl {
23542354
friend class ASTDeclReader;
23552355
friend class ASTDeclWriter;
23562356

2357-
static ObjCCategoryDecl *Create(ASTContext &C, DeclContext *DC,
2358-
SourceLocation AtLoc,
2359-
SourceLocation ClassNameLoc,
2360-
SourceLocation CategoryNameLoc,
2361-
IdentifierInfo *Id,
2362-
ObjCInterfaceDecl *IDecl,
2363-
ObjCTypeParamList *typeParamList,
2364-
SourceLocation IvarLBraceLoc=SourceLocation(),
2365-
SourceLocation IvarRBraceLoc=SourceLocation());
2357+
static ObjCCategoryDecl *
2358+
Create(ASTContext &C, DeclContext *DC, SourceLocation AtLoc,
2359+
SourceLocation ClassNameLoc, SourceLocation CategoryNameLoc,
2360+
const IdentifierInfo *Id, ObjCInterfaceDecl *IDecl,
2361+
ObjCTypeParamList *typeParamList,
2362+
SourceLocation IvarLBraceLoc = SourceLocation(),
2363+
SourceLocation IvarRBraceLoc = SourceLocation());
23662364
static ObjCCategoryDecl *CreateDeserialized(ASTContext &C, unsigned ID);
23672365

23682366
ObjCInterfaceDecl *getClassInterface() { return ClassInterface; }
@@ -2472,10 +2470,9 @@ class ObjCImplDecl : public ObjCContainerDecl {
24722470
void anchor() override;
24732471

24742472
protected:
2475-
ObjCImplDecl(Kind DK, DeclContext *DC,
2476-
ObjCInterfaceDecl *classInterface,
2477-
IdentifierInfo *Id,
2478-
SourceLocation nameLoc, SourceLocation atStartLoc)
2473+
ObjCImplDecl(Kind DK, DeclContext *DC, ObjCInterfaceDecl *classInterface,
2474+
const IdentifierInfo *Id, SourceLocation nameLoc,
2475+
SourceLocation atStartLoc)
24792476
: ObjCContainerDecl(DK, DC, Id, nameLoc, atStartLoc),
24802477
ClassInterface(classInterface) {}
24812478

@@ -2543,12 +2540,12 @@ class ObjCCategoryImplDecl : public ObjCImplDecl {
25432540
// Category name location
25442541
SourceLocation CategoryNameLoc;
25452542

2546-
ObjCCategoryImplDecl(DeclContext *DC, IdentifierInfo *Id,
2543+
ObjCCategoryImplDecl(DeclContext *DC, const IdentifierInfo *Id,
25472544
ObjCInterfaceDecl *classInterface,
25482545
SourceLocation nameLoc, SourceLocation atStartLoc,
25492546
SourceLocation CategoryNameLoc)
2550-
: ObjCImplDecl(ObjCCategoryImpl, DC, classInterface, Id,
2551-
nameLoc, atStartLoc),
2547+
: ObjCImplDecl(ObjCCategoryImpl, DC, classInterface, Id, nameLoc,
2548+
atStartLoc),
25522549
CategoryNameLoc(CategoryNameLoc) {}
25532550

25542551
void anchor() override;
@@ -2557,12 +2554,10 @@ class ObjCCategoryImplDecl : public ObjCImplDecl {
25572554
friend class ASTDeclReader;
25582555
friend class ASTDeclWriter;
25592556

2560-
static ObjCCategoryImplDecl *Create(ASTContext &C, DeclContext *DC,
2561-
IdentifierInfo *Id,
2562-
ObjCInterfaceDecl *classInterface,
2563-
SourceLocation nameLoc,
2564-
SourceLocation atStartLoc,
2565-
SourceLocation CategoryNameLoc);
2557+
static ObjCCategoryImplDecl *
2558+
Create(ASTContext &C, DeclContext *DC, const IdentifierInfo *Id,
2559+
ObjCInterfaceDecl *classInterface, SourceLocation nameLoc,
2560+
SourceLocation atStartLoc, SourceLocation CategoryNameLoc);
25662561
static ObjCCategoryImplDecl *CreateDeserialized(ASTContext &C, unsigned ID);
25672562

25682563
ObjCCategoryDecl *getCategoryDecl() const;

0 commit comments

Comments
 (0)