This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c/21659] New: "weak declaration must precede definition" error missing at >= O2
- From: "flash at pobox dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 19 May 2005 00:42:20 -0000
- Subject: [Bug c/21659] New: "weak declaration must precede definition" error missing at >= O2
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
Compiling the C Torture file "weak-6.c" (below) gives an error at O0 and O1, as seemed to be expected
by the author. At O2, there's no error or warning.
214> gcc -O2 -c ../c/noerror/GPL/3.3.2/nowarn/bulk/gcc.dg/weak/weak-6.c
<no error>
215> gcc -O1 -c ../c/noerror/GPL/3.3.2/nowarn/bulk/gcc.dg/weak/weak-6.c
../c/noerror/GPL/3.3.2/nowarn/bulk/gcc.dg/weak/weak-6.c:4: error: weak declaration of `foo' must
precede definition
weak-6.c:
/* { dg-do compile } */
extern void * foo (void);
void * foo (void) { return (void *)foo; } /* { dg-error "precede" } */
#pragma weak foo
Also occurs with arm-softfloat-linux-gnu-g++ 3.4.1.
With Apple gcc version 3.3, I don't get the error at any optimization level.
____________________________________
Here's the save-temps output:
225> gcc -v -save-temps -O2 -c ../c/noerror/GPL/3.3.2/nowarn/bulk/gcc.dg/weak/weak-6.c
Reading specs from /usr/lib/gcc-lib/i586-suse-linux/3.3.4/specs
Configured with: ../configure --enable-threads=posix --prefix=/usr --with-local-prefix=/usr/local --
infodir=/usr/share/info --mandir=/usr/share/man --enable-languages=c,c++,f77,objc,java,ada --
disable-checking --libdir=/usr/lib --enable-libgcj --with-gxx-include-dir=/usr/include/g++ --with-
slibdir=/lib --with-system-zlib --enable-shared --enable-__cxa_atexit i586-suse-linux
Thread model: posix
gcc version 3.3.4 (pre 3.3.5 20040809)
/usr/lib/gcc-lib/i586-suse-linux/3.3.4/cc1 -E -quiet -v -D__GNUC__=3 -D__GNUC_MINOR__=3
-D__GNUC_PATCHLEVEL__=4 ../c/noerror/GPL/3.3.2/nowarn/bulk/gcc.dg/weak/weak-6.c -O2 weak
-6.i
#include "..." search starts here:
#include <...> search starts here:
/usr/local/include
/usr/lib/gcc-lib/i586-suse-linux/3.3.4/include
/usr/i586-suse-linux/include
/usr/include
End of search list.
/usr/lib/gcc-lib/i586-suse-linux/3.3.4/cc1 -fpreprocessed weak-6.i -quiet -dumpbase weak-6.c
-auxbase weak-6 -O2 -version -o weak-6.s
GNU C version 3.3.4 (pre 3.3.5 20040809) (i586-suse-linux)
compiled by GNU C version 3.3.4 (pre 3.3.5 20040809).
GGC heuristics: --param ggc-min-expand=81 --param ggc-min-heapsize=96968
/usr/lib/gcc-lib/i586-suse-linux/3.3.4/../../../../i586-suse-linux/bin/as -V -Qy -o weak-6.o weak
-6.s
GNU assembler version 2.15.91.0.2 (i586-suse-linux) using BFD version 2.15.91.0.2 20040727 (SuSE
Linux)
--
Summary: "weak declaration must precede definition" error missing
at >= O2
Product: gcc
Version: 3.3.4
Status: UNCONFIRMED
Severity: minor
Priority: P3
Component: c
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: flash at pobox dot com
CC: gcc-bugs at gcc dot gnu dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21659