[clang] [clang] Introduce `SemaObjC` (PR #89086)
via cfe-commits
cfe-commits at lists.llvm.org
Wed Apr 17 08:23:40 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang
Author: Vlad Serebrennikov (Endilll)
<details>
<summary>Changes</summary>
This is continuation of efforts to split `Sema` up, following the example of OpenMP, OpenACC, etc. Context can be found in https://github.com/llvm/llvm-project/pull/82217 and https://github.com/llvm/llvm-project/pull/84184.
I split formatting changes into a separate commit to help reviewing the actual changes.
---
Patch is 646.23 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/89086.diff
38 Files Affected:
- (modified) clang/include/clang/Parse/Parser.h (+6-5)
- (modified) clang/include/clang/Sema/Sema.h (+36-966)
- (added) clang/include/clang/Sema/SemaObjC.h (+1014)
- (modified) clang/lib/ARCMigrate/Transforms.cpp (+3-2)
- (modified) clang/lib/Parse/ParseDecl.cpp (+4-3)
- (modified) clang/lib/Parse/ParseExpr.cpp (+9-8)
- (modified) clang/lib/Parse/ParseInit.cpp (+5-4)
- (modified) clang/lib/Parse/ParseObjc.cpp (+118-137)
- (modified) clang/lib/Parse/ParseStmt.cpp (+5-6)
- (modified) clang/lib/Sema/CMakeLists.txt (+1)
- (modified) clang/lib/Sema/Sema.cpp (+6-8)
- (modified) clang/lib/Sema/SemaAPINotes.cpp (+2-1)
- (modified) clang/lib/Sema/SemaAttr.cpp (-16)
- (modified) clang/lib/Sema/SemaAvailability.cpp (+4-3)
- (modified) clang/lib/Sema/SemaCast.cpp (+7-6)
- (modified) clang/lib/Sema/SemaChecking.cpp (+12-516)
- (modified) clang/lib/Sema/SemaCodeComplete.cpp (+22-18)
- (modified) clang/lib/Sema/SemaDecl.cpp (+14-278)
- (modified) clang/lib/Sema/SemaDeclAttr.cpp (+6-5)
- (modified) clang/lib/Sema/SemaDeclCXX.cpp (+2-56)
- (modified) clang/lib/Sema/SemaDeclObjC.cpp (+873-567)
- (modified) clang/lib/Sema/SemaExpr.cpp (+46-513)
- (modified) clang/lib/Sema/SemaExprCXX.cpp (+9-8)
- (modified) clang/lib/Sema/SemaExprMember.cpp (+6-6)
- (modified) clang/lib/Sema/SemaExprObjC.cpp (+914-428)
- (modified) clang/lib/Sema/SemaInit.cpp (+9-8)
- (modified) clang/lib/Sema/SemaLookup.cpp (-9)
- (added) clang/lib/Sema/SemaObjC.cpp (+1486)
- (modified) clang/lib/Sema/SemaObjCProperty.cpp (+136-154)
- (modified) clang/lib/Sema/SemaOverload.cpp (+6-72)
- (modified) clang/lib/Sema/SemaPseudoObject.cpp (+53-133)
- (modified) clang/lib/Sema/SemaStmt.cpp (+4-303)
- (modified) clang/lib/Sema/SemaTemplateInstantiateDecl.cpp (+2-1)
- (modified) clang/lib/Sema/SemaType.cpp (+5-460)
- (modified) clang/lib/Sema/TreeTransform.h (+52-61)
- (modified) clang/lib/Serialization/ASTCommon.cpp (+1-1)
- (modified) clang/lib/Serialization/ASTReader.cpp (+9-6)
- (modified) clang/lib/Serialization/ASTWriter.cpp (+8-6)
``````````diff
diff --git a/clang/include/clang/Parse/Parser.h b/clang/include/clang/Parse/Parser.h
index 23b268126de4e0..9e30b5f74a3dd6 100644
--- a/clang/include/clang/Parse/Parser.h
+++ b/clang/include/clang/Parse/Parser.h
@@ -18,6 +18,7 @@
#include "clang/Lex/CodeCompletionHandler.h"
#include "clang/Lex/Preprocessor.h"
#include "clang/Sema/Sema.h"
+#include "clang/Sema/SemaObjC.h"
#include "clang/Sema/SemaOpenMP.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/Frontend/OpenMP/OMPContext.h"
@@ -421,8 +422,8 @@ class Parser : public CodeCompletionHandler {
/// True if we are within an Objective-C container while parsing C-like decls.
///
/// This is necessary because Sema thinks we have left the container
- /// to parse the C-like decls, meaning Actions.getObjCDeclContext() will
- /// be NULL.
+ /// to parse the C-like decls, meaning Actions.ObjC().getObjCDeclContext()
+ /// will be NULL.
bool ParsingInObjCContainer;
/// Whether to skip parsing of function bodies.
@@ -473,7 +474,7 @@ class Parser : public CodeCompletionHandler {
}
ObjCContainerDecl *getObjCDeclContext() const {
- return Actions.getObjCDeclContext();
+ return Actions.ObjC().getObjCDeclContext();
}
// Type forwarding. All of these are statically 'void*', but they may all be
@@ -1059,11 +1060,11 @@ class Parser : public CodeCompletionHandler {
: P(p), DC(p.getObjCDeclContext()),
WithinObjCContainer(P.ParsingInObjCContainer, DC != nullptr) {
if (DC)
- P.Actions.ActOnObjCTemporaryExitContainerContext(DC);
+ P.Actions.ObjC().ActOnObjCTemporaryExitContainerContext(DC);
}
~ObjCDeclContextSwitch() {
if (DC)
- P.Actions.ActOnObjCReenterContainerContext(DC);
+ P.Actions.ObjC().ActOnObjCReenterContainerContext(DC);
}
};
diff --git a/clang/include/clang/Sema/Sema.h b/clang/include/clang/Sema/Sema.h
index 1e89dfc58d92b1..936fbffd3891e2 100644
--- a/clang/include/clang/Sema/Sema.h
+++ b/clang/include/clang/Sema/Sema.h
@@ -152,18 +152,9 @@ typedef ArrayRef<std::pair<IdentifierInfo *, SourceLocation>> ModuleIdPath;
class ModuleLoader;
class MultiLevelTemplateArgumentList;
class NamedDecl;
-class ObjCCategoryDecl;
-class ObjCCategoryImplDecl;
-class ObjCCompatibleAliasDecl;
-class ObjCContainerDecl;
-class ObjCImplDecl;
class ObjCImplementationDecl;
class ObjCInterfaceDecl;
-class ObjCIvarDecl;
-template <class T> class ObjCList;
-class ObjCMessageExpr;
class ObjCMethodDecl;
-class ObjCPropertyDecl;
class ObjCProtocolDecl;
struct OverloadCandidate;
enum class OverloadCandidateParamOrder : char;
@@ -178,6 +169,7 @@ class PseudoObjectExpr;
class QualType;
class SemaCUDA;
class SemaHLSL;
+class SemaObjC;
class SemaOpenACC;
class SemaOpenMP;
class SemaSYCL;
@@ -489,12 +481,9 @@ class Sema final : public SemaBase {
// 29. C++ Variadic Templates (SemaTemplateVariadic.cpp)
// 30. Constraints and Concepts (SemaConcept.cpp)
// 31. Types (SemaType.cpp)
- // 32. ObjC Declarations (SemaDeclObjC.cpp)
- // 33. ObjC Expressions (SemaExprObjC.cpp)
- // 34. ObjC @property and @synthesize (SemaObjCProperty.cpp)
- // 35. Code Completion (SemaCodeComplete.cpp)
- // 36. FixIt Helpers (SemaFixItUtils.cpp)
- // 37. Name Lookup for RISC-V Vector Intrinsic (SemaRISCVVectorLookup.cpp)
+ // 32. Code Completion (SemaCodeComplete.cpp)
+ // 33. FixIt Helpers (SemaFixItUtils.cpp)
+ // 34. Name Lookup for RISC-V Vector Intrinsic (SemaRISCVVectorLookup.cpp)
/// \name Semantic Analysis
/// Implementations are in Sema.cpp
@@ -1005,6 +994,11 @@ class Sema final : public SemaBase {
return *HLSLPtr;
}
+ SemaObjC &ObjC() {
+ assert(ObjCPtr);
+ return *ObjCPtr;
+ }
+
SemaOpenACC &OpenACC() {
assert(OpenACCPtr);
return *OpenACCPtr;
@@ -1020,6 +1014,9 @@ class Sema final : public SemaBase {
return *SYCLPtr;
}
+ /// Source of additional semantic information.
+ IntrusiveRefCntPtr<ExternalSemaSource> ExternalSource;
+
protected:
friend class Parser;
friend class InitializationSequence;
@@ -1034,9 +1031,6 @@ class Sema final : public SemaBase {
Sema(const Sema &) = delete;
void operator=(const Sema &) = delete;
- /// Source of additional semantic information.
- IntrusiveRefCntPtr<ExternalSemaSource> ExternalSource;
-
/// The handler for the FileChanged preprocessor events.
///
/// Used for diagnostics that implement custom semantic analysis for #include
@@ -1052,6 +1046,7 @@ class Sema final : public SemaBase {
std::unique_ptr<SemaCUDA> CUDAPtr;
std::unique_ptr<SemaHLSL> HLSLPtr;
+ std::unique_ptr<SemaObjC> ObjCPtr;
std::unique_ptr<SemaOpenACC> OpenACCPtr;
std::unique_ptr<SemaOpenMP> OpenMPPtr;
std::unique_ptr<SemaSYCL> SYCLPtr;
@@ -1634,11 +1629,6 @@ class Sema final : public SemaBase {
void ActOnPragmaUnused(const Token &Identifier, Scope *curScope,
SourceLocation PragmaLoc);
- /// AddCFAuditedAttribute - Check whether we're currently within
- /// '\#pragma clang arc_cf_code_audited' and, if so, consider adding
- /// the appropriate attribute.
- void AddCFAuditedAttribute(Decl *D);
-
void ActOnPragmaAttributeAttribute(ParsedAttr &Attribute,
SourceLocation PragmaLoc,
attr::ParsedSubjectMatchRuleSet Rules);
@@ -1978,12 +1968,6 @@ class Sema final : public SemaBase {
void CheckCastAlign(Expr *Op, QualType T, SourceRange TRange);
- /// checkRetainCycles - Check whether an Objective-C message send
- /// might create an obvious retain cycle.
- void checkRetainCycles(ObjCMessageExpr *msg);
- void checkRetainCycles(Expr *receiver, Expr *argument);
- void checkRetainCycles(VarDecl *Var, Expr *Init);
-
/// checkUnsafeAssigns - Check whether +1 expr is being assigned
/// to weak/__unsafe_unretained type.
bool checkUnsafeAssigns(SourceLocation Loc, QualType LHS, Expr *RHS);
@@ -2030,14 +2014,20 @@ class Sema final : public SemaBase {
bool CheckHLSLBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall);
+ void checkCall(NamedDecl *FDecl, const FunctionProtoType *Proto,
+ const Expr *ThisArg, ArrayRef<const Expr *> Args,
+ bool IsMemberFunction, SourceLocation Loc, SourceRange Range,
+ VariadicCallType CallType);
+
+ void CheckTCBEnforcement(const SourceLocation CallExprLoc,
+ const NamedDecl *Callee);
+
private:
void CheckArrayAccess(const Expr *BaseExpr, const Expr *IndexExpr,
const ArraySubscriptExpr *ASE = nullptr,
bool AllowOnePastEnd = true, bool IndexNegated = false);
void CheckArrayAccess(const Expr *E);
- bool CheckObjCMethodCall(ObjCMethodDecl *Method, SourceLocation loc,
- ArrayRef<const Expr *> Args);
bool CheckPointerCall(NamedDecl *NDecl, CallExpr *TheCall,
const FunctionProtoType *Proto);
bool CheckOtherCall(CallExpr *TheCall, const FunctionProtoType *Proto);
@@ -2050,12 +2040,6 @@ class Sema final : public SemaBase {
void CheckArgAlignment(SourceLocation Loc, NamedDecl *FDecl,
StringRef ParamName, QualType ArgTy, QualType ParamTy);
- void checkCall(NamedDecl *FDecl, const FunctionProtoType *Proto,
- const Expr *ThisArg, ArrayRef<const Expr *> Args,
- bool IsMemberFunction, SourceLocation Loc, SourceRange Range,
- VariadicCallType CallType);
-
- bool CheckObjCString(Expr *Arg);
ExprResult CheckOSLogFormatStringArg(Expr *Arg);
ExprResult CheckBuiltinFunctionCall(FunctionDecl *FDecl, unsigned BuiltinID,
@@ -2228,12 +2212,6 @@ class Sema final : public SemaBase {
void CheckBitFieldInitialization(SourceLocation InitLoc, FieldDecl *Field,
Expr *Init);
- /// Check whether receiver is mutable ObjC container which
- /// attempts to add itself into the container
- void CheckObjCCircularContainer(ObjCMessageExpr *Message);
-
- void CheckTCBEnforcement(const SourceLocation CallExprLoc,
- const NamedDecl *Callee);
/// A map from magic value to type information.
std::unique_ptr<llvm::DenseMap<TypeTagMagicValue, TypeTagData>>
@@ -2636,7 +2614,7 @@ class Sema final : public SemaBase {
SmallVector<VarDecl *, 4> ExternalDeclarations;
/// Generally null except when we temporarily switch decl contexts,
- /// like in \see ActOnObjCTemporaryExitContainerContext.
+ /// like in \see SemaObjC::ActOnObjCTemporaryExitContainerContext.
DeclContext *OriginalLexicalContext;
/// Is the module scope we are in a C++ Header Unit?
@@ -2985,9 +2963,6 @@ class Sema final : public SemaBase {
SourceLocation ExplicitThisLoc = {});
ParmVarDecl *BuildParmVarDeclForTypedef(DeclContext *DC, SourceLocation Loc,
QualType T);
- QualType AdjustParameterTypeForObjCAutoRefCount(QualType T,
- SourceLocation NameLoc,
- TypeSourceInfo *TSInfo);
ParmVarDecl *CheckParameter(DeclContext *DC, SourceLocation StartLoc,
SourceLocation NameLoc,
const IdentifierInfo *Name, QualType T,
@@ -3224,8 +3199,6 @@ class Sema final : public SemaBase {
void ActOnLastBitfield(SourceLocation DeclStart,
SmallVectorImpl<Decl *> &AllIvarDecls);
- Decl *ActOnIvar(Scope *S, SourceLocation DeclStart, Declarator &D,
- Expr *BitWidth, tok::ObjCKeywordKind visibility);
// This is used for both record definitions and ObjC interface declarations.
void ActOnFields(Scope *S, SourceLocation RecLoc, Decl *TagDecl,
@@ -3247,8 +3220,6 @@ class Sema final : public SemaBase {
/// Invoked when we enter a tag definition that we're skipping.
SkippedDefinitionContext ActOnTagStartSkippedDefinition(Scope *S, Decl *TD);
- void ActOnObjCContainerStartDefinition(ObjCContainerDecl *IDecl);
-
/// ActOnStartCXXMemberDeclarations - Invoked when we have parsed a
/// C++ record definition's base-specifiers clause and are starting its
/// member declarations.
@@ -3265,15 +3236,6 @@ class Sema final : public SemaBase {
void ActOnTagFinishSkippedDefinition(SkippedDefinitionContext Context);
- void ActOnObjCContainerFinishDefinition();
-
- /// Invoked when we must temporarily exit the objective-c container
- /// scope for parsing/looking-up C constructs.
- ///
- /// Must be followed by a call to \see ActOnObjCReenterContainerContext
- void ActOnObjCTemporaryExitContainerContext(ObjCContainerDecl *ObjCCtx);
- void ActOnObjCReenterContainerContext(ObjCContainerDecl *ObjCCtx);
-
/// ActOnTagDefinitionError - Invoked when there was an unrecoverable
/// error parsing the definition of a tag.
void ActOnTagDefinitionError(Scope *S, Decl *TagDecl);
@@ -3400,10 +3362,6 @@ class Sema final : public SemaBase {
/// variable.
void DiagnoseUnusedButSetDecl(const VarDecl *VD, DiagReceiverTy DiagReceiver);
- ObjCInterfaceDecl *getObjCInterfaceDecl(const IdentifierInfo *&Id,
- SourceLocation IdLoc,
- bool TypoCorrection = false);
-
Scope *getNonFieldDeclScope(Scope *S);
FunctionDecl *CreateBuiltin(IdentifierInfo *II, QualType Type, unsigned ID,
@@ -3425,8 +3383,6 @@ class Sema final : public SemaBase {
/// Look for a locally scoped extern "C" declaration by the given name.
NamedDecl *findLocallyScopedExternCDecl(DeclarationName Name);
- bool inferObjCARCLifetime(ValueDecl *decl);
-
void deduceOpenCLAddressSpace(ValueDecl *decl);
static bool adjustContextForLocalExternDecl(DeclContext *&DC);
@@ -3498,8 +3454,6 @@ class Sema final : public SemaBase {
SourceLocation WeakNameLoc,
SourceLocation AliasNameLoc);
- ObjCContainerDecl *getObjCDeclContext() const;
-
/// Status of the function emission on the CUDA/HIP/OpenMP host/device attrs.
enum class FunctionEmissionStatus {
Emitted,
@@ -4338,8 +4292,6 @@ class Sema final : public SemaBase {
CXXConstructorDecl *Constructor, bool AnyErrors,
ArrayRef<CXXCtorInitializer *> Initializers = std::nullopt);
- void SetIvarInitializers(ObjCImplementationDecl *ObjCImplementation);
-
/// MarkBaseAndMemberDestructorsReferenced - Given a record decl,
/// mark all the non-trivial destructors of its members and bases as
/// referenced.
@@ -5389,14 +5341,6 @@ class Sema final : public SemaBase {
DeclContext *LookupCtx = nullptr,
TypoExpr **Out = nullptr);
- DeclResult LookupIvarInObjCMethod(LookupResult &Lookup, Scope *S,
- IdentifierInfo *II);
- ExprResult BuildIvarRefExpr(Scope *S, SourceLocation Loc, ObjCIvarDecl *IV);
-
- ExprResult LookupInObjCMethod(LookupResult &LookUp, Scope *S,
- IdentifierInfo *II,
- bool AllowBuiltinCreation = false);
-
/// If \p D cannot be odr-used in the current expression evaluation context,
/// return a reason explaining why. Otherwise, return NOUR_None.
NonOdrUseReason getNonOdrUseReasonInCurrentContext(ValueDecl *D);
@@ -5714,19 +5658,6 @@ class Sema final : public SemaBase {
ArrayRef<Expr *> SubExprs,
QualType T = QualType());
- // Note that LK_String is intentionally after the other literals, as
- // this is used for diagnostics logic.
- enum ObjCLiteralKind {
- LK_Array,
- LK_Dictionary,
- LK_Numeric,
- LK_Boxed,
- LK_String,
- LK_Block,
- LK_None
- };
- ObjCLiteralKind CheckLiteralKind(Expr *FromE);
-
ExprResult PerformObjectMemberConversion(Expr *From,
NestedNameSpecifier *Qualifier,
NamedDecl *FoundDecl,
@@ -5762,14 +5693,6 @@ class Sema final : public SemaBase {
bool IsInvalidSMECallConversion(QualType FromType, QualType ToType);
- const DeclContext *getCurObjCLexicalContext() const {
- const DeclContext *DC = getCurLexicalContext();
- // A category implicitly has the attribute of the interface.
- if (const ObjCCategoryDecl *CatD = dyn_cast<ObjCCategoryDecl>(DC))
- DC = CatD->getClassInterface();
- return DC;
- }
-
/// Abstract base class used for diagnosing integer constant
/// expression violations.
class VerifyICEDiagnoser {
@@ -5907,9 +5830,6 @@ class Sema final : public SemaBase {
ExprResult &Cond, ExprResult &LHS, ExprResult &RHS, ExprValueKind &VK,
ExprObjectKind &OK, SourceLocation QuestionLoc);
- QualType FindCompositeObjCPointerType(ExprResult &LHS, ExprResult &RHS,
- SourceLocation QuestionLoc);
-
bool DiagnoseConditionalForNull(const Expr *LHSExpr, const Expr *RHSExpr,
SourceLocation QuestionLoc);
@@ -6257,9 +6177,6 @@ class Sema final : public SemaBase {
Expr *LHSExpr, ExprResult &RHS, SourceLocation Loc, QualType CompoundType,
BinaryOperatorKind Opc);
- bool CheckConversionToObjCLiteral(QualType DstType, Expr *&SrcExpr,
- bool Diagnose = true);
-
/// To be used for checking whether the arguments being passed to
/// function exceeds the number of parameters expected for it.
static bool TooManyArguments(size_t NumParams, size_t NumArgs,
@@ -6589,13 +6506,6 @@ class Sema final : public SemaBase {
/// ActOnCXXBoolLiteral - Parse {true,false} literals.
ExprResult ActOnCXXBoolLiteral(SourceLocation OpLoc, tok::TokenKind Kind);
- /// ActOnObjCBoolLiteral - Parse {__objc_yes,__objc_no} literals.
- ExprResult ActOnObjCBoolLiteral(SourceLocation OpLoc, tok::TokenKind Kind);
-
- ExprResult
- ActOnObjCAvailabilityCheckExpr(llvm::ArrayRef<AvailabilitySpec> AvailSpecs,
- SourceLocation AtLoc, SourceLocation RParen);
-
/// ActOnCXXNullPtrLiteral - Parse 'nullptr'.
ExprResult ActOnCXXNullPtrLiteral(SourceLocation Loc);
@@ -7466,9 +7376,6 @@ class Sema final : public SemaBase {
bool LookupParsedName(LookupResult &R, Scope *S, CXXScopeSpec *SS,
bool AllowBuiltinCreation = false,
bool EnteringContext = false);
- ObjCProtocolDecl *LookupProtocol(
- IdentifierInfo *II, SourceLocation IdLoc,
- RedeclarationKind Redecl = RedeclarationKind::NotForRedeclaration);
bool LookupInSuper(LookupResult &R, CXXRecordDecl *Class);
void LookupOverloadedOperatorName(OverloadedOperatorKind Op, Scope *S,
@@ -7497,6 +7404,20 @@ class Sema final : public SemaBase {
/// visible at the specified location.
void makeMergedDefinitionVisible(NamedDecl *ND);
+ /// Check ODR hashes for C/ObjC when merging types from modules.
+ /// Differently from C++, actually parse the body and reject in case
+ /// of a mismatch.
+ template <typename T,
+ typename = std::enable_if_t<std::is_base_of<NamedDecl, T>::value>>
+ bool ActOnDuplicateODRHashDefinition(T *Duplicate, T *Previous) {
+ if (Duplicate->getODRHash() != Previous->getODRHash())
+ return false;
+
+ // Make the previous decl visible.
+ makeMergedDefinitionVisible(Previous);
+ return true;
+ }
+
/// Get the set of additional modules that should be checked during
/// name lookup. A module and its imports become visible when instanting a
/// template defined within it.
@@ -7962,8 +7883,6 @@ class Sema final : public SemaBase {
bool &IncompatibleObjC);
bool isObjCPointerConversion(QualType FromType, QualType ToType,
QualType &ConvertedType, bool &IncompatibleObjC);
- bool isObjCWritebackConversion(QualType FromType, QualType ToType,
- QualType &ConvertedType);
bool IsBlockPointerConversion(QualType FromType, QualType ToType,
QualType &ConvertedType);
@@ -8425,7 +8344,6 @@ class Sema final : public SemaBase {
DeclAccessPair FoundDecl,
FunctionDecl *Fn);
-private:
/// - Returns a selector which best matches given argument list or
/// nullptr if none could be found
ObjCMethodDecl *SelectBestMethod(Selector Sel, MultiExprArg Args,
@@ -8446,10 +8364,6 @@ class Sema final : public SemaBase {
public:
void maybeExtendBlockObject(ExprResult &E);
- CastKind PrepareCastToObjCObjectPointer(ExprResult &E);
-
- enum ObjCSubscriptKind { OS_Array, OS_Dictionary, OS_Error };
- ObjCSubscriptKind CheckSubscriptingKind(Expr *FromE);
ExprResult checkPseudoObjectIncDec(Scope *S, SourceLocation OpLoc,
UnaryOperatorKind Opcode, Expr *Op);
@@ -8557,13 +8471,6 @@ class Sema final : public SemaBase {
StmtResult ActOnForEachLValueExpr(Expr *E);
- ExprResult CheckObjCForCollectionOperand(SourceLocation forLoc,
- Expr *collection);
- StmtResult ActOnObjCForCollectionStmt(SourceLocation ForColLoc, Stmt *First,
- Expr *collection,
- SourceLocation RParenLoc);
- StmtResult FinishObjCForCollectionStmt(Stmt *ForCollection, Stmt *Body);
-
enum BuildForRangeKind {
/// Initial building of a for-range statement.
BFRK_Build,
@@ -8630,24 +8537,6 @@ class Sema final : public SemaBase {
NamedReturnInfo &NRInfo,
bool SupressSimplerImplicitMoves);
- StmtResult ActOnObjCAtCatchStmt(SourceLocation AtLoc, SourceLocation RParen,
- Decl *Parm, Stmt *Body);
-
- StmtResult ActOnObjCAtFinallyStmt(SourceLocation AtLoc, Stmt *Body);
-
- StmtResult ActOnObjCAtTryStmt(SourceLocation AtLoc, Stmt *Try,
- MultiStmtArg Catch, Stmt *Finally);
-
- StmtResult BuildObjCAtThrowStmt(SourceLocation AtLoc, Expr *Throw);
- StmtResult ActOnObjCAtThrowStmt(SourceLocation AtLoc, Expr *Throw,
- Scope *CurS...
[truncated]
``````````
</details>
https://github.com/llvm/llvm-project/pull/89086
More information about the cfe-commits
mailing list