public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
* Re: g++ and aliasing bools
@ 2002-01-25  8:28 Robert Dewar
  2002-01-25  8:49 ` Daniel Berlin
  0 siblings, 1 reply; 97+ messages in thread
From: Robert Dewar @ 2002-01-25  8:28 UTC (permalink / raw)
  To: dan, dewar; +Cc: gcc, kenner

<<The language semantics don't necessarily give you enough to be able to
place all types in the right sets. If it doesn't, you are back to
undecidability.
>>

Of course it is undecidable in the dynamic sense, but there we are not
interested in "the right sets", we are interested in sets that we can
prove are disjoint. It is quite "right" to put everything in the same
set, just not very efficient. We are NOT looking for an optimal solution,
here, that's obvious to anyone that that's unattainable.

What we are looking for is improved, verifiable, principles for splitting
the sets more finely.

Sometimes I really think they should not teach anyone about undecidability.
It always ends up with people looking at a perfectly simple problem like
this one (simple conceptually, not simple to get good solutions to), and
worrying about undecidability when it is a complete red herring.

If you propose that two items are not aliased, and it is undecidable whether
they are aliased, that's fine, it just means they go in the same alias set,
no big deal!

^ permalink raw reply	[flat|nested] 97+ messages in thread
* Re: g++ and aliasing bools
@ 2002-01-25 14:49 mike stump
  0 siblings, 0 replies; 97+ messages in thread
From: mike stump @ 2002-01-25 14:49 UTC (permalink / raw)
  To: dje, jbuck, mark; +Cc: gcc, pcarlini

> Date: Fri, 25 Jan 2002 11:44:21 -0800
> From: Mark Mitchell <mark@codesourcery.com>
> To: Joe Buck <jbuck@synopsys.COM>, David Edelsohn <dje@watson.ibm.com>
> cc: Paolo Carlini <pcarlini@unitus.it>, "gcc@gcc.gnu.org" <gcc@gcc.gnu.org>

> Your proof has at least one bug.  A type that has no baseclasses or
> virtuals can contain (as a data member) a type that does; such a
> type is at least as complex as the contained type.  (Similarly, an
> array of classes with virtual bases, etc.)  You need to recurse
> through the type structure.

Ah, but I believe the CLASSTYPE_NON_POD_P test may conservative
enough in this case, in particular, it does:

      if (! pod_type_p (type))
        /* DR 148 now allows pointers to members (which are POD themselves),
           to be allowed in POD structs.  */
	   CLASSTYPE_NON_POD_P (t) = 1;

in class.c, thus cutting off the recursive case of members.

The cases of virtuals and bases are handled by:

  CLASSTYPE_NON_POD_P (t)
    |= (CLASSTYPE_NON_AGGREGATE (t) || TYPE_HAS_DESTRUCTOR (t) 
    || TYPE_HAS_ASSIGN_REF (t));

and for CLASSTYPE_NON_AGGREGATE in the case of bases, by:

  /* An aggregate cannot have baseclasses.  */
  CLASSTYPE_NON_AGGREGATE (t) |= (n_baseclasses != 0);

and in the case of virtuals, by:

  CLASSTYPE_NON_AGGREGATE (t) |= (TYPE_HAS_CONSTRUCTOR (t)
				   || TYPE_POLYMORPHIC_P (t));

We can see the limiting of virtuals by:

/* Nonzero if this class has a virtual function table pointer.  */
#define TYPE_CONTAINS_VPTR_P(NODE)		\
  (TYPE_POLYMORPHIC_P (NODE)					\
   || TYPE_USES_VIRTUAL_BASECLASSES (NODE))

So, if we believe it, we know that either TYPE_POLYMORPHIC_P is true,
or TYPE_USES_VIRTUAL_BASECLASSES is true, if the type has a vtable
pointer.  TYPE_USES_VIRTUAL_BASECLASSES should only be true, if the
type has base classes.  We can see this as this is only set in:

       if (via_virtual || TYPE_USES_VIRTUAL_BASECLASSES (basetype))
           {
	         TYPE_USES_VIRTUAL_BASECLASSES (ref) = 1;

in decl.c, and we can only get there if we process a basetype.

> It may be that with that change, your sketch is correct -- but the
> fact that you missed this point just makes me more nervous.

I found it trivial to spot; it hit me the same second his words/code
first hit my eyes, though, yes, there may be other trivial things
about it that we have missed.

^ permalink raw reply	[flat|nested] 97+ messages in thread
* Re: g++ and aliasing bools
@ 2002-01-25 12:23 Robert Dewar
  2002-01-25 13:29 ` Joe Buck
  0 siblings, 1 reply; 97+ messages in thread
From: Robert Dewar @ 2002-01-25 12:23 UTC (permalink / raw)
  To: dje, jbuck; +Cc: gcc, mark, pcarlini

>>While this is not a formal proof, it's enough to convince me that Daniel's
change is safe.

It is "convincing" that is important, a formal proof is a means to an end
not an end in itself :-)

^ permalink raw reply	[flat|nested] 97+ messages in thread
* Re: g++ and aliasing bools
@ 2002-01-25 12:06 mike stump
  0 siblings, 0 replies; 97+ messages in thread
From: mike stump @ 2002-01-25 12:06 UTC (permalink / raw)
  To: dan, dewar; +Cc: gcc, kenner

> Date: Fri, 25 Jan 2002 11:34:48 -0500 (EST)
> From: Daniel Berlin <dan@dberlin.org>
> To: Robert Dewar <dewar@gnat.com>
> cc: gcc@gcc.gnu.org, <kenner@vlsi1.ultra.nyu.edu>

> > And we need to prove that they are indeed
> > conservative estimates. We need to be able to prove that elements of
> > separate sets are indeed never aliased. 
> Herein lies the point you've ignored.  Using only the C++ language 
> standard, we can't do that, and it's quite possible we may place 
> things into separate sets that do in fact alias, because of the 
> implementation specific details.

To get concrete here, and because I didn't like how Dan worded this,
an example of such an issue is the reuse of stack slots for values
which have different alias sets.  Reusing stack slots is beyond the
standard (at least for C and C++), but reuse is mandated by users
expectation (to some degree).

However, this implementation choice does force us to think about
complex alias issues:

  { int i; i = 1; ... }
  { double d; d = 24; ... }

If one reuses the space for i for d, then one has to be careful to not
allow the write of i to be moved past any playing with d.  They
conflict (alias), even though through the rules of ANSI C, you will
not find a statement that they conflict.

I think this is the canonical example of what he is talking about,
Daniel, can you confirm this?

Also, think about inlining two routines into a single function:

  void foo1() { int i; i =1; ... }
  void foo2() { double d; d = 24; ... }

  void bar() { foo1(); foo2(); }

If we reuse the stack space for one, for the other one...

In the end, we have to ensure that the implementation is aliasing
correct.  If it is, then the only additional rules we need, are those
based upon mandates by the language.  Or put another, given an
aliasing correct backend, we need only consider rules from the
language spec.

There can be existing code in the backend, that is aliasing correct
for the existing ways in which we use it, but for which it is not
aliasing correct for more advanced uses.  This means, if we change how
think about aliasing in the frontend, we can introduce aliasing bugs.
An example of this would be reusing stack slots, and having a frontend
always use set 0.  The backend would be alias correct for how the
frontend used it.  And it would seem natural to put in more smarts
about aliasing into the frontend, but this would cause the stack reuse
to then be aliasing incorrect.

^ permalink raw reply	[flat|nested] 97+ messages in thread
* Re: g++ and aliasing bools
@ 2002-01-25  9:13 Robert Dewar
  0 siblings, 0 replies; 97+ messages in thread
From: Robert Dewar @ 2002-01-25  9:13 UTC (permalink / raw)
  To: dan, dewar; +Cc: gcc, kenner

<<Which, if i wasn't busy with law school and the bugzilla stuff, is likely
what i'd do instead of writing up proofs, since these algorithms have
already been proven, and I think most of them can handle structure field
aliasing as a basic case anway, without any regards as to the actual type
of the structure field. Though obviously not as well as you can do once
you've got type based disambiguation to tell you for certain either way.
>>

Sounds like a perfectly reasonable approach to me!

^ permalink raw reply	[flat|nested] 97+ messages in thread
* Re: g++ and aliasing bools
@ 2002-01-25  8:55 Robert Dewar
  2002-01-25  9:21 ` Daniel Berlin
  0 siblings, 1 reply; 97+ messages in thread
From: Robert Dewar @ 2002-01-25  8:55 UTC (permalink / raw)
  To: dan, dewar; +Cc: gcc, kenner

<<However, the important point is that the language semantics don't allow
us to get it *right*, not just deciding. We may get it *wrong*, and think
we have it *right*.
>>

Then you have misread the language specs, or GCC is wrong, no other
possibilities exist!

^ permalink raw reply	[flat|nested] 97+ messages in thread
* Re: g++ and aliasing bools
@ 2002-01-25  8:35 Robert Dewar
  2002-01-25  8:54 ` Daniel Berlin
  0 siblings, 1 reply; 97+ messages in thread
From: Robert Dewar @ 2002-01-25  8:35 UTC (permalink / raw)
  To: dan, dewar; +Cc: gcc, kenner

<<I've been told i need to come up with a formal proof that given certain
relationships between C++ types, that may-alias is always determinable
statically correctly, or that we always correctly determine that we can't
determine it (IE never claim wrong that things may not alias).
I've said before, and i'll say again, that i'm not going to do that.
>>

THat's fine, but the fact that you are not going to do it does not mean
that it is not desirable or not necessary!

^ permalink raw reply	[flat|nested] 97+ messages in thread
* Re: g++ and aliasing bools
@ 2002-01-25  8:33 Richard Kenner
  0 siblings, 0 replies; 97+ messages in thread
From: Richard Kenner @ 2002-01-25  8:33 UTC (permalink / raw)
  To: dan; +Cc: gcc

    They don't avoid undecidability, or else we wouldn't have alias set 0.
    If we could determine what everything aliases, we wouldn't need a set 
    that aliases everything.

I didn't say they *avoid* undecidability, just avoid the undecidability
*problem* by separating static language semantics from all other aspects
of alising.

^ permalink raw reply	[flat|nested] 97+ messages in thread
* Re: g++ and aliasing bools
@ 2002-01-25  8:32 Robert Dewar
  2002-01-25  8:53 ` Daniel Berlin
  2002-01-25  9:39 ` Joe Buck
  0 siblings, 2 replies; 97+ messages in thread
From: Robert Dewar @ 2002-01-25  8:32 UTC (permalink / raw)
  To: dan, dewar; +Cc: gcc, kenner

<<> The problem before us is to narrow down the may-alias relationship as far
> as possible statically. There is no issue of undecidability here.
Of course there is, which is why you conservatively assume that everything
aliases everything else until you prove otherwise.
I've been told i need to come up with a formal proof that given certain
relationships between C++ types, that may-alias is always determinable
statically correctly, or that we always correctly determine that we can't
determine it (IE never claim wrong that things may not alias).
I've said before, and i'll say again, that i'm not going to do that.
>>

Nope, this is plain confused. It is undecidable in general whether two
objects will be aliased at run time (that's so trivial to prove that it
is a silly and useless observation).

But it is not a problem, it merely says that the alias sets we create are
simply conservative estimates. And we need to prove that they are indeed
conservative estimates. We need to be able to prove that elements of
separate sets are indeed never aliased. The fact that we can't prove that
elements of the *same* set *are* aliased is obvioulsy and trivially true,
but quite irrelevant.

<<But claiming that undecidability doesn't enter anyway is simply wrong.
I'm claiming that undecidability enters the picture in another way as
well. The C++ language specification does not give you enough information
in our case to determine that we can determine it or not. We can't always
say whether or not we can say whether two pieces of two types alias.
>>

You are still hung up on the idea that the problem we are trying to solve
is to determine whether two items are aliased. That's NOT the problem here.
THe problem is to determine sets of items that are provably not aliased. These
are quite different problems, and you are getting confused between them.

^ permalink raw reply	[flat|nested] 97+ messages in thread
* Re: g++ and aliasing bools
@ 2002-01-25  7:51 Robert Dewar
  2002-01-25  8:18 ` Daniel Berlin
  0 siblings, 1 reply; 97+ messages in thread
From: Robert Dewar @ 2002-01-25  7:51 UTC (permalink / raw)
  To: dan, kenner; +Cc: gcc

<<Undecidability is not just based on run-time behavior of the program.
It's also undecidable in the static case.
may-alias is undecidable statically, as is must-alias (Unless i'm
misremembering).
>>

This is confused.

May-alias is a predicate with many possible solutions. One not very useful
solution is that anything may alias anything else. We are not interested
in whether something actually IS aliased at run time. We are interested
just in the subset of cases that we can prove do NOT alias. 

The problem before us is to narrow down the may-alias relationship as far
as possible statically. There is no issue of undecidability here. If we
propose that may-alias (a,b) is false, then either we can prove it or
we cannot. If we cannot, then we cannot proceed on the basis that
may-alias (a,b) is false.

I mean by prove here: demonstrate in a manner that generates sufficient
confidence.

A very formal mathematical proof might or might not suffice (if a proof is
too complex, it does not generate confidence, since, like a complex program
it may have a hard to find bug). We can hardly talk about machine verified
proofs in this context.

A demonstration MIGHT come from a test suite if the test suite was
sufficiently comprehensive in some appropriate sense (after all, testing
is the main method for proof of reliability of safety critical software,
such as is used in nuclear power plants and avionics, but it is pretty
formal comprehensive testing, requiring e.g. full coverage testing, including
full MCDC testing).

I think what is being said here is that people do not feel that the existing
test suite, which was not designed at all to test reliability of aliasing
analysis, is anywhere near meeting the criterion of generating sufficient
confidence. 

^ permalink raw reply	[flat|nested] 97+ messages in thread
* Re: g++ and aliasing bools
@ 2002-01-25  7:38 Robert Dewar
  2002-01-25  8:11 ` Daniel Berlin
  0 siblings, 1 reply; 97+ messages in thread
From: Robert Dewar @ 2002-01-25  7:38 UTC (permalink / raw)
  To: dan, kenner; +Cc: gcc

I agree with Richard, there are no undecidability problems here, we are
talking about static proofs that two objects cannot be aliased. Either
we can prove that, or we assume that they are aliased. The issue of whether
they are *really* aliased at run time is interesting, but irrelevant.

^ permalink raw reply	[flat|nested] 97+ messages in thread
* Re: g++ and aliasing bools
@ 2002-01-25  7:30 Richard Kenner
  2002-01-25  7:33 ` Daniel Berlin
  0 siblings, 1 reply; 97+ messages in thread
From: Richard Kenner @ 2002-01-25  7:30 UTC (permalink / raw)
  To: dan; +Cc: gcc

    Errr, not really.
    They just happen to be our representation of aliases for types.

In some sense, but they avoid undecidability problems because you just
need to look at language semantics, not run-time behavior of a
particular program.

The issue with alias sets is whether you can prove from the language
specification that two objects *cannot* alias each other.  If and only
if you can, they are in different alias sets.

^ permalink raw reply	[flat|nested] 97+ messages in thread
* Re: g++ and aliasing bools
@ 2002-01-25  7:30 Richard Kenner
  0 siblings, 0 replies; 97+ messages in thread
From: Richard Kenner @ 2002-01-25  7:30 UTC (permalink / raw)
  To: dan; +Cc: gcc

    Errr, not really.
    They just happen to be our representation of aliases for types.

In some sense, but they avoid undecidability problems because you just
need to look at language semantics, not run-time behavior.

^ permalink raw reply	[flat|nested] 97+ messages in thread
* Re: g++ and aliasing bools
@ 2002-01-25  7:23 Richard Kenner
  2002-01-25  7:24 ` Daniel Berlin
  0 siblings, 1 reply; 97+ messages in thread
From: Richard Kenner @ 2002-01-25  7:23 UTC (permalink / raw)
  To: dan; +Cc: gcc

    Aliasing is very hard to reason about formally, because no matter what you 
    do, you start running into the undecidability issue.

Sure, but we're talking about alias *sets*, which is a different issue.

^ permalink raw reply	[flat|nested] 97+ messages in thread
* Re: g++ and aliasing bools
@ 2002-01-25  7:05 Richard Kenner
  2002-01-25  8:59 ` Paolo Carlini
  0 siblings, 1 reply; 97+ messages in thread
From: Richard Kenner @ 2002-01-25  7:05 UTC (permalink / raw)
  To: gdr; +Cc: gcc

    Optimizations have high priorities (cf. regular patches and
    discussions about such and such Intermdiate Language Tranformations).
    It may be that an optimization like alias analysis doesn't have the
    highest priority but that doesn't mean notbody isn't consider it --

Indeed, I strongly suspect that if it were possible to do better alias
set handling in C++, it would produce a far larger performance
improvement than any of the Intermediate Language Transformations
being discussed and would also likely be a lot less work.

^ permalink raw reply	[flat|nested] 97+ messages in thread
* Re: g++ and aliasing bools
@ 2002-01-24 16:09 Richard Kenner
  0 siblings, 0 replies; 97+ messages in thread
From: Richard Kenner @ 2002-01-24 16:09 UTC (permalink / raw)
  To: mark; +Cc: gcc

    Now, obviously, we never read or write zero-sized things -- but
    different alias sets also implies that &x != &y which is false.

I don't think so.

Consider the Ada record:

	type r is record
	    f1: integer;
	    f2: string (1..0);
	    f3: float;
	end record;

F2 and F3 will have different alias sets, but every instance of F2 and F3
will be at the same address.

^ permalink raw reply	[flat|nested] 97+ messages in thread
* Re: g++ and aliasing bools
@ 2002-01-24 15:30 Richard Kenner
  2002-01-25  2:16 ` Gabriel Dos Reis
  0 siblings, 1 reply; 97+ messages in thread
From: Richard Kenner @ 2002-01-24 15:30 UTC (permalink / raw)
  To: pcarlini; +Cc: gcc

    I would really like to see g++ doing better in C++-aliasing sensitive
    codes (i.e., Haney Speed) and I believe that any effort in this area
    should be supported and encouraged as much as possible.

I don't think anybody disagrees, but that doesn't mean that a proof of
correctness isn't needed.

As Mark points out, there are only a relatively small number of things in
GCC where we can prove things.  We ought to take advantage of those.

I am very much against the idea of defining a change to be "correct" if
it doesn't cause any regression test failures.  You have to be able to make
an argument that a change is correct independently and the regression tests
serve as a debugger of (among other things) that proof.

^ permalink raw reply	[flat|nested] 97+ messages in thread
* g++ and aliasing bools
@ 2002-01-23 17:56 Dan Nicolaescu
  2002-01-23 18:27 ` Daniel Berlin
  0 siblings, 1 reply; 97+ messages in thread
From: Dan Nicolaescu @ 2002-01-23 17:56 UTC (permalink / raw)
  To: gcc


It looks like g++ has some problems with aliasing bools, and gcc
doesn't.


The following program: 

#ifdef __cplusplus

struct bool_struct         
{
  bool f0;
  bool f1;
  bool f2; 
  bool f3;
};
#else
struct bool_struct         
{
  _Bool f0;
  _Bool f1;
  _Bool f2; 
  _Bool f3;
};

#endif


struct bool_struct *str; 


void 
g (void)
{
  str->f0 = 1;
  str->f1 = 0;
  str->f2 = 1;
  str->f3 = 0; 
}

compiles to: 

_Z1gv:
.LLFB1:
        !#PROLOGUE# 0
        !#PROLOGUE# 1
        sethi   %hi(str), %o2
        ld      [%o2+%lo(str)], %o1
        mov     1, %o3
        stb     %o3, [%o1]
        ld      [%o2+%lo(str)], %o0   <- this load is not needed
        stb     %g0, [%o0+1]
        ld      [%o2+%lo(str)], %o1   <- this load is not needed
        stb     %o3, [%o1+2]
        ld      [%o2+%lo(str)], %o0   <- this load is not needed
        retl
        stb     %g0, [%o0+3]

when compiled with g++ -O2  on sparc-sun-solaris2.8 using a GCC from
CVS as of this morning. 

but the code is much better when compiling with gcc -O2 

g:
        !#PROLOGUE# 0
        !#PROLOGUE# 1
        sethi   %hi(str), %o0
        ld      [%o0+%lo(str)], %o1
        mov     1, %o2
        stb     %o2, [%o1+2]
        stb     %g0, [%o1+3]
        stb     %o2, [%o1]
        retl
        stb     %g0, [%o1+1]


so it looks like g++ has some issues with aliasing bools. 

Any idea what is wrong? 

        

^ permalink raw reply	[flat|nested] 97+ messages in thread

end of thread, other threads:[~2002-01-29  2:14 UTC | newest]

Thread overview: 97+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-01-25  8:28 g++ and aliasing bools Robert Dewar
2002-01-25  8:49 ` Daniel Berlin
  -- strict thread matches above, loose matches on Subject: below --
2002-01-25 14:49 mike stump
2002-01-25 12:23 Robert Dewar
2002-01-25 13:29 ` Joe Buck
2002-01-25 12:06 mike stump
2002-01-25  9:13 Robert Dewar
2002-01-25  8:55 Robert Dewar
2002-01-25  9:21 ` Daniel Berlin
2002-01-25 10:00   ` Daniel Berlin
2002-01-25 10:54     ` Paolo Carlini
2002-01-25 11:37       ` Daniel Berlin
2002-01-25 11:45       ` David Edelsohn
2002-01-25 11:53         ` Joe Buck
2002-01-25 12:09           ` Mark Mitchell
2002-01-25 12:28             ` Paolo Carlini
2002-01-25 13:49               ` Mark Mitchell
2002-01-25 14:19                 ` Joe Buck
2002-01-25 14:21                   ` Mark Mitchell
2002-01-25 15:41                     ` Neil Booth
2002-01-25 16:04                       ` Joe Buck
2002-01-25 17:37                         ` Paolo Carlini
2002-01-25 18:10                         ` Daniel Berlin
2002-01-27  5:11                         ` Mark Mitchell
2002-01-27  5:34                           ` Daniel Berlin
2002-01-28 10:39                             ` Joe Buck
2002-01-28 10:51                               ` Joe Buck
2002-01-28 15:59                               ` Mark Mitchell
2002-01-28 17:11                                 ` Daniel Berlin
2002-01-28 17:28                                   ` Joe Buck
2002-01-28 18:14                                     ` Daniel Berlin
2002-01-28 17:18                                 ` Joe Buck
2002-01-28 18:05                                   ` Mark Mitchell
2002-01-28 18:50                                     ` Joe Buck
2002-01-28 19:33                                       ` Mark Mitchell
2002-01-28 17:40                                         ` Daniel Berlin
2002-01-28 21:55                                           ` Daniel Berlin
2002-01-28 22:02                                         ` Alexandre Oliva
2002-01-28 22:12                                           ` Mark Mitchell
2002-01-25 13:07             ` Joe Buck
2002-01-25 15:43               ` Daniel Berlin
2002-01-25 16:03                 ` Joe Buck
2002-01-25 15:13             ` Daniel Berlin
2002-01-25 12:10           ` Paolo Carlini
2002-01-25 13:16             ` Joe Buck
2002-01-25 15:23             ` Daniel Berlin
2002-01-25 12:05         ` Mark Mitchell
2002-01-25 22:14           ` Daniel Berlin
2002-01-26  3:46             ` Mark Mitchell
2002-01-25  8:35 Robert Dewar
2002-01-25  8:54 ` Daniel Berlin
2002-01-25  8:33 Richard Kenner
2002-01-25  8:32 Robert Dewar
2002-01-25  8:53 ` Daniel Berlin
2002-01-25  9:39 ` Joe Buck
2002-01-25  7:51 Robert Dewar
2002-01-25  8:18 ` Daniel Berlin
2002-01-25  8:20   ` Daniel Berlin
2002-01-25  7:38 Robert Dewar
2002-01-25  8:11 ` Daniel Berlin
2002-01-25 14:09   ` Gabriel Dos Reis
2002-01-25  7:30 Richard Kenner
2002-01-25  7:33 ` Daniel Berlin
2002-01-25 15:43   ` Daniel Berlin
2002-01-25  7:30 Richard Kenner
2002-01-25  7:23 Richard Kenner
2002-01-25  7:24 ` Daniel Berlin
2002-01-25  7:05 Richard Kenner
2002-01-25  8:59 ` Paolo Carlini
2002-01-24 16:09 Richard Kenner
2002-01-24 15:30 Richard Kenner
2002-01-25  2:16 ` Gabriel Dos Reis
2002-01-25  3:04   ` Paolo Carlini
2002-01-25  4:17     ` Gabriel Dos Reis
2002-01-25  4:35       ` Paolo Carlini
2002-01-25  6:34         ` Daniel Berlin
2002-01-25  7:17   ` Daniel Berlin
2002-01-25 13:57     ` Gabriel Dos Reis
2002-01-25 14:47       ` Tim Hollebeek
2002-01-23 17:56 Dan Nicolaescu
2002-01-23 18:27 ` Daniel Berlin
2002-01-23 18:48   ` Dan Nicolaescu
2002-01-23 19:16     ` Daniel Berlin
2002-01-24 14:15     ` Mark Mitchell
2002-01-24 14:16       ` Daniel Berlin
2002-01-24 14:27         ` Mark Mitchell
2002-01-24 14:35           ` Daniel Berlin
2002-01-24 15:06             ` Mark Mitchell
2002-01-24 15:08             ` Paolo Carlini
2002-01-24 15:18       ` Dan Nicolaescu
2002-01-24 15:36         ` Mark Mitchell
2002-01-25  2:25           ` Daniel Berlin
2002-01-25 15:48           ` Dan Nicolaescu
2002-01-25 20:22             ` Joe Buck
2002-01-25 23:59               ` Daniel Berlin
2002-01-27 17:04               ` Dan Nicolaescu
2002-01-27 17:59                 ` Paolo Carlini

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).