diff options
author | Mark Mitchell <mark@codesourcery.com> | 2003-01-04 20:00:44 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 2003-01-04 20:00:44 +0000 |
commit | 1bb2cc34af6af55bef26db2a771cff71908ab357 (patch) | |
tree | 7fed8086665efb8a08a504109c60c5f4b0cbc981 | |
parent | b0588013c1115f2a74c6ca81bad5ffb84f321d13 (diff) | |
download | gcc-1bb2cc34af6af55bef26db2a771cff71908ab357.zip gcc-1bb2cc34af6af55bef26db2a771cff71908ab357.tar.gz gcc-1bb2cc34af6af55bef26db2a771cff71908ab357.tar.bz2 |
method.c (use_thunk): Disable access control while building the body of the thunk.
* method.c (use_thunk): Disable access control while building the
body of the thunk.
From-SVN: r60889
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/method.c | 9 |
2 files changed, 13 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index b6aef43..57a6f15 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -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 diff --git a/gcc/cp/method.c b/gcc/cp/method.c index 684f797..f4960b2 100644 --- a/gcc/cp/method.c +++ b/gcc/cp/method.c @@ -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)); } |