]> gcc.gnu.org Git - gcc.git/commitdiff
init.c (build_member_call): For now, don't convert to intermediate base if it would...
authorJason Merrill <jason@gcc.gnu.org>
Tue, 9 Apr 2002 13:59:59 +0000 (09:59 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Tue, 9 Apr 2002 13:59:59 +0000 (09:59 -0400)
        * init.c (build_member_call): For now, don't convert to
        intermediate base if it would cause an error.

From-SVN: r52078

gcc/cp/ChangeLog
gcc/cp/init.c
gcc/testsuite/g++.dg/lookup/scoped1.C [new file with mode: 0644]

index 940afa03cb0d5fd93b3e44bf535fa80d0ba9ff0f..c0477bdf96cf28abfcb4fcbad251b08c47961d3b 100644 (file)
@@ -1,3 +1,8 @@
+2002-04-09  Jason Merrill  <jason@redhat.com>
+
+       * init.c (build_member_call): For now, don't convert to
+       intermediate base if it would cause an error.
+
 2002-04-08  Paolo Carlini  <pcarlini@unitus.it>
 
        * parse.y (namespace_qualifier, maybe_identifier,
 
 2002-03-22  Jeff Knaggs  <jknaggs@redhat.com>
 
-       * typeck.c (expand_ptrmemfunc_cst): Scale idx down to an index
-       into the vtable_entry array regardless of
+       * typeck.c (get_member_function_from_ptrfunc): Scale idx down to
+       an index into the vtable_entry array regardless of
        TARGET_PTRMEMFUNC_VBIT_LOCATION.
 
 2002-03-21  Aldy Hernandez  <aldyh@redhat.com>
index 5caa69cee221cb153d8aee21ad7addd46747a33c..2143af4b6656e6fd37649ff60e5455e9c322c4c7 100644 (file)
@@ -1497,7 +1497,11 @@ build_member_call (type, name, parmlist)
 
   /* Convert 'this' to the specified type to disambiguate conversion
      to the function's context.  */
-  if (decl == current_class_ref)
+  if (decl == current_class_ref
+      /* ??? this is wrong, but if this conversion is invalid we need to
+        defer it until we know whether we are calling a static or
+        non-static member function.  Be conservative for now.  */
+      && ACCESSIBLY_UNIQUELY_DERIVED_P (type, current_class_type))
     {
       basetype_path = NULL_TREE;
       decl = build_scoped_ref (decl, type, &basetype_path);
diff --git a/gcc/testsuite/g++.dg/lookup/scoped1.C b/gcc/testsuite/g++.dg/lookup/scoped1.C
new file mode 100644 (file)
index 0000000..0fe8d33
--- /dev/null
@@ -0,0 +1,22 @@
+// Test that explicitly scoped references to static members work even if
+// they belong to an inaccessible base.
+
+struct A
+{
+  static int i1;
+  int i2;
+  static void f1 ();
+  void f2 ();
+};
+
+struct B: private A { };
+struct C: public B
+{
+  void g ()
+  {
+    ::A::i1 = 1;
+    ::A::i2 = 1;               // { dg-error "access" "" }
+    ::A::f1 ();
+    ::A::f2 ();                        // { dg-error "access" "" { xfail *-*-* } }
+  }
+};
This page took 0.083627 seconds and 5 git commands to generate.