diff options
author | Mark Mitchell <mark@codesourcery.com> | 2003-07-14 03:04:29 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 2003-07-14 03:04:29 +0000 |
commit | b34459943bbfaf3f6fb32408bec5443b5bd007a9 (patch) | |
tree | 3ddf8b782e57d44ab82415af48c1283130465744 /gcc/cp/cp-tree.h | |
parent | f2ffecb11286fbe36b305bff8e8374214f6f9463 (diff) | |
download | gcc-b34459943bbfaf3f6fb32408bec5443b5bd007a9.zip gcc-b34459943bbfaf3f6fb32408bec5443b5bd007a9.tar.gz gcc-b34459943bbfaf3f6fb32408bec5443b5bd007a9.tar.bz2 |
re PR c++/11493 (tree check ICE in error.c)
* cp-tree.h (cp_id_kind): New type.
(unqualified_name_lookup_error): Change prototype.
(unqualified_fn_lookup_error): New function.
(do_identifier): Remove.
(do_scoped_id): Likewise.
(tsubst_copy_and_build): Change prototype.
(reregister_specialization): New function.
(perform_koenig_lookup): Likewise.
(finish_id_expression): Likewise.
* call.c (build_method_call): Adjust call to
unqualified_name_lookup_error.
* decl.c (duplicate_decls): Use reregister_specialization.
* lex.c (is_global): Remove.
(unqualified_name_lookup_error): Return a value.
(do_identifier): Remove.
(do_scoped_id): Likewise.
(identifier_typedecl_value): Remove.
(unqualified_fn_lookup_error): New function.
* parser.c (cp_parser_id_kind): Remove.
(cp_parser_non_constant_id_expression): Remove.
(cp_parser_primary_expression): Use finish_id_expression.
(cp_parser_class_or_namespace_name): Use cp_id_kind, not
cp_parser_id_kind.
(cp_parser_postfix_expression): Use perform_koenig_lookup.
(cp_parser_template_argument): Use cp_id_kind.
(cp_parser_fold_non_dependent_expr): Adjust call to
tsubst_copy_and_build.
* pt.c (unregister_specialization): Rename to ...
(reregister_specialization): This.
(tsubst_friend_function): Use it.
(maybe_fold_nontype_arg): Adjust call to tsubst_copy_and_build.
(tsubst_qualified_id): Likewise.
(tsubst_expr): Likewise.
(tsubst_copy_and_build): Add function_p parameter. Use
finish_id_expression. Introduce RECUR macro.
(tsubst_non_call_postfix_expression): New function.
(regenerate_decl_from_template): Use reregister_specialization.
* semantics.c (perform_koenig_lookup): New function.
(finish_id_expression): Likewise.
PR c++/11493
PR c++/11495
* g++.dg/parse/template9.C: Likewise.
* g++.dg/template/crash4.C: New test.
* g++.dg/template/koenig1.C: Likewise.
* g++.old-deja/g++.benjamin/tem03.C: Adjust error markers.
* g++.old-deja/g++.benjamin/tem06.C: Declare "x".
* g++.old-deja/g++.jason/overload33.C: Use this-> when calling
functions.
* g++.old-deja/g++.jason/template36.C: Likewise.
* g++.old-deja/g++.mike/p1989.C: Likewise.
* g++.old-deja/g++.pt/lookup2.C: Use -fpermissive when compiling.
* g++.old-deja/g++.pt/ttp20.C: Use this->.
* g++.old-deja/g++.pt/ttp21.C: Use this->.
* g++.old-deja/g++.pt/typename13.C: Use -fpermissive when
compiling.
* g++.old-deja/g++.pt/union2.C: Use this->.
From-SVN: r69316
Diffstat (limited to 'gcc/cp/cp-tree.h')
-rw-r--r-- | gcc/cp/cp-tree.h | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index c713191..24fd278 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -350,6 +350,20 @@ struct tree_wrapper GTY(()) struct z_candidate *z_c; }; +/* The different kinds of ids that we ecounter. */ + +typedef enum cp_id_kind +{ + /* Not an id at all. */ + CP_ID_KIND_NONE, + /* An unqualified-id that is not a template-id. */ + CP_ID_KIND_UNQUALIFIED, + /* An unqualified template-id. */ + CP_ID_KIND_TEMPLATE_ID, + /* A qualified-id. */ + CP_ID_KIND_QUALIFIED +} cp_id_kind; + /* Macros for access to language-specific slots in an identifier. */ #define IDENTIFIER_NAMESPACE_BINDINGS(NODE) \ @@ -3883,10 +3897,8 @@ extern void snarf_method (tree); extern void note_got_semicolon (tree); extern void note_list_got_semicolon (tree); extern void see_typename (void); -extern void unqualified_name_lookup_error (tree); -extern tree do_identifier (tree, tree); -extern tree do_scoped_id (tree, tree); -extern tree identifier_typedecl_value (tree); +extern tree unqualified_name_lookup_error (tree); +extern tree unqualified_fn_lookup_error (tree); extern tree build_lang_decl (enum tree_code, tree, tree); extern void retrofit_lang_decl (tree); extern tree copy_decl (tree); @@ -3963,7 +3975,7 @@ extern tree most_specialized_instantiation (tree); extern void print_candidates (tree); extern int instantiate_pending_templates (void); extern tree tsubst_default_argument (tree, tree, tree); -extern tree tsubst_copy_and_build (tree, tree, tsubst_flags_t, tree); +extern tree tsubst_copy_and_build (tree, tree, tsubst_flags_t, tree, bool); extern tree most_general_template (tree); extern tree get_mostly_instantiated_function_type (tree); extern int problematic_instantiation_changed (void); @@ -3982,6 +3994,7 @@ extern tree resolve_typename_type (tree, bool); extern tree template_for_substitution (tree); extern tree build_non_dependent_expr (tree); extern tree build_non_dependent_args (tree); +extern bool reregister_specialization (tree, tree, tree); /* in repo.c */ extern void repo_template_used (tree); @@ -4111,6 +4124,7 @@ extern tree finish_parenthesized_expr (tree); extern tree finish_non_static_data_member (tree, tree); extern tree begin_stmt_expr (void); extern tree finish_stmt_expr (tree); +extern tree perform_koenig_lookup (tree, tree); extern tree finish_call_expr (tree, tree, bool); extern tree finish_increment_expr (tree, enum tree_code); extern tree finish_this_expr (void); @@ -4133,6 +4147,10 @@ extern tree finish_template_type (tree, tree, int); extern tree finish_base_specifier (tree, tree, bool); extern void finish_member_declaration (tree); extern void check_multiple_declarators (void); +extern tree finish_id_expression (tree, tree, tree, + cp_id_kind *, tree *, + bool, bool, bool *, + const char **); extern tree finish_typeof (tree); extern tree finish_sizeof (tree); extern tree finish_alignof (tree); |