Hi
I am running uptodate RELENG_7. It has gcc (GCC) 4.2.1 20070719
[FreeBSD].
I tried to track down segfaults from my code and I accidentaly found a
optimization error. Code did not segfault when compiled without
optimization but crashed when -O2 was used.
I tried to track it I could make the gcc give me following error by
simply stripping few lines:
-----------------------
wrong.c: In function 'wrong':
wrong.c:11: error: Attempt to delete prologue/epilogue insn:
(insn/f 47 46 48 2 (set (mem:SI (plus:SI (reg/f:SI 6 bp)
(const_int -8 [0xfffffffffffffff8])) [0 S4 A8])
(reg:SI 3 bx)) -1 (nil)
(nil))
wrong.c:11: internal compiler error: in propagate_one_insn, at
flow.c:1735 Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://gcc.gnu.org/bugs.html> for instructions.
------------------
And this is what triggers it:
#include <wchar.h>
#include <stdio.h>
#define max_word_len 64
wchar_t *wrong(wchar_t *wordlist, wchar_t *word)
{ wchar_t buffer[max_word_len+2];
buffer[max_word_len+2]=0;
<STRIPPED PART>
if(wcsstr(wordlist,buffer)==0) wcscpy(wordlist,buffer);
<STRIPPED PART>
return wordlist;
}
-Mikael
Mikael Ikivesi wrote:> Hi > > I am running uptodate RELENG_7. It has gcc (GCC) 4.2.1 20070719 > [FreeBSD]. > > I tried to track down segfaults from my code and I accidentaly found a > optimization error. Code did not segfault when compiled without > optimization but crashed when -O2 was used. > > I tried to track it I could make the gcc give me following error by > simply stripping few lines: > > ----------------------- > wrong.c: In function 'wrong': > wrong.c:11: error: Attempt to delete prologue/epilogue insn: > (insn/f 47 46 48 2 (set (mem:SI (plus:SI (reg/f:SI 6 bp) > (const_int -8 [0xfffffffffffffff8])) [0 S4 A8]) > (reg:SI 3 bx)) -1 (nil) > (nil)) > wrong.c:11: internal compiler error: in propagate_one_insn, at > flow.c:1735 Please submit a full bug report, > with preprocessed source if appropriate. > See <URL:http://gcc.gnu.org/bugs.html> for instructions.So, did you consider perhaps following this advice? ;-) Kris
On Sat, Mar 22, 2008 at 07:24:33PM +0200, Mikael Ikivesi wrote:> #include <wchar.h> > #include <stdio.h> > > #define max_word_len 64 > > wchar_t *wrong(wchar_t *wordlist, wchar_t *word) > { wchar_t buffer[max_word_len+2]; > buffer[max_word_len+2]=0; > > <STRIPPED PART> > > if(wcsstr(wordlist,buffer)==0) wcscpy(wordlist,buffer); > > <STRIPPED PART> > > return wordlist; > }There's an off-by-one error in your code, which is very likely tickling a bug in gcc. That said, gcc shouldn't crash or be generating working code depending upon which optimisation flags you use, so as Kris said, file a bug with the gcc team for that. -- | Jeremy Chadwick jdc at parodius.com | | Parodius Networking http://www.parodius.com/ | | UNIX Systems Administrator Mountain View, CA, USA | | Making life hard for others since 1977. PGP: 4BD6C0CB |