27#include "llvm/ADT/BitmaskEnum.h"
28#include "llvm/ADT/STLExtras.h"
29#include "llvm/ADT/SmallVector.h"
32using namespace llvm::hlsl;
48 NS->setImplicit(
true);
49 NS->setHasExternalLexicalStorage();
53 (void)NS->getCanonicalDecl()->decls_begin();
69 defineTrivialHLSLTypes();
70 defineInternalHLSLTypes();
71 defineHLSLTypesWithForwardDeclarations();
72 defineHLSLAtomicIntrinsics();
88void HLSLExternalSemaSource::defineHLSLVectorAlias() {
95 &AST.
Idents.
get(
"element", tok::TokenKind::identifier),
false,
false);
96 TypeParam->setDefaultArgument(
100 TemplateParams.emplace_back(TypeParam);
104 &AST.
Idents.
get(
"element_count", tok::TokenKind::identifier), AST.
IntTy,
111 TemplateParams.emplace_back(SizeParam);
130 Record->setImplicit(
true);
142void HLSLExternalSemaSource::defineHLSLMatrixAlias() {
148 &AST.
Idents.
get(
"element", tok::TokenKind::identifier),
false,
false);
149 TypeParam->setDefaultArgument(
153 TemplateParams.emplace_back(TypeParam);
158 &AST.
Idents.
get(
"rows_count", tok::TokenKind::identifier), AST.
IntTy,
163 RowsParam->setDefaultArgument(
166 TemplateParams.emplace_back(RowsParam);
170 &AST.
Idents.
get(
"cols_count", tok::TokenKind::identifier), AST.
IntTy,
175 ColsParam->setDefaultArgument(
178 TemplateParams.emplace_back(ColsParam);
180 const unsigned MaxMatDim = SemaPtr->
getLangOpts().MaxMatrixDimension;
232 Record->setImplicit(
true);
244void HLSLExternalSemaSource::defineTrivialHLSLTypes() {
245 defineHLSLVectorAlias();
246 defineHLSLMatrixAlias();
249void HLSLExternalSemaSource::defineHeapResourceInfoTypes() {
250 ASTContext &AST = SemaPtr->getASTContext();
251 CXXRecordDecl *ResDecl = BuiltinTypeDeclBuilder(*SemaPtr, HLSLDetailNamespace,
252 "heap_resource_info")
253 .finalizeForwardDeclaration();
255 BuiltinTypeDeclBuilder(*SemaPtr, ResDecl)
257 .completeDefinition();
259 CXXRecordDecl *SampDecl =
260 BuiltinTypeDeclBuilder(*SemaPtr, HLSLDetailNamespace,
"heap_sampler_info")
261 .finalizeForwardDeclaration();
263 BuiltinTypeDeclBuilder(*SemaPtr, SampDecl)
265 .completeDefinition();
268void HLSLExternalSemaSource::defineInternalHLSLTypes() {
269 defineHeapResourceInfoTypes();
275 bool RawBuffer,
bool HasCounter) {
321enum class TemplateShape {
323 ElementTypeAndSampleCount,
326struct TextureTypeInfo {
329 ResourceDimension
Dim;
335 bool has(TexCap
C)
const {
return (Caps &
C) != TexCap{}; }
336 bool hasSampleCount()
const {
337 return Shape == TemplateShape::ElementTypeAndSampleCount;
343 {
"Texture1D", ResourceClass::SRV, ResourceDimension::Dim1D,
344 false,
false, TemplateShape::ElementType,
345 TexCap::Load | TexCap::Subscript | TexCap::Mips | TexCap::Sample |
346 TexCap::SampleCmp | TexCap::CalcLOD},
347 {
"RWTexture1D", ResourceClass::UAV, ResourceDimension::Dim1D,
348 false,
false, TemplateShape::ElementType,
349 TexCap::LoadRW | TexCap::Subscript},
350 {
"Texture1DArray", ResourceClass::SRV, ResourceDimension::Dim1D,
351 true,
false, TemplateShape::ElementType,
352 TexCap::Load | TexCap::Subscript | TexCap::Mips | TexCap::Sample |
353 TexCap::SampleCmp | TexCap::CalcLOD},
354 {
"RWTexture1DArray", ResourceClass::UAV, ResourceDimension::Dim1D,
355 true,
false, TemplateShape::ElementType,
356 TexCap::LoadRW | TexCap::Subscript},
357 {
"Texture2D", ResourceClass::SRV, ResourceDimension::Dim2D,
358 false,
false, TemplateShape::ElementType,
359 TexCap::Load | TexCap::Subscript | TexCap::Mips | TexCap::Sample |
360 TexCap::SampleCmp | TexCap::CalcLOD | TexCap::Gather |
362 {
"RWTexture2D", ResourceClass::UAV, ResourceDimension::Dim2D,
363 false,
false, TemplateShape::ElementType,
364 TexCap::LoadRW | TexCap::Subscript | TexCap::GetDims},
365 {
"Texture2DArray", ResourceClass::SRV, ResourceDimension::Dim2D,
366 true,
false, TemplateShape::ElementType,
367 TexCap::Load | TexCap::Subscript | TexCap::Mips | TexCap::Sample |
368 TexCap::SampleCmp | TexCap::CalcLOD | TexCap::Gather |
370 {
"RWTexture2DArray", ResourceClass::UAV, ResourceDimension::Dim2D,
371 true,
false, TemplateShape::ElementType,
372 TexCap::LoadRW | TexCap::Subscript | TexCap::GetDims},
373 {
"Texture2DMS", ResourceClass::SRV, ResourceDimension::Dim2D,
375 TemplateShape::ElementTypeAndSampleCount,
376 TexCap::LoadMS | TexCap::Subscript},
377 {
"Texture3D", ResourceClass::SRV, ResourceDimension::Dim3D,
378 false,
false, TemplateShape::ElementType,
379 TexCap::Load | TexCap::Subscript | TexCap::Mips | TexCap::Sample |
380 TexCap::CalcLOD | TexCap::GetDims},
381 {
"RWTexture3D", ResourceClass::UAV, ResourceDimension::Dim3D,
382 false,
false, TemplateShape::ElementType,
383 TexCap::LoadRW | TexCap::Subscript | TexCap::GetDims},
384 {
"TextureCube", ResourceClass::SRV, ResourceDimension::Cube,
385 false,
false, TemplateShape::ElementType,
386 TexCap::Sample | TexCap::SampleCmp | TexCap::CalcLOD | TexCap::Gather |
388 {
"TextureCubeArray", ResourceClass::SRV, ResourceDimension::Cube,
389 true,
false, TemplateShape::ElementType,
390 TexCap::Sample | TexCap::SampleCmp | TexCap::CalcLOD | TexCap::Gather |
395 const TextureTypeInfo &
T) {
396 const ResourceDimension
Dim =
T.Dim;
397 const bool IsArray =
T.IsArray;
399 Expr *SampleCountExpr =
nullptr;
400 if (
T.hasSampleCount()) {
402 assert(CTD &&
"multisampled texture must be a class template");
417 if (
T.has(TexCap::Mips))
426 if (
T.has(TexCap::Load))
428 if (
T.has(TexCap::LoadMS))
430 if (
T.has(TexCap::LoadRW))
432 if (
T.has(TexCap::Subscript))
435 if (
T.has(TexCap::Sample))
440 if (
T.has(TexCap::SampleCmp))
443 if (
T.has(TexCap::CalcLOD))
445 if (
T.has(TexCap::GetDims))
447 if (
T.has(TexCap::Gather))
464 &AST.
Idents.
get(
"element_type"),
false,
false);
502 PartialSpec->setTemplateArgsAsWritten(
505 PartialSpec->setImplicit(
true);
506 PartialSpec->setLexicalDeclContext(HLSLNamespace);
507 PartialSpec->setHasExternalLexicalStorage();
510 HLSLNamespace->
addDecl(PartialSpec);
528 QualType TType = Context.getTypeDeclType(
T);
532 Context.getTrivialTypeSourceInfo(TType, NameLoc);
535 Context, BoolTy, NameLoc, UTT_IsTypedResourceElementCompatible,
536 {TTypeSourceInfo}, NameLoc,
true);
554 QualType TType = Context.getTypeDeclType(
T);
558 Context.getTrivialTypeSourceInfo(TType, NameLoc);
561 Context, BoolTy, NameLoc, UTT_IsConstantBufferElementCompatible,
562 {TTypeSourceInfo}, NameLoc,
true);
580 QualType TType = Context.getTypeDeclType(
T);
584 Context.getTrivialTypeSourceInfo(TType, NameLoc);
588 {TTypeSourceInfo}, NameLoc,
true);
597 UETT_SizeOf, TTypeSourceInfo, BoolTy, NameLoc, NameLoc);
602 Context, llvm::APInt(Context.getTypeSize(Context.getSizeType()), 1,
true),
603 Context.getSizeType(), NameLoc);
611 Context, NotIntangibleExpr, SizeGEQOneExpr, BO_LAnd, BoolTy,
VK_LValue,
625 IdentifierInfo &ElementTypeII = Context.Idents.get(
"element_type");
634 T->setDeclContext(DC);
639 Context, DeclLoc, DeclLoc, {
T}, DeclLoc,
nullptr);
642 Expr *ConstraintExpr =
nullptr;
647 &Context.Idents.get(
"__is_typed_resource_element_compatible"));
652 &Context.Idents.get(
"__is_structured_resource_element_compatible"));
657 &Context.Idents.get(
"__is_constant_buffer_element_compatible"));
665 ConceptParams, ConstraintExpr);
676void HLSLExternalSemaSource::defineHLSLTypesWithForwardDeclarations() {
677 ASTContext &AST = SemaPtr->getASTContext();
686 Decl = BuiltinTypeDeclBuilder(*SemaPtr, HLSLNamespace,
"ConstantBuffer")
687 .addSimpleTemplateParams({
"element_type"}, ConstantBufferConcept)
688 .finalizeForwardDeclaration();
690 onCompletion(Decl, [
this](CXXRecordDecl *Decl) {
697 Decl = BuiltinTypeDeclBuilder(*SemaPtr, HLSLNamespace,
"Buffer")
698 .addSimpleTemplateParams({
"element_type"}, TypedBufferConcept)
699 .finalizeForwardDeclaration();
701 onCompletion(Decl, [
this](CXXRecordDecl *Decl) {
710 Decl = BuiltinTypeDeclBuilder(*SemaPtr, HLSLNamespace,
"RWBuffer")
711 .addSimpleTemplateParams({
"element_type"}, TypedBufferConcept)
712 .finalizeForwardDeclaration();
714 onCompletion(Decl, [
this](CXXRecordDecl *Decl) {
724 BuiltinTypeDeclBuilder(*SemaPtr, HLSLNamespace,
"RasterizerOrderedBuffer")
725 .addSimpleTemplateParams({
"element_type"}, StructuredBufferConcept)
726 .finalizeForwardDeclaration();
727 onCompletion(Decl, [
this](CXXRecordDecl *Decl) {
736 Decl = BuiltinTypeDeclBuilder(*SemaPtr, HLSLNamespace,
"StructuredBuffer")
737 .addSimpleTemplateParams({
"element_type"}, StructuredBufferConcept)
738 .finalizeForwardDeclaration();
739 onCompletion(Decl, [
this](CXXRecordDecl *Decl) {
748 Decl = BuiltinTypeDeclBuilder(*SemaPtr, HLSLNamespace,
"RWStructuredBuffer")
749 .addSimpleTemplateParams({
"element_type"}, StructuredBufferConcept)
750 .finalizeForwardDeclaration();
751 onCompletion(Decl, [
this](CXXRecordDecl *Decl) {
763 BuiltinTypeDeclBuilder(*SemaPtr, HLSLNamespace,
"AppendStructuredBuffer")
764 .addSimpleTemplateParams({
"element_type"}, StructuredBufferConcept)
765 .finalizeForwardDeclaration();
766 onCompletion(Decl, [
this](CXXRecordDecl *Decl) {
775 BuiltinTypeDeclBuilder(*SemaPtr, HLSLNamespace,
"ConsumeStructuredBuffer")
776 .addSimpleTemplateParams({
"element_type"}, StructuredBufferConcept)
777 .finalizeForwardDeclaration();
778 onCompletion(Decl, [
this](CXXRecordDecl *Decl) {
786 Decl = BuiltinTypeDeclBuilder(*SemaPtr, HLSLNamespace,
787 "RasterizerOrderedStructuredBuffer")
788 .addSimpleTemplateParams({
"element_type"}, StructuredBufferConcept)
789 .finalizeForwardDeclaration();
790 onCompletion(Decl, [
this](CXXRecordDecl *Decl) {
801 Decl = BuiltinTypeDeclBuilder(*SemaPtr, HLSLNamespace,
"ByteAddressBuffer")
802 .finalizeForwardDeclaration();
803 onCompletion(Decl, [
this](CXXRecordDecl *Decl) {
810 Decl = BuiltinTypeDeclBuilder(*SemaPtr, HLSLNamespace,
"RWByteAddressBuffer")
811 .finalizeForwardDeclaration();
812 onCompletion(Decl, [
this](CXXRecordDecl *Decl) {
821 Decl = BuiltinTypeDeclBuilder(*SemaPtr, HLSLNamespace,
822 "RasterizerOrderedByteAddressBuffer")
823 .finalizeForwardDeclaration();
824 onCompletion(Decl, [
this](CXXRecordDecl *Decl) {
832 Decl = BuiltinTypeDeclBuilder(*SemaPtr, HLSLNamespace,
"SamplerState")
833 .finalizeForwardDeclaration();
834 onCompletion(Decl, [
this](CXXRecordDecl *Decl) {
839 BuiltinTypeDeclBuilder(*SemaPtr, HLSLNamespace,
"SamplerComparisonState")
840 .finalizeForwardDeclaration();
841 onCompletion(Decl, [
this](CXXRecordDecl *Decl) {
847 BuiltinTypeDeclBuilder TexBuilder(*SemaPtr, HLSLNamespace,
T.Name);
849 case TemplateShape::ElementType:
850 TexBuilder.addSimpleTemplateParams({
"element_type"}, {Float4Ty},
853 case TemplateShape::ElementTypeAndSampleCount:
854 TexBuilder.addMSTextureTemplateParams(
"element_type",
"sample_count",
858 Decl = TexBuilder.finalizeForwardDeclaration();
860 onCompletion(Decl, [
this, &
T](CXXRecordDecl *Decl) {
864 if (
T.Shape != TemplateShape::ElementType)
868 *SemaPtr, HLSLNamespace,
Decl->getDescribedClassTemplate());
869 onCompletion(PartialSpec, [
this, &
T](CXXRecordDecl *Decl) {
880 StringRef BuiltinName,
QualType ElemTy,
881 LangAS DestAS,
bool ThreeArg) {
889 ParamTypes.push_back(DestTy);
890 ParamTypes.push_back(ElemTy);
892 ParamTypes.push_back(OrigRefTy);
906 constexpr const char *ParamNames[] = {
"dest",
"value",
"original_value"};
909 for (
auto [ParamType, ParamName] : llvm::zip(ParamTypes, ParamNames)) {
916 ParmDecls.push_back(Parm);
918 FD->setParams(ParmDecls);
922 FD->
addAttr(BuiltinAliasAttr::CreateImplicit(AST, &BuiltinII));
933 StringRef FuncName, StringRef BuiltinName,
934 bool RequiresOriginalValue =
false,
935 bool SupportsFloat =
false) {
945 for (
LangAS AS : AddrSpaces) {
946 if (!RequiresOriginalValue)
954void HLSLExternalSemaSource::defineHLSLAtomicIntrinsics() {
956 "__builtin_hlsl_interlocked_add");
958 "__builtin_hlsl_interlocked_and");
960 "__builtin_hlsl_interlocked_exchange",
964 "__builtin_hlsl_interlocked_max");
966 "__builtin_hlsl_interlocked_min");
968 "__builtin_hlsl_interlocked_or");
970 "__builtin_hlsl_interlocked_xor");
974 CompletionFunction Fn) {
975 if (!
Record->isCompleteDefinition())
976 Completions.insert(std::make_pair(
Record->getCanonicalDecl(), Fn));
984 auto It = Completions.find(
Record);
985 if (It == Completions.end())
990 CompletionFunction Fn = std::move(It->second);
991 Completions.erase(It);
Defines the clang::ASTContext interface.
Provides definitions for the various language-specific address spaces.
llvm::dxil::ResourceClass ResourceClass
@ LLVM_MARK_AS_BITMASK_ENUM
Defines the C++ Decl subclasses, other than those for templates (found in DeclTemplate....
Defines the C++ template declaration subclasses.
static BuiltinTypeDeclBuilder setupBufferType(CXXRecordDecl *Decl, Sema &S, ResourceClass RC, bool IsROV, bool RawBuffer, bool HasCounter)
Set up common members and attributes for buffer types.
static BuiltinTypeDeclBuilder setupTextureType(CXXRecordDecl *Decl, Sema &S, const TextureTypeInfo &T)
static NamespaceDecl * createImplicitNamespace(Sema &S, StringRef Name, DeclContext *DC)
static BuiltinTypeDeclBuilder setupSamplerType(CXXRecordDecl *Decl, Sema &S)
Set up common members and attributes for sampler types.
static void buildAtomicOverload(Sema &S, NamespaceDecl *NS, StringRef FuncName, StringRef BuiltinName, QualType ElemTy, LangAS DestAS, bool ThreeArg)
static Expr * constructTypedBufferConstraintExpr(Sema &S, SourceLocation NameLoc, TemplateTypeParmDecl *T)
static ConceptDecl * constructBufferConceptDecl(Sema &S, NamespaceDecl *NSD, HLSLBufferType BT)
static void defineHLSLInterlockedFunc(Sema &S, NamespaceDecl *NS, StringRef FuncName, StringRef BuiltinName, bool RequiresOriginalValue=false, bool SupportsFloat=false)
static const TextureTypeInfo TextureTypes[]
static Expr * constructConstantBufferConstraintExpr(Sema &S, SourceLocation NameLoc, TemplateTypeParmDecl *T)
static ClassTemplatePartialSpecializationDecl * addVectorTexturePartialSpecialization(Sema &S, NamespaceDecl *HLSLNamespace, ClassTemplateDecl *TextureTemplate)
static Expr * constructStructuredBufferConstraintExpr(Sema &S, SourceLocation NameLoc, TemplateTypeParmDecl *T)
Result
Implement __builtin_bit_cast and related operations.
llvm::MachO::Record Record
Defines the clang::Preprocessor interface.
This file declares semantic analysis for HLSL constructs.
Defines the clang::SourceLocation class and associated facilities.
C Language Family Type Representation.
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
TranslationUnitDecl * getTranslationUnitDecl() const
QualType getDependentSizedMatrixType(QualType ElementType, Expr *RowExpr, Expr *ColumnExpr, SourceLocation AttrLoc) const
Return the unique reference to the matrix type of the specified element type and size.
unsigned getIntWidth(QualType T) const
static CanQualType getCanonicalType(QualType T)
Return the canonical (structural) type corresponding to the specified potentially non-canonical type ...
QualType getLValueReferenceType(QualType T, bool SpelledAsLValue=true) const
Return the uniqued reference to the type for an lvalue reference to the specified type.
CanQualType UnsignedLongTy
TypeSourceInfo * getTrivialTypeSourceInfo(QualType T, SourceLocation Loc=SourceLocation()) const
Allocate a TypeSourceInfo where all locations have been initialized to a given location,...
CanQualType UnsignedIntTy
QualType getTemplateSpecializationType(ElaboratedTypeKeyword Keyword, TemplateName T, ArrayRef< TemplateArgument > SpecifiedArgs, ArrayRef< TemplateArgument > CanonicalArgs, QualType Underlying=QualType()) const
QualType getFunctionType(QualType ResultTy, ArrayRef< QualType > Args, const FunctionProtoType::ExtProtoInfo &EPI) const
Return a normal function type with a typed argument list.
QualType getTemplateTypeParmType(int Depth, int Index, bool ParameterPack, TemplateTypeParmDecl *ParmDecl=nullptr) const
Retrieve the template type parameter type for a template parameter or parameter pack with the given d...
QualType getExtVectorType(QualType VectorType, unsigned NumElts) const
Return the unique reference to an extended vector type of the specified element type and size.
QualType getAddrSpaceQualType(QualType T, LangAS AddressSpace) const
Return the uniqued reference to the type for an address space qualified type with the specified type ...
QualType getDependentSizedExtVectorType(QualType VectorType, Expr *SizeExpr, SourceLocation AttrLoc) const
A builtin binary operation expression such as "x + y" or "x <= y".
static BinaryOperator * Create(const ASTContext &C, Expr *lhs, Expr *rhs, Opcode opc, QualType ResTy, ExprValueKind VK, ExprObjectKind OK, SourceLocation opLoc, FPOptionsOverride FPFeatures)
Represents a C++ struct/union/class.
static CanQual< Type > CreateUnsafe(QualType Other)
Declaration of a class template.
void AddPartialSpecialization(ClassTemplatePartialSpecializationDecl *D, llvm::FoldingSetInsertToken InsertToken)
Insert the specified partial specialization knowing that it is not already in.
static ClassTemplatePartialSpecializationDecl * Create(ASTContext &Context, TagKind TK, DeclContext *DC, SourceLocation StartLoc, SourceLocation IdLoc, TemplateParameterList *Params, ClassTemplateDecl *SpecializedTemplate, ArrayRef< TemplateArgument > Args, CanQualType CanonInjectedTST, ClassTemplatePartialSpecializationDecl *PrevDecl)
Declaration of a C++20 concept.
static ConceptDecl * Create(ASTContext &C, DeclContext *DC, SourceLocation L, DeclarationName Name, TemplateParameterList *Params, Expr *ConstraintExpr=nullptr)
DeclContext - This is used only as base class of specific decl types that can act as declaration cont...
void addDecl(Decl *D)
Add the declaration D into this context.
bool hasExternalLexicalStorage() const
Whether this DeclContext has external storage containing additional declarations that are lexically i...
decl_iterator decls_begin() const
static DeclRefExpr * Create(const ASTContext &Context, NestedNameSpecifierLoc QualifierLoc, SourceLocation TemplateKWLoc, ValueDecl *D, bool RefersToEnclosingVariableOrCapture, SourceLocation NameLoc, QualType T, ExprValueKind VK, NamedDecl *FoundD=nullptr, const TemplateArgumentListInfo *TemplateArgs=nullptr, NonOdrUseReason NOUR=NOUR_None)
Decl - This represents one declaration (or definition), e.g.
void setImplicit(bool I=true)
DeclContext * getDeclContext()
The name of a declaration.
This represents one expression.
Represents difference between two FPOptions values.
Represents a function declaration or definition.
static FunctionDecl * Create(ASTContext &C, DeclContext *DC, SourceLocation StartLoc, SourceLocation NLoc, DeclarationName N, QualType T, TypeSourceInfo *TInfo, StorageClass SC, bool UsesFPIntrin=false, bool isInlineSpecified=false, bool hasWrittenPrototype=true, ConstexprSpecKind ConstexprKind=ConstexprSpecKind::Unspecified, const AssociatedConstraint &TrailingRequiresClause={})
void CompleteType(TagDecl *Tag) override
Complete an incomplete HLSL builtin type.
void InitializeSema(Sema &S) override
Initialize the semantic source with the Sema instance being used to perform semantic analysis on the ...
One of these records is kept for each identifier that is lexed.
IdentifierInfo & get(StringRef Name)
Return the identifier token info for the specified named identifier.
static IntegerLiteral * Create(const ASTContext &C, const llvm::APInt &V, QualType type, SourceLocation l)
Returns a new integer literal with value 'V' and type 'type'.
Represents the results of name lookup.
Represent a C++ namespace.
static NamespaceDecl * Create(ASTContext &C, DeclContext *DC, bool Inline, SourceLocation StartLoc, SourceLocation IdLoc, IdentifierInfo *Id, NamespaceDecl *PrevDecl, bool Nested)
A C++ nested-name-specifier augmented with source location information.
static NonTypeTemplateParmDecl * Create(const ASTContext &C, DeclContext *DC, SourceLocation StartLoc, SourceLocation IdLoc, int D, int P, const IdentifierInfo *Id, QualType T, bool ParameterPack, TypeSourceInfo *TInfo)
Represents a parameter to a function.
void setScopeInfo(unsigned scopeDepth, unsigned parameterIndex)
static ParmVarDecl * Create(ASTContext &C, DeclContext *DC, SourceLocation StartLoc, SourceLocation IdLoc, const IdentifierInfo *Id, QualType T, TypeSourceInfo *TInfo, StorageClass S, Expr *DefArg)
IdentifierTable & getIdentifierTable()
A (possibly-)qualified type.
C++2a [expr.prim.req]: A requires-expression provides a concise way to express requirements on templa...
Sema - This implements semantic analysis and AST building for C.
@ LookupNamespaceName
Look up a namespace name within a C++ using directive or namespace alias definition,...
Preprocessor & getPreprocessor() const
ASTContext & getASTContext() const
DeclRefExpr * BuildDeclRefExpr(ValueDecl *D, QualType Ty, ExprValueKind VK, SourceLocation Loc, const CXXScopeSpec *SS=nullptr)
const LangOptions & getLangOpts() const
TemplateArgumentLoc getTrivialTemplateArgumentLoc(const TemplateArgument &Arg, QualType NTTPType, SourceLocation Loc)
Allocate a TemplateArgumentLoc where all locations have been initialized to the given location.
bool LookupQualifiedName(LookupResult &R, DeclContext *LookupCtx, bool InUnqualifiedLookup=false)
Perform qualified name lookup into a given context.
Encodes a location in the source.
Represents the declaration of a struct/union/class/enum.
bool isCompleteDefinition() const
Return true if this decl has its body fully specified.
A convenient class for passing around template argument information.
void addArgument(const TemplateArgumentLoc &Loc)
Location wrapper for a TemplateArgument.
Represents a template argument.
void setTemplateParameters(TemplateParameterList *TParams)
TemplateParameterList * getTemplateParameters() const
Get the list of template parameters.
Represents a C++ template name within the type system.
Stores a list of template parameters for a TemplateDecl and its derived classes.
NamedDecl * getParam(unsigned Idx)
static TemplateParameterList * Create(const ASTContext &C, SourceLocation TemplateLoc, SourceLocation LAngleLoc, ArrayRef< NamedDecl * > Params, SourceLocation RAngleLoc, Expr *RequiresClause)
Declaration of a template type parameter.
static TemplateTypeParmDecl * Create(const ASTContext &C, DeclContext *DC, SourceLocation KeyLoc, SourceLocation NameLoc, int D, int P, IdentifierInfo *Id, bool Typename, bool ParameterPack, bool HasTypeConstraint=false, UnsignedOrNone NumExpanded=std::nullopt)
static TypeAliasDecl * Create(ASTContext &C, DeclContext *DC, SourceLocation StartLoc, SourceLocation IdLoc, const IdentifierInfo *Id, TypeSourceInfo *TInfo)
static TypeAliasTemplateDecl * Create(ASTContext &C, DeclContext *DC, SourceLocation L, DeclarationName Name, TemplateParameterList *Params, NamedDecl *Decl)
Create a function template node.
A container of type source information.
A type trait used in the implementation of various C++11 and Library TR1 trait templates.
static TypeTraitExpr * Create(const ASTContext &C, QualType T, SourceLocation Loc, TypeTrait Kind, ArrayRef< TypeSourceInfo * > Args, SourceLocation RParenLoc, bool Value)
Create a new type trait expression.
UnaryExprOrTypeTraitExpr - expression with either a type or (unevaluated) expression operand.
UnaryOperator - This represents the unary-expression's (except sizeof and alignof),...
static UnaryOperator * Create(const ASTContext &C, Expr *input, Opcode opc, QualType type, ExprValueKind VK, ExprObjectKind OK, SourceLocation l, bool CanOverflow, FPOptionsOverride FPFeatures)
Represents a C++ using-declaration.
static UsingDirectiveDecl * Create(ASTContext &C, DeclContext *DC, SourceLocation UsingLoc, SourceLocation NamespaceLoc, NestedNameSpecifierLoc QualifierLoc, SourceLocation IdentLoc, NamedDecl *Nominated, DeclContext *CommonAncestor)
Represents a GCC generic vector type.
BuiltinTypeDeclBuilder & addRWTextureLoadMethods(ResourceDimension Dim, bool IsArray=false)
BuiltinTypeDeclBuilder & addDefaultHandleConstructor(AccessSpecifier Access=AccessSpecifier::AS_public)
BuiltinTypeDeclBuilder & addConsumeMethod()
BuiltinTypeDeclBuilder & addSampleGradMethods(ResourceDimension Dim, bool IsArray=false)
BuiltinTypeDeclBuilder & addCopyAssignmentOperator(AccessSpecifier Access=AccessSpecifier::AS_public)
BuiltinTypeDeclBuilder & addGatherCmpMethods(ResourceDimension Dim, bool IsArray=false)
BuiltinTypeDeclBuilder & addGetDimensionsMethodForBuffer()
BuiltinTypeDeclBuilder & addTextureLoadMSMethods(ResourceDimension Dim, bool IsArray=false)
BuiltinTypeDeclBuilder & addConstantBufferConversionToType()
BuiltinTypeDeclBuilder & addSamplerHandle()
BuiltinTypeDeclBuilder & addTextureLoadMethods(ResourceDimension Dim, bool IsArray=false)
BuiltinTypeDeclBuilder & completeDefinition()
BuiltinTypeDeclBuilder & addSampleBiasMethods(ResourceDimension Dim, bool IsArray=false)
BuiltinTypeDeclBuilder & addBufferHandles(ResourceClass RC, bool IsROV, bool RawBuffer, bool HasCounter, AccessSpecifier Access=AccessSpecifier::AS_private)
BuiltinTypeDeclBuilder & addByteAddressBufferStoreMethods()
BuiltinTypeDeclBuilder & addSampleMethods(ResourceDimension Dim, bool IsArray=false)
BuiltinTypeDeclBuilder & addArraySubscriptOperators(ResourceDimension Dim=ResourceDimension::Unknown, bool IsArray=false)
BuiltinTypeDeclBuilder & addSampleLevelMethods(ResourceDimension Dim, bool IsArray=false)
BuiltinTypeDeclBuilder & addCopyConstructor(AccessSpecifier Access=AccessSpecifier::AS_public)
BuiltinTypeDeclBuilder & addAppendMethod()
BuiltinTypeDeclBuilder & addHeapResourceInfoConstructor(bool HasCounter=false)
BuiltinTypeDeclBuilder & addIncrementCounterMethod()
BuiltinTypeDeclBuilder & addSampleCmpMethods(ResourceDimension Dim, bool IsArray=false)
BuiltinTypeDeclBuilder & addMipsMember(ResourceDimension Dim)
BuiltinTypeDeclBuilder & addHeapSamplerInfoConstructor()
BuiltinTypeDeclBuilder & addByteAddressBufferLoadMethods()
BuiltinTypeDeclBuilder & addStaticInitializationFunctions(bool HasCounter)
BuiltinTypeDeclBuilder & addGatherMethods(ResourceDimension Dim, bool IsArray=false)
BuiltinTypeDeclBuilder & addCalculateLodMethods(ResourceDimension Dim)
BuiltinTypeDeclBuilder & addGetDimensionsMethods(ResourceDimension Dim)
BuiltinTypeDeclBuilder & addByteAddressBufferInterlockedMethods()
BuiltinTypeDeclBuilder & addDecrementCounterMethod()
BuiltinTypeDeclBuilder & addTextureHandle(ResourceClass RC, bool IsROV, bool IsArray, ResourceDimension RD, Expr *SampleCountExpr=nullptr, AccessSpecifier Access=AccessSpecifier::AS_private)
BuiltinTypeDeclBuilder & addLoadMethods()
BuiltinTypeDeclBuilder & addSampleCmpLevelZeroMethods(ResourceDimension Dim, bool IsArray=false)
const internal::ArgumentAdaptingMatcherFunc< internal::HasMatcher > has
Matches AST nodes that have child AST nodes that match the provided matcher.
bool Load(InterpState &S, CodePtr OpPC)
std::variant< struct RequiresDecl, struct HeaderDecl, struct UmbrellaDirDecl, struct ModuleDecl, struct ExcludeDecl, struct ExportDecl, struct ExportAsDecl, struct ExternModuleDecl, struct UseDecl, struct LinkDecl, struct ConfigMacrosDecl, struct ConflictDecl > Decl
All declarations that can appear in a module declaration.
Top level wrappers for InstallAPI frontend operations.
bool isa(CodeGen::Address addr)
@ OK_Ordinary
An ordinary object is located at an address in memory.
LLVM_ENABLE_BITMASK_ENUMS_IN_NAMESPACE()
@ Default
Set to the current date and time.
@ Result
The result type of a method or function.
const FunctionProtoType * T
@ Template
We are parsing a template declaration.
LangAS
Defines the address space values used by the address space qualifier of QualType.
@ VK_PRValue
A pr-value expression (in the C++11 taxonomy) produces a temporary value.
@ VK_LValue
An l-value expression is a reference to an object with independent storage.
U cast(CodeGen::Address addr)
@ Class
The "class" keyword introduces the elaborated-type-specifier.
__builtin_elementwise_add_sat __builtin_elementwise_sub_sat uint32_t __packed_splat4 __packed_splat2 __packed_splat8 __packed_splat4 __packed_splat2 __packed_splat4 __packed_splat2 __packed_splat8 __packed_splat4 uint32_t
static const ASTTemplateArgumentListInfo * Create(const ASTContext &C, const TemplateArgumentListInfo &List)
DeclarationNameInfo - A collector data type for bundling together a DeclarationName and the correspon...
Extra information about a function prototype.