aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Smith <richard-llvm@metafoo.co.uk>2013-01-26 02:07:32 +0000
committerRichard Smith <richard-llvm@metafoo.co.uk>2013-01-26 02:07:32 +0000
commit98bfbf5354b8b35fd3efd12932894d7452697226 (patch)
treec2226d748a4bee89c77286484464f208b805dd3b
parent67234726d2c1e91760cad8b268a147869a55e12a (diff)
Fix mismatch between pointer and pointee type when diagnosing an incorrect
object argument type for a member call. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@173554 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Sema/SemaOverload.cpp5
-rw-r--r--test/SemaCXX/overload-member-call.cpp8
2 files changed, 10 insertions, 3 deletions
diff --git a/lib/Sema/SemaOverload.cpp b/lib/Sema/SemaOverload.cpp
index e1c3d6839d..22cb61eda3 100644
--- a/lib/Sema/SemaOverload.cpp
+++ b/lib/Sema/SemaOverload.cpp
@@ -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;
}
diff --git a/test/SemaCXX/overload-member-call.cpp b/test/SemaCXX/overload-member-call.cpp
index 09586201e5..e0f34d937f 100644
--- a/test/SemaCXX/overload-member-call.cpp
+++ b/test/SemaCXX/overload-member-call.cpp
@@ -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'}}
+}