[cfe-commits] r109257 - in /cfe/trunk: lib/Sema/SemaCXXCast.cpp test/SemaCXX/access-member-pointer.cpp

Eli Friedman eli.friedman at gmail.com
Fri Jul 23 12:25:41 PDT 2010


Author: efriedma
Date: Fri Jul 23 14:25:41 2010
New Revision: 109257

URL: http://llvm.org/viewvc/llvm-project?rev=109257&view=rev
Log:
Fix for PR7694: make sure to pass in a RecordType to CheckBaseClassAccess;
fixes crashes on both valid and invalid code.  The diagnostic here could
potentially be improved, but it's good enough as-is.


Added:
    cfe/trunk/test/SemaCXX/access-member-pointer.cpp
Modified:
    cfe/trunk/lib/Sema/SemaCXXCast.cpp

Modified: cfe/trunk/lib/Sema/SemaCXXCast.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaCXXCast.cpp?rev=109257&r1=109256&r2=109257&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaCXXCast.cpp (original)
+++ cfe/trunk/lib/Sema/SemaCXXCast.cpp Fri Jul 23 14:25:41 2010
@@ -900,7 +900,7 @@
   }
 
   if (!CStyle && Self.CheckBaseClassAccess(OpRange.getBegin(),
-                                           DestType, SrcType,
+                                           DestClass, SrcClass,
                                            Paths.front(),
                                      diag::err_upcast_to_inaccessible_base)) {
     msg = 0;

Added: cfe/trunk/test/SemaCXX/access-member-pointer.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/access-member-pointer.cpp?rev=109257&view=auto
==============================================================================
--- cfe/trunk/test/SemaCXX/access-member-pointer.cpp (added)
+++ cfe/trunk/test/SemaCXX/access-member-pointer.cpp Fri Jul 23 14:25:41 2010
@@ -0,0 +1,11 @@
+// RUN: %clang_cc1 -fsyntax-only -verify %s
+// PR7694
+
+class A { };
+class B : private A { public: void foo(); }; // expected-note {{declared private here}}
+void B::foo() {
+  (void)static_cast<void(A::*)()>(&B::foo);
+}
+void bar() {
+  (void)static_cast<void(A::*)()>(&B::foo); // expected-error {{cannot cast 'B' to its private base class 'A'}}
+}





More information about the cfe-commits mailing list