This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c/12738] Missing function with 'static' block-scope declaration; unit-at-a-time; and IMA.
- From: "wilson at specifixinc dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 31 Oct 2003 02:06:09 -0000
- Subject: [Bug c/12738] Missing function with 'static' block-scope declaration; unit-at-a-time; and IMA.
- References: <20031023004550.12738.geoffk@gcc.gnu.org>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
PLEASE REPLY TO gcc-bugzilla@gcc.gnu.org ONLY, *NOT* gcc-bugs@gcc.gnu.org.
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=12738
------- Additional Comments From wilson at specifixinc dot com 2003-10-31 02:06 -------
Subject: Re: Missing function with 'static' block-scope declaration;
unit-at-a-time; and IMA.
pinskia at gcc dot gnu dot org wrote:
> int
> flarm(void)
> {
> extern int i;
> return i;
> }
> static int i;
This is a rather different testcase. ISO C says that functions declared
within a block may not be declared static, so Geoff's example is
immediately invalid.
This one is trickier though. An extern int declaration within a block
is certainly valid. And the scope of a declaration within a block ends
at the end of the block, so there are no conflicting declarations that
require a diagnositic. ISO C does say that if the same identifier is
defined within different linkage within a module that the effect is
undefined, so this testcase does have undefined effect, but we aren't
required to emit a diagnostic for it.
By the way, gcc did used to give a warning for this testcase with -Wall.
I wrote the code myself, it was the IDENTIFIER_LIMBO_VALUE stuff in
c-decl.c. This was removed by Zack in April this year. gcc-3.3 does
warn, but gcc-3.4 does not. This might be an accidental misfeature of
Zack's patch, as the patch itself claims to preserve the functionality
of IDENTIFIER_LIMBO_VALUE, but implement it a different way. I did not
verify that Zack's patch is the problem though. The problem could have
been created by some other patch unrelated to Zack's changes. I'd
suggest looking at Zack's patch first though, if we care. The patch is
http://gcc.gnu.org/ml/gcc-patches/2003-04/msg00766.html