Bugzilla – Bug 487
[llvmgcc] llvm-gcc incorrectly rejects some constant initializers involving the addresses of array elements
Last modified: 2005-01-02 22:18:56
You need to log in before you can comment on or make changes to this bug.
I am attempting to build FreeType 2.1.9 with LLVM 1.4 and the cfrontend-1.4.i686-redhat-linux-gnu.tar.gz compiler binary: Reading specs from /home/adam/t/llvm/cfrontend/x86/llvm-gcc/bin/../lib/gcc/i686-pc-linux-gnu/3.4-llvm/specs Configured with: /home/vadve/criswell/release/llvm-gcc/configure --prefix=/mounts/choi/disks/0/localhome/criswell/rel14/cfrontend/x86/llvm-gcc --disable-threads --disable-nls --disable-shared --enable-languages=c,c++ Thread model: single gcc version 3.4-llvm 20030924 (experimental) Part way through the build this occurs: /home/adam/t/llvm/cfrontend/x86/llvm-gcc/bin/gcc -pedantic -ansi -c -I/home/adam/t/t6/freetype-2.1.9/objs -I./builds/unix -I/home/adam/t/t6/freetype-2.1.9/include -c -Wall -g -O2 -DFT_CONFIG_OPTION_SYSTEM_ZLIB -DDARWIN_NO_CARBON "-DFT_CONFIG_CONFIG_H=<ftconfig.h>" -I/home/adam/t/t6/freetype-2.1.9/src/sfnt /home/adam/t/t6/freetype-2.1.9/src/sfnt/sfnt.c -o /home/adam/t/t6/freetype-2.1.9/objs/sfnt.oIn file included from /home/adam/t/t6/freetype-2.1.9/src/sfnt/sfnt.c:22: /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c: In function `tt_face_load_generic_header': /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:597: error: initializer element is not constant /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:597: error: (near initialization for `header_fields[7].offset') /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:597: error: initializer element is not constant /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:597: error: (near initialization for `header_fields[7]') /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:598: error: initializer element is not constant /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:598: error: (near initialization for `header_fields[8].offset') /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:598: error: initializer element is not constant /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:598: error: (near initialization for `header_fields[8]') /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:599: error: initializer element is not constant /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:599: error: (near initialization for `header_fields[9].offset') /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:599: error: initializer element is not constant /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:599: error: (near initialization for `header_fields[9]') /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:600: error: initializer element is not constant /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:600: error: (near initialization for `header_fields[10].offset') /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:600: error: initializer element is not constant /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:600: error: (near initialization for `header_fields[10]') /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:601: error: initializer element is not constant /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:601: error: (near initialization for `header_fields[11]') /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:602: error: initializer element is not constant /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:602: error: (near initialization for `header_fields[12]') /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:603: error: initializer element is not constant /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:603: error: (near initialization for `header_fields[13]') /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:604: error: initializer element is not constant /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:604: error: (near initialization for `header_fields[14]') /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:605: error: initializer element is not constant /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:605: error: (near initialization for `header_fields[15]') /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:606: error: initializer element is not constant /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:606: error: (near initialization for `header_fields[16]') /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:607: error: initializer element is not constant /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:607: error: (near initialization for `header_fields[17]') /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:608: error: initializer element is not constant /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:608: error: (near initialization for `header_fields[18]') /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:609: error: initializer element is not constant /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:609: error: (near initialization for `header_fields[19]') /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:610: error: initializer element is not constant /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:610: error: (near initialization for `header_fields[20]') /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c: In function `tt_face_load_metrics_header': /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:986: warning: initializer element is not computable at load time /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:986: warning: initializer element is not computable at load time /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:987: warning: initializer element is not computable at load time /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:987: warning: initializer element is not computable at load time /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:988: warning: initializer element is not computable at load time /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:988: warning: initializer element is not computable at load time /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:989: warning: initializer element is not computable at load time /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:989: warning: initializer element is not computable at load time /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c: In function `tt_face_load_os2': /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:1319: warning: initializer element is not computable at load time /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:1319: warning: initializer element is not computable at load time /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:1320: warning: initializer element is not computable at load time /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:1320: warning: initializer element is not computable at load time /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:1321: warning: initializer element is not computable at load time /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:1321: warning: initializer element is not computable at load time /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:1322: warning: initializer element is not computable at load time /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:1322: warning: initializer element is not computable at load time /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:1323: warning: initializer element is not computable at load time /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:1323: warning: initializer element is not computable at load time /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:1324: warning: initializer element is not computable at load time /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:1324: warning: initializer element is not computable at load time /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:1325: warning: initializer element is not computable at load time /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:1325: warning: initializer element is not computable at load time /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:1326: warning: initializer element is not computable at load time /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:1326: warning: initializer element is not computable at load time /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:1327: warning: initializer element is not computable at load time /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:1327: warning: initializer element is not computable at load time /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:1328: warning: initializer element is not computable at load time /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:1328: warning: initializer element is not computable at load time /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:1333: warning: initializer element is not computable at load time /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:1333: warning: initializer element is not computable at load time /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:1334: warning: initializer element is not computable at load time /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:1334: warning: initializer element is not computable at load time /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:1335: warning: initializer element is not computable at load time /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:1335: warning: initializer element is not computable at load time /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:1336: warning: initializer element is not computable at load time /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttload.c:1336: warning: initializer element is not computable at load time In file included from /home/adam/t/t6/freetype-2.1.9/src/sfnt/sfnt.c:28: /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttsbit.c: In function `tt_face_load_sbit_strikes': /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttsbit.c:421: warning: initializer element is not computable at load time /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttsbit.c:421: warning: initializer element is not computable at load time /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttsbit.c:422: warning: initializer element is not computable at load time /home/adam/t/t6/freetype-2.1.9/src/sfnt/ttsbit.c:422: warning: initializer element is not computable at load time make: *** [/home/adam/t/t6/freetype-2.1.9/objs/sfnt.lo] Error 1 I exported a custom path (giving the new gcc precedence): export PATH=/home/adam/t/llvm/Release/bin/:/home/adam/t/llvm/cfrontend/x86/llvm-gcc/bin/:$PATH And used this configure invocation: CC=/home/adam/t/llvm/cfrontend/x86/llvm-gcc/bin/gcc CXX=/home/adam/t/llvm/cfrontend/x86/llvm-gcc/bin/g++ ./configure I appended the -c flag to llvm-gcc and have confirmed that sfnt.o does not get built. In both cases I first modified builds/unix/configure to match the gcc build flags. That is I replaced: if test "x$CC" = xgcc; then XX_CFLAGS="-Wall" XX_ANSIFLAGS="-pedantic -ansi" else case "$host" in *-dec-osf*) CFLAGS= XX_CFLAGS="-std1 -g3" XX_ANSIFLAGS= ;; *) XX_CFLAGS= XX_ANSIFLAGS= ;; esac fi with: XX_CFLAGS="-Wall" XX_ANSIFLAGS="-pedantic -ansi -c" and XX_CFLAGS="-Wall" XX_ANSIFLAGS="-pedantic -ansi -E" respectively. I will be attaching the preprocessed sfnt.o, 296848 bytes. Regards, Adam
Created an attachment (id=190) [details] Preprocessed code produced with gcc -pedantic -ansi -E Refer message thread at: <http://mail.cs.uiuc.edu/pipermail/llvmdev/2004-December/002901.html>
Jeff Cohen writes: I can reproduce the problem with just two lines: struct X { int a[2]; }; int i = (int) &( ((struct X *)0) -> a[0]); This compiles with gcc and fails with llvmgcc.
I'll take a look at this when I get back from vacation on Jan 4th. Sorry for the delay. Thanks for the bug report! -Chris
Fixed. Patch here: http://mail.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20041227/022896.html Testcase here: Regression/CFrontend/2005-01-02-ConstantInits.c Thanks a lot for reporting this and to Jeff Cohen for reducing the testcase! -Chris