]> granicus.if.org Git - clang/commitdiff
Fix overloading of non-static member functions that differ in their cv-qualifiers
authorDouglas Gregor <dgregor@apple.com>
Fri, 21 Nov 2008 15:36:28 +0000 (15:36 +0000)
committerDouglas Gregor <dgregor@apple.com>
Fri, 21 Nov 2008 15:36:28 +0000 (15:36 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59819 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaOverload.cpp
test/SemaCXX/overload-decl.cpp
test/SemaCXX/overloaded-operator.cpp

index 0a773719eb1b1f91a02d61f186d3999b7afbff24..eb38eee8d5c6b65f4142292b07607b7428f0c2ff 100644 (file)
@@ -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.
index 872a180e96c62d54e1a3726c589cc458e10ac50b..9b0d0e205e7fc145cf4ae8a34fc105395c5bb99e 100644 (file)
@@ -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}}
index ba9c60ccd95a80ffae866cd7edc314bdc198b858..98f0bb07f6ac5bd3652622a9ed4ded6bf2da5824 100644 (file)
@@ -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;
 }