clang  19.0.0git
Classes | Namespaces | Macros | Typedefs | Functions
Sema.cpp File Reference
#include "UsedDeclVisitor.h"
#include "clang/AST/ASTContext.h"
#include "clang/AST/ASTDiagnostic.h"
#include "clang/AST/Decl.h"
#include "clang/AST/DeclCXX.h"
#include "clang/AST/DeclFriend.h"
#include "clang/AST/DeclObjC.h"
#include "clang/AST/Expr.h"
#include "clang/AST/ExprCXX.h"
#include "clang/AST/PrettyDeclStackTrace.h"
#include "clang/AST/StmtCXX.h"
#include "clang/Basic/DarwinSDKInfo.h"
#include "clang/Basic/DiagnosticOptions.h"
#include "clang/Basic/PartialDiagnostic.h"
#include "clang/Basic/SourceManager.h"
#include "clang/Basic/Stack.h"
#include "clang/Basic/TargetInfo.h"
#include "clang/Lex/HeaderSearch.h"
#include "clang/Lex/HeaderSearchOptions.h"
#include "clang/Lex/Preprocessor.h"
#include "clang/Sema/CXXFieldCollector.h"
#include "clang/Sema/DelayedDiagnostic.h"
#include "clang/Sema/EnterExpressionEvaluationContext.h"
#include "clang/Sema/ExternalSemaSource.h"
#include "clang/Sema/Initialization.h"
#include "clang/Sema/MultiplexExternalSemaSource.h"
#include "clang/Sema/ObjCMethodList.h"
#include "clang/Sema/RISCVIntrinsicManager.h"
#include "clang/Sema/Scope.h"
#include "clang/Sema/ScopeInfo.h"
#include "clang/Sema/SemaCUDA.h"
#include "clang/Sema/SemaCodeCompletion.h"
#include "clang/Sema/SemaConsumer.h"
#include "clang/Sema/SemaHLSL.h"
#include "clang/Sema/SemaInternal.h"
#include "clang/Sema/SemaObjC.h"
#include "clang/Sema/SemaOpenACC.h"
#include "clang/Sema/SemaOpenMP.h"
#include "clang/Sema/SemaPseudoObject.h"
#include "clang/Sema/SemaRISCV.h"
#include "clang/Sema/SemaSYCL.h"
#include "clang/Sema/SemaX86.h"
#include "clang/Sema/TemplateDeduction.h"
#include "clang/Sema/TemplateInstCallback.h"
#include "clang/Sema/TypoCorrection.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallPtrSet.h"
#include "llvm/Support/TimeProfiler.h"
#include <optional>
#include "clang/Basic/OpenCLImageTypes.def"
#include "clang/Basic/OpenCLExtensionTypes.def"
#include "clang/Basic/AArch64SVEACLETypes.def"
#include "clang/Basic/PPCTypes.def"
#include "clang/Basic/RISCVVTypes.def"
#include "clang/Basic/WebAssemblyReferenceTypes.def"

Go to the source code of this file.

Classes

class  clang::sema::SemaPPCallbacks
 

Namespaces

 clang
 The JSON file list parser is used to communicate input to InstallAPI.
 
 clang::sema
 

Macros

#define SEMA_STRINGIZE(s)   #s
 
#define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix)
 
#define SEMA_STRINGIZE(s)   #s
 
#define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix)
 
#define IMAGE_WRITE_TYPE(Type, Id, Ext)
 
#define IMAGE_READ_WRITE_TYPE(Type, Id, Ext)
 
#define EXT_OPAQUE_TYPE(ExtType, Id, Ext)
 
#define SVE_TYPE(Name, Id, SingletonId)    addImplicitTypedef(Name, Context.SingletonId);
 
#define PPC_VECTOR_MMA_TYPE(Name, Id, Size)    addImplicitTypedef(#Name, Context.Id##Ty);
 
#define PPC_VECTOR_VSX_TYPE(Name, Id, Size)    addImplicitTypedef(#Name, Context.Id##Ty);
 
#define RVV_TYPE(Name, Id, SingletonId)    addImplicitTypedef(Name, Context.SingletonId);
 
#define WASM_TYPE(Name, Id, SingletonId)    addImplicitTypedef(Name, Context.SingletonId);
 

Typedefs

typedef llvm::DenseMap< const CXXRecordDecl *, boolRecordCompleteMap
 

Functions

static bool ShouldRemoveFromUnused (Sema *SemaRef, const DeclaratorDecl *D)
 Used to prune the decls of Sema's UnusedFileScopedDecls vector. More...
 
static bool isFunctionOrVarDeclExternC (const NamedDecl *ND)
 
static void checkUndefinedButUsed (Sema &S)
 checkUndefinedButUsed - Check for undefined objects with internal linkage or that are inline. More...
 
static bool MethodsAndNestedClassesComplete (const CXXRecordDecl *RD, RecordCompleteMap &MNCComplete)
 Returns true, if all methods and nested classes of the given CXXRecordDecl are defined in this translation unit. More...
 
static bool IsRecordFullyDefined (const CXXRecordDecl *RD, RecordCompleteMap &RecordsComplete, RecordCompleteMap &MNCComplete)
 Returns true, if the given CXXRecordDecl is fully defined in this translation unit, i.e. More...
 
static void emitCallStackNotes (Sema &S, const FunctionDecl *FD)
 
static void checkEscapingByref (VarDecl *VD, Sema &S)
 
static void markEscapingByrefs (const FunctionScopeInfo &FSI, Sema &S)
 
static void noteOverloads (Sema &S, const UnresolvedSetImpl &Overloads, const SourceLocation FinalNoteLoc)
 Give notes for a set of overloads. More...
 
static void notePlausibleOverloads (Sema &S, SourceLocation Loc, const UnresolvedSetImpl &Overloads, bool(*IsPlausibleResult)(QualType))
 
static bool IsCallableWithAppend (const Expr *E)
 Determine whether the given expression can be called by just putting parentheses after it. More...
 
static bool IsCPUDispatchCPUSpecificMultiVersion (const Expr *E)
 

Macro Definition Documentation

◆ EXT_OPAQUE_TYPE

#define EXT_OPAQUE_TYPE (   ExtType,
  Id,
  Ext 
)
Value:
if (getOpenCLOptions().isSupported(#Ext, getLangOpts())) { \
addImplicitTypedef(#ExtType, Context.Id##Ty); \
}

◆ IMAGE_READ_WRITE_TYPE

#define IMAGE_READ_WRITE_TYPE (   Type,
  Id,
  Ext 
)

◆ IMAGE_TYPE [1/2]

#define IMAGE_TYPE (   ImgType,
  Id,
  SingletonId,
  Access,
  Suffix 
)
Value:
addImplicitTypedef(SEMA_STRINGIZE(__ocl_##ImgType##_##Suffix##_t), \
Context.SingletonId);
#define SEMA_STRINGIZE(s)

◆ IMAGE_TYPE [2/2]

#define IMAGE_TYPE (   ImgType,
  Id,
  SingletonId,
  Access,
  Suffix 
)
Value:
addImplicitTypedef(SEMA_STRINGIZE(__ocl_sampled_##ImgType##_##Suffix##_t), \
Context.Sampled##SingletonId);

◆ IMAGE_WRITE_TYPE

#define IMAGE_WRITE_TYPE (   Type,
  Id,
  Ext 
)

◆ PPC_VECTOR_MMA_TYPE

#define PPC_VECTOR_MMA_TYPE (   Name,
  Id,
  Size 
)     addImplicitTypedef(#Name, Context.Id##Ty);

◆ PPC_VECTOR_VSX_TYPE

#define PPC_VECTOR_VSX_TYPE (   Name,
  Id,
  Size 
)     addImplicitTypedef(#Name, Context.Id##Ty);

◆ RVV_TYPE

#define RVV_TYPE (   Name,
  Id,
  SingletonId 
)     addImplicitTypedef(Name, Context.SingletonId);

◆ SEMA_STRINGIZE [1/2]

#define SEMA_STRINGIZE (   s)    #s

◆ SEMA_STRINGIZE [2/2]

#define SEMA_STRINGIZE (   s)    #s

◆ SVE_TYPE

#define SVE_TYPE (   Name,
  Id,
  SingletonId 
)     addImplicitTypedef(Name, Context.SingletonId);

◆ WASM_TYPE

#define WASM_TYPE (   Name,
  Id,
  SingletonId 
)     addImplicitTypedef(Name, Context.SingletonId);

Typedef Documentation

◆ RecordCompleteMap

typedef llvm::DenseMap<const CXXRecordDecl*, bool> RecordCompleteMap

Definition at line 983 of file Sema.cpp.

Function Documentation

◆ checkEscapingByref()

static void checkEscapingByref ( VarDecl VD,
Sema S 
)
static

Definition at line 2277 of file Sema.cpp.

◆ checkUndefinedButUsed()

static void checkUndefinedButUsed ( Sema S)
static

checkUndefinedButUsed - Check for undefined objects with internal linkage or that are inline.

Definition at line 910 of file Sema.cpp.

Referenced by clang::Sema::ActOnEndOfTranslationUnit().

◆ emitCallStackNotes()

static void emitCallStackNotes ( Sema S,
const FunctionDecl FD 
)
static

Definition at line 1689 of file Sema.cpp.

◆ IsCallableWithAppend()

static bool IsCallableWithAppend ( const Expr E)
static

Determine whether the given expression can be called by just putting parentheses after it.

Notably, expressions with unary operators can't be because the unary operator will start parsing outside the call.

Definition at line 2724 of file Sema.cpp.

References clang::Expr::IgnoreImplicit().

Referenced by clang::Sema::tryToRecoverWithCall().

◆ IsCPUDispatchCPUSpecificMultiVersion()

static bool IsCPUDispatchCPUSpecificMultiVersion ( const Expr E)
static

◆ isFunctionOrVarDeclExternC()

static bool isFunctionOrVarDeclExternC ( const NamedDecl ND)
static

Definition at line 838 of file Sema.cpp.

Referenced by clang::Sema::isExternalWithNoLinkageType().

◆ IsRecordFullyDefined()

static bool IsRecordFullyDefined ( const CXXRecordDecl RD,
RecordCompleteMap RecordsComplete,
RecordCompleteMap MNCComplete 
)
static

Returns true, if the given CXXRecordDecl is fully defined in this translation unit, i.e.

all methods are defined or pure virtual and all friends, friend functions and nested classes are fully defined in this translation unit.

Should only be called from ActOnEndOfTranslationUnit so that all definitions are actually read.

Definition at line 1032 of file Sema.cpp.

References clang::Complete, clang::CXXRecordDecl::friend_begin(), clang::CXXRecordDecl::friend_end(), and MethodsAndNestedClassesComplete().

◆ markEscapingByrefs()

static void markEscapingByrefs ( const FunctionScopeInfo FSI,
Sema S 
)
static

Definition at line 2311 of file Sema.cpp.

Referenced by clang::Sema::PopFunctionScopeInfo().

◆ MethodsAndNestedClassesComplete()

static bool MethodsAndNestedClassesComplete ( const CXXRecordDecl RD,
RecordCompleteMap MNCComplete 
)
static

Returns true, if all methods and nested classes of the given CXXRecordDecl are defined in this translation unit.

Should only be called from ActOnEndOfTranslationUnit so that all definitions are actually read.

Definition at line 990 of file Sema.cpp.

References clang::Complete, clang::DeclContext::decls_begin(), clang::DeclContext::decls_end(), and clang::TagDecl::isCompleteDefinition().

Referenced by IsRecordFullyDefined().

◆ noteOverloads()

static void noteOverloads ( Sema S,
const UnresolvedSetImpl Overloads,
const SourceLocation  FinalNoteLoc 
)
static

Give notes for a set of overloads.

A companion to tryExprAsCall. In cases when the name that the programmer wrote was an overloaded function, we may be able to make some guesses about plausible overloads based on their return types; such guesses can be handed off to this method to be emitted as notes.

Parameters
Overloads- The overloads to note.
FinalNoteLoc- If we've suppressed printing some overloads due to -fshow-overloads=best, this is the location to attach to the note about too many candidates. Typically this will be the location of the original ill-formed expression.

Definition at line 2671 of file Sema.cpp.

◆ notePlausibleOverloads()

static void notePlausibleOverloads ( Sema S,
SourceLocation  Loc,
const UnresolvedSetImpl Overloads,
bool(*)(QualType IsPlausibleResult 
)
static

Definition at line 2703 of file Sema.cpp.

Referenced by clang::Sema::tryToRecoverWithCall().

◆ ShouldRemoveFromUnused()

static bool ShouldRemoveFromUnused ( Sema SemaRef,
const DeclaratorDecl D 
)
static