Patch: PR 17408/17409
Dale Johannesen
dalej@apple.com
Mon Sep 13 18:19:00 GMT 2004
On Sep 11, 2004, at 12:45 PM, Joseph S. Myers wrote:
> On Sat, 11 Sep 2004, Dale Johannesen wrote:
>
>> Having now read what the standard requires (which seems poorly chosen,
>> but it's Too Late Now), getting all cases right seems messy. Setting
>> DECL_EXTERN on an initialized object obviously leads to trouble, and
>> is contrary to the meaning of that flag. I'm now thinking in terms of
>> adding a bit, which tells whether an initialized object was defined
>> using
>> 'extern' or not. The code that resolves
>
> For the present bugs, there is probably a reasonably straightforward
> local
> fix. DECL_EXTERNAL should end up getting reset in start_decl.
> Investigate what's going wrong.
Right you are. The Static bit was getting clobbered by pushdecl,
apparently the
Extern bit confused it. The following fixes pr15360-1.c and the
examples in both
newer PRs. I'll start a test run, OK if that looks all right?
Index: c-decl.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/c-decl.c,v
retrieving revision 1.579
diff -u -d -b -w -p -r1.579 c-decl.c
--- c-decl.c 10 Sep 2004 23:56:24 -0000 1.579
+++ c-decl.c 13 Sep 2004 17:44:37 -0000
@@ -2981,8 +2981,11 @@ start_decl (struct c_declarator *declara
TEM may equal DECL or it may be a previous decl of the same name.
*/
tem = pushdecl (decl);
- if (initialized)
+ if (initialized && DECL_EXTERNAL (tem))
+ {
DECL_EXTERNAL (tem) = 0;
+ TREE_STATIC (tem) = 1;
+ }
return tem;
}
More information about the Gcc-patches
mailing list