diff options
author | Mark Mitchell <mark@codesourcery.com> | 2006-07-19 05:14:25 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 2006-07-19 05:14:25 +0000 |
commit | fc4297484be7ee97053c1a2b66e6dfaed030e43f (patch) | |
tree | 14b4e81aeb5fe478e03d615ee6c38c50b97b35b3 | |
parent | cb2eb96f4d81b3ce61fd0070b59bfaf568c04f31 (diff) | |
download | gcc-fc4297484be7ee97053c1a2b66e6dfaed030e43f.zip gcc-fc4297484be7ee97053c1a2b66e6dfaed030e43f.tar.gz gcc-fc4297484be7ee97053c1a2b66e6dfaed030e43f.tar.bz2 |
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
-rw-r--r-- | gcc/cp/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/cp/semantics.c | 8 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/defarg9.C | 16 |
4 files changed, 27 insertions, 3 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 2f22450..af163dd 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2006-07-18 Mark Mitchell <mark@codesourcery.com> + 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 951f9f4..4577bd3 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 604b6cd..5e5470d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2006-07-18 Mark Mitchell <mark@codesourcery.com> + 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 0000000..de7528f6 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/defarg9.C @@ -0,0 +1,16 @@ +// PR c++/28048 + +template<typename T> struct Boom; + +template<typename T, bool D = Boom<T>::Internal::Value> // <--ICE + struct Foo + { + }; + +template<typename T> struct Boom +{ + struct Internal + { + static const bool Value = false; + }; +}; |