forked from OSchip/llvm-project
Fix mismatch between pointer and pointee type when diagnosing an incorrect
object argument type for a member call. llvm-svn: 173554
This commit is contained in:
parent
d006f6eb5f
commit
03c66d3c57
|
@ -4620,7 +4620,7 @@ static bool TryCopyInitialization(const CanQualType FromQTy,
|
|||
/// parameter of the given member function (@c Method) from the
|
||||
/// expression @p From.
|
||||
static ImplicitConversionSequence
|
||||
TryObjectArgumentInitialization(Sema &S, QualType OrigFromType,
|
||||
TryObjectArgumentInitialization(Sema &S, QualType FromType,
|
||||
Expr::Classification FromClassification,
|
||||
CXXMethodDecl *Method,
|
||||
CXXRecordDecl *ActingContext) {
|
||||
|
@ -4636,7 +4636,6 @@ TryObjectArgumentInitialization(Sema &S, QualType OrigFromType,
|
|||
ImplicitConversionSequence ICS;
|
||||
|
||||
// We need to have an object of class type.
|
||||
QualType FromType = OrigFromType;
|
||||
if (const PointerType *PT = FromType->getAs<PointerType>()) {
|
||||
FromType = PT->getPointeeType();
|
||||
|
||||
|
@ -4671,7 +4670,7 @@ TryObjectArgumentInitialization(Sema &S, QualType OrigFromType,
|
|||
!= FromTypeCanon.getLocalCVRQualifiers() &&
|
||||
!ImplicitParamType.isAtLeastAsQualifiedAs(FromTypeCanon)) {
|
||||
ICS.setBad(BadConversionSequence::bad_qualifiers,
|
||||
OrigFromType, ImplicitParamType);
|
||||
FromType, ImplicitParamType);
|
||||
return ICS;
|
||||
}
|
||||
|
||||
|
|
|
@ -105,3 +105,11 @@ namespace test1 {
|
|||
}
|
||||
}
|
||||
|
||||
namespace b7398190 {
|
||||
struct S {
|
||||
int f(); // expected-note {{'this' argument has type 'const b7398190::S', but method is not marked const}}
|
||||
void f(int); // expected-note {{requires 1 argument, but 0 were provided}}
|
||||
};
|
||||
const S *p;
|
||||
int k = p->f(); // expected-error {{no matching member function for call to 'f'}}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue