method.c (use_thunk): Disable access control while building the body of the thunk.
authorMark Mitchell <mark@codesourcery.com>
Sat, 4 Jan 2003 20:00:44 +0000 (20:00 +0000)
committerMark Mitchell <mmitchel@gcc.gnu.org>
Sat, 4 Jan 2003 20:00:44 +0000 (20:00 +0000)
* method.c (use_thunk): Disable access control while building the
body of the thunk.

From-SVN: r60889

gcc/cp/ChangeLog
gcc/cp/method.c

index b6aef432de7783554bd1a66e74c112b49ac753ff..57a6f158e446e226726d687e28d831418c064d64 100644 (file)
@@ -1,3 +1,8 @@
+2003-01-04  Mark Mitchell  <mark@codesourcery.com>
+
+       * method.c (use_thunk): Disable access control while building the
+       body of the thunk.
+
 2003-01-03  Nathanael Nerode  <neroden@gcc.gnu.org>
 
        * cvt.c, decl.c, decl2.c: This is the C++ front end, not the C 
index 684f797ce9b2bb70773caaff769abe8bdce713b6..f4960b29c53cc8215e31b670854658616d359ab4 100644 (file)
@@ -480,6 +480,7 @@ use_thunk (tree thunk_fndecl, bool emit_p)
         doesn't work for varargs.  */
 
       tree a, t;
+      int saved_check_access;
 
       if (varargs_function_p (function))
        error ("generic thunk code fails for method `%#D' which uses `...'",
@@ -501,8 +502,11 @@ use_thunk (tree thunk_fndecl, bool emit_p)
       start_function (NULL_TREE, thunk_fndecl, NULL_TREE, SF_PRE_PARSED);
       /* We don't bother with a body block for thunks.  */
 
+      /* There's no need to check accessibility inside the thunk body.  */
+      saved_check_access = scope_chain->check_access;
+      scope_chain->check_access = 0;
+
       t = a;
-      
       if (this_adjusting)
        t = thunk_adjust (t, /*this_adjusting=*/1,
                          fixed_offset, virtual_offset);
@@ -529,6 +533,9 @@ use_thunk (tree thunk_fndecl, bool emit_p)
       /* But we don't want debugging information about it.  */
       DECL_IGNORED_P (thunk_fndecl) = 1;
 
+      /* Re-enable access control.  */
+      scope_chain->check_access = saved_check_access;
+
       expand_body (finish_function (0));
     }