With gcc mainline (20030707) and the patch for 11043, when building a combined tree for arc- elf32, I get: Making all in stdio make[4]: Entering directory `/home/dara/mainline/objdir/arc-elf32/newlib/libc/stdio' /home/dara/mainline/objdir/gcc/xgcc -B/home/dara/mainline/objdir/gcc/ -nostdinc -B/home/ dara/mainline/objdir/arc-elf32/newlib/ -isystem /home/dara/mainline/objdir/arc-elf32/newlib/ targ-include -isystem /home/dara/mainline/src/newlib/libc/include -B/usr/local/arc-elf32/arc- elf32/bin/ -B/usr/local/arc-elf32/arc-elf32/lib/ -isystem /usr/local/arc-elf32/arc-elf32/include -isystem /usr/local/arc-elf32/arc-elf32/sys-include -L/home/dara/mainline/objdir/ld - DPACKAGE=\"newlib\" -DVERSION=\"1.11.0\" -I. -I../../../../../src/newlib/libc/stdio -O2 -fno- builtin -O2 -g -O2 -O2 -O2 -save-temps -fshort-enums -c ../../../../../src/newlib/libc/stdio/ vfprintf.c ../../../../../src/newlib/libc/stdio/vfprintf.c: In function `_vfprintf_r': ../../../../../src/newlib/libc/stdio/vfprintf.c:767: internal compiler error: in build, at tree.c:2378 Please submit a full bug report, with preprocessed source if appropriate. See <URL:http://gcc.gnu.org/bugs.html> for instructions. make[4]: *** [vfprintf.o] Error 1 make[4]: Leaving directory `/home/dara/mainline/objdir/arc-elf32/newlib/libc/stdio' Testcase also failes with -O0.
Created attachment 4369 [details] testcase from newlib
I can confirm this on the mainline (20030709): Here is the simplified case: typedef __builtin_va_list __gnuc_va_list; typedef __gnuc_va_list va_list; int _vfprintf_r(int i , va_list ap) { __builtin_va_arg(ap,long double); }
Suspending until ARC gets a maintainer.
FWIW it's still present on mainline (20030821).
I think the problem is that the "long double" type is 0 aka not defined as something or arc does not support "long double" in __builtin_va_arg yet.
This should be suspended still.
This is caused by a lack of long double support. Also anything else that requires floating point support will probably fail as well, since soft-float is not support either.
*** Bug 17240 has been marked as a duplicate of this bug. ***
In continuation with this bug, we figured out that there were a few calls to build with unary operators without side effects. The exact place in tree.c where this fails had the following comment . --- tree.c /* The only one-operand cases we handle here are those with side-effects. Others are handled with build1. So don't bother checked if the arg has side-effects since we'll already have set it. ??? This really should use build1 too. */ if (TREE_CODE_CLASS (code) != 's') abort (); In the case for all these aborts the nodes being passed were unary operators, for example (INDIRECT_REF which has a code of 'r' ) which is not a side effect unary node. The following patch fixes this . ---ChangeLog 2004-09-04 Ramana Radhakrishnan <ramana.radhakrishnan@codito.com> PR/ 11476 arc.c * Fix calls to build for unary operators without sideeffects for ARC. --- arc.c.orig 2004-09-04 16:00:15.000000000 +0530 +++ arc.c 2004-09-04 16:00:42.000000000 +0530 @@ -2284,8 +2284,8 @@ { tree type_ptr_ptr = build_pointer_type (type_ptr); - addr = build (INDIRECT_REF, type_ptr, - build (NOP_EXPR, type_ptr_ptr, valist)); + addr = build1 (INDIRECT_REF, type_ptr, + build1 (NOP_EXPR, type_ptr_ptr, valist)); incr = build (PLUS_EXPR, TREE_TYPE (valist), valist, build_int_2 (UNITS_PER_WORD, 0)); @@ -2305,12 +2305,12 @@ { /* AP = (TYPE *)(((int)AP + 7) & -8) */ - addr = build (NOP_EXPR, integer_type_node, valist); + addr = build1 (NOP_EXPR, integer_type_node, valist); addr = fold (build (PLUS_EXPR, integer_type_node, addr, build_int_2 (7, 0))); addr = fold (build (BIT_AND_EXPR, integer_type_node, addr, build_int_2 (-8, 0))); - addr = fold (build (NOP_EXPR, TREE_TYPE (valist), addr)); + addr = fold (build1 (NOP_EXPR, TREE_TYPE (valist), addr)); } /* The increment is always rounded_size past the aligned pointer. */ and continues with the build.
I should note that is only for 3.4 as 3.5 changes how fold works and now build1 is really called when build is called with one parameter.
Subject: Bug 11476 CVSROOT: /cvs/gcc Module name: gcc Branch: gcc-3_4-branch Changes by: pinskia@gcc.gnu.org 2004-09-11 21:15:21 Modified files: gcc : ChangeLog gcc/config/arc : arc.c Log message: 2004-09-11 Ramana Radhakrishnan <ramana.radhakrishnan@codito.com> PR target/11476 * gcc/config/arc/arc.c (arc_va_args): Call build1 instead of build for unary tree operators. Patches: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/ChangeLog.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=2.2326.2.619&r2=2.2326.2.620 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/config/arc/arc.c.diff?cvsroot=gcc&only_with_tag=gcc-3_4-branch&r1=1.46.4.1&r2=1.46.4.2
Fixed. I should note this does not need fixing on the mainline because of the change in build and that the code which did this was removed.