kerneis / cpc

Continuation Passing C
http://www.pps.univ-paris-diderot.fr/~kerneis/software/cpc
Other
112 stars 13 forks source link

CPC converts tcg/tcg.c in QEMU into invalid C #10

Open ctshepherd opened 11 years ago

ctshepherd commented 11 years ago

/home/cs648/qemu/tcg/tcg.c:1642: Warning: Body of function tcg_reg_alloc falls-through. Adding a return statement gcc -D_GNUCC -E -I/home/cs648/qemu/tcg -I/home/cs648/qemu/tcg/i386 -I/home/cs648/qemu/linux-headers -I/home/cs648/qemu/bin/current/linux-headers -I. -I/home/cs648/qemu -I/home/cs648/qemu/include -I/home/cs648/qemu/tcg -Itcg -DPIE -m64 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -USSE2 -w -Dcoroutine_fn=attribute((cps)) -Dnocps=attribute((nocps)) -I/usr/include/p11-kit-1 -I/usr/include/libpng12 -I/usr/include/pixman-1 -I../linux-headers -I.. -I/home/cs648/qemu/target-i386 -DNEED_CPU_H -I/home/cs648/qemu/include -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -O2 -D_FORTIFY_SOURCE=2 -g ./tcg.cil.c -o ./tcg.cil.i gcc -D_GNUCC -c -I/home/cs648/qemu/tcg -I/home/cs648/qemu/tcg/i386 -I/home/cs648/qemu/linux-headers -I/home/cs648/qemu/bin/current/linux-headers -I. -I/home/cs648/qemu -I/home/cs648/qemu/include -I/home/cs648/qemu/tcg -Itcg -DPIE -m64 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -USSE2 -w -Dcoroutine_fn=attribute((cps)) -Dnocps=attribute((nocps)) -I/usr/include/p11-kit-1 -I/usr/include/libpng12 -I/usr/include/pixman-1 -I../linux-headers -I.. -I/home/cs648/qemu/target-i386 -DNEED_CPU_H -I/home/cs648/qemu/include -pthread -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -O2 -D_FORTIFY_SOURCE=2 -g -Werror -fPIE -m64 -Wstrict-prototypes -Wredundant-decls -Wall -Wundef -Wwrite-strings -Wmissing-prototypes -fno-strict-aliasing -w -Wendif-labels -Wmissing-include-dirs -Wempty-body -Wnested-externs -Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers -Wold-style-declaration -Wold-style-definition -Wtype-limits -fstack-protector-all -pthread -O2 -g -o tcg/tcg.o ./tcg.cil.i /home/cs648/qemu/tcg/tcg.c:2547:61: error: ‘img’ undeclared here (not in a function) .e_ident[EI_MAG2] = ELFMAG2, ^ make: *\ [tcg/tcg.o] Error 1 make: Leaving directory `/home/cs648/qemu/bin/convert-block/x86_64-softmmu'

tcg.c: http://codepad.org/u5PyyVjO tcg.i: http://codepad.org/vS3gR45p tcg.cil.c: http://codepad.org/OaUDEJkp tcg.cil.i: http://codepad.org/QFJXikz6

kerneis commented 11 years ago

Your files are truncated before the line causing the error. Could you send them to me by email?

Thanks.

kerneis commented 11 years ago

On Wed, Sep 04, 2013 at 06:52:05PM -0700, Charlie Shepherd wrote:

/home/cs648/qemu/tcg/tcg.c:2547:61: error: ‘img’ undeclared here (not in a function) .e_ident[EI_MAG2] = ELFMAG2, ^ make: *\ [tcg/tcg.o] Error 1 make: Leaving directory `/home/cs648/qemu/bin/convert-block/x86_64-softmmu'

Ah, this is a known CIL limitation: when a static local initializer is "lifted" to top level (as a global variable), it becomes incorrect if it contains a reference to another local variable (img in that case). Does --noMakeStaticGlobal fix the issue?

What I fail to understand is that I compiled qemu today with CPC and did not hit this problem (using your build.sh script). And I thought I had enabled --noMakeStaticGlobal by default in CPC (contrary to CIL). Could you send me a log of configure + make where this issue is triggered (including the configure invocation)?

Thanks.

ctshepherd commented 11 years ago

I thought we had to disable --noMakeStaticGlobal because it caused a different error?

kerneis commented 11 years ago

On Thu, Sep 05, 2013 at 04:37:22PM -0700, Charlie Shepherd wrote:

I thought we had to disable --noMakeStaticGlobal because it caused a different error?

That's correct, thanks for the reminder.

Gabriel

kerneis commented 11 years ago

On Thu, Sep 05, 2013 at 04:37:22PM -0700, Charlie Shepherd wrote:

I thought we had to disable --noMakeStaticGlobal because it caused a different error?

In fact, no, I added a work-around that applies noMakeStaticGlobal by default in CPC, except for cps functions (where it causes the bug).

Is tcg_register_jit_int marked as coroutine_fn? Otherwise, I suspect you are using an out-of-date CPC (which would also explain your regression on bug #5).