forked from OSchip/llvm-project
Rename Sema::hasSameType to QualType::isSameAs
Rename Sema::hasSameUnqualifiedType to QualType::isSameIgnoringQalifiers llvm-svn: 64307
This commit is contained in:
parent
6ec47f0d59
commit
0ada9f5d46
|
@ -155,6 +155,8 @@ public:
|
|||
QualType withRestrict() const { return getWithAdditionalQualifiers(Restrict);}
|
||||
|
||||
QualType getUnqualifiedType() const;
|
||||
bool isSameAs(QualType Other) const;
|
||||
bool isSameIgnoringQualifiers(QualType Other) const;
|
||||
bool isMoreQualifiedThan(QualType Other) const;
|
||||
bool isAtLeastAsQualifiedAs(QualType Other) const;
|
||||
QualType getNonReferenceType() const;
|
||||
|
@ -1700,6 +1702,23 @@ inline unsigned QualType::getAddressSpace() const {
|
|||
return 0;
|
||||
}
|
||||
|
||||
/// \brief Determine whether this type and Other represent the same type.
|
||||
inline bool QualType::isSameAs(QualType Other) const {
|
||||
return getTypePtr()->getCanonicalTypeInternal() ==
|
||||
Other.getTypePtr()->getCanonicalTypeInternal();
|
||||
}
|
||||
|
||||
/// \brief Determine whether the unqualified forms of this type and
|
||||
/// Other represent the same type.
|
||||
///
|
||||
/// Only top-level CVR qualifiers are stripped.
|
||||
inline bool
|
||||
QualType::isSameIgnoringQualifiers(QualType Other) const {
|
||||
QualType ThisCanon = getTypePtr()->getCanonicalTypeInternal();
|
||||
QualType OtherCanon = Other->getCanonicalTypeInternal();
|
||||
return ThisCanon.getUnqualifiedType() == OtherCanon.getUnqualifiedType();
|
||||
}
|
||||
|
||||
/// isMoreQualifiedThan - Determine whether this type is more
|
||||
/// qualified than the Other type. For example, "const volatile int"
|
||||
/// is more qualified than "const int", "volatile int", and
|
||||
|
|
|
@ -281,9 +281,6 @@ public:
|
|||
SourceRange Range2 = SourceRange(),
|
||||
QualType PrintType = QualType());
|
||||
|
||||
bool hasSameType(QualType T1, QualType T2);
|
||||
bool hasSameUnqualifiedType(QualType T1, QualType T2);
|
||||
|
||||
//===--------------------------------------------------------------------===//
|
||||
// Symbol table / Decl tracking callbacks: SemaDecl.cpp.
|
||||
//
|
||||
|
|
|
@ -919,7 +919,7 @@ bool Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param,
|
|||
(ParamType->isMemberPointerType() &&
|
||||
ParamType->getAsMemberPointerType()->getPointeeType()
|
||||
->isFunctionType())) {
|
||||
if (hasSameUnqualifiedType(ArgType, ParamType.getNonReferenceType())) {
|
||||
if (ArgType.isSameIgnoringQualifiers(ParamType.getNonReferenceType())) {
|
||||
// We don't have to do anything: the types already match.
|
||||
} else if (ArgType->isFunctionType() && ParamType->isPointerType()) {
|
||||
ArgType = Context.getPointerType(ArgType);
|
||||
|
@ -934,7 +934,7 @@ bool Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param,
|
|||
}
|
||||
}
|
||||
|
||||
if (!hasSameUnqualifiedType(ArgType, ParamType.getNonReferenceType())) {
|
||||
if (!ArgType.isSameIgnoringQualifiers(ParamType.getNonReferenceType())) {
|
||||
// We can't perform this conversion.
|
||||
Diag(Arg->getSourceRange().getBegin(),
|
||||
diag::err_template_arg_not_convertible)
|
||||
|
@ -964,7 +964,7 @@ bool Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param,
|
|||
ImpCastExprToType(Arg, ParamType);
|
||||
}
|
||||
|
||||
if (!hasSameUnqualifiedType(ArgType, ParamType)) {
|
||||
if (!ArgType.isSameIgnoringQualifiers(ParamType)) {
|
||||
// We can't perform this conversion.
|
||||
Diag(Arg->getSourceRange().getBegin(),
|
||||
diag::err_template_arg_not_convertible)
|
||||
|
@ -987,7 +987,7 @@ bool Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param,
|
|||
assert(ParamRefType->getPointeeType()->isObjectType() &&
|
||||
"Only object references allowed here");
|
||||
|
||||
if (!hasSameUnqualifiedType(ParamRefType->getPointeeType(), ArgType)) {
|
||||
if (!ArgType.isSameIgnoringQualifiers(ParamRefType->getPointeeType())) {
|
||||
Diag(Arg->getSourceRange().getBegin(),
|
||||
diag::err_template_arg_no_ref_bind)
|
||||
<< Param->getType() << Arg->getType()
|
||||
|
@ -1019,7 +1019,7 @@ bool Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param,
|
|||
// member, qualification conversions (4.4) are applied.
|
||||
assert(ParamType->isMemberPointerType() && "Only pointers to members remain");
|
||||
|
||||
if (hasSameUnqualifiedType(ParamType, ArgType)) {
|
||||
if (ParamType.isSameIgnoringQualifiers(ArgType)) {
|
||||
// Types match exactly: nothing more to do here.
|
||||
} else if (IsQualificationConversion(ArgType, ParamType)) {
|
||||
ImpCastExprToType(Arg, ParamType);
|
||||
|
|
|
@ -835,17 +835,3 @@ bool Sema::DiagnoseIncompleteType(SourceLocation Loc, QualType T, unsigned diag,
|
|||
|
||||
return true;
|
||||
}
|
||||
|
||||
/// \brief Determine whether the given types are equivalent.
|
||||
bool Sema::hasSameType(QualType T1, QualType T2) {
|
||||
return Context.getCanonicalType(T1) == Context.getCanonicalType(T2);
|
||||
}
|
||||
|
||||
/// \brief Determine whether the given types are equivalent after
|
||||
/// cvr-qualifiers have been removed.
|
||||
bool Sema::hasSameUnqualifiedType(QualType T1, QualType T2) {
|
||||
T1 = Context.getCanonicalType(T1);
|
||||
T2 = Context.getCanonicalType(T2);
|
||||
return T1.getUnqualifiedType() == T2.getUnqualifiedType();
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue