* bug#10164: 24.0.91; Instant crash enabling linum-mode
@ 2011-11-30 2:05 Tim Crews
2011-11-30 12:19 ` Eli Zaretskii
` (2 more replies)
0 siblings, 3 replies; 22+ messages in thread
From: Tim Crews @ 2011-11-30 2:05 UTC (permalink / raw)
To: 10164
[-- Attachment #1: Type: text/html, Size: 4447 bytes --]
^ permalink raw reply [flat|nested] 22+ messages in thread
* bug#10164: 24.0.91; Instant crash enabling linum-mode
2011-11-30 2:05 bug#10164: 24.0.91; Instant crash enabling linum-mode Tim Crews
@ 2011-11-30 12:19 ` Eli Zaretskii
2011-11-30 12:52 ` Dan Nicolaescu
2011-11-30 12:29 ` Eli Zaretskii
[not found] ` <handler.10164.D10164.132267227016711.notifdone@debbugs.gnu.org>
2 siblings, 1 reply; 22+ messages in thread
From: Eli Zaretskii @ 2011-11-30 12:19 UTC (permalink / raw)
To: Tim Crews; +Cc: 10164
> Date: Tue, 29 Nov 2011 19:05:20 -0700
> From: Tim Crews <tim.crews@code-affinity.com>
>
> Start Emacs with runemacs -Q --no-init-file
> C-x C-f foo.txt
> M-x linum-mode
> (Emacs doesn't crash yet)
> Type anything. Emacs instantly crashes.
Arrgh! This is GCC 4.6.x "as-is" code reordering in action. Emacs
crashes here:
xassert (!row->enabled_p
|| row->mode_line_p
|| verify_row_hash (row));
Evidently, it calls verify_row_hash before it tests row->mode_line_p.
^ permalink raw reply [flat|nested] 22+ messages in thread
* bug#10164: 24.0.91; Instant crash enabling linum-mode
2011-11-30 12:19 ` Eli Zaretskii
@ 2011-11-30 12:52 ` Dan Nicolaescu
2011-11-30 13:54 ` Eli Zaretskii
2011-11-30 15:01 ` Andy Moreton
0 siblings, 2 replies; 22+ messages in thread
From: Dan Nicolaescu @ 2011-11-30 12:52 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: 10164, Tim Crews
Eli Zaretskii <eliz@gnu.org> writes:
>> Date: Tue, 29 Nov 2011 19:05:20 -0700
>> From: Tim Crews <tim.crews@code-affinity.com>
>>
>> Start Emacs with runemacs -Q --no-init-file
>> C-x C-f foo.txt
>> M-x linum-mode
>> (Emacs doesn't crash yet)
>> Type anything. Emacs instantly crashes.
>
> Arrgh! This is GCC 4.6.x "as-is" code reordering in action. Emacs
> crashes here:
>
> xassert (!row->enabled_p
> || row->mode_line_p
> || verify_row_hash (row));
>
> Evidently, it calls verify_row_hash before it tests row->mode_line_p.
Are you sure? Without interprocedural analysis the compiler cannot know
that `verify_row_hash' does not alter row->enabled_p, so it cannot
change the evaluation order.
BTW, the argument for row_hash should be const.
^ permalink raw reply [flat|nested] 22+ messages in thread
* bug#10164: 24.0.91; Instant crash enabling linum-mode
2011-11-30 12:52 ` Dan Nicolaescu
@ 2011-11-30 13:54 ` Eli Zaretskii
2011-11-30 15:51 ` Dan Nicolaescu
2011-11-30 15:01 ` Andy Moreton
1 sibling, 1 reply; 22+ messages in thread
From: Eli Zaretskii @ 2011-11-30 13:54 UTC (permalink / raw)
To: Dan Nicolaescu; +Cc: 10164, tim.crews
> From: Dan Nicolaescu <dann@gnu.org>
> Cc: Tim Crews <tim.crews@code-affinity.com>, 10164@debbugs.gnu.org
> Date: Wed, 30 Nov 2011 07:52:40 -0500
>
> Eli Zaretskii <eliz@gnu.org> writes:
>
> >> Date: Tue, 29 Nov 2011 19:05:20 -0700
> >> From: Tim Crews <tim.crews@code-affinity.com>
> >>
> >> Start Emacs with runemacs -Q --no-init-file
> >> C-x C-f foo.txt
> >> M-x linum-mode
> >> (Emacs doesn't crash yet)
> >> Type anything. Emacs instantly crashes.
> >
> > Arrgh! This is GCC 4.6.x "as-is" code reordering in action. Emacs
> > crashes here:
> >
> > xassert (!row->enabled_p
> > || row->mode_line_p
> > || verify_row_hash (row));
> >
> > Evidently, it calls verify_row_hash before it tests row->mode_line_p.
>
> Are you sure?
How else can I explain this display from GDB:
(gdb) prow
y=0 x=0 pwid=673 a+d=12+4=16 phys=12+4=16 vis=16
used=(LMargin=0,Text=84,RMargin=0) Hash=263825844
start=0 end=0 ENA MODEL
? MODEL says that this row has its mode_line_p flag set.
Just to be sure, I ran the recipe again under GDB, setting a
breakpoint inside verify_row_hash thusly:
(gdb) break verify_row_hash if row->mode_line_p != 0
and sure enough, it breaks as soon as I turn on linum-mode, with ROW
that shows the glyphs in the mode line.
> Without interprocedural analysis the compiler cannot know
> that `verify_row_hash' does not alter row->enabled_p, so it cannot
> change the evaluation order.
I don't know. Maybe GCC does perform such an analysis. Or maybe it
decides that the result of this comparison in verify_row_hash:
row->hash == row_hash (row)
will not change even if row_hash does modify its argument ROW. Or
maybe it's a bug in GCC.
^ permalink raw reply [flat|nested] 22+ messages in thread
* bug#10164: 24.0.91; Instant crash enabling linum-mode
2011-11-30 13:54 ` Eli Zaretskii
@ 2011-11-30 15:51 ` Dan Nicolaescu
0 siblings, 0 replies; 22+ messages in thread
From: Dan Nicolaescu @ 2011-11-30 15:51 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: 10164, tim.crews
Eli Zaretskii <eliz@gnu.org> writes:
>> From: Dan Nicolaescu <dann@gnu.org>
>> Cc: Tim Crews <tim.crews@code-affinity.com>, 10164@debbugs.gnu.org
>> Date: Wed, 30 Nov 2011 07:52:40 -0500
>>
>> Eli Zaretskii <eliz@gnu.org> writes:
>>
>> >> Date: Tue, 29 Nov 2011 19:05:20 -0700
>> >> From: Tim Crews <tim.crews@code-affinity.com>
>> >>
>> >> Start Emacs with runemacs -Q --no-init-file
>> >> C-x C-f foo.txt
>> >> M-x linum-mode
>> >> (Emacs doesn't crash yet)
>> >> Type anything. Emacs instantly crashes.
>> >
>> > Arrgh! This is GCC 4.6.x "as-is" code reordering in action. Emacs
>> > crashes here:
>> >
>> > xassert (!row->enabled_p
>> > || row->mode_line_p
>> > || verify_row_hash (row));
>> >
>> > Evidently, it calls verify_row_hash before it tests row->mode_line_p.
>>
>> Are you sure?
>
> How else can I explain this display from GDB:
Compiler bug?
> (gdb) prow
> y=0 x=0 pwid=673 a+d=12+4=16 phys=12+4=16 vis=16
> used=(LMargin=0,Text=84,RMargin=0) Hash=263825844
> start=0 end=0 ENA MODEL
>
> ? MODEL says that this row has its mode_line_p flag set.
>
> Just to be sure, I ran the recipe again under GDB, setting a
> breakpoint inside verify_row_hash thusly:
>
> (gdb) break verify_row_hash if row->mode_line_p != 0
>
> and sure enough, it breaks as soon as I turn on linum-mode, with ROW
> that shows the glyphs in the mode line.
>
>> Without interprocedural analysis the compiler cannot know
>> that `verify_row_hash' does not alter row->enabled_p, so it cannot
>> change the evaluation order.
>
> I don't know. Maybe GCC does perform such an analysis. Or maybe it
It can't by default, `row_hash' is in a different file, so it's not
available when compiling dispnew.c.
> decides that the result of this comparison in verify_row_hash:
>
> row->hash == row_hash (row)
>
> will not change even if row_hash does modify its argument ROW. Or
> maybe it's a bug in GCC.
^ permalink raw reply [flat|nested] 22+ messages in thread
* bug#10164: 24.0.91; Instant crash enabling linum-mode
2011-11-30 12:52 ` Dan Nicolaescu
2011-11-30 13:54 ` Eli Zaretskii
@ 2011-11-30 15:01 ` Andy Moreton
2011-11-30 15:10 ` Juanma Barranquero
1 sibling, 1 reply; 22+ messages in thread
From: Andy Moreton @ 2011-11-30 15:01 UTC (permalink / raw)
To: 10164
On Wed 30 Nov 2011, Dan Nicolaescu wrote:
> Eli Zaretskii <eliz@gnu.org> writes:
>
>>> Date: Tue, 29 Nov 2011 19:05:20 -0700
>>> From: Tim Crews <tim.crews@code-affinity.com>
>>>
>>> Start Emacs with runemacs -Q --no-init-file
>>> C-x C-f foo.txt
>>> M-x linum-mode
>>> (Emacs doesn't crash yet)
>>> Type anything. Emacs instantly crashes.
>>
>> Arrgh! This is GCC 4.6.x "as-is" code reordering in action. Emacs
>> crashes here:
>>
>> xassert (!row->enabled_p
>> || row->mode_line_p
>> || verify_row_hash (row));
>>
>> Evidently, it calls verify_row_hash before it tests row->mode_line_p.
>
> Are you sure? Without interprocedural analysis the compiler cannot know
> that `verify_row_hash' does not alter row->enabled_p, so it cannot
> change the evaluation order.
> BTW, the argument for row_hash should be const.
The emacs build in this bug report is configured with
system-configuration-options is a variable defined in `C source code'.
Its value is "--with-gcc (4.6) --no-opt --cflags
-ID:/devel/emacs/libs/libXpm-3.5.8/include
-ID:/devel/emacs/libs/libXpm-3.5.8/src
-ID:/devel/emacs/libs/libpng-dev_1.4.3-1/include
-ID:/devel/emacs/libs/zlib-dev_1.2.5-2/include
-ID:/devel/emacs/libs/giflib-4.1.4-1/include
-ID:/devel/emacs/libs/jpeg-6b-4/include
-ID:/devel/emacs/libs/tiff-3.8.2-1/include
-ID:/devel/emacs/libs/gnutls-2.10.1/include --ldflags
-LD:/devel/emacs/libs/gnutls-2.10.1/lib"
This does not include "-fno-omit-frame-pointer", which is known to
important for MinGW GCC 4.6. Perhaps that is the real issue here ?
AndyM
^ permalink raw reply [flat|nested] 22+ messages in thread
* bug#10164: 24.0.91; Instant crash enabling linum-mode
2011-11-30 15:01 ` Andy Moreton
@ 2011-11-30 15:10 ` Juanma Barranquero
0 siblings, 0 replies; 22+ messages in thread
From: Juanma Barranquero @ 2011-11-30 15:10 UTC (permalink / raw)
To: Andy Moreton; +Cc: 10164
On Wed, Nov 30, 2011 at 16:01, Andy Moreton <andrewjmoreton@gmail.com> wrote:
> The emacs build in this bug report is configured with
[...]
> This does not include "-fno-omit-frame-pointer", which is known to
> important for MinGW GCC 4.6. Perhaps that is the real issue here ?
I see it with optimized and non-optimized builds (and the optimized
build has -fno-omit-frame-pointer).
Juanma
^ permalink raw reply [flat|nested] 22+ messages in thread
* bug#10164: 24.0.91; Instant crash enabling linum-mode
2011-11-30 2:05 bug#10164: 24.0.91; Instant crash enabling linum-mode Tim Crews
2011-11-30 12:19 ` Eli Zaretskii
@ 2011-11-30 12:29 ` Eli Zaretskii
2011-11-30 12:38 ` Juanma Barranquero
[not found] ` <handler.10164.D10164.132267227016711.notifdone@debbugs.gnu.org>
2 siblings, 1 reply; 22+ messages in thread
From: Eli Zaretskii @ 2011-11-30 12:29 UTC (permalink / raw)
To: Tim Crews, Chong Yidong; +Cc: 10164
> Arrgh! This is GCC 4.6.x "as-is" code reordering in action. Emacs
> crashes here:
>
> xassert (!row->enabled_p
> || row->mode_line_p
> || verify_row_hash (row));
>
> Evidently, it calls verify_row_hash before it tests row->mode_line_p
Fixed in revision 106555 on the trunk.
Chong, I hope this is in time for the next pretest. It would be a
pity to release a pretest with such a glaring problem.
^ permalink raw reply [flat|nested] 22+ messages in thread
* bug#10164: 24.0.91; Instant crash enabling linum-mode
2011-11-30 12:29 ` Eli Zaretskii
@ 2011-11-30 12:38 ` Juanma Barranquero
2011-11-30 13:40 ` Eli Zaretskii
[not found] ` <CAAeL0SS_ydvYGqw0rOd3UR6RoYzJWkEkFhaYX5kZ2m+vTx-Q0w@mail.gmail.com>
0 siblings, 2 replies; 22+ messages in thread
From: Juanma Barranquero @ 2011-11-30 12:38 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: 10164, Chong Yidong, Tim Crews
On Wed, Nov 30, 2011 at 13:29, Eli Zaretskii <eliz@gnu.org> wrote:
> Chong, I hope this is in time for the next pretest. It would be a
> pity to release a pretest with such a glaring problem.
But verify_row_hash does nothing except checking and returning a flag,
so the new code will never cause an assertion failure...
Juanma
=== modified file 'src/dispnew.c'
--- src/dispnew.c 2011-11-28 01:07:01 +0000
+++ src/dispnew.c 2011-11-30 12:25:09 +0000
@@ -608,9 +608,10 @@
row->glyphs[LAST_AREA]
= row->glyphs[LEFT_MARGIN_AREA] + dim.width;
}
- xassert (!row->enabled_p
- || row->mode_line_p
- || verify_row_hash (row));
+#if XASSERTS
+ if (row->enabled_p && !row->mode_line_p)
+ verify_row_hash (row));
+#endif
++row;
^ permalink raw reply [flat|nested] 22+ messages in thread
[parent not found: <handler.10164.D10164.132267227016711.notifdone@debbugs.gnu.org>]
end of thread, other threads:[~2011-11-30 18:55 UTC | newest]
Thread overview: 22+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-11-30 2:05 bug#10164: 24.0.91; Instant crash enabling linum-mode Tim Crews
2011-11-30 12:19 ` Eli Zaretskii
2011-11-30 12:52 ` Dan Nicolaescu
2011-11-30 13:54 ` Eli Zaretskii
2011-11-30 15:51 ` Dan Nicolaescu
2011-11-30 15:01 ` Andy Moreton
2011-11-30 15:10 ` Juanma Barranquero
2011-11-30 12:29 ` Eli Zaretskii
2011-11-30 12:38 ` Juanma Barranquero
2011-11-30 13:40 ` Eli Zaretskii
[not found] ` <CAAeL0SS_ydvYGqw0rOd3UR6RoYzJWkEkFhaYX5kZ2m+vTx-Q0w@mail.gmail.com>
[not found] ` <E1RVkfB-00062i-AB@fencepost.gnu.org>
[not found] ` <CAAeL0SRW1A7-vOzNGxFvGtbv=zVSo2ji+_HB7R8rFtq15ufhPg@mail.gmail.com>
2011-11-30 16:24 ` Eli Zaretskii
2011-11-30 16:29 ` Chong Yidong
2011-11-30 16:35 ` Chong Yidong
2011-11-30 16:39 ` Juanma Barranquero
2011-11-30 16:42 ` Chong Yidong
2011-11-30 16:56 ` Eli Zaretskii
2011-11-30 17:37 ` Chong Yidong
2011-11-30 18:10 ` Dan Nicolaescu
2011-11-30 18:29 ` Eli Zaretskii
2011-11-30 18:55 ` Dan Nicolaescu
[not found] ` <handler.10164.D10164.132267227016711.notifdone@debbugs.gnu.org>
2011-11-30 17:29 ` bug#10164: closed (Instant crash enabling linum-mode) Tim Crews
2011-11-30 18:06 ` Eli Zaretskii
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).