From fc4297484be7ee97053c1a2b66e6dfaed030e43f Mon Sep 17 00:00:00 2001 From: Mark Mitchell Date: Wed, 19 Jul 2006 05:14:25 +0000 Subject: [PATCH] re PR c++/28048 (ICE on accessing member of dependent name) PR c++/28048 * semantics.c (check_accessibility_of_qualified_id): Robustify. PR c++/28048 * g++.dg/template/defarg9.C: New test. From-SVN: r115579 --- gcc/cp/ChangeLog | 3 +++ gcc/cp/semantics.c | 8 +++++--- gcc/testsuite/ChangeLog | 3 +++ gcc/testsuite/g++.dg/template/defarg9.C | 16 ++++++++++++++++ 4 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/g++.dg/template/defarg9.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 2f22450fb82..af163dd644e 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2006-07-18 Mark Mitchell + PR c++/28048 + * semantics.c (check_accessibility_of_qualified_id): Robustify. + PR c++/28235 * pt.c (tsubst_decl): Handling substitutions into a static data member from within the scope of the tempalte itself. diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 951f9f4bd59..4577bd386f9 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -1506,9 +1506,11 @@ check_accessibility_of_qualified_id (tree decl, its bases. */ qualifying_type = currently_open_derived_class (scope); - if (qualifying_type && IS_AGGR_TYPE_CODE (TREE_CODE (qualifying_type))) - /* It is possible for qualifying type to be a TEMPLATE_TYPE_PARM - or similar in a default argument value. */ + if (qualifying_type + /* It is possible for qualifying type to be a TEMPLATE_TYPE_PARM + or similar in a default argument value. */ + && CLASS_TYPE_P (qualifying_type) + && !dependent_type_p (qualifying_type)) perform_or_defer_access_check (TYPE_BINFO (qualifying_type), decl); } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 604b6cdb06d..5e5470d266d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2006-07-18 Mark Mitchell + PR c++/28048 + * g++.dg/template/defarg9.C: New test. + PR c++/28235 * g++.dg/template/static27.C: New test. diff --git a/gcc/testsuite/g++.dg/template/defarg9.C b/gcc/testsuite/g++.dg/template/defarg9.C new file mode 100644 index 00000000000..de7528f6120 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/defarg9.C @@ -0,0 +1,16 @@ +// PR c++/28048 + +template struct Boom; + +template::Internal::Value> // <--ICE + struct Foo + { + }; + +template struct Boom +{ + struct Internal + { + static const bool Value = false; + }; +};