Since this is still a problem with new versions of GCC would it be
welcomed if i tried making a solution that generated a switch statement
where ever a big list of || expressions would be generated?
I have a solution now that does generate a working switch but the
formatting of completely off especially where nested expressions are made.
On 05/05/14 16:12, Jakub Jelinek wrote:
On Mon, May 05, 2014 at 11:45:46PM +1000, Chris Johns wrote:
On 4/05/2014 12:34 pm, Andrew Pinski wrote:
On Sat, May 3, 2014 at 5:48 PM, Chris Johns <chr...@rtems.org> wrote:
On 3/05/2014 10:57 pm, Franzi Edo. wrote:
Hi,
I am trying to build a gcc-4.9.0 ARM cross compiler on OSX Mavericks
unsuccessfully.
My toolchain works fine with the previous version 4.8.2 but on the 4.9.0 I
have this error during the gcc building pass 1.
/opt/uKOS/Packages/gcc-4.9.0/gcc/config/arm/neon.md:3486:10917: fatal
error:
bracket nesting level exceeded maximum of 256
/opt/uKOS/Packages/gcc-4.9.0/gcc/config/arm/neon.md:3486:10917: note: use
-fbracket-depth=N to increase maximum nesting level
32 warnings and 1 error generated.
make[1]: *** [insn-attrtab.o] Error 1
make: *** [all-gcc] Error 2
Error building gcc pass 1
There is some large conditionals inside insn-attrtab.c but I don't see
any which have more than 30 depth of parenthesis. The max level of {}
is 4 in that file too.
I have generated a preprocessed source file as asked by clang and it
is attached to the PR I raised there. The file shows 288 brackets
at line 51623 in the file.
So this sounds like a bug in clang. Please report it to them.
The PR is http://llvm.org/bugs/show_bug.cgi?id=19650.
Looking at that line, guess it would be better if the generator (is that
genattrtab?) generated a switch rather than
if ((x == 1) || ((x == 2) || ((x == 3) || ((x == 4) || ((x == 5)...)))))
(at least I believe GCC doesn't yet transform a series of if conditions into
a switch (it optimizes the other direction)).
And, even if it doesn't generate a switch for say some attribute compared to
more than 10 values, there is no point in adding the extra ()s when
the operator || and operator || used in the rhs of it are the same.
Jakub