bug-bison
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: SIGSEGV in test 316 on SPARCv9


From: Martin Rehak
Subject: Re: SIGSEGV in test 316 on SPARCv9
Date: Tue, 08 Dec 2020 07:07:10 +0100
User-agent: astroid/0.15.0 (https://github.com/astroidmail/astroid)

Hi Akim,

it really seems that I am hitting kind of compiler optimization issue on 
64bit SPARC with gcc 9.3.0. I have set -O2 and now it seems it passes 
constantly. I don't think I need to bother you with this one any more.

Thanks much for your help!
-- 
m.

On December 3, 2020 10:00 pm Akim Demaille wrote:
> Hi Martin,
> 
> Thanks a lot for your reports.  Sorry for not answering sooner,
> but rest assured that your reports are on the radar.
> 
>> Le 30 nov. 2020 à 18:20, Martin Rehak <martin.rehak@oracle.com> a écrit :
>> 
>> stderr:                   
>> 1.1                                                        
>> 1.1: syntax error    
>> ./testsuite[2584]: .: line 181: 19978: Memory fault(coredump)
> 
> Wow...
> 
>> It is reproducible just on SPARCv9, it passes on SPARCv7.
> 
> Same compiler?
> 
>> I have done some debugging on it. These are the arguments of bison and 
>> g++ commands used:
>> 
>> $ bison --color=no -fno-caret -o input.cc input.y
>> $ g++ -g -m64 -O3 -mno-app-regs 
>> -ffile-prefix-map=/builds/mrehak/workspace/bison/components/bison=. \
>>  -I/builds/mrehak/workspace/bison/components/bison/bison-3.7.3/tests 
>> -D_REENTRANT -o input input.cc \
>>  /builds/mrehak/workspace/bison/components/bison/build/sparcv9/lib/libbison.a
> 
> Great job, thanks!
> 
> What version of GCC is this?
> 
> 
>> This is what gdb catches:
>> 
>> Reading symbols from ./input...
>> (gdb) r
>> Starting program: 
>> /builds/mrehak/workspace/bison/components/bison/build/sparcv9/tests/testsuite.dir/316/input
>>  
>> [Thread debugging using libthread_db enabled]
>> 1.1
>> 1.1: syntax error
>> [New Thread 1 (LWP 1)]
> 
> W00t???  I have no idea why it creates a thread here.  There's no such thing 
> in the generated parser.
> 
>> Thread 2 received signal SIGSEGV, Segmentation fault.
> 
> What on Earth is going on here???
> 
>> And here is how yydestruct looks like in input.cc:
>> 
>> static void                                                                  
>>                                           
>> yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, YYLTYPE 
>> *yylocationp, yy::parser& yyparser)              
>> {                                                                            
>>                                           
>>  YYUSE (yyvaluep);                                                           
>>                                          
>>  YYUSE (yylocationp);                                                        
>>                                          
>>  YYUSE (yyparser);                                                           
>>                                          
>>  if (!yymsg)                                                                 
>>                                          
>>    yymsg = "Deleting";                                                       
>>                                          
>>  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);   // <- 1464
>> 
>>  YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN                                         
>>                                          
>> YYUSE (yytype);                                                              
>>                                         
>> YY_IGNORE_MAYBE_UNINITIALIZED_END                                            
>>                                         
>> }
> 
> So if I understood correctly you have a crash in line 1464 when traces are 
> not enabled (i.e., but YYDEBUG is not set).  Which is weird, since:
> 
> # define YY_SYMBOL_PRINT(Title, Kind, Value, Location)                  \
>   do {                                                                  \
>     if (yydebug)                                                        \
>       {                                                                 \
>         YY_FPRINTF ((stderr, "%s ", Title));                            \
>         yy_symbol_print (stderr, Kind, Value, Location, yyparser);        \
>         YY_FPRINTF ((stderr, "\n"));                                    \
>       }                                                                 \
>   } while (0)
> 
> In other words, there is nothing to run here!
> 
> If you inline the macro by hand in line 1464, and compile again, what happens?
> 
> I'm very tempted to call this a compiler bug.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]