From 1ca50c3f541dd637063b9d186a7ea193e3440a48 Mon Sep 17 00:00:00 2001 From: Douglas Gregor Date: Fri, 21 Nov 2008 15:36:28 +0000 Subject: [PATCH] Fix overloading of non-static member functions that differ in their cv-qualifiers git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59819 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaOverload.cpp | 2 +- test/SemaCXX/overload-decl.cpp | 4 +--- test/SemaCXX/overloaded-operator.cpp | 8 +++++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/Sema/SemaOverload.cpp b/lib/Sema/SemaOverload.cpp index 0a773719eb..eb38eee8d5 100644 --- a/lib/Sema/SemaOverload.cpp +++ b/lib/Sema/SemaOverload.cpp @@ -326,7 +326,7 @@ Sema::IsOverload(FunctionDecl *New, Decl* OldD, CXXMethodDecl* NewMethod = dyn_cast(New); if (OldMethod && NewMethod && !OldMethod->isStatic() && !NewMethod->isStatic() && - OldQType.getCVRQualifiers() != NewQType.getCVRQualifiers()) + OldMethod->getTypeQualifiers() != NewMethod->getTypeQualifiers()) return true; // The signatures match; this is not an overload. diff --git a/test/SemaCXX/overload-decl.cpp b/test/SemaCXX/overload-decl.cpp index 872a180e96..9b0d0e205e 100644 --- a/test/SemaCXX/overload-decl.cpp +++ b/test/SemaCXX/overload-decl.cpp @@ -16,9 +16,7 @@ int g(); // expected-error {{error: functions that differ only in their return t class X { void f(); void f(int); - - // FIXME: can't test this until we can handle const methods. - // void f() const; + void f() const; void g(int); // expected-error {{error: previous declaration is here}} void g(int, float); // expected-error {{error: previous declaration is here}} diff --git a/test/SemaCXX/overloaded-operator.cpp b/test/SemaCXX/overloaded-operator.cpp index ba9c60ccd9..98f0bb07f6 100644 --- a/test/SemaCXX/overloaded-operator.cpp +++ b/test/SemaCXX/overloaded-operator.cpp @@ -90,12 +90,14 @@ void incdec_test(PostInc pi, PostDec pd) { struct SmartPtr { int& operator*(); - // FIXME: spurious error: long& operator*() const; + long& operator*() const volatile; }; -void test_smartptr(SmartPtr ptr, const SmartPtr cptr) { +void test_smartptr(SmartPtr ptr, const SmartPtr cptr, + const volatile SmartPtr cvptr) { int &ir = *ptr; - // FIXME: reinstate long &lr = *cptr; + long &lr = *cptr; + long &lr2 = *cvptr; } -- 2.40.0