diff options
author | Jason Merrill <jason@redhat.com> | 2019-03-18 11:58:24 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2019-03-18 11:58:24 -0400 |
commit | b6e45a40cde2c8e7a18b62cca23dcd2f6916afa1 (patch) | |
tree | a190096cda3c6cb88a3573692e82d805f3f14f1f | |
parent | ca6d4a08c120841654acb10b973b0d009b053ef3 (diff) | |
download | gcc-b6e45a40cde2c8e7a18b62cca23dcd2f6916afa1.zip gcc-b6e45a40cde2c8e7a18b62cca23dcd2f6916afa1.tar.gz gcc-b6e45a40cde2c8e7a18b62cca23dcd2f6916afa1.tar.bz2 |
PR c++/89682 - wrong access error in default argument.
Here we were pushing into the right access context, but we were called from
a deferred checking context, so didn't end up doing the checks until after
we left the access context.
* pt.c (tsubst_default_argument): Don't defer access checks.
From-SVN: r269766
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/pt.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/overload/defarg12.C | 14 |
3 files changed, 21 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index fa569bc..bc3850d 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2019-03-18 Jason Merrill <jason@redhat.com> + + PR c++/89682 - wrong access error in default argument. + * pt.c (tsubst_default_argument): Don't defer access checks. + 2019-03-18 Paolo Carlini <paolo.carlini@oracle.com> PR c++/85014 diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index dc5c24c..7dc6e44 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -12776,6 +12776,7 @@ tsubst_default_argument (tree fn, int parmnum, tree type, tree arg, rather than in the current class. */ push_to_top_level (); push_access_scope (fn); + push_deferring_access_checks (dk_no_deferred); start_lambda_scope (parm); /* The default argument expression may cause implicitly defined @@ -12799,6 +12800,7 @@ tsubst_default_argument (tree fn, int parmnum, tree type, tree arg, inform (input_location, " when instantiating default argument for call to %qD", fn); + pop_deferring_access_checks (); pop_access_scope (fn); pop_from_top_level (); diff --git a/gcc/testsuite/g++.dg/overload/defarg12.C b/gcc/testsuite/g++.dg/overload/defarg12.C new file mode 100644 index 0000000..4a2b7e5 --- /dev/null +++ b/gcc/testsuite/g++.dg/overload/defarg12.C @@ -0,0 +1,14 @@ +// PR c++/89682 + +template <typename T> +class C { + class TagType {}; +public: + C(int, TagType = makeTag()); +private: + static TagType makeTag(); +}; + +void test() { + C<int>(1); +} |