aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>2002-07-08 07:49:58 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>2002-07-08 07:49:58 +0000
commit594bb0e78980cbb20cdeb028056a8f01be55b06f (patch)
treeac52e13562c359d31800ddbc3e14b676482d299d /gcc
parent974a90cfec98f0c651a890b823cba4ef61ef38c7 (diff)
downloadgcc-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/ChangeLog11
-rw-r--r--gcc/cp/cp-tree.h1
-rw-r--r--gcc/cp/decl.c17
-rw-r--r--gcc/cp/parse.y13
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: