clang 22.0.0git
clang::CanQual< T > Class Template Reference

Represents a canonical, potentially-qualified type. More...

#include "clang/AST/CanonicalType.h"

Inheritance diagram for clang::CanQual< T >:
[legend]

Public Member Functions

 CanQual ()=default
 Constructs a NULL canonical type.
template<typename U>
 CanQual (const CanQual< U > &Other, std::enable_if_t< std::is_base_of< T, U >::value, int >=0)
 Converting constructor that permits implicit upcasting of canonical type pointers.
const TgetTypePtr () const
 Retrieve the underlying type pointer, which refers to a canonical type.
const TgetTypePtrOrNull () const
 Retrieve the underlying type pointer, which refers to a canonical type, or nullptr.
 operator QualType () const
 Implicit conversion to a qualified type.
 operator bool () const
 Implicit conversion to bool.
bool isNull () const
SplitQualType split () const
template<typename U>
CanProxy< UgetAs () const
 Retrieve a canonical type pointer with a different static type, upcasting or downcasting as needed.
template<typename U>
CanProxy< UcastAs () const
CanProxy< Toperator-> () const
 Overloaded arrow operator that produces a canonical type proxy.
Qualifiers getQualifiers () const
 Retrieve all qualifiers.
unsigned getCVRQualifiers () const
 Retrieve the const/volatile/restrict qualifiers.
bool hasQualifiers () const
 Determines whether this type has any qualifiers.
bool isConstQualified () const
bool isVolatileQualified () const
bool isRestrictQualified () const
bool isCanonicalAsParam () const
 Determines if this canonical type is furthermore canonical as a parameter.
CanQual< TgetUnqualifiedType () const
 Retrieve the unqualified form of this type.
QualType withConst () const
 Retrieves a version of this type with const applied.
bool isMoreQualifiedThan (CanQual< T > Other, const ASTContext &Ctx) const
 Determines whether this canonical type is more qualified than the Other canonical type.
bool isAtLeastAsQualifiedAs (CanQual< T > Other, const ASTContext &Ctx) const
 Determines whether this canonical type is at least as qualified as the Other canonical type.
CanQual< TypegetNonReferenceType () const
 If the canonical type is a reference type, returns the type that it refers to; otherwise, returns the type itself.
void * getAsOpaquePtr () const
 Retrieve the internal representation of this canonical type.
void dump () const
void Profile (llvm::FoldingSetNodeID &ID) const

Static Public Member Functions

static CanQual< TgetFromOpaquePtr (void *Ptr)
 Construct a canonical type from its internal representation.
static CanQual< TCreateUnsafe (QualType Other)
 Builds a canonical type from a QualType.

Detailed Description

template<typename T = Type>
class clang::CanQual< T >

Represents a canonical, potentially-qualified type.

The CanQual template is a lightweight smart pointer that provides access to the canonical representation of a type, where all typedefs and other syntactic sugar has been eliminated. A CanQualType may also have various qualifiers (const, volatile, restrict) attached to it.

The template type parameter T is one of the Type classes (PointerType, BuiltinType, etc.). The type stored within CanQual<T> will be of that type (or some subclass of that type). The typedef CanQualType is just a shorthand for CanQual<Type>.

An instance of CanQual<T> can be implicitly converted to a CanQual when T is derived from U, which essentially provides an implicit upcast. For example, CanQual<LValueReferenceType> can be converted to CanQual<ReferenceType>. Note that any CanQual type can be implicitly converted to a QualType, but the reverse operation requires a call to ASTContext::getCanonicalType().

Definition at line 66 of file CanonicalType.h.

Constructor & Destructor Documentation

◆ CanQual() [1/2]

template<typename T = Type>
clang::CanQual< T >::CanQual ( )
default

Constructs a NULL canonical type.

Referenced by CreateUnsafe(), getFromOpaquePtr(), getNonReferenceType(), and getUnqualifiedType().

◆ CanQual() [2/2]

template<typename T = Type>
template<typename U>
clang::CanQual< T >::CanQual ( const CanQual< U > & Other,
std::enable_if_t< std::is_base_of< T, U >::value, int > = 0 )

Converting constructor that permits implicit upcasting of canonical type pointers.

Member Function Documentation

◆ castAs()

◆ CreateUnsafe()

template<typename T>
CanQual< T > clang::CanQual< T >::CreateUnsafe ( QualType Other)
static

Builds a canonical type from a QualType.

This routine is inherently unsafe, because it requires the user to ensure that the given type is a canonical type with the correct

Definition at line 642 of file CanonicalType.h.

References CanQual(), clang::isa(), clang::Other, and clang::Result.

Referenced by castAs(), getAs(), and getUnqualifiedType().

◆ dump()

template<typename T = Type>
void clang::CanQual< T >::dump ( ) const
inline

Definition at line 195 of file CanonicalType.h.

◆ getAs()

template<typename T>
template<typename U>
CanProxy< U > clang::CanQual< T >::getAs ( ) const

Retrieve a canonical type pointer with a different static type, upcasting or downcasting as needed.

The getAs() function is typically used to try to downcast to a more specific (canonical) type in the type system. For example:

void f(CanQual<Type> T) {
if (CanQual<PointerType> Ptr = T->getAs<PointerType>()) {
// look at Ptr's pointee type
}
}
CanQual()=default
Constructs a NULL canonical type.
PointerType - C99 6.7.5.1 - Pointer Declarators.
Definition TypeBase.h:3328
const FunctionProtoType * T
Returns
A proxy pointer to the same type, but with the specified static type (U). If the dynamic type is not the specified static type or a derived class thereof, a NULL canonical type.

Definition at line 653 of file CanonicalType.h.

References CreateUnsafe(), and clang::isa().

Referenced by clang::CIRGen::CIRGenTypes::arrangeCXXMethodDeclaration(), clang::CodeGen::CodeGenTypes::arrangeCXXMethodDeclaration(), clang::CIRGen::CIRGenTypes::arrangeCXXMethodType(), clang::CodeGen::CodeGenTypes::arrangeCXXMethodType(), clang::CIRGen::CIRGenTypes::arrangeFunctionDeclaration(), clang::CodeGen::CodeGenTypes::arrangeFunctionDeclaration(), DiagnoseBadConversion(), GetFormalType(), getFormalType(), getNonReferenceType(), IsModifiable(), MightInstantiateTo(), setCUDAKernelCallingConvention(), and TryStaticDowncast().

◆ getAsOpaquePtr()

◆ getCVRQualifiers()

template<typename T = Type>
unsigned clang::CanQual< T >::getCVRQualifiers ( ) const
inline

Retrieve the const/volatile/restrict qualifiers.

Definition at line 133 of file CanonicalType.h.

◆ getFromOpaquePtr()

template<typename T>
CanQual< T > clang::CanQual< T >::getFromOpaquePtr ( void * Ptr)
static

Construct a canonical type from its internal representation.

Definition at line 633 of file CanonicalType.h.

References CanQual(), clang::QualType::getFromOpaquePtr(), and clang::Result.

Referenced by llvm::PointerLikeTypeTraits< clang::CanQual< T > >::getFromVoidPointer().

◆ getNonReferenceType()

template<typename T>
CanQual< Type > clang::CanQual< T >::getNonReferenceType ( ) const
inline

If the canonical type is a reference type, returns the type that it refers to; otherwise, returns the type itself.

Definition at line 625 of file CanonicalType.h.

References CanQual(), and getAs().

Referenced by clang::ConversionFixItGenerator::compareTypesSimple().

◆ getQualifiers()

template<typename T = Type>
Qualifiers clang::CanQual< T >::getQualifiers ( ) const
inline

◆ getTypePtr()

◆ getTypePtrOrNull()

template<typename T = Type>
const T * clang::CanQual< T >::getTypePtrOrNull ( ) const
inline

Retrieve the underlying type pointer, which refers to a canonical type, or nullptr.

Definition at line 88 of file CanonicalType.h.

Referenced by clang::CanProxyBase< BlockPointerType >::operator const BlockPointerType *().

◆ getUnqualifiedType()

◆ hasQualifiers()

template<typename T = Type>
bool clang::CanQual< T >::hasQualifiers ( ) const
inline

Determines whether this type has any qualifiers.

Definition at line 136 of file CanonicalType.h.

◆ isAtLeastAsQualifiedAs()

template<typename T = Type>
bool clang::CanQual< T >::isAtLeastAsQualifiedAs ( CanQual< T > Other,
const ASTContext & Ctx ) const
inline

Determines whether this canonical type is at least as qualified as the Other canonical type.

Definition at line 174 of file CanonicalType.h.

Referenced by clang::ConversionFixItGenerator::compareTypesSimple(), DiagnoseBadConversion(), and TryStaticDowncast().

◆ isCanonicalAsParam()

template<typename T = Type>
bool clang::CanQual< T >::isCanonicalAsParam ( ) const
inline

Determines if this canonical type is furthermore canonical as a parameter.

The parameter-canonicalization process decays arrays to pointers and drops top-level qualifiers.

Definition at line 153 of file CanonicalType.h.

Referenced by clang::CIRGen::CIRGenTypes::arrangeCIRFunctionInfo().

◆ isConstQualified()

template<typename T = Type>
bool clang::CanQual< T >::isConstQualified ( ) const
inline

Definition at line 138 of file CanonicalType.h.

Referenced by IsModifiable(), and clang::cross_tu::shouldImport().

◆ isMoreQualifiedThan()

template<typename T = Type>
bool clang::CanQual< T >::isMoreQualifiedThan ( CanQual< T > Other,
const ASTContext & Ctx ) const
inline

Determines whether this canonical type is more qualified than the Other canonical type.

Definition at line 168 of file CanonicalType.h.

◆ isNull()

template<typename T = Type>
bool clang::CanQual< T >::isNull ( ) const
inline

◆ isRestrictQualified()

template<typename T = Type>
bool clang::CanQual< T >::isRestrictQualified ( ) const
inline

Definition at line 146 of file CanonicalType.h.

◆ isVolatileQualified()

template<typename T = Type>
bool clang::CanQual< T >::isVolatileQualified ( ) const
inline

◆ operator bool()

template<typename T = Type>
clang::CanQual< T >::operator bool ( ) const
inlineexplicit

Implicit conversion to bool.

Definition at line 96 of file CanonicalType.h.

◆ operator QualType()

template<typename T = Type>
clang::CanQual< T >::operator QualType ( ) const
inline

Implicit conversion to a qualified type.

Definition at line 93 of file CanonicalType.h.

◆ operator->()

template<typename T>
CanProxy< T > clang::CanQual< T >::operator-> ( ) const

Overloaded arrow operator that produces a canonical type proxy.

Definition at line 677 of file CanonicalType.h.

◆ Profile()

template<typename T = Type>
void clang::CanQual< T >::Profile ( llvm::FoldingSetNodeID & ID) const
inline

◆ split()

◆ withConst()


The documentation for this class was generated from the following file: