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

Reply via email to