[LLVMdev] non-enable-llvm support in llvm-gcc-4.2 issue

Jay Freeman (saurik) saurik at saurik.com
Sun Mar 23 04:50:48 PDT 2008

There seems to be a bunch of code for making certain that gcc still works even if --enable-gcc isn't used, so I'm assuming that it's at least supposed to be a supported configuration, and hence this issue that I found should probably be looked at:

If you compile llvm-gcc-4.2 _without_ --enable-gcc, and then try to compile the following program, you get a rather nasty RTL error.

    void f() { try { throw; } catch (...) {} }

    test.cpp: In function .void f().:
    test.cpp:1: error: unrecognizable insn:
    (insn 39 5 40 2 (set (reg:SI 107)
            (UnKnown Unknown)) -1 (nil)
    test.cpp:1: internal compiler error: in extract_insn, at recog.c:2100

I managed to track this down to init_one_libfunc being broken. There's some logic to try to divert an llvm_init_one_libfunc to the old implementation (via some #defines) when --emnable-llvm isn't being used, but it doesn't even have the right return type anymore and only seems to do half the old logic (the rest being in llvm_init_one_libfunnc now).

I've managed to fix it pretty easily with the following hack, but it really does feel like a hack:

diff --git a/gcc/expr.h b/gcc/expr.h
index 850e7af..265b550 100644
--- a/gcc/expr.h
+++ b/gcc/expr.h
@@ -753,9 +753,6 @@ extern rtx init_one_libfunc (const char *);
 /* LLVM LOCAL begin */
 /* Call this to initialize an optab function tree.  */
 extern tree llvm_init_one_libfunc (const char *);
-#ifndef ENABLE_LLVM
-#define llvm_init_one_libfunc init_one_libfunc
 /* LLVM LOCAL end */

 extern int vector_mode_valid_p (enum machine_mode);
diff --git a/gcc/optabs.c b/gcc/optabs.c
index 06243c9..d5a1b19 100644
--- a/gcc/optabs.c
+++ b/gcc/optabs.c
@@ -5137,7 +5137,6 @@ init_intraclass_conv_libfuncs (convert_optab tab, const char *opname,

 /* LLVM local begin */
-#undef llvm_init_one_libfunc
 llvm_init_one_libfunc (const char *name)

Jay Freeman (saurik)
saurik at saurik.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20080323/450d9fb1/attachment.html>

More information about the llvm-dev mailing list