aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Stallman <rms@gnu.org>1992-07-01 21:40:06 +0000
committerRichard Stallman <rms@gnu.org>1992-07-01 21:40:06 +0000
commitee534ebfe9ae15ec54a5ff1c5081c8c261c06a51 (patch)
tree9308ce1b4d25d13a708b6df27385b291d238f343
parentb2215d835ced9bbc77a4299bb0bc43f7200676b0 (diff)
downloadgcc-ee534ebfe9ae15ec54a5ff1c5081c8c261c06a51.zip
gcc-ee534ebfe9ae15ec54a5ff1c5081c8c261c06a51.tar.gz
gcc-ee534ebfe9ae15ec54a5ff1c5081c8c261c06a51.tar.bz2
(grokdeclarator): Don't mark file-scope register variables as TREE_PUBLIC.
From-SVN: r1379
-rw-r--r--gcc/c-decl.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/gcc/c-decl.c b/gcc/c-decl.c
index 4cd33a0..ac79c3c 100644
--- a/gcc/c-decl.c
+++ b/gcc/c-decl.c
@@ -4107,11 +4107,15 @@ grokdeclarator (declarator, declspecs, decl_context, initialized)
/* An uninitialized decl with `extern' is a reference. */
TREE_EXTERNAL (decl)
= !initialized && (specbits & (1 << (int) RID_EXTERN));
- /* At top level, either `static' or no s.c. makes a definition
- (perhaps tentative), and absence of `static' makes it public. */
+ /* At top level, the presence of a `static' or `register' storage
+ class specifier, or the absence of all storage class specifiers
+ makes this declaration a definition (perhaps tentative). Also,
+ the absence of both `static' and `register' makes it public. */
if (current_binding_level == global_binding_level)
{
- TREE_PUBLIC (decl) = !(specbits & (1 << (int) RID_STATIC));
+ TREE_PUBLIC (decl)
+ = !(specbits
+ & ((1 << (int) RID_STATIC) | (1 << (int) RID_REGISTER)));
TREE_STATIC (decl) = ! TREE_EXTERNAL (decl);
}
/* Not at top level, only `static' makes a static definition. */