* [PATCH] check_cfg assert fix
@ 2011-09-06 9:15 Tom de Vries
2011-09-06 15:14 ` Steven Bosscher
0 siblings, 1 reply; 9+ messages in thread
From: Tom de Vries @ 2011-09-06 9:15 UTC (permalink / raw)
To: Vladimir Makarov; +Cc: gcc-patches, Maxim Kuvyrkov
[-- Attachment #1: Type: text/plain, Size: 1643 bytes --]
Hi,
During testing the approved-for-commit middle-end patch for bug 43864 on ARM, I
ran into a gcc.dg/torture/pr46068.c ICE.
The following assert in haifa-sched.c:check_cfg triggered:
...
else if (any_condjump_p (head))
gcc_assert (/* Usual case. */
(EDGE_COUNT (bb->succs) > 1
&& !BARRIER_P (NEXT_INSN (head)))
/* Or jump to the next instruction. */
|| (EDGE_COUNT (bb->succs) == 1
&& (BB_HEAD (EDGE_I (bb->succs, 0)->dest)
== JUMP_LABEL (head))));
...
It triggered on this rtl, a conditional return followed by a barrier:
...
(jump_insn 44 43 93 7 (set (pc)
(if_then_else (ne (reg:CC 24 cc)
(const_int 0 [0]))
(return)
(pc))) gcc/testsuite/gcc.dg/builtin-unreachable-4.c:13 249
{*cond_return}
(expr_list:REG_DEAD (reg:CC 24 cc)
(expr_list:REG_BR_PROB (const_int 9996 [0x270c])
(nil)))
-> return)
(barrier 93 44 92)
...
Although this insn sequence is non-optimal (the conditional return can be
optimized to an unconditional one, given that it's followed by a barrier), it's
not incorrect. The patch fixes this ICE by removing the check for the
'EDGE_COUNT (bb->succs) == 1' case.
Bootstrapped and reg-tested on x86_64 and build and reg-tested on arm.
OK for trunk?
Thanks,
- Tom
2011-09-05 Tom de Vries <tom@codesourcery.com>
* haifa-sched.c (check_cfg): Remove restriction on conditional jump if
the containing block has only 1 outgoing edge.
[-- Attachment #2: check_cfg-fix.patch --]
[-- Type: text/x-patch, Size: 1074 bytes --]
Index: gcc/haifa-sched.c
===================================================================
--- gcc/haifa-sched.c (revision 178145)
+++ gcc/haifa-sched.c (working copy)
@@ -6065,13 +6065,12 @@ check_cfg (rtx head, rtx tail)
gcc_assert (EDGE_COUNT (bb->succs) == 1
&& BARRIER_P (NEXT_INSN (head)));
else if (any_condjump_p (head))
- gcc_assert (/* Usual case. */
- (EDGE_COUNT (bb->succs) > 1
- && !BARRIER_P (NEXT_INSN (head)))
- /* Or jump to the next instruction. */
- || (EDGE_COUNT (bb->succs) == 1
- && (BB_HEAD (EDGE_I (bb->succs, 0)->dest)
- == JUMP_LABEL (head))));
+ gcc_assert (/* Weird case, like jump to the next insn
+ or use of __builtin_unreachable (). */
+ EDGE_COUNT (bb->succs) == 1
+ /* Normal case, one path falls through. */
+ || !BARRIER_P (NEXT_INSN (head)));
+
}
if (BB_END (bb) == head)
{
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] check_cfg assert fix
2011-09-06 9:15 [PATCH] check_cfg assert fix Tom de Vries
@ 2011-09-06 15:14 ` Steven Bosscher
2011-09-06 18:02 ` Maxim Kuvyrkov
0 siblings, 1 reply; 9+ messages in thread
From: Steven Bosscher @ 2011-09-06 15:14 UTC (permalink / raw)
To: Tom de Vries; +Cc: Vladimir Makarov, gcc-patches, Maxim Kuvyrkov
On Tue, Sep 6, 2011 at 11:14 AM, Tom de Vries <vries@codesourcery.com> wrote:
> Hi,
>
> During testing the approved-for-commit middle-end patch for bug 43864 on ARM, I
> ran into a gcc.dg/torture/pr46068.c ICE.
>
> The following assert in haifa-sched.c:check_cfg triggered:
> ...
> else if (any_condjump_p (head))
> gcc_assert (/* Usual case. */
> (EDGE_COUNT (bb->succs) > 1
> && !BARRIER_P (NEXT_INSN (head)))
> /* Or jump to the next instruction. */
> || (EDGE_COUNT (bb->succs) == 1
> && (BB_HEAD (EDGE_I (bb->succs, 0)->dest)
> == JUMP_LABEL (head))));
> ...
>
> It triggered on this rtl, a conditional return followed by a barrier:
> ...
> (jump_insn 44 43 93 7 (set (pc)
> (if_then_else (ne (reg:CC 24 cc)
> (const_int 0 [0]))
> (return)
> (pc))) gcc/testsuite/gcc.dg/builtin-unreachable-4.c:13 249
> {*cond_return}
> (expr_list:REG_DEAD (reg:CC 24 cc)
> (expr_list:REG_BR_PROB (const_int 9996 [0x270c])
> (nil)))
> -> return)
>
> (barrier 93 44 92)
> ...
>
> Although this insn sequence is non-optimal (the conditional return can be
> optimized to an unconditional one, given that it's followed by a barrier), it's
> not incorrect. The patch fixes this ICE by removing the check for the
> 'EDGE_COUNT (bb->succs) == 1' case.
>
> Bootstrapped and reg-tested on x86_64 and build and reg-tested on arm.
>
> OK for trunk?
No. If the conditional return is not taken, you should not fall into a
barrier. It looks like the CFG somehow got corrupted, and if that's
indeed the case then your patch just papers over the problem. That
follows after the barrier?
Ciao!
Steven
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] check_cfg assert fix
2011-09-06 15:14 ` Steven Bosscher
@ 2011-09-06 18:02 ` Maxim Kuvyrkov
2011-09-06 21:32 ` Steven Bosscher
0 siblings, 1 reply; 9+ messages in thread
From: Maxim Kuvyrkov @ 2011-09-06 18:02 UTC (permalink / raw)
To: Steven Bosscher; +Cc: Tom de Vries, Vladimir Makarov, gcc-patches
[-- Attachment #1: Type: text/plain, Size: 2069 bytes --]
On 7/09/2011, at 3:13 AM, Steven Bosscher wrote:
> On Tue, Sep 6, 2011 at 11:14 AM, Tom de Vries <vries@codesourcery.com> wrote:
>> Hi,
>>
>> During testing the approved-for-commit middle-end patch for bug 43864 on ARM, I
>> ran into a gcc.dg/torture/pr46068.c ICE.
>>
>> The following assert in haifa-sched.c:check_cfg triggered:
>> ...
>> else if (any_condjump_p (head))
>> gcc_assert (/* Usual case. */
>> (EDGE_COUNT (bb->succs) > 1
>> && !BARRIER_P (NEXT_INSN (head)))
>> /* Or jump to the next instruction. */
>> || (EDGE_COUNT (bb->succs) == 1
>> && (BB_HEAD (EDGE_I (bb->succs, 0)->dest)
>> == JUMP_LABEL (head))));
>>
...
>> Bootstrapped and reg-tested on x86_64 and build and reg-tested on arm.
>>
>> OK for trunk?
>
> No. If the conditional return is not taken, you should not fall into a
> barrier. It looks like the CFG somehow got corrupted, and if that's
> indeed the case then your patch just papers over the problem. That
> follows after the barrier?
Initially, I thought so too, that is why I wrote the above assert in the first place. However, __builtin_unreachable() adds a whole new spin on where a BARRIER can occur; after all, this built-in expands directly to BARRIER.
Before Tom's optimization the fall-through path of conditional jump was followed by an unconditional jump to a label directly followed by a barrier. Tom's patch removed the middle-man in the face of unconditional jump so that the barrier now follows a conditional jump. This is very odd, but, given the initial test case, is a valid case.
For reference, the test case in question:
/* { dg-do compile } */
void
foo ()
{
asm goto (""::::l1);
__builtin_unreachable ();
l1:;
}
void
bar ()
{
foo ();
foo ();
}
--
Maxim Kuvyrkov
CodeSourcery / Mentor Graphics
[-- Attachment #2: smime.p7s --]
[-- Type: application/pkcs7-signature, Size: 1795 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] check_cfg assert fix
2011-09-06 18:02 ` Maxim Kuvyrkov
@ 2011-09-06 21:32 ` Steven Bosscher
2011-09-06 21:51 ` Steven Bosscher
0 siblings, 1 reply; 9+ messages in thread
From: Steven Bosscher @ 2011-09-06 21:32 UTC (permalink / raw)
To: Maxim Kuvyrkov; +Cc: Tom de Vries, Vladimir Makarov, gcc-patches
On Tue, Sep 6, 2011 at 8:00 PM, Maxim Kuvyrkov <maxim@codesourcery.com> wrote:
>
> On 7/09/2011, at 3:13 AM, Steven Bosscher wrote:
>
>> On Tue, Sep 6, 2011 at 11:14 AM, Tom de Vries <vries@codesourcery.com> wrote:
>>> Hi,
>>>
>>> During testing the approved-for-commit middle-end patch for bug 43864 on ARM, I
>>> ran into a gcc.dg/torture/pr46068.c ICE.
>>>
>>> The following assert in haifa-sched.c:check_cfg triggered:
>>> ...
>>> else if (any_condjump_p (head))
>>> gcc_assert (/* Usual case. */
>>> (EDGE_COUNT (bb->succs) > 1
>>> && !BARRIER_P (NEXT_INSN (head)))
>>> /* Or jump to the next instruction. */
>>> || (EDGE_COUNT (bb->succs) == 1
>>> && (BB_HEAD (EDGE_I (bb->succs, 0)->dest)
>>> == JUMP_LABEL (head))));
>>>
> ...
>>> Bootstrapped and reg-tested on x86_64 and build and reg-tested on arm.
>>>
>>> OK for trunk?
>>
>> No. If the conditional return is not taken, you should not fall into a
>> barrier. It looks like the CFG somehow got corrupted, and if that's
>> indeed the case then your patch just papers over the problem. That
>> follows after the barrier?
>
> Initially, I thought so too, that is why I wrote the above assert in the first place. However, __builtin_unreachable() adds a whole new spin on where a BARRIER can occur; after all, this built-in expands directly to BARRIER.
>
> Before Tom's optimization the fall-through path of conditional jump was followed by an unconditional jump to a label directly followed by a barrier. Tom's patch removed the middle-man in the face of unconditional jump so that the barrier now follows a conditional jump. This is very odd, but, given the initial test case, is a valid case.
Well, shouldn't the assert be changed then to handle !onlyjump_p and
returnjump_p cases separately? Tom's patch removes a valid check for
all but these corner cases. Perhaps something like this:
Index: haifa-sched.c
===================================================================
--- haifa-sched.c (revision 178601)
+++ haifa-sched.c (working copy)
@@ -6071,7 +6071,10 @@ check_cfg (rtx head, rtx tail)
/* Or jump to the next instruction. */
|| (EDGE_COUNT (bb->succs) == 1
&& (BB_HEAD (EDGE_I (bb->succs, 0)->dest)
- == JUMP_LABEL (head))));
+ == JUMP_LABEL (head)))
+ /* Or the jump is not just a jump. */
+ || (!onlyjump_p (head)
+ || returnjump_p (head)));
}
if (BB_END (bb) == head)
{
Ciao!
Steven
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] check_cfg assert fix
2011-09-06 21:32 ` Steven Bosscher
@ 2011-09-06 21:51 ` Steven Bosscher
2011-09-06 21:59 ` Maxim Kuvyrkov
0 siblings, 1 reply; 9+ messages in thread
From: Steven Bosscher @ 2011-09-06 21:51 UTC (permalink / raw)
To: Maxim Kuvyrkov; +Cc: Tom de Vries, Vladimir Makarov, gcc-patches
On Tue, Sep 6, 2011 at 11:31 PM, Steven Bosscher <stevenb.gcc@gmail.com> wrote:
> Index: haifa-sched.c
> ===================================================================
> --- haifa-sched.c (revision 178601)
> +++ haifa-sched.c (working copy)
> @@ -6071,7 +6071,10 @@ check_cfg (rtx head, rtx tail)
> /* Or jump to the next instruction. */
> || (EDGE_COUNT (bb->succs) == 1
> && (BB_HEAD (EDGE_I (bb->succs, 0)->dest)
> - == JUMP_LABEL (head))));
> + == JUMP_LABEL (head)))
> + /* Or the jump is not just a jump. */
> + || (!onlyjump_p (head)
> + || returnjump_p (head)));
> }
> if (BB_END (bb) == head)
> {
>
BTW that's one ugly gcc_assert. Candidate for gcc_checking_assert?
Ciao!
Steven
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] check_cfg assert fix
2011-09-06 21:51 ` Steven Bosscher
@ 2011-09-06 21:59 ` Maxim Kuvyrkov
2011-09-08 20:00 ` Bernd Schmidt
0 siblings, 1 reply; 9+ messages in thread
From: Maxim Kuvyrkov @ 2011-09-06 21:59 UTC (permalink / raw)
To: Steven Bosscher; +Cc: Tom de Vries, Vladimir Makarov, gcc-patches
On 7/09/2011, at 9:32 AM, Steven Bosscher wrote:
> On Tue, Sep 6, 2011 at 11:31 PM, Steven Bosscher <stevenb.gcc@gmail.com> wrote:
>> Index: haifa-sched.c
>> ===================================================================
>> --- haifa-sched.c (revision 178601)
>> +++ haifa-sched.c (working copy)
>> @@ -6071,7 +6071,10 @@ check_cfg (rtx head, rtx tail)
>> /* Or jump to the next instruction. */
>> || (EDGE_COUNT (bb->succs) == 1
>> && (BB_HEAD (EDGE_I (bb->succs, 0)->dest)
>> - == JUMP_LABEL (head))));
>> + == JUMP_LABEL (head)))
>> + /* Or the jump is not just a jump. */
>> + || (!onlyjump_p (head)
>> + || returnjump_p (head)));
>> }
>> if (BB_END (bb) == head)
>> {
>>
>
> BTW that's one ugly gcc_assert. Candidate for gcc_checking_assert?
I agree. I would rather remove the entirety of haifa-sched.c: check_cfg(); scheduler is not the right place for checking consistency of CFG. Check_cfg() was useful for debugging scheduler patches, but now it is more of maintainance overhead.
Do I have a second vote for removal of check_cfg()?
--
Maxim Kuvyrkov
CodeSourcery / Mentor Graphics
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] check_cfg assert fix
2011-09-06 21:59 ` Maxim Kuvyrkov
@ 2011-09-08 20:00 ` Bernd Schmidt
2011-09-13 20:45 ` Maxim Kuvyrkov
0 siblings, 1 reply; 9+ messages in thread
From: Bernd Schmidt @ 2011-09-08 20:00 UTC (permalink / raw)
To: Maxim Kuvyrkov
Cc: Steven Bosscher, Tom de Vries, Vladimir Makarov, gcc-patches
On 09/06/11 23:56, Maxim Kuvyrkov wrote:
> I agree. I would rather remove the entirety of haifa-sched.c:
> check_cfg(); scheduler is not the right place for checking
> consistency of CFG. Check_cfg() was useful for debugging scheduler
> patches, but now it is more of maintainance overhead.
>
> Do I have a second vote for removal of check_cfg()?
I'd be OK with that. Saves me some time adapting it to some scheduler
patches I'll be submitting soon...
Bernd
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] check_cfg assert fix
2011-09-08 20:00 ` Bernd Schmidt
@ 2011-09-13 20:45 ` Maxim Kuvyrkov
2011-09-20 0:02 ` Maxim Kuvyrkov
0 siblings, 1 reply; 9+ messages in thread
From: Maxim Kuvyrkov @ 2011-09-13 20:45 UTC (permalink / raw)
To: Bernd Schmidt
Cc: Steven Bosscher, Tom de Vries, Vladimir Makarov, gcc-patches
[-- Attachment #1: Type: text/plain, Size: 866 bytes --]
On 9/09/2011, at 6:54 AM, Bernd Schmidt wrote:
> On 09/06/11 23:56, Maxim Kuvyrkov wrote:
>> I agree. I would rather remove the entirety of haifa-sched.c:
>> check_cfg(); scheduler is not the right place for checking
>> consistency of CFG. Check_cfg() was useful for debugging scheduler
>> patches, but now it is more of maintainance overhead.
>>
>> Do I have a second vote for removal of check_cfg()?
>
> I'd be OK with that. Saves me some time adapting it to some scheduler
> patches I'll be submitting soon...
OK then, attached is the trivial patch that removes haifa-sched.c:check_cfg(). Please let me know if you have strong feelings towards keeping check_cfg().
Tested on x86_64-linux-gnu. Absent any requests to the contrary, I will check in this patch in 2 days.
Thank you,
--
Maxim Kuvyrkov
CodeSourcery / Mentor Graphics
[-- Attachment #2: fsf-gcc-check-cfg.ChangeLog --]
[-- Type: application/octet-stream, Size: 193 bytes --]
2011-09-14 Maxim Kuvyrkov <maxim@codesourcery.com>
* haifa-sched.c (has_edge_p, prev_non_location_insn, check_cfg):
Remove maintenance overhead.
(haifa_sched_init, sched_finish): Update.
[-- Attachment #3: fsf-gcc-check-cfg.patch --]
[-- Type: application/octet-stream, Size: 4984 bytes --]
Index: gcc/haifa-sched.c
===================================================================
--- gcc/haifa-sched.c (revision 178820)
+++ gcc/haifa-sched.c (working copy)
@@ -717,10 +717,6 @@ static void sched_remove_insn (rtx);
static void clear_priorities (rtx, rtx_vec_t *);
static void calc_priorities (rtx_vec_t);
static void add_jump_dependencies (rtx, rtx);
-#ifdef ENABLE_CHECKING
-static int has_edge_p (VEC(edge,gc) *, int);
-static void check_cfg (rtx, rtx);
-#endif
#endif /* INSN_SCHEDULING */
\f
@@ -4303,13 +4299,6 @@ haifa_sched_init (void)
sched_create_empty_bb = sched_create_empty_bb_1;
haifa_recovery_bb_ever_added_p = false;
-#ifdef ENABLE_CHECKING
- /* This is used preferably for finding bugs in check_cfg () itself.
- We must call sched_bbs_init () before check_cfg () because check_cfg ()
- assumes that the last insn in the last bb has a non-null successor. */
- check_cfg (0, 0);
-#endif
-
nr_begin_data = nr_begin_control = nr_be_in_data = nr_be_in_control = 0;
before_recovery = 0;
after_recovery = 0;
@@ -4378,12 +4367,6 @@ sched_finish (void)
regstat_free_calls_crossed ();
dfa_finish ();
-
-#ifdef ENABLE_CHECKING
- /* After reload ia64 backend clobbers CFG, so can't check anything. */
- if (!reload_completed)
- check_cfg (0, 0);
-#endif
}
/* Free all delay_pair structures that were recorded. */
@@ -5970,131 +5953,6 @@ bb_note (basic_block bb)
return note;
}
-#ifdef ENABLE_CHECKING
-/* Helper function for check_cfg.
- Return nonzero, if edge vector pointed to by EL has edge with TYPE in
- its flags. */
-static int
-has_edge_p (VEC(edge,gc) *el, int type)
-{
- edge e;
- edge_iterator ei;
-
- FOR_EACH_EDGE (e, ei, el)
- if (e->flags & type)
- return 1;
- return 0;
-}
-
-/* Search back, starting at INSN, for an insn that is not a
- NOTE_INSN_VAR_LOCATION. Don't search beyond HEAD, and return it if
- no such insn can be found. */
-static inline rtx
-prev_non_location_insn (rtx insn, rtx head)
-{
- while (insn != head && NOTE_P (insn)
- && NOTE_KIND (insn) == NOTE_INSN_VAR_LOCATION)
- insn = PREV_INSN (insn);
-
- return insn;
-}
-
-/* Check few properties of CFG between HEAD and TAIL.
- If HEAD (TAIL) is NULL check from the beginning (till the end) of the
- instruction stream. */
-static void
-check_cfg (rtx head, rtx tail)
-{
- rtx next_tail;
- basic_block bb = 0;
- int not_first = 0, not_last;
-
- if (head == NULL)
- head = get_insns ();
- if (tail == NULL)
- tail = get_last_insn ();
- next_tail = NEXT_INSN (tail);
-
- do
- {
- not_last = head != tail;
-
- if (not_first)
- gcc_assert (NEXT_INSN (PREV_INSN (head)) == head);
- if (not_last)
- gcc_assert (PREV_INSN (NEXT_INSN (head)) == head);
-
- if (LABEL_P (head)
- || (NOTE_INSN_BASIC_BLOCK_P (head)
- && (!not_first
- || (not_first && !LABEL_P (PREV_INSN (head))))))
- {
- gcc_assert (bb == 0);
- bb = BLOCK_FOR_INSN (head);
- if (bb != 0)
- gcc_assert (BB_HEAD (bb) == head);
- else
- /* This is the case of jump table. See inside_basic_block_p (). */
- gcc_assert (LABEL_P (head) && !inside_basic_block_p (head));
- }
-
- if (bb == 0)
- {
- gcc_assert (!inside_basic_block_p (head));
- head = NEXT_INSN (head);
- }
- else
- {
- gcc_assert (inside_basic_block_p (head)
- || NOTE_P (head));
- gcc_assert (BLOCK_FOR_INSN (head) == bb);
-
- if (LABEL_P (head))
- {
- head = NEXT_INSN (head);
- gcc_assert (NOTE_INSN_BASIC_BLOCK_P (head));
- }
- else
- {
- if (control_flow_insn_p (head))
- {
- gcc_assert (prev_non_location_insn (BB_END (bb), head)
- == head);
-
- if (any_uncondjump_p (head))
- gcc_assert (EDGE_COUNT (bb->succs) == 1
- && BARRIER_P (NEXT_INSN (head)));
- else if (any_condjump_p (head))
- gcc_assert (/* Usual case. */
- (EDGE_COUNT (bb->succs) > 1
- && !BARRIER_P (NEXT_INSN (head)))
- /* Or jump to the next instruction. */
- || (EDGE_COUNT (bb->succs) == 1
- && (BB_HEAD (EDGE_I (bb->succs, 0)->dest)
- == JUMP_LABEL (head))));
- }
- if (BB_END (bb) == head)
- {
- if (EDGE_COUNT (bb->succs) > 1)
- gcc_assert (control_flow_insn_p (prev_non_location_insn
- (head, BB_HEAD (bb)))
- || has_edge_p (bb->succs, EDGE_COMPLEX));
- bb = 0;
- }
-
- head = NEXT_INSN (head);
- }
- }
-
- not_first = 1;
- }
- while (head != next_tail);
-
- gcc_assert (bb == 0);
-}
-
-#endif /* ENABLE_CHECKING */
-
/* Extend data structures for logical insn UID. */
void
sched_extend_luids (void)
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] check_cfg assert fix
2011-09-13 20:45 ` Maxim Kuvyrkov
@ 2011-09-20 0:02 ` Maxim Kuvyrkov
0 siblings, 0 replies; 9+ messages in thread
From: Maxim Kuvyrkov @ 2011-09-20 0:02 UTC (permalink / raw)
To: Maxim Kuvyrkov
Cc: Bernd Schmidt, Steven Bosscher, Tom de Vries, Vladimir Makarov,
gcc-patches
On 14/09/2011, at 7:40 AM, Maxim Kuvyrkov wrote:
>
> OK then, attached is the trivial patch that removes haifa-sched.c:check_cfg(). Please let me know if you have strong feelings towards keeping check_cfg().
>
> Tested on x86_64-linux-gnu. Absent any requests to the contrary, I will check in this patch in 2 days.
Checked in.
--
Maxim Kuvyrkov
CodeSourcery / Mentor Graphics
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2011-09-19 21:27 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-09-06 9:15 [PATCH] check_cfg assert fix Tom de Vries
2011-09-06 15:14 ` Steven Bosscher
2011-09-06 18:02 ` Maxim Kuvyrkov
2011-09-06 21:32 ` Steven Bosscher
2011-09-06 21:51 ` Steven Bosscher
2011-09-06 21:59 ` Maxim Kuvyrkov
2011-09-08 20:00 ` Bernd Schmidt
2011-09-13 20:45 ` Maxim Kuvyrkov
2011-09-20 0:02 ` Maxim Kuvyrkov
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).