cp-tree.h (have_extern_spec): Declare it
authorMark Mitchell <mark@codesourcery.com>
Mon, 8 Jul 2002 07:49:58 +0000 (07:49 +0000)
committerMark Mitchell <mmitchel@gcc.gnu.org>
Mon, 8 Jul 2002 07:49:58 +0000 (07:49 +0000)
* 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
gcc/cp/cp-tree.h
gcc/cp/decl.c
gcc/cp/parse.y

index d54f99db315cdac8ad0c26fbb3fb016cd87015f6..f752ad5ba2c658826113606727d1d06e979bfa20 100644 (file)
@@ -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.
index 810522cc3df1aa450e8e808a0e32b5fab2c6c30e..d92597ecbb1feca1ee93aa83dee2ef519e99dd14 100644 (file)
@@ -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));
index 5d4f78ea6c3ae1d9a44c03d601d654c636669064..a7d203ccee0a6180c1cdf33c9841a33e6ff575cf 100644 (file)
@@ -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;
+
 \f
 /* 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)
index 9f37a7e251ea5619b7a2f563e4cfd318ede91247..73eec6a45c26abd72f2712f6c454e0b5d0a63904 100644 (file)
@@ -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: