diff options
author | Mark Mitchell <mark@codesourcery.com> | 2003-01-13 00:16:12 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 2003-01-13 00:16:12 +0000 |
commit | 8fa1ad0e6a073ff581090e2eb9658af2b7fb873a (patch) | |
tree | 09a72e3ecc7a33e76258030be3182d05d3cd19bd /gcc | |
parent | e8f2b18d0ec4fc04cba5d9ea60350645247c6548 (diff) | |
download | gcc-8fa1ad0e6a073ff581090e2eb9658af2b7fb873a.zip gcc-8fa1ad0e6a073ff581090e2eb9658af2b7fb873a.tar.gz gcc-8fa1ad0e6a073ff581090e2eb9658af2b7fb873a.tar.bz2 |
re PR c++/9264 ([parser] ICE on invalid octal constant)
* cp-tree.h (get_arglist_len_in_bytes): Remove.
PR c++/9264
* parser.c (cp_parser_elaborated_type_specifier): Handle erroneous
typeame types more robustly.
PR c++/9172
* g++.dg/parse/typename1.C: New file.
From-SVN: r61236
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/cp/cp-tree.h | 1 | ||||
-rw-r--r-- | gcc/cp/parser.c | 12 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/parse/typename1.C | 5 |
4 files changed, 21 insertions, 5 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 47dc6fa..4111b95 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,11 @@ +2003-01-12 Mark Mitchell <mark@codesourcery.com> + + * cp-tree.h (get_arglist_len_in_bytes): Remove. + + PR c++/9264 + * parser.c (cp_parser_elaborated_type_specifier): Handle erroneous + typeame types more robustly. + 2003-01-11 Phil Edwards <pme@gcc.gnu.org> * parser.c: Fix comment typos. diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index a9d4f2b..313b124 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -3581,7 +3581,6 @@ extern GTY(()) operator_name_info_t assignment_operator_name_info /* in call.c */ extern bool check_dtor_name (tree, tree); -extern int get_arglist_len_in_bytes (tree); extern tree build_vfield_ref (tree, tree); extern tree build_scoped_method_call (tree, tree, tree, tree); diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index acbfd11..21d5d21 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -9012,10 +9012,14 @@ cp_parser_elaborated_type_specifier (parser, is_friend, is_declaration) /*current_scope_valid_p=*/false); /* Look for the nested-name-specifier. */ if (tag_type == typename_type) - cp_parser_nested_name_specifier (parser, - /*typename_keyword_p=*/true, - /*check_dependency_p=*/true, - /*type_p=*/true); + { + if (cp_parser_nested_name_specifier (parser, + /*typename_keyword_p=*/true, + /*check_dependency_p=*/true, + /*type_p=*/true) + == error_mark_node) + return error_mark_node; + } else /* Even though `typename' is not present, the proposed resolution to Core Issue 180 says that in `class A<T>::B', `B' should be diff --git a/gcc/testsuite/g++.dg/parse/typename1.C b/gcc/testsuite/g++.dg/parse/typename1.C new file mode 100644 index 0000000..2af84e3 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/typename1.C @@ -0,0 +1,5 @@ +template <class baz> +struct bar +{ + typedef typename baz::typename rebind<int> foo; // { dg-error "" } +}; |