aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2008-11-21 15:36:28 +0000
committerDouglas Gregor <dgregor@apple.com>2008-11-21 15:36:28 +0000
commit1ca50c3f541dd637063b9d186a7ea193e3440a48 (patch)
treea30beb6658680e5b297d5bc8c60a55461e8b638b
parent4fcd399a52ae45ed8ebfdd3a25e01cfb76fa366d (diff)
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
-rw-r--r--lib/Sema/SemaOverload.cpp2
-rw-r--r--test/SemaCXX/overload-decl.cpp4
-rw-r--r--test/SemaCXX/overloaded-operator.cpp8
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<CXXMethodDecl>(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;
}