This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c/15753] New: strncmp in assert produces non-ISO code with -O2
- From: "wsf at fultondesigns dot co dot uk" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 31 May 2004 21:10:04 -0000
- Subject: [Bug c/15753] New: strncmp in assert produces non-ISO code with -O2
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
$ cat gccassertstrncmpbug.c
#include <string.h>
#include <assert.h>
int main ()
{
const char *c = "q(";
assert(strncmp(c,"q(",2) == 0);
return 0;
}
$ gcc-3.4.0 -v -save-temps -pedantic -O2 gccassertstrncmpbug.c -o
gccassertstrncmpbug
Reading specs from /usr/lib/gcc/i586-mandrake-linux-gnu/3.4.0/specs
Configured with: ../configure --prefix=/usr --libdir=/usr/lib
--with-slibdir=/lib --mandir=/usr/share/man --infodir=/usr/share/info
--enable-shared --enable-threads=posix --disable-checking --enable-long-long
--enable-__cxa_atexit --enable-clocale=gnu --disable-libunwind-exceptions
--enable-languages=c,c++,java --program-suffix=-3.4.0
--host=i586-mandrake-linux-gnu --with-system-zlib
Thread model: posix
gcc version 3.4.0 (Mandrake Linux 10.0 3.4.0-1mdk)
/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.0/cc1 -E -quiet -v
gccassertstrncmpbug.c -mtune=pentium -pedantic -O2 -o gccassertstrncmpbug.i
ignoring nonexistent directory
"/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.0/../../../../i586-mandrake-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/local/include
/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.0/include
/usr/include
End of search list.
/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.0/cc1 -fpreprocessed
gccassertstrncmpbug.i -quiet -dumpbase gccassertstrncmpbug.c -mtune=pentium
-auxbase gccassertstrncmpbug -O2 -pedantic -version -o gccassertstrncmpbug.s
GNU C version 3.4.0 (Mandrake Linux 10.0 3.4.0-1mdk) (i586-mandrake-linux-gnu)
compiled by GNU C version 3.4.0 (Mandrake Linux 10.0 3.4.0-1mdk).
GGC heuristics: --param ggc-min-expand=47 --param ggc-min-heapsize=32000
gccassertstrncmpbug.c: In function `main':
gccassertstrncmpbug.c:9: warning: string length `3568' is greater than the
length `509' ISO C89 compilers are required to support
as -V -Qy -o gccassertstrncmpbug.o gccassertstrncmpbug.s
GNU assembler version 2.14.90.0.5 (i586-mandrake-linux-gnu) using BFD version
2.14.90.0.5 20030722
/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.0/collect2 --eh-frame-hdr -m elf_i386
-dynamic-linker /lib/ld-linux.so.2 -o gccassertstrncmpbug
/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.0/../../../crt1.o
/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.0/../../../crti.o
/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.0/crtbegin.o
-L/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.0
-L/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.0
-L/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.0/../../.. gccassertstrncmpbug.o
-lgcc -lgcc_eh -lc -lgcc -lgcc_eh
/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.0/crtend.o
/usr/lib/gcc/i586-mandrake-linux-gnu/3.4.0/../../../crtn.o
$
-----------------------------------------------------
Note the "warning: string length `3568' is greater than the length `509' ISO C89
compilers are required to support" warning for code which uses a string of
length 2. The implementation for strncmp when using -O2 produces a rediculously
large string for such a simple function - see the preprocessed output. Seems
like the system headers have gone into code generation exhuberation and probably
need improving to produce ISO compliant code to get rid of this pesky warning.
--
Summary: strncmp in assert produces non-ISO code with -O2
Product: gcc
Version: 3.4.0
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: c
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: wsf at fultondesigns dot co dot uk
CC: gcc-bugs at gcc dot gnu dot org
GCC host triplet: i586-mandrake-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=15753