aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2013-01-22 11:05:04 -0500
committerJason Merrill <jason@gcc.gnu.org>2013-01-22 11:05:04 -0500
commit904812578d14a5f06cd294b5398e8bb2a237c031 (patch)
tree6af3366e1417623ce3230113167bfeeaef14d1a1 /gcc
parentfa817f7f72f9f225419737376766fa8741d8f246 (diff)
downloadgcc-904812578d14a5f06cd294b5398e8bb2a237c031.zip
gcc-904812578d14a5f06cd294b5398e8bb2a237c031.tar.gz
gcc-904812578d14a5f06cd294b5398e8bb2a237c031.tar.bz2
re PR c++/56071 (friend class template cannot access private constructor in exception-specification)
PR c++/56071 * pt.c (maybe_instantiate_noexcept): Don't defer access checks. From-SVN: r195378
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/pt.c2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/noexcept20.C22
3 files changed, 29 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index b9f68fe..7da2b4a 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2013-01-22 Jason Merrill <jason@redhat.com>
+
+ PR c++/56071
+ * pt.c (maybe_instantiate_noexcept): Don't defer access checks.
+
2013-01-22 Dodji Seketeli <dodji@redhat.com>
PR c++/53609
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index e38aca6..01d4295 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -18429,12 +18429,14 @@ maybe_instantiate_noexcept (tree fn)
if (push_tinst_level (fn))
{
push_access_scope (fn);
+ push_deferring_access_checks (dk_no_deferred);
input_location = DECL_SOURCE_LOCATION (fn);
noex = tsubst_copy_and_build (DEFERRED_NOEXCEPT_PATTERN (noex),
DEFERRED_NOEXCEPT_ARGS (noex),
tf_warning_or_error, fn,
/*function_p=*/false,
/*integral_constant_expression_p=*/true);
+ pop_deferring_access_checks ();
pop_access_scope (fn);
pop_tinst_level ();
spec = build_noexcept_spec (noex, tf_warning_or_error);
diff --git a/gcc/testsuite/g++.dg/cpp0x/noexcept20.C b/gcc/testsuite/g++.dg/cpp0x/noexcept20.C
new file mode 100644
index 0000000..b867602
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/noexcept20.C
@@ -0,0 +1,22 @@
+// PR c++/56071
+// { dg-options -std=c++11 }
+
+class B
+{
+ template <typename T> friend struct A;
+ B() {}
+};
+
+template <typename T>
+struct A
+{
+ A() noexcept(noexcept(B())) { }
+};
+
+struct C
+{
+ C()
+ {
+ static_assert( !noexcept(A<int>()), "" );
+ }
+};