Florian Weimer <[email protected]> writes:
> * Eric Gallager:
>
>>> diff --git a/gcc/testsuite/gcc.c-torture/compile/20080910-1.c
>>> b/gcc/testsuite/gcc.c-torture/compile/20080910-1.c
>>> index bf32775d401..911fb562790 100644
>>> --- a/gcc/testsuite/gcc.c-torture/compile/20080910-1.c
>>> +++ b/gcc/testsuite/gcc.c-torture/compile/20080910-1.c
>>> @@ -1,5 +1,6 @@
>>> /* This used to crash IRA with -O3 -fPIC.
>>> See PR 37333. */
>>> +/* { dg-additional-options "-fpermissive" } */
>>> struct yy_buffer_state {
>>> int yy_is_interactive;
>>> };
>>
>> The fact that this one appears to be based on a scanner generated by
>> flex gives me pause. Is code from flex/yacc/bison going to need
>> -fpermissive in general, or is this just because it was generated by
>> an old version? If it's only old versions that generate code requiring
>> -fpermissive, when exactly did they stop doing that?
>
> It can be a bit tricky to get bison, flex, and automake to work
> together. The inter-dependencies can be challenging, and apparently
> it's difficult to teach automake that generating a lexer or parser
> produces both the implementation C file and a header file. There's a
> fairly generic way to deal with this: write a custom header that
> contains the necessary function declarations and include it everywhere.
> It's not as elegant as using the generated headers, but that can be
> difficult depending on the build system.
Right. The issues with anything Bison (and friends) were usually missing
declarations because of the header dependencies. Nothing intrinsic.
In fact, I can't even remember anything where Bison et. al generated
bad code purely by virtue of the version (even though sometimes comments
would suggest that, I never found any evidence for it, and it was
always the fault of the project itself which we'd then fix).
So, not worried.
>
> However, the problems with this test case aren't related to that. For
> example, yy_fatal_error is undefined, but is a static function in the
> code generated by flex. The test case has been preprocessed (that's how
> _IO_getc got there), and the declarations from system headers have been
> removed.
>
> Thanks,
> Florian