clang API Documentation
Represents a canonical, potentially-qualified type. More...
#include <CanonicalType.h>

Public Member Functions | |
| CanQual () | |
| Constructs a NULL canonical type. | |
| template<typename U > | |
| CanQual (const CanQual< U > &Other, typename std::enable_if< std::is_base_of< T, U >::value, int >::type=0) | |
| Converting constructor that permits implicit upcasting of canonical type pointers. | |
| const T * | getTypePtr () const |
| Retrieve the underlying type pointer, which refers to a canonical type. | |
| const T * | getTypePtrOrNull () const |
| Retrieve the underlying type pointer, which refers to a canonical type, or NULL. | |
| operator QualType () const | |
| Implicit conversion to a qualified type. | |
| LLVM_EXPLICIT | operator bool () const |
| Implicit conversion to bool. | |
| bool | isNull () const |
| SplitQualType | split () const |
| template<typename U > | |
| CanProxy< U > | getAs () const |
| Retrieve a canonical type pointer with a different static type, upcasting or downcasting as needed. | |
| template<typename U > | |
| CanProxy< U > | castAs () const |
| CanProxy< T > | operator-> () 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. The parameter-canonicalization process decays arrays to pointers and drops top-level qualifiers. | |
| CanQual< T > | getUnqualifiedType () const |
| Retrieve the unqualified form of this type. | |
| QualType | withConst () const |
| Retrieves a version of this type with const applied. Note that this does not always yield a canonical type. | |
| bool | isMoreQualifiedThan (CanQual< T > Other) const |
Determines whether this canonical type is more qualified than the Other canonical type. | |
| bool | isAtLeastAsQualifiedAs (CanQual< T > Other) const |
Determines whether this canonical type is at least as qualified as the Other canonical type. | |
| CanQual< Type > | getNonReferenceType () 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< T > | getFromOpaquePtr (void *Ptr) |
| Construct a canonical type from its internal representation. | |
| static CanQual< T > | CreateUnsafe (QualType Other) |
| Builds a canonical type from a QualType. | |
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<U> 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 52 of file CanonicalType.h.
| clang::CanQual< T >::CanQual | ( | ) | [inline] |
Constructs a NULL canonical type.
Definition at line 58 of file CanonicalType.h.
| clang::CanQual< T >::CanQual | ( | const CanQual< U > & | Other, |
| typename std::enable_if< std::is_base_of< T, U >::value, int >::type | = 0 |
||
| ) |
Converting constructor that permits implicit upcasting of canonical type pointers.
Definition at line 717 of file CanonicalType.h.
References clang::CanQual< T >::CreateUnsafe().
| 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 691 of file CanonicalType.h.
References clang::QualType::getTypePtr(), clang::QualType::isCanonical(), and clang::QualType::isNull().
Referenced by clang::CanQual< T >::castAs(), clang::CanQual< T >::getAs(), and clang::CanQual< T >::getUnqualifiedType().
| void clang::CanQual< T >::dump | ( | ) | const [inline] |
Definition at line 180 of file CanonicalType.h.
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 } }
U). If the dynamic type is not the specified static type or a derived class thereof, a NULL canonical type. Definition at line 702 of file CanonicalType.h.
References clang::CanQual< T >::CreateUnsafe().
Referenced by clang::CodeGen::CodeGenTypes::arrangeCXXMethodType(), clang::CodeGen::CodeGenTypes::arrangeFunctionDeclaration(), DiagnoseBadConversion(), GetFormalType(), clang::getSimplifiedTypeClass(), IsModifiable(), clang::Sema::IsNoReturnConversion(), clang::Sema::isSameOrCompatibleFunctionType(), MatchesFriend(), and TryStaticDowncast().
| void* clang::CanQual< T >::getAsOpaquePtr | ( | ) | const [inline] |
Retrieve the internal representation of this canonical type.
Definition at line 168 of file CanonicalType.h.
Referenced by llvm::PointerLikeTypeTraits< clang::CanQual< T > >::getAsVoidPointer(), clang::DeclarationNameTable::getCXXSpecialName(), llvm::DenseMapInfo< clang::CanQualType >::getHashValue(), clang::operator!=(), clang::operator==(), and clang::CanQual< ObjCObjectType >::Profile().
| unsigned clang::CanQual< T >::getCVRQualifiers | ( | ) | const [inline] |
Retrieve the const/volatile/restrict qualifiers.
Definition at line 120 of file CanonicalType.h.
Referenced by clang::CXXConstructorDecl::isCopyOrMoveConstructor().
| CanQual< T > clang::CanQual< T >::getFromOpaquePtr | ( | void * | Ptr | ) | [static] |
Construct a canonical type from its internal representation.
Definition at line 682 of file CanonicalType.h.
References clang::QualType::getAsOpaquePtr(), clang::QualType::getFromOpaquePtr(), and clang::QualType::isCanonical().
| 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 674 of file CanonicalType.h.
Referenced by clang::ConversionFixItGenerator::compareTypesSimple().
| Qualifiers clang::CanQual< T >::getQualifiers | ( | ) | const [inline] |
Retrieve all qualifiers.
Definition at line 117 of file CanonicalType.h.
Referenced by BuildFieldReferenceExpr(), DiagnoseBadConversion(), InitCatchParam(), IsModifiable(), and MightInstantiateTo().
| const T* clang::CanQual< T >::getTypePtr | ( | ) | const [inline] |
Retrieve the underlying type pointer, which refers to a canonical type.
The underlying pointer must not be NULL.
Definition at line 70 of file CanonicalType.h.
Referenced by clang::Sema::ActOnTag(), clang::CodeGen::CodeGenTypes::arrangeCXXMethodDeclaration(), clang::CodeGen::CodeGenFunction::EmitCallArgs(), clang::CodeGen::RequiredArgs::forPrototype(), clang::CodeGen::RequiredArgs::forPrototypePlus(), clang::ASTContext::getIntegerTypeOrder(), GetKeyForBase(), llvm::simplify_type< ::clang::CanQual< T > >::getSimplifiedValue(), clang::CodeGen::CodeGenTBAA::getTBAAInfo(), clang::CodeGen::CodeGenTBAA::getTBAAStructInfo(), clang::CodeGen::CodeGenTBAA::getTBAAStructTagInfo(), clang::CodeGen::CodeGenTBAA::getTBAAStructTypeInfo(), clang::ASTContext::hasSameUnqualifiedType(), and matchTypes().
| const T* clang::CanQual< T >::getTypePtrOrNull | ( | ) | const [inline] |
Retrieve the underlying type pointer, which refers to a canonical type, or NULL.
Definition at line 75 of file CanonicalType.h.
| CanQual< T > clang::CanQual< T >::getUnqualifiedType | ( | ) | const [inline] |
Retrieve the unqualified form of this type.
Definition at line 669 of file CanonicalType.h.
References clang::CanQual< T >::CreateUnsafe().
Referenced by clang::Sema::ActOnConversionDeclarator(), clang::Sema::ActOnPropertyImplDecl(), clang::Sema::AddConversionCandidate(), clang::CodeGen::CodeGenTypes::arrangeFreeFunctionType(), arrangeLLVMFunctionInfo(), clang::Sema::CheckAssignmentConstraints(), clang::Sema::CheckConstructor(), clang::Sema::CheckDerivedToBaseConversion(), clang::Sema::CheckEquivalentExceptionSpec(), clang::Sema::CheckObjCARCUnavailableWeakConversion(), CheckOperatorNewDeleteTypes(), clang::Sema::CheckSubtractionOperands(), clang::ConversionFixItGenerator::compareTypesSimple(), DeduceTemplateArgumentsByTypeMatch(), DiagnoseBadConversion(), clang::Sema::DiagnosePropertyAccessorMismatch(), clang::Sema::ExtractUnqualifiedFunctionType(), clang::DeclarationNameTable::getCXXConstructorName(), clang::DeclarationNameTable::getCXXDestructorName(), clang::ento::MemRegionManager::getElementRegion(), GetReturnType(), clang::CXXBasePaths::isAmbiguous(), clang::CXXConstructorDecl::isCopyOrMoveConstructor(), clang::CXXConstructorDecl::isSpecializationCopyingObject(), clang::analyze_format_string::ArgType::matchesType(), matchTypes(), clang::ASTContext::mergeFunctionTypes(), TryStaticDowncast(), and TryUserDefinedConversion().
| bool clang::CanQual< T >::hasQualifiers | ( | ) | const [inline] |
Determines whether this type has any qualifiers.
Definition at line 123 of file CanonicalType.h.
Referenced by clang::DeclarationNameTable::getCXXSpecialName().
| bool clang::CanQual< T >::isAtLeastAsQualifiedAs | ( | CanQual< T > | Other | ) | const [inline] |
Determines whether this canonical type is at least as qualified as the Other canonical type.
Definition at line 159 of file CanonicalType.h.
Referenced by clang::ConversionFixItGenerator::compareTypesSimple(), DiagnoseBadConversion(), and TryStaticDowncast().
| 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 138 of file CanonicalType.h.
| bool clang::CanQual< T >::isConstQualified | ( | ) | const [inline] |
Definition at line 125 of file CanonicalType.h.
Referenced by IsModifiable().
| bool clang::CanQual< T >::isMoreQualifiedThan | ( | CanQual< T > | Other | ) | const [inline] |
Determines whether this canonical type is more qualified than the Other canonical type.
Definition at line 153 of file CanonicalType.h.
| bool clang::CanQual< T >::isNull | ( | ) | const [inline] |
Definition at line 85 of file CanonicalType.h.
Referenced by clang::ASTContext::InitBuiltinTypes(), and clang::CanQual< ObjCObjectType >::operator bool().
| bool clang::CanQual< T >::isRestrictQualified | ( | ) | const [inline] |
Definition at line 131 of file CanonicalType.h.
| bool clang::CanQual< T >::isVolatileQualified | ( | ) | const [inline] |
Definition at line 128 of file CanonicalType.h.
Referenced by AddBuiltinAssignmentOperatorCandidates().
| LLVM_EXPLICIT clang::CanQual< T >::operator bool | ( | ) | const [inline] |
Implicit conversion to bool.
Definition at line 83 of file CanonicalType.h.
| clang::CanQual< T >::operator QualType | ( | ) | const [inline] |
Implicit conversion to a qualified type.
Definition at line 80 of file CanonicalType.h.
| CanProxy< T > clang::CanQual< T >::operator-> | ( | ) | const |
Overloaded arrow operator that produces a canonical type proxy.
Definition at line 726 of file CanonicalType.h.
| void clang::CanQual< T >::Profile | ( | llvm::FoldingSetNodeID & | ID | ) | const [inline] |
Definition at line 182 of file CanonicalType.h.
Referenced by clang::CodeGen::CGFunctionInfo::Profile().
| SplitQualType clang::CanQual< T >::split | ( | ) | const [inline] |
Definition at line 89 of file CanonicalType.h.
Referenced by clang::ASTContext::getConstantArrayType(), clang::ASTContext::getDependentSizedArrayType(), clang::ASTContext::getIncompleteArrayType(), and clang::ASTContext::getVariableArrayType().
| QualType clang::CanQual< T >::withConst | ( | ) | const [inline] |
Retrieves a version of this type with const applied. Note that this does not always yield a canonical type.
Definition at line 147 of file CanonicalType.h.
Referenced by clang::Sema::ActOnIndirectGotoStmt(), clang::Sema::ActOnNumericConstant(), clang::Sema::BuildObjCBoxedExpr(), clang::Sema::BuildPredefinedExpr(), clang::CodeGen::CodeGenModule::GetAddrOfConstantString(), clang::analyze_printf::PrintfSpecifier::getArgType(), and clang::ASTContext::getCFConstantStringType().