diff options
author | Mark Mitchell <mark@codesourcery.com> | 2002-07-08 07:49:58 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 2002-07-08 07:49:58 +0000 |
commit | 594bb0e78980cbb20cdeb028056a8f01be55b06f (patch) | |
tree | ac52e13562c359d31800ddbc3e14b676482d299d /gcc | |
parent | 974a90cfec98f0c651a890b823cba4ef61ef38c7 (diff) | |
download | gcc-594bb0e78980cbb20cdeb028056a8f01be55b06f.zip gcc-594bb0e78980cbb20cdeb028056a8f01be55b06f.tar.gz gcc-594bb0e78980cbb20cdeb028056a8f01be55b06f.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 11 | ||||
-rw-r--r-- | gcc/cp/cp-tree.h | 1 | ||||
-rw-r--r-- | gcc/cp/decl.c | 17 | ||||
-rw-r--r-- | gcc/cp/parse.y | 13 |
4 files changed, 25 insertions, 17 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index d54f99d..f752ad5 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,14 @@ +2002-07-08 Mark Mitchell <mark@codesourcery.com> + + * 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 <mark@codesourcery.com> * 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 810522c..d92597e 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 5d4f78e..a7d203c 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 9f37a7e..73eec6a 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; $<ttype>$ = NULL_TREE; } ; .warning_ok: - { have_extern_spec = 0; } + { have_extern_spec = false; } ; extension: |