diff options
-rw-r--r-- | gcc/c-decl.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/20020303-1.c | 5 |
2 files changed, 6 insertions, 1 deletions
diff --git a/gcc/c-decl.c b/gcc/c-decl.c index f465875..845cefb 100644 --- a/gcc/c-decl.c +++ b/gcc/c-decl.c @@ -3476,7 +3476,7 @@ start_decl (declarator, declspecs, initialized, attributes) initializer equal to zero. (Section 3.7.2) -fno-common gives strict ANSI behavior. Usually you don't want it. This matters only for variables with external linkage. */ - if (! flag_no_common || ! TREE_PUBLIC (decl)) + if (!initialized && (! flag_no_common || ! TREE_PUBLIC (decl))) DECL_COMMON (decl) = 1; /* Set attributes here so if duplicate decl, will have proper attributes. */ diff --git a/gcc/testsuite/gcc.c-torture/compile/20020303-1.c b/gcc/testsuite/gcc.c-torture/compile/20020303-1.c new file mode 100644 index 0000000..a120adf --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/20020303-1.c @@ -0,0 +1,5 @@ +/* With -fzero-initialized-in-bss, we made I a common symbol instead + of a symbol in the .bss section. Not only does that break semantics, + but a common symbol can't be weak. */ + +int i __attribute__((weak)) = 0; |