A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://clang.llvm.org/doxygen/SemaCUDA_8cpp_source.html below:

clang: lib/Sema/SemaCUDA.cpp Source File

24#include "llvm/ADT/STLForwardCompat.h" 25#include "llvm/ADT/SmallVector.h" 27using namespace clang

;

34 if

(

auto

*A =

D

->

getAttr

<AttrT>())

35 return

!A->isImplicit();

40

assert(

getLangOpts

().

CUDA

&&

"Should only be called during CUDA compilation"

);

41

ForceHostDeviceDepth++;

45

assert(

getLangOpts

().

CUDA

&&

"Should only be called during CUDA compilation"

);

46 if

(ForceHostDeviceDepth == 0)

48

ForceHostDeviceDepth--;

57 return ExprError

(

Diag

(LLLLoc, diag::err_undeclared_var_use)

70 bool

HasHostAttr =

false

;

71 bool

HasDeviceAttr =

false

;

72 bool

HasGlobalAttr =

false

;

73 bool

HasInvalidTargetAttr =

false

;

75 switch

(AL.getKind()) {

76 case

ParsedAttr::AT_CUDAGlobal:

77

HasGlobalAttr =

true

;

79 case

ParsedAttr::AT_CUDAHost:

82 case

ParsedAttr::AT_CUDADevice:

83

HasDeviceAttr =

true

;

85 case

ParsedAttr::AT_CUDAInvalidTarget:

86

HasInvalidTargetAttr =

true

;

93 if

(HasInvalidTargetAttr)

99 if

(HasHostAttr && HasDeviceAttr)

108template

<

typename

A>

111

return isa<A>(Attribute) &&

112

!(IgnoreImplicitAttr && Attribute->isImplicit());

121 auto

*VD = dyn_cast_or_null<VarDecl>(

D

);

122 if

(VD && VD->hasGlobalStorage() && !VD->isStaticLocal()) {

124 if

((hasAttr<CUDADeviceAttr>(VD,

true

) &&

125

!hasAttr<CUDAHostAttr>(VD,

true

)) ||

126

hasAttr<CUDASharedAttr>(VD,

true

) ||

127

hasAttr<CUDAConstantAttr>(VD,

true

))

135 bool

IgnoreImplicitHDAttr) {

140 if

(

D

->

hasAttr

<CUDAInvalidTargetAttr>())

143 if

(

D

->

hasAttr

<CUDAGlobalAttr>())

146 if

(hasAttr<CUDADeviceAttr>(

D

, IgnoreImplicitHDAttr)) {

147 if

(hasAttr<CUDAHostAttr>(

D

, IgnoreImplicitHDAttr))

150

}

else if

(hasAttr<CUDAHostAttr>(

D

, IgnoreImplicitHDAttr)) {

152

}

else if

((

D

->

isImplicit

() || !

D

->isUserProvided()) &&

153

!IgnoreImplicitHDAttr) {

164 if

(Var->

hasAttr

<HIPManagedAttr>())

170

Var->

hasAttr

<CUDAConstantAttr>() &&

171

!hasExplicitAttr<CUDAConstantAttr>(Var))

173 if

(Var->

hasAttr

<CUDADeviceAttr>() || Var->

hasAttr

<CUDAConstantAttr>() ||

174

Var->

hasAttr

<CUDASharedAttr>() ||

182 if

(

auto

*FD = dyn_cast<FunctionDecl>(Var->

getDeclContext

())) {

227

assert(Callee &&

"Callee must be valid."

);

234

(isa<CXXConstructorDecl>(Callee) || isa<CXXDestructorDecl>(Callee)))

258 if

(CalleeTarget == CallerTarget ||

301

llvm_unreachable(

"All cases should've been handled by now."

);

307 if

(

auto

*A =

D

->

getAttr

<AttrT>())

308 return

A->isImplicit();

313 bool

IsImplicitDevAttr = hasImplicitAttr<CUDADeviceAttr>(

D

);

314 bool

IsImplicitHostAttr = hasImplicitAttr<CUDAHostAttr>(

D

);

315 return

IsImplicitDevAttr && IsImplicitHostAttr;

320 SmallVectorImpl

<std::pair<DeclAccessPair, FunctionDecl *>> &Matches) {

321 if

(Matches.size() <= 1)

324 using

Pair = std::pair<DeclAccessPair, FunctionDecl*>;

327 auto

GetCFP = [&](

const

Pair &Match) {

333

Matches.begin(), Matches.end(),

334

[&](

const

Pair &M1,

const

Pair &M2) { return GetCFP(M1) < GetCFP(M2); }));

337

llvm::erase_if(Matches,

338

[&](

const

Pair &Match) {

return

GetCFP(Match) < BestCFP; });

358

*ResolvedTarget = Target2;

360

*ResolvedTarget = Target1;

361

}

else if

(Target1 != Target2) {

364

*ResolvedTarget = Target1;

379 bool

HasH = MemberDecl->

hasAttr

<CUDAHostAttr>();

380 bool

HasD = MemberDecl->

hasAttr

<CUDADeviceAttr>();

381 bool

HasExplicitAttr =

382

(HasD && !MemberDecl->

getAttr

<CUDADeviceAttr>()->isImplicit()) ||

383

(HasH && !MemberDecl->

getAttr

<CUDAHostAttr>()->isImplicit());

384 if

(!InClass || HasExplicitAttr)

387

std::optional<CUDAFunctionTarget> InferredTarget;

397 for

(

const auto

&B : ClassDecl->

bases

()) {

398 if

(!B.isVirtual()) {

404

llvm::append_range(Bases, llvm::make_pointer_range(ClassDecl->

vbases

()));

407 for

(

const auto

*B : Bases) {

426 if

(!InferredTarget) {

427

InferredTarget = BaseMethodTarget;

430

*InferredTarget, BaseMethodTarget, &*InferredTarget);

431 if

(ResolutionError) {

434

diag::note_implicit_member_target_infer_collision)

435

<< (

unsigned

)CSM << llvm::to_underlying(*InferredTarget)

436

<< llvm::to_underlying(BaseMethodTarget);

446 for

(

const auto

*F : ClassDecl->

fields

()) {

447 if

(F->isInvalidDecl()) {

460

ConstRHS && !F->isMutable(),

470 if

(!InferredTarget) {

471

InferredTarget = FieldMethodTarget;

474

*InferredTarget, FieldMethodTarget, &*InferredTarget);

475 if

(ResolutionError) {

478

diag::note_implicit_member_target_infer_collision)

479

<< (

unsigned

)CSM << llvm::to_underlying(*InferredTarget)

480

<< llvm::to_underlying(FieldMethodTarget);

492 bool

NeedsH =

true

, NeedsD =

true

;

493 if

(InferredTarget) {

538

if (const CXXConstructExpr *CE =

539

dyn_cast<CXXConstructExpr>(CI->getInit()))

540

return isEmptyConstructor(Loc, CE->getConstructor());

582

if (CXXRecordDecl *RD = BS.getType()->getAsCXXRecordDecl())

583

return isEmptyDestructor(Loc, RD->getDestructor());

589 if

(!llvm::all_of(ClassDecl->

fields

(), [&](

const FieldDecl

*Field) {

590

if (CXXRecordDecl *RD = Field->getType()

591

->getBaseElementTypeUnsafe()

592

->getAsCXXRecordDecl())

593

return isEmptyDestructor(Loc, RD->getDestructor());

602enum

CUDAInitializerCheckKind {

603

CICK_DeviceOrConstant,

607bool

IsDependentVar(

VarDecl

*VD) {

611 return Init

->isValueDependent();

625

CUDAInitializerCheckKind CheckKind) {

627

assert(!IsDependentVar(VD) &&

"do not check dependent var"

);

629 auto

IsEmptyInit = [&](

const Expr

*

Init

) {

632 if

(

const auto

*CE = dyn_cast<CXXConstructExpr>(

Init

)) {

633 return

S.isEmptyConstructor(VD->

getLocation

(), CE->getConstructor());

637 auto

IsConstantInit = [&](

const Expr

*

Init

) {

644 auto

HasEmptyDtor = [&](

VarDecl

*VD) {

646 return

S.isEmptyDestructor(VD->

getLocation

(), RD->getDestructor());

649 if

(CheckKind == CICK_Shared)

650 return

IsEmptyInit(

Init

) && HasEmptyDtor(VD);

652

((IsEmptyInit(

Init

) || IsConstantInit(

Init

)) && HasEmptyDtor(VD));

670 bool

IsSharedVar = VD->

hasAttr

<CUDASharedAttr>();

671 bool

IsDeviceOrConstantVar =

673

(VD->

hasAttr

<CUDADeviceAttr>() || VD->

hasAttr

<CUDAConstantAttr>());

674 if

(IsDeviceOrConstantVar || IsSharedVar) {

675 if

(HasAllowedCUDADeviceStaticInitializer(

676

*

this

, VD, IsSharedVar ? CICK_Shared : CICK_DeviceOrConstant))

679

IsSharedVar ? diag::err_shared_var_init : diag::err_dynamic_var_init)

680

<<

Init

->getSourceRange();

687

InitFn = CE->getConstructor();

688

}

else if

(

const CallExpr

*CE = dyn_cast<CallExpr>(

Init

)) {

689

InitFn = CE->getDirectCallee();

695 Diag

(VD->

getLocation

(), diag::err_ref_bad_target_global_initializer)

696

<< llvm::to_underlying(InitFnTarget) << InitFn;

720

!

getASTContext

().CUDAImplicitHostDeviceFunUsedByDevice.count(Caller))))

740

assert(

getLangOpts

().

CUDA

&&

"Should only be called during CUDA compilation"

);

742 if

(ForceHostDeviceDepth > 0) {

743 if

(!NewD->

hasAttr

<CUDAHostAttr>())

745 if

(!NewD->

hasAttr

<CUDADeviceAttr>())

752 if

(

getLangOpts

().OffloadImplicitHostDeviceTemplates &&

753

!NewD->

hasAttr

<CUDAHostAttr>() && !NewD->

hasAttr

<CUDADeviceAttr>() &&

754

!NewD->

hasAttr

<CUDAGlobalAttr>() &&

764

NewD->

hasAttr

<CUDADeviceAttr>() || NewD->

hasAttr

<CUDAGlobalAttr>())

769 auto

IsMatchingDeviceFn = [&](

NamedDecl

*

D

) {

771 D

= Using->getTargetDecl();

773 return

OldD && OldD->

hasAttr

<CUDADeviceAttr>() &&

774

!OldD->

hasAttr

<CUDAHostAttr>() &&

779 auto

It = llvm::find_if(

Previous

, IsMatchingDeviceFn);

788

diag::err_cuda_unattributed_constexpr_cannot_overload_device)

791

diag::note_cuda_conflicting_device_function_declared_here);

807

!VD->

hasAttr

<CUDASharedAttr>() &&

809

!IsDependentVar(VD) &&

811

HasAllowedCUDADeviceStaticInitializer(*

this

, VD,

812

CICK_DeviceOrConstant))) {

819

assert(

getLangOpts

().

CUDA

&&

"Should only be called during CUDA compilation"

);

822

SemaDiagnosticBuilder::Kind DiagKind = [&] {

824 return

SemaDiagnosticBuilder::K_Nop;

828 return

SemaDiagnosticBuilder::K_Immediate;

834 return

SemaDiagnosticBuilder::K_Nop;

837 return

SemaDiagnosticBuilder::K_Immediate;

840

? SemaDiagnosticBuilder::K_ImmediateWithCallStack

841

: SemaDiagnosticBuilder::K_Deferred;

843 return

SemaDiagnosticBuilder::K_Nop;

851

assert(

getLangOpts

().

CUDA

&&

"Should only be called during CUDA compilation"

);

854

SemaDiagnosticBuilder::Kind DiagKind = [&] {

856 return

SemaDiagnosticBuilder::K_Nop;

859 return

SemaDiagnosticBuilder::K_Immediate;

865 return

SemaDiagnosticBuilder::K_Nop;

868 return

SemaDiagnosticBuilder::K_Immediate;

871

? SemaDiagnosticBuilder::K_ImmediateWithCallStack

872

: SemaDiagnosticBuilder::K_Deferred;

874 return

SemaDiagnosticBuilder::K_Nop;

881

assert(

getLangOpts

().

CUDA

&&

"Should only be called during CUDA compilation"

);

882

assert(Callee &&

"Callee may not be null."

);

885 if

(ExprEvalCtx.isUnevaluated() || ExprEvalCtx.isConstantEvaluated())

898

SemaDiagnosticBuilder::Kind DiagKind = [

this

, Caller, Callee,

899

CallerKnownEmitted] {

903

assert(Caller &&

"Never/wrongSide calls require a non-null caller"

);

907 return

CallerKnownEmitted

908

? SemaDiagnosticBuilder::K_ImmediateWithCallStack

909

: SemaDiagnosticBuilder::K_Deferred;

911 return

SemaDiagnosticBuilder::K_Nop;

915 if

(DiagKind == SemaDiagnosticBuilder::K_Nop) {

918

Callee->hasAttr<CUDAGlobalAttr>() && !Callee->isDefined() &&

933

SemaDiagnosticBuilder(DiagKind,

Loc

, diag::err_ref_bad_target, Caller,

937 if

(!Callee->getBuiltinID())

938

SemaDiagnosticBuilder(DiagKind, Callee->getLocation(),

939

diag::note_previous_decl, Caller,

SemaRef

)

941 return

DiagKind != SemaDiagnosticBuilder::K_Immediate &&

942

DiagKind != SemaDiagnosticBuilder::K_ImmediateWithCallStack;

973 bool

CalleeIsDevice = Callee->hasAttr<CUDADeviceAttr>();

975

!Caller->

hasAttr

<CUDAGlobalAttr>() && !Caller->

hasAttr

<CUDADeviceAttr>();

976 bool

ShouldCheck = CalleeIsDevice && CallerIsHost;

979 auto

DiagKind = SemaDiagnosticBuilder::K_Deferred;

982

diag::err_capture_bad_target, Callee,

SemaRef

)

990

diag::warn_maybe_capture_bad_target_this_ptr, Callee,

996

assert(

getLangOpts

().

CUDA

&&

"Should only be called during CUDA compilation"

);

997 if

(Method->

hasAttr

<CUDAHostAttr>() || Method->

hasAttr

<CUDADeviceAttr>())

1005

assert(

getLangOpts

().

CUDA

&&

"Should only be called during CUDA compilation"

);

1018 if

(NewTarget != OldTarget &&

1022

!(

getLangOpts

().OffloadImplicitHostDeviceTemplates &&

1026

!(

getLangOpts

().OffloadImplicitHostDeviceTemplates &&

1032

<< llvm::to_underlying(NewTarget) << NewFD->

getDeclName

()

1033

<< llvm::to_underlying(OldTarget) << OldFD;

1042 Diag

(NewFD->

getLocation

(), diag::warn_offload_incompatible_redeclare)

1043

<< llvm::to_underlying(NewTarget) << llvm::to_underlying(OldTarget);

1050template

<

typename

AttrTy>

1053 if

(AttrTy *Attribute = TemplateFD.

getAttr

<AttrTy>()) {

1054

AttrTy *Clone = Attribute->clone(S.

Context

);

1055

Clone->setInherited(

true

);

1063

copyAttrIfPresent<CUDAGlobalAttr>(

SemaRef

, FD, TemplateFD);

1064

copyAttrIfPresent<CUDAHostAttr>(

SemaRef

, FD, TemplateFD);

1065

copyAttrIfPresent<CUDADeviceAttr>(

SemaRef

, FD, TemplateFD);

1070 return "__llvmPushCallConfiguration"

;

1073 return getLangOpts

().HIPUseNewLaunchAPI ?

"__hipPushCallConfiguration" 1074

:

"hipConfigureCall"

;

1079 return "__cudaPushCallConfiguration"

;

1082 return "cudaConfigureCall"

;

Defines the clang::ASTContext interface.

static bool hasImplicitAttr(const ValueDecl *D)

Defines the clang::Expr interface and subclasses for C++ expressions.

llvm::MachO::Target Target

Defines the clang::Preprocessor interface.

static bool resolveCalleeCUDATargetConflict(CUDAFunctionTarget Target1, CUDAFunctionTarget Target2, CUDAFunctionTarget *ResolvedTarget)

When an implicitly-declared special member has to invoke more than one base/field special member,...

static bool hasAttr(const Decl *D, bool IgnoreImplicitAttr)

static void copyAttrIfPresent(Sema &S, FunctionDecl *FD, const FunctionDecl &TemplateFD)

static bool hasExplicitAttr(const VarDecl *D)

This file declares semantic analysis for CUDA constructs.

QualType getBaseElementType(const ArrayType *VAT) const

Return the innermost element type of an array type.

llvm::SetVector< const ValueDecl * > CUDAExternalDeviceDeclODRUsedByHost

Keep track of CUDA/HIP external kernels or device variables ODR-used by host code.

GVALinkage GetGVALinkageForFunction(const FunctionDecl *FD) const

llvm::DenseSet< const FunctionDecl * > CUDAImplicitHostDeviceFunUsedByDevice

Keep track of CUDA/HIP implicit host device functions used on device side in device compilation.

FunctionDecl * getcudaConfigureCallDecl()

Attr - This represents one attribute.

Represents a base class of a C++ class.

Represents a call to a C++ constructor.

Represents a C++ constructor within a class.

Represents a C++ base or member initializer.

Represents a C++ destructor within a class.

Represents a static or instance method of a struct/union/class.

const CXXRecordDecl * getParent() const

Return the parent of this method declaration, which is the class in which this method is defined.

Represents a C++ struct/union/class.

base_class_range vbases()

bool isAbstract() const

Determine whether this class has a pure virtual function.

bool isDynamicClass() const

CallExpr - Represents a function call (C99 6.5.2.2, C++ [expr.call]).

bool isDependentContext() const

Determines whether this context is dependent on a template parameter.

DeclContext * getLexicalParent()

getLexicalParent - Returns the containing lexical DeclContext.

A reference to a declared variable, function, enum, etc.

Decl - This represents one declaration (or definition), e.g.

bool isImplicit() const

isImplicit - Indicates whether the declaration was implicitly generated by the implementation.

void setInvalidDecl(bool Invalid=true)

setInvalidDecl - Indicates the Decl had a semantic error.

FunctionDecl * getAsFunction() LLVM_READONLY

Returns the function itself, or the templated function if this is a function template.

bool isInvalidDecl() const

SourceLocation getLocation() const

DeclContext * getDeclContext()

This represents one expression.

Represents a member of a struct/union/class.

Represents a function declaration or definition.

bool hasTrivialBody() const

Returns whether the function has a trivial body that does not require any specific codegen.

bool isFunctionTemplateSpecialization() const

Determine whether this function is a function template specialization.

FunctionTemplateDecl * getDescribedFunctionTemplate() const

Retrieves the function template that is described by this function declaration.

bool isTrivial() const

Whether this function is "trivial" in some specialized C++ senses.

bool isVariadic() const

Whether this function is variadic.

bool isTemplateInstantiation() const

Determines if the given function was instantiated from a function template.

bool isConstexpr() const

Whether this is a (C++11) constexpr function or constexpr constructor.

unsigned getNumParams() const

Return the number of parameters this function must have based on its FunctionType.

bool isDefined(const FunctionDecl *&Definition, bool CheckForPendingFriendDefinition=false) const

Returns true if the function has a definition that does not need to be instantiated.

Declaration of a template function.

FunctionDecl * getTemplatedDecl() const

Get the underlying function declaration of the template.

Represents the results of name lookup.

This represents a decl that may have a name.

DeclarationName getDeclName() const

Get the actual, stored name of the declaration, which may be a special name.

ParsedAttr - Represents a syntactic attribute.

A (possibly-)qualified type.

bool isConstQualified() const

Determine whether this type is const-qualified.

field_range fields() const

A helper class that allows the use of isa/cast/dyncast to detect TagType objects of structs/unions/cl...

RecordDecl * getDecl() const

decl_type * getFirstDecl()

Return the first declaration of this declaration or itself if this is the only declaration.

Scope - A scope is a transient data structure that is used while parsing the program.

A generic diagnostic builder for errors which may or may not be deferred.

SemaDiagnosticBuilder Diag(SourceLocation Loc, unsigned DiagID, bool DeferHint=false)

Emit a diagnostic.

ASTContext & getASTContext() const

const LangOptions & getLangOpts() const

DiagnosticsEngine & getDiagnostics() const

void PushForceHostDevice()

Increments our count of the number of times we've seen a pragma forcing functions to be host device.

void checkAllowedInitializer(VarDecl *VD)

void RecordImplicitHostDeviceFuncUsedByDevice(const FunctionDecl *FD)

Record FD if it is a CUDA/HIP implicit host device function used on device side in device compilation...

std::string getConfigureFuncName() const

Returns the name of the launch configuration function.

bool PopForceHostDevice()

Decrements our count of the number of times we've seen a pragma forcing functions to be host device.

CUDAFunctionTarget IdentifyTarget(const FunctionDecl *D, bool IgnoreImplicitHDAttr=false)

Determines whether the given function is a CUDA device/host/kernel/etc.

void maybeAddHostDeviceAttrs(FunctionDecl *FD, const LookupResult &Previous)

May add implicit CUDAHostAttr and CUDADeviceAttr attributes to FD, depending on FD and the current co...

ExprResult ActOnExecConfigExpr(Scope *S, SourceLocation LLLLoc, MultiExprArg ExecConfig, SourceLocation GGGLoc)

bool isEmptyConstructor(SourceLocation Loc, CXXConstructorDecl *CD)

bool isEmptyDestructor(SourceLocation Loc, CXXDestructorDecl *CD)

void checkTargetOverload(FunctionDecl *NewFD, const LookupResult &Previous)

Check whether NewFD is a valid overload for CUDA.

CUDAFunctionTarget CurrentTarget()

Gets the CUDA target for the current context.

SemaDiagnosticBuilder DiagIfHostCode(SourceLocation Loc, unsigned DiagID)

Creates a SemaDiagnosticBuilder that emits the diagnostic if the current context is "used as host cod...

bool inferTargetForImplicitSpecialMember(CXXRecordDecl *ClassDecl, CXXSpecialMemberKind CSM, CXXMethodDecl *MemberDecl, bool ConstRHS, bool Diagnose)

Given a implicit special member, infer its CUDA target from the calls it needs to make to underlying ...

struct clang::SemaCUDA::CUDATargetContext CurCUDATargetCtx

CUDATargetContextKind

Defines kinds of CUDA global host/device context where a function may be called.

@ CTCK_InitGlobalVar

Unknown context.

SemaDiagnosticBuilder DiagIfDeviceCode(SourceLocation Loc, unsigned DiagID)

Creates a SemaDiagnosticBuilder that emits the diagnostic if the current context is "used as device c...

llvm::DenseSet< FunctionDeclAndLoc > LocsWithCUDACallDiags

FunctionDecls and SourceLocations for which CheckCall has emitted a (maybe deferred) "bad call" diagn...

bool CheckCall(SourceLocation Loc, FunctionDecl *Callee)

Check whether we're allowed to call Callee from the current context.

void inheritTargetAttrs(FunctionDecl *FD, const FunctionTemplateDecl &TD)

Copies target attributes from the template TD to the function FD.

static bool isImplicitHostDeviceFunction(const FunctionDecl *D)

void CheckLambdaCapture(CXXMethodDecl *D, const sema::Capture &Capture)

void MaybeAddConstantAttr(VarDecl *VD)

May add implicit CUDAConstantAttr attribute to VD, depending on VD and current compilation settings.

void EraseUnwantedMatches(const FunctionDecl *Caller, llvm::SmallVectorImpl< std::pair< DeclAccessPair, FunctionDecl * > > &Matches)

Finds a function in Matches with highest calling priority from Caller context and erases all function...

void SetLambdaAttrs(CXXMethodDecl *Method)

Set device or host device attributes on the given lambda operator() method.

CUDAFunctionPreference IdentifyPreference(const FunctionDecl *Caller, const FunctionDecl *Callee)

Identifies relative preference of a given Caller/Callee combination, based on their host/device attri...

@ CVT_Host

Emitted on device side with a shadow variable on host side.

@ CVT_Both

Emitted on host side only.

@ CVT_Unified

Emitted on both sides with different addresses.

SpecialMemberOverloadResult - The overloading result for a special member function.

CXXMethodDecl * getMethod() const

Sema - This implements semantic analysis and AST building for C.

bool IsOverload(FunctionDecl *New, FunctionDecl *Old, bool UseMemberUsingDeclRules, bool ConsiderCudaAttrs=true)

bool IsLastErrorImmediate

Is the last error level diagnostic immediate.

const ExpressionEvaluationContextRecord & currentEvaluationContext() const

FunctionDecl * getCurFunctionDecl(bool AllowLambda=false) const

Returns a pointer to the innermost enclosing function, or nullptr if the current context is not insid...

ASTContext & getASTContext() const

const LangOptions & getLangOpts() const

ExprResult BuildCallExpr(Scope *S, Expr *Fn, SourceLocation LParenLoc, MultiExprArg ArgExprs, SourceLocation RParenLoc, Expr *ExecConfig=nullptr, bool IsExecConfig=false, bool AllowRecovery=false)

BuildCallExpr - Handle a call to Fn with the specified array of arguments.

FunctionEmissionStatus getEmissionStatus(const FunctionDecl *Decl, bool Final=false)

SourceManager & getSourceManager() const

void InstantiateFunctionDefinition(SourceLocation PointOfInstantiation, FunctionDecl *Function, bool Recursive=false, bool DefinitionRequired=false, bool AtEndOfTU=false)

Instantiate the definition of the given function from its template.

SpecialMemberOverloadResult LookupSpecialMember(CXXRecordDecl *D, CXXSpecialMemberKind SM, bool ConstArg, bool VolatileArg, bool RValueThis, bool ConstThis, bool VolatileThis)

void MarkFunctionReferenced(SourceLocation Loc, FunctionDecl *Func, bool MightBeOdrUse=true)

Mark a function referenced, and check whether it is odr-used (C++ [basic.def.odr]p2,...

Encodes a location in the source.

bool isInSystemHeader(SourceLocation Loc) const

Returns if a SourceLocation is in a system header.

CXXRecordDecl * getAsCXXRecordDecl() const

Retrieves the CXXRecordDecl that this type refers to, either because the type is a RecordType or beca...

bool isReferenceType() const

bool isCUDADeviceBuiltinSurfaceType() const

Check if the type is the CUDA device builtin surface type.

bool isDependentType() const

Whether this type is a dependent type, meaning that its definition somehow depends on a template para...

bool isCUDADeviceBuiltinTextureType() const

Check if the type is the CUDA device builtin texture type.

const T * getAs() const

Member-template getAs<specific type>'.

Represents a shadow declaration implicitly introduced into a scope by a (resolved) using-declaration ...

Represents a variable declaration or definition.

bool isConstexpr() const

Whether this variable is (C++11) constexpr.

bool isStaticDataMember() const

Determines whether this is a static data member.

bool hasGlobalStorage() const

Returns true for all variables that do not have local storage.

bool isFileVarDecl() const

Returns true for file scoped variable declaration.

const Expr * getInit() const

ValueDecl * getVariable() const

bool isVariableCapture() const

SourceLocation getLocation() const

Retrieve the location at which this variable was captured.

bool isThisCapture() const

bool isReferenceCapture() const

Defines the clang::TargetInfo interface.

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

bool CudaFeatureEnabled(llvm::VersionTuple, CudaFeature)

CXXSpecialMemberKind

Kinds of C++ special members.

@ VK_LValue

An l-value expression is a reference to an object with independent storage.

CUDATargetContextKind Kind

CUDAFunctionTarget Target


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4