From 594bb0e78980cbb20cdeb028056a8f01be55b06f Mon Sep 17 00:00:00 2001 From: Mark Mitchell Date: Mon, 8 Jul 2002 07:49:58 +0000 Subject: [PATCH] cp-tree.h (have_extern_spec): Declare it * cp-tree.h (have_extern_spec): Declare it * decl.c (have_extern_spec): Define it. (start_decl): Eliminate use of used_extern_spec. (start_function): Likewise. * parse.y (have_extern_spec): Remove declaration. (used_extern_spec): Likewise. (frob_specs): Eliminate use of used_extern_spec. (.hush_warning): Likewise. From-SVN: r55319 --- gcc/cp/ChangeLog | 11 +++++++++++ gcc/cp/cp-tree.h | 1 + gcc/cp/decl.c | 17 +++++++++-------- gcc/cp/parse.y | 13 ++++--------- 4 files changed, 25 insertions(+), 17 deletions(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index d54f99db315..f752ad5ba2c 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,14 @@ +2002-07-08 Mark Mitchell + + * cp-tree.h (have_extern_spec): Declare it + * decl.c (have_extern_spec): Define it. + (start_decl): Eliminate use of used_extern_spec. + (start_function): Likewise. + * parse.y (have_extern_spec): Remove declaration. + (used_extern_spec): Likewise. + (frob_specs): Eliminate use of used_extern_spec. + (.hush_warning): Likewise. + 2002-07-07 Mark Mitchell * Make-lang.in (cp/parse.o): Depend on decl.h. diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index 810522cc3df..d92597ecbb1 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -3904,6 +3904,7 @@ extern tree declare_global_var PARAMS ((tree, tree)); extern void register_dtor_fn PARAMS ((tree)); extern tmpl_spec_kind current_tmpl_spec_kind PARAMS ((int)); extern tree cp_fname_init PARAMS ((const char *)); +extern bool have_extern_spec; /* in decl2.c */ extern int check_java_method PARAMS ((tree)); diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 5d4f78ea6c3..a7d203ccee0 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -306,6 +306,11 @@ static enum deprecated_states deprecated_state = DEPRECATED_NORMAL; being flagged as deprecated or reported as using deprecated types. */ int adding_implicit_members = 0; + +/* True if a declaration with an `extern' linkage specifier is being + processed. */ +bool have_extern_spec; + /* For each binding contour we allocate a binding_level structure which records the names defined in that contour. @@ -7193,8 +7198,6 @@ start_decl (declarator, declspecs, initialized, attributes, prefix_attributes) tree decl; register tree type, tem; tree context; - extern int have_extern_spec; - extern int used_extern_spec; #if 0 /* See code below that used this. */ @@ -7202,11 +7205,11 @@ start_decl (declarator, declspecs, initialized, attributes, prefix_attributes) #endif /* This should only be done once on the top most decl. */ - if (have_extern_spec && !used_extern_spec) + if (have_extern_spec) { declspecs = tree_cons (NULL_TREE, get_identifier ("extern"), declspecs); - used_extern_spec = 1; + have_extern_spec = false; } /* An object declared as __attribute__((deprecated)) suppresses @@ -13501,8 +13504,6 @@ start_function (declspecs, declarator, attrs, flags) tree ctype = NULL_TREE; tree fntype; tree restype; - extern int have_extern_spec; - extern int used_extern_spec; int doing_friend = 0; struct cp_binding_level *bl; tree current_function_parms; @@ -13512,10 +13513,10 @@ start_function (declspecs, declarator, attrs, flags) my_friendly_assert (TREE_CHAIN (void_list_node) == NULL_TREE, 161); /* This should only be done once on the top most decl. */ - if (have_extern_spec && !used_extern_spec) + if (have_extern_spec) { declspecs = tree_cons (NULL_TREE, get_identifier ("extern"), declspecs); - used_extern_spec = 1; + have_extern_spec = false; } if (flags & SF_PRE_PARSED) diff --git a/gcc/cp/parse.y b/gcc/cp/parse.y index 9f37a7e251e..73eec6a45c2 100644 --- a/gcc/cp/parse.y +++ b/gcc/cp/parse.y @@ -98,10 +98,6 @@ do { \ error message if the user supplies an empty conditional expression. */ static const char *cond_stmt_keyword; -/* Nonzero if we have an `extern "C"' acting as an extern specifier. */ -int have_extern_spec; -int used_extern_spec; - /* List of types and structure classes of the current declaration. */ static GTY(()) tree current_declspecs; @@ -163,7 +159,7 @@ frob_specs (specs_attrs, lookups) if (current_declspecs && TREE_CODE (current_declspecs) != TREE_LIST) current_declspecs = build_tree_list (NULL_TREE, current_declspecs); - if (have_extern_spec && !used_extern_spec) + if (have_extern_spec) { /* We have to indicate that there is an "extern", but that it was part of a language specifier. For instance, @@ -174,7 +170,7 @@ frob_specs (specs_attrs, lookups) current_declspecs = tree_cons (error_mark_node, get_identifier ("extern"), current_declspecs); - used_extern_spec = 1; + have_extern_spec = false; } } @@ -510,12 +506,11 @@ extdefs_opt: ; .hush_warning: - { have_extern_spec = 1; - used_extern_spec = 0; + { have_extern_spec = true; $$ = NULL_TREE; } ; .warning_ok: - { have_extern_spec = 0; } + { have_extern_spec = false; } ; extension: -- 2.30.2