public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
* Re: type based aliasing again
@ 1999-09-11 18:21 Phil Edwards
  1999-09-30 18:02 ` Phil Edwards
  0 siblings, 1 reply; 404+ messages in thread
From: Phil Edwards @ 1999-09-11 18:21 UTC (permalink / raw)
  To: gcc

> If we use the term "illegal" to describe user code, it carries the
> implication that the users who wrote it are evildoers and ought to be
> punished.

I think we're treating this too seriously for our own good.

> That's why there is a GNU convention of describing code which
> doesn't follow the language rules as "invalid", not "illegal".

So it's not evil (illegal), it's just handicapped or elderly (invalid)?

Why not just follow the example of at least one ISO language standard and
call it "non-conforming"?  Since we're all supposed to be nonconformist
GNU rebels anyhow, this will be even less harsh/judgemental on the user,
and could even be construed as positive.  :-)


-- 
philip.edwards@{sn.wpafb,afrl}.af.mil
Targeting & Attack Radar                                  UFOs are real.
Air Force Research Labs                                   The Air Force
Senior Systems Administrator                              doesn't exist.

^ permalink raw reply	[flat|nested] 404+ messages in thread
[parent not found: <19990921182843.25292.qmail@deer>]
* Re: type based aliasing again
@ 1999-09-21  8:48 Harvey J. Stein
  1999-09-22 12:15 ` Richard Stallman
  1999-09-30 18:02 ` Harvey J. Stein
  0 siblings, 2 replies; 404+ messages in thread
From: Harvey J. Stein @ 1999-09-21  8:48 UTC (permalink / raw)
  To: gcc; +Cc: hjstein, rms

Here's another example of code which breaks without
-fno-strict-aliasing.  And again, it took a substantial amount of
"this doesn't work for me", vs "it's fine for me" on the mailing list
before someone came up the answer.

------- Start of forwarded message -------
Date: Sat, 18 Sep 1999 21:04:33 -0700 (PDT)
From: "William A. Barath" <wi534@victoria.tc.ca>
To: xmame@locutus.csres.utexas.edu
Subject: Re: Blockout?!
Message-ID: <Pine.GSO.3.95.iB1.0.990918210209.21502B-100000@vtn1>
Reply-To: xmame@locutus.csres.utexas.edu

On Sat, 18 Sep 1999, Alexander Oelzant wrote:

|OPTFLAGS    = -O6 -mk6 -mcpu=k6 -march=k6 -Wall -Wno-unused -funroll-loops
|\
|   -fstrength-reduce -fomit-frame-pointer -ffast-math -malign-functions=4 \
|   -malign-jumps=4 -malign-loops=4 -malign-double \
|   -mwide-multiply -fforce-mem -fforce-addr -funroll-loops \
|   -fcse-follow-jumps -fcse-skip-blocks \
|   -frerun-cse-after-loop -frerun-loop-opt -fschedule-insns2 \
|   -fgcse -fmove-all-movables -freduce-all-givs -fstrict-aliasing

you must change that last item to -fno-strict-aliasing otherwise gcc will
break the z80 core, which will make a lot of games unplayable.

  -Wil

 William Barath, AKA WseM  http://www.victoria.tc.ca/~wi534

TP7 Programmers: Check out my FREE preemptive Threads Unit!
DJGPP Programmers: Check out my FREE realtime Fractal Zoomer!
Emulation Coderz: Check out my LAME-O Apple ][+ Emulator!  ;)

---------------------------------------------------------------------------
Send administrative requests to xmame-request@acm.csres.utexas.edu

------- End of forwarded message -------

-- 
Harvey Stein
Bloomberg LP
hjstein@bfr.co.il

^ permalink raw reply	[flat|nested] 404+ messages in thread
* Re: type based aliasing again
@ 1999-09-18  8:33 N8TM
  1999-09-30 18:02 ` N8TM
  0 siblings, 1 reply; 404+ messages in thread
From: N8TM @ 1999-09-18  8:33 UTC (permalink / raw)
  To: moshier; +Cc: gcc

In a message dated 9/18/99 9:30:18 AM EST, moshier@mediaone.net writes:

> Surely glibc should not give different math.h answers depending on
>  compiler optimization!  
They try to deal with this by making the library versions of math functions 
the same as the in-lined ones, except possibly for limiting cases.  For 
example, the paranoia test for the accuracy of pow(x,y) where x is near 1. 
and y is large shows exactly the same problems either way.  Not that it's 
clearly beneficial for pow() to in-line.

Tim

^ permalink raw reply	[flat|nested] 404+ messages in thread
* Re: type based aliasing again
@ 1999-09-18  7:30 Stephen L Moshier
  1999-09-30 18:02 ` Stephen L Moshier
  0 siblings, 1 reply; 404+ messages in thread
From: Stephen L Moshier @ 1999-09-18  7:30 UTC (permalink / raw)
  To: N8TM; +Cc: gcc

>   I suppose we have no say on the 
> peculiar in-lining scheme with glibc; apparently on at -O and -O2,
> unless specifically turned off; always off at -Os even when it
> would save space.

This sounds like glibc is violating the rule that optimization is
not supposed to change the value of expressions.  Why do we even
permit glibc to know what -O switch was used?

Surely glibc should not give different math.h answers depending on
compiler optimization!  That kind of behavior should be under the
user's control.  It has long been customary to offer several different
math libraries designed for various different purposes.  Maybe glibc
should follow that custom.

^ permalink raw reply	[flat|nested] 404+ messages in thread
* Re: type based aliasing again
@ 1999-09-18  3:25 Artem Hodyush
  1999-09-18 11:29 ` Russ Allbery
                   ` (3 more replies)
  0 siblings, 4 replies; 404+ messages in thread
From: Artem Hodyush @ 1999-09-18  3:25 UTC (permalink / raw)
  To: gcc; +Cc: rms

Richard Stallman wrote: 

>The only thing that is hard is when people argue, as you are doing,
>against the very idea of accommodation. So please don't do that.

There may be different degrees of accomodation. Issuing useful warning is 
one thing, altering the behavior of compiler when it sees suspicious code 
is another. 

The very idea that compiler should make an educated guess and decide 
which options to apply to my code gives me shudder. The software should 
do what I say, no more and no less. We have seen many attempts by 
various vendors to make their software 'smart', in the sense that it should 
do things that it supposes user wants it to do, without asking, because 
vendors believe that it will help them sell software to computer-impaired people. 
In my experience, the smarter software is, the closer it is to becoming unusable. 
I guess that people are worried because they see you proposing that gcc 
will also go that way. 

>Be that as it may, that question is a side issue. You are talking
>about programmers running GCC on code that they are developing. Those
>are just some of the users of GCC. Only some of the people running
>GCC are running it on code they understand, or could attempt to debug.
>
>We must not make GCC decisions with only those people in mind.

Speaking about side issues.

If people running gcc don't bother to read release notes for the version 
of gcc they run, and don't know how to put a gcc option into the 
makefile, I'd say that they are not qualified to do their job. 
You can't be kind to everyone. Is it harsh not to allow people 
to drive a car, if they can't pass driver test? Yes I'm exaggerating, 
but I'm extremely frustrated by the poor quality of software that floods 
the market. 

And if you see gcc as install tool, I think that it's not possible to 
have both an install tool and a compiler in one bottle, er, package. 

> But, I believe the analysis for GCC *itself* is *much* simpler:
> conform to the pertinent ANSI/ISO standards, etc.
>
>GCC does conform to these standards, when used with the proper set of
>options. 

GCC does not yet conform neither to ANSI C 9X, nor to the ANSI C++ 98. 

> However, technical standards are not a moral authority. The
>GNU Project policy is that we pay close attention to official
>standards, but we don't slavishly obey them.

I guess this is not the case with C and C++ standards, if you want 
serious developers to continue to use gcc.



^ permalink raw reply	[flat|nested] 404+ messages in thread
* Re: type based aliasing again
@ 1999-09-18  2:51 Ross Morgan-Linial
       [not found] ` <19990918151905.F1650@cerebro.laendle>
  1999-09-30 18:02 ` Ross Morgan-Linial
  0 siblings, 2 replies; 404+ messages in thread
From: Ross Morgan-Linial @ 1999-09-18  2:51 UTC (permalink / raw)
  To: craig; +Cc: gcc

> Not in this respect, apparently.  Nobody has, to my knowledge,
> proposed that -traditional imply -fno-alias-analysis, which suggests
> K&R I indeed, as has been reported, left this behavior undefined.

Well, a quick flip through my copy reveals what look to me like 
contradictory statements. In chapter 5 (pointers and arrays) it says

    You should also note the implication of the declaration that a 
    pointer is constrained to point to a particular type of object.

Now, that appears to say that playing games with pointers is right 
out. However, in appendix A (C reference manual), section 14.4, it 
says

    A pointer to one type may be converted to a pointer to another 
    type. The resulting pointer may cause addressing exceptions upon 
    use if the subject pointer does not refer to an object suitably 
    aligned in storage. It is guaranteed that a pointer to an object 
    of a given size may be converted to a pointer to an object of a 
    smaller size and back again without change.

    For example, a storage-allocation routine might accept a size (in 
    bytes) of an object to allocate, and return a char pointer; it 
    might by used in this way.

        extern char *alloc();
        double *dp;
        dp = (double *) alloc(sizeof(double));
        *dp = 22.0 / 7.0;

    alloc must ensure (in a machine-dependent way) that its return 
    value is suitable for conversion to a pointer to double; then the 
    _use_ of the function is portable.

That seems to imply that it's okay to use a pointer pointing to an 
object of different type as long as it's suitably aligned. Of course, 
I'm hardly an expert on K&R C.

^ permalink raw reply	[flat|nested] 404+ messages in thread
* Re: type based aliasing again
@ 1999-09-17  9:02 Harvey J. Stein
  1999-09-30 18:02 ` Harvey J. Stein
  0 siblings, 1 reply; 404+ messages in thread
From: Harvey J. Stein @ 1999-09-17  9:02 UTC (permalink / raw)
  To: gcc; +Cc: hjstein

I'd like to chip in my 2 cents on this thread by stating my support
for Richard Stallman's proposal wrt gcc's alias analysis &
optimization.

There's a lot of legacy code & even more code written by users not
intimately versed in the latest ANSI standards and its ramifications.
Not to mention the massive amount of third party code that needs to be
compiled & supported by people.  Forcibly breaking it with the next
gcc release will render gcc unusable for many people.  I've seen
recent versions of gcc break code we have here that we can't fix
directly for a number of reasons.  One example is code generated by
p2c where the pascal is still actively mantained, and no one has both
the
time and knowledge here to modify p2c to generate code which conforms
to strict ANSI semantics.

gcc has never intentially miscompiled code because it's not portable.
It's also never forced people to write portable code.  In fact, there
are plenty of enhancements that GCC supports which don't conform to
any standards.  It seems byzantine to break code not conforming to one
particular paragraph of the ANSI standard while allowing all sorts of
other deviations from the standard.  Especially when this is done
solely for the purpose of better optimization.  Even more so when it
need not be done.

-- 
Harvey Stein
Bloomberg LP
hjstein@bfr.co.il

^ permalink raw reply	[flat|nested] 404+ messages in thread
[parent not found: <199909161750.LAA12073@basho.fc.hp.com>]
* Re: type based aliasing again
@ 1999-09-16  6:12 Artem Hodyush
  1999-09-16 23:15 ` Richard Stallman
  1999-09-30 18:02 ` Artem Hodyush
  0 siblings, 2 replies; 404+ messages in thread
From: Artem Hodyush @ 1999-09-16  6:12 UTC (permalink / raw)
  To: gcc; +Cc: rms

 Richard Stallman <rms@gnu.org> wrote:

>>    Like it or not, people will come to depend on this feature, 
>
>My proposal is not a feature.  When you call it a "feature", you're
>not considering the proposal I made.
>
>The argument about "people depending on this" is flawed
>in the idea that such dependency would be due to my proposal.
>It has already happened, and it is still happening.
>
>People already depend on the invalid code we are talking about.  It
>exists in various programs today.


Sorry but I couldn't refrain from joining the discussion.

You are substituting arguments here. People already depend on 
their invalid code being correctly compiled by gcc 2.7.2. Gcc 2.95 
breaks the code, there is nothing to depend on. With your proposal, 
people will come to depend on future versions of gcc fixing their code. 
(and this will encourage them to write invalid code again and again). 

>People may also be writing more such code even today.  With GCC 2.95,
>such code will always work as expected if -O0 is used, and that may
>even be true if -O1 is used.
>
>In GCC 2.95, when -fstrict-aliasing is used, some of these cases work
>as expected, and some will not.  With my proposal, that would still be
>the overall situation.  The only difference would be that a larger
>fraction of them would work as expected.


As was already mentioned here, with slight changes in gcc internals, 
invalid code will break, sooner or later, but inevitably. And all effort 
spent to implement your proposal will be in vain.

>This difference would reduce the pain caused today, but as regards the
>potential problems you are worried about, it would not change things
>much.


This is like amputating dog's tail piece by piece, because it's too painful
to chop it off at once.


As someone have said on this list, there is about four people on earth who
know gcc internals well enough. And I, as gcc user, would prefer this people 
to spend their time fixing bugs in gcc rather than invalid user code.


^ permalink raw reply	[flat|nested] 404+ messages in thread
[parent not found: <Pine.SO4.4.05.9909160153420.23533-100000@tamarack.cs.mtu.edu>]
* Re: type based aliasing again
@ 1999-09-15 21:47 Florin Mateoc
  1999-09-16  2:18 ` craig
  1999-09-30 18:02 ` Florin Mateoc
  0 siblings, 2 replies; 404+ messages in thread
From: Florin Mateoc @ 1999-09-15 21:47 UTC (permalink / raw)
  To: gcc

Allow me to share my unsolicited 2 cents with you:

THE CLIENT IS ALWAYS RIGHT.

I know that there are good programmers that don't live
by this principle (the software is their baby and they
know best what's good for it), but if you make the
effort to listen and accommodate EVERY (distinct)
complaint or request you end up writing better
software. It is called feedback (different from the
"low-level" (or insider) one that you can get from
your peers) and, besides education, it is the single
most important outside help you can get to improve
your work.
Now it may be that the client doesn't know exactly how
to tell you WHAT she wants, maybe she tries to tell
you HOW to do it instead, or she doesn't know how to
say it politely, but this doesn't change the fact that
you are receiving valuable feedback and you should use
it.

"I find *extremely* disturbing, sufficient (especially
in conjunction with the *huge* waste of time this
discussion has been to date, and will continue to be,
in various forms, until the end of time)" that the gcc
maintainers - as compiler writers - and not the
compiler users, know best how their compiler should
behave externally. This sounds to me like Sun's
position with Java: they designed it, they know best
how it should be used. Well, if they don't happen to
take the right decisions most of the time, less and
less people will follow. I, for one, have stopped
using it, after initially thinking that it looked
promising. I am trying to use the computer as a tool
to solve real problems, not to engage in rituals
observing holy standards (or procedures, or
methodologies, or patterns, or other software
engineering silver bullets).
As for the long-term perspective, "in the long run we
are all dead"

Best regards,

Florin

__________________________________________________
Do You Yahoo!?
Bid and sell for free at http://auctions.yahoo.com

^ permalink raw reply	[flat|nested] 404+ messages in thread
* re: type based aliasing again
@ 1999-09-15 11:42 Michael J. Bedy
  1999-09-15 14:32 ` craig
  1999-09-30 18:02 ` Michael J. Bedy
  0 siblings, 2 replies; 404+ messages in thread
From: Michael J. Bedy @ 1999-09-15 11:42 UTC (permalink / raw)
  To: gcc; +Cc: rms

*delurk*

  I am a grad student in computer science, who is doing thesis work in the
area of compilers. My main association with gcc (thus far), is however as
a user.

  I have been reading the archives of gcc (and egcs before that) for
probably over a year, and have seen this issue come up many times. As a
user, who also knows a bit about how this whole mess works (not in gcc
specifically, but in compilers in general), I would like to interject my
opinion.

  If it is feasable in gcc to implement warning that the code is invalid
according to ISO rules, and that at some point in the future the ability
of gcc to correctly compile it WILL go away, then I think this is the
correct path. Then the users really can't say that they wern't warned. It
also gives them time to fix the code. If they choose not to fix it, even
given the warnings, then it is indeed "their problem" when it no longer
becomes feasable to support this waring.

  I often find myself at odds with RMS, but in this I think he is right:
We need to be more concerned with what the users needs, especially as far
as something as crucial as gcc.

  One of the great advantages of the Open Source, or Free Software
(whichever you prefer) development model is the greatly reduced lack of
influence the pointy haired boss has on the project. Like anything else,
there is at least a bad side to this; comercial pressures to provide
backward compatability are not there. Unfortunatly, it seems that one of
the worst traits of the community is a rather cavilier attitude towards
backward compatability. 

  While I think the gcc community does a much better job then most at
preserving this backwards compatability, this particular issue seems to be
a hot spot for some reason. I can completely understand the feeling that
the users should just "fix their damn code," but it is not always feasable
to do so immediatly. 

  In addition, if I hadn't been reading this list for so long, I wouldn't
even know about this issue. Perhaps everybody working on gcc is to close
to the problem and doesn't realize that people outside the project don't
know/don't care about this, they just want their code to work. By issueing
a warning whenever possible, the user get real, immediate information that
something is wrong with his/her code.

  In short, and in general, I think it is good policy to, if possible,
include a warning whenever the behaviour of the compiler changes. I think
the worst solution possible is the current silent corruption that is
currently default in gcc.

  To conclude: I want to make sure I thank everybody on the gcc team for
their effort. As a compiler guy myself, I know how much work supporting a
compiler is. This message is not a flame, just an honest opinion from a
(fairly) long time user.

  Include my address in the cc: if you respond plese

   Thanks,
      - Mike
 
(p.s., sorry about the spelling....)

^ permalink raw reply	[flat|nested] 404+ messages in thread
* Re: type based aliasing again
@ 1999-09-15  8:27 Kaveh R. Ghazi
  1999-09-15  8:57 ` Nathan Sidwell
  1999-09-30 18:02 ` Kaveh R. Ghazi
  0 siblings, 2 replies; 404+ messages in thread
From: Kaveh R. Ghazi @ 1999-09-15  8:27 UTC (permalink / raw)
  To: dje; +Cc: N8TM

 > From: David Edelsohn <dje@watson.ibm.com>
 >  
 >         When the compiler and architecture allow this construct to
 > produce reasonable results and other compilers produce reasonable
 > results and GCC still can produce reasonable results more often when
 > an optional optmization is not applied, then why not allow tihs
 > construct to work unless the user specifically request more aggressive
 > optimization?
 > David

	I have concerns about removing strict aliasing from -O2.

Most users probably use -O2 simply because that's what most people
have learned do, e.g. because autoconf defaults to when -O2 you build
a package.  So I think that strict aliasing will get much less usage
even when it is safe to use it.

Thus two things happen:

1.  The code GCC generates by default performs more poorly.

This has already been discussed.  It may or may not be a big deal
today.  But future opts may hinge on aliasing.

2.  Strict alising gets less real world testing.

IMHO the second concern is a big one.  If an optimization gets less
testing, it is usually more buggy, meaning even less people will use
it.  It is a vicious circle.

E.g. I think the large number of problems we've seen with inlining and
loop unrolling are due in part to the fact that they are not in -O2.
There are reasonable arguments as to why they are not there, (like
they may not make the code faster or may bloat your code) but these
particular arguments don't apply to strict aliasing.

	I haven't decided yet whether the testing issue is enough to
reject doing this, but I thought it should be part of the discussion.

		--Kaveh
--
Kaveh R. Ghazi			Engagement Manager / Project Services
ghazi@caip.rutgers.edu		Qwest Internet Solutions

^ permalink raw reply	[flat|nested] 404+ messages in thread
* Re: type based aliasing again
@ 1999-09-15  7:02 David Ronis
  1999-09-30 18:02 ` David Ronis
  0 siblings, 1 reply; 404+ messages in thread
From: David Ronis @ 1999-09-15  7:02 UTC (permalink / raw)
  To: gcc

Time to add my 2 cents.  

First, several of the posts have questioned how "real" the need is for
some modification/flag/warning associated with -fstrict-aliasing.  In
the last few weeks I've been noticed:

1.  Instabilities in the linux kernel (2.2.xx with xx>10) triggered by
    compiling without -fno-strict-aliasing

2.  Problems with perl-5.00561; specifically, a runaway memory
    condition in the pattern recognition test that crashed my machine.
    To be sure, the crash was my fault for not having limits set on
    memory use.  With -fno-strict-aliasing the problem didn't occur.

3.  Possible problems with the gtk+ libraries.  [I'm less sure here
    since the app I'm trying to build doesn't work yet with or without
    the -fno-strict-aliasing flag].

4.  Some problem with the your own java library (this was mentioned on
    the list a little while ago).

Since these are building-block programs on many systems, I'd call the
problem serious.

Personally, I'd prefer to have the more aggressive optimization on by
default, especially since it is what the legalease in the standard
wants.  On the other hand, given the history, to not have a warning
flag, something like -Waliasing , no matter how imperfect, seems like
cruel and unusual punishment.  Many of us end-users often grab some
poorly maintained legacy code and simply configure/make/make install.
Is the expectation really to trace through thousands of lines of code,
if it doesn't work, in the hope that it might be an aliasing problem?
Even a hint of where suspicious aliases occur would be invaluable in
this event and even if the warning picks up lots of false-alarms.

David

^ permalink raw reply	[flat|nested] 404+ messages in thread
* Re: type based aliasing again
@ 1999-09-14  6:46 Marcel Cox
  1999-09-14  6:50 ` Bernd Schmidt
  1999-09-30 18:02 ` Marcel Cox
  0 siblings, 2 replies; 404+ messages in thread
From: Marcel Cox @ 1999-09-14  6:46 UTC (permalink / raw)
  To: gcc; +Cc: jbuck

Bernd Schmidt <bernds@cygnus.co.uk> wrote:

> If, by "cast to union", you mean code of the form

>    union foo { double a; int b[2]; };
>    double x;
>    x = 2.0;
>    ((union foo *)&x)->b[1] = 0;

> then this is not even going to work with gcc

I used the following test program with the following version of GCC:
gcc version 2.96 19990912 (experimental) i486-pc-linux-gnu

It showed that all union constructs were alias safe when compared to the
plain typecast version

#include <stdio.h>

double transform(double x)
{
  /* calculates (x+1)/2 */
  /* the division by 2 is done in a dirty way */
  /* this codes works on ix86 processors, but probably not on many other
processors */
  x+=1.0;
  ((int *)&x)[1]-=0x100000;
  return x;
}

union foo
   {
      double a;
      int b[2];
   };

double transform1(double x)
{
  /* calculates (x+1)/2 */
  /* the division by 2 is done in a dirty way */
  /* this codes works on ix86 processors, but probably not on many other
processors */
  x+=1.0;
  ((union foo *)&x)->b[1]-=0x100000;
  return x;
}

double transform2(double x)
{
  /* calculates (x+1)/2 */
  /* the division by 2 is done in a dirty way */
  /* this codes works on ix86 processors, but probably not on many other
processors */
  ((union foo *)&x)->a+=1.0;
  ((union foo *)&x)->b[1]-=0x100000;
  return x;
}

double transform3(double x)
{
  /* calculates (x+1)/2 */
  /* the division by 2 is done in a dirty way */
  /* this codes works on ix86 processors, but probably not on many other
processors */
  x+=1.0;
  ((union foo *)&x)->b[1]-=0x100000;
  return ((union foo *)&x)->a;
}

double transform4(double x)
{
  /* calculates (x+1)/2 */
  /* the division by 2 is done in a dirty way */
  /* this codes works on ix86 processors, but probably not on many other
processors */
  ((union foo *)&x)->a+=1.0;
  ((union foo *)&x)->b[1]-=0x100000;
  return ((union foo *)&x)->a;
}

int main()
{
  double x;
  x=2.0;
  printf("0: %f %f\n",x,transform(x));
  printf("1: %f %f\n",x,transform1(x));
  printf("2: %f %f\n",x,transform2(x));
  printf("3: %f %f\n",x,transform3(x));
  printf("4: %f %f\n",x,transform4(x));
  return 0;
}


^ permalink raw reply	[flat|nested] 404+ messages in thread
* Re: type based aliasing again
@ 1999-09-13 21:45 N8TM
  1999-09-14  4:01 ` Marc Espie
  1999-09-30 18:02 ` N8TM
  0 siblings, 2 replies; 404+ messages in thread
From: N8TM @ 1999-09-13 21:45 UTC (permalink / raw)
  To: craig; +Cc: gcc

> It's certainly within a reasonable "umbrella" approach of having
>  increasing optimization levels be about increasing reliance on
>  the code strictly conforming to the pertinent standard, even its
>  "tricky bits".
>  
>  The biggest problem I see with it right now is that we haven't
>  exactly taken that "umbrella" approach in the past in a consistent
>  way.

And it may not be the most useful scheme either.  With gcc-2.96 we are back 
to -Os being faster running most of the time than -O2 or -O3 on x86, with 
-march=pentiumpro (if applicable) and now -ffast-math (when it doesn't break 
the application) needed for best results.  We would want to continue the 
ability to get strict-aliasing at -Os.   I suppose we have no say on the 
peculiar in-lining scheme with glibc; apparently on at -O and -O2, unless 
specifically turned off; always off at -Os even when it would save space.

Commercial compilers have completely broken the old scheme of things also.  
They generally accept -O but it doesn't mean much.  Maximum optimization may 
be the default (Lahey) or normal high optimization may take quite a string of 
things like -Ofast 
-OPT:fold_reassociate=OFF:IEEE_comparisons=ON:unroll_times_max=2 -TENV:X=1 
(MipsPro).  So maybe the most confusing thing about gnu is the way the 
options have changed over time without much explanation (except for 
strict-aliasing).

Tim

^ permalink raw reply	[flat|nested] 404+ messages in thread
* Re: type based aliasing again
@ 1999-09-13 16:34 Mike Stump
  1999-09-14 22:20 ` Richard Stallman
  1999-09-30 18:02 ` Mike Stump
  0 siblings, 2 replies; 404+ messages in thread
From: Mike Stump @ 1999-09-13 16:34 UTC (permalink / raw)
  To: mark; +Cc: craig

> Date: Sat, 11 Sep 1999 03:24:30 -0400
> From: Richard Stallman <rms@gnu.org>

> I agree, too.  When we add a new feature, we should document it
> clearly, and undertake to support it.

> I've made a proposal for a change which is not an extension, not a
> feature--but will give users more of what they expect.  If you're
> thinking of it as a kind of feature, you're not responding to the
> proposal that I made.

Ah, but you're not thinking of this like a user.  As a user, it
_would_ be a feature, and they would expect it.  We already know this
today.  Review the Linux thread as to why a user would consider this a
feature.  All the long time readers of this list know exactly what I
am talking about, they have seen it first hand, and the problems it
creates.  We have been burned (if you will) by this, and we are trying
to avoid being burned by it again.

^ permalink raw reply	[flat|nested] 404+ messages in thread
* Re: type based aliasing again
@ 1999-09-13 10:55 R. Kelley Cook
  1999-09-13 13:22 ` craig
  1999-09-30 18:02 ` R. Kelley Cook
  0 siblings, 2 replies; 404+ messages in thread
From: R. Kelley Cook @ 1999-09-13 10:55 UTC (permalink / raw)
  To: egcs

On 13 Sep 1999 13:05:39 +0200, Richard Earnshaw wrote:

>
>mark@codesourcery.com said:
>> I think that making -fno-strict-aliasing the default is sensible
>> proposal, and worth debating.
>
>
>It is the default at -O1 or less.  I would be inclined to argue that this 
>should be adequate for "legacy" code and that the higher levels of 
>optimization should be allowed to fully exploit the provisions of the C 
>standard (this is not to suggest that a warning shouldn't be generated if 
>possible).
>
>We are somewhat constrained by our relatively limited number of 
>optimization levels (0, 1, 2, 3, s); I guess extending the range is hard, 
>mainly because of a user-education issue.  But it would be useful if we 
>could have a level above which we say that we assume that code fully 
>conforms to the C (or other relevant) standard.
>

What would be wrong with -fno-strict-aliasing the default for -O(1,2,3,s) and
have a new -O4 enable it (ie "-O4" == "-O3 -fstrict-aliasing").  This would
guarantee all current software and their make files to still generate correct
code, yet still make it extremely easy to enable the optimizations for fully
ISO/ANSI compliant software.

Its seems like far too easy a solution to me.

 -- Kelley Cook

^ permalink raw reply	[flat|nested] 404+ messages in thread
* Re: type based aliasing again
@ 1999-09-12 11:20 Josh Stern
  1999-09-30 18:02 ` Josh Stern
  0 siblings, 1 reply; 404+ messages in thread
From: Josh Stern @ 1999-09-12 11:20 UTC (permalink / raw)
  To: gcc

This is an interesting discussion.  I'd like
to throw out a couple of possible approaches which were
not explicitly considered in the discussion.

A1) The current tradition in gcc is to make -Wall a
combination of other, individually specifiable,
warning options.  One possible approach to the current
issue involves either changing this tradition, or 
making a new catch-all option -Wsuper,
which can warn about additional constructs 
"which pertain to usage that we recommend avoiding
and that we believe it is easy to avoid", with the
idea that the type aliasing violations which 
can easily be detected using current technology would be
warned about.  The idea naturally would be to
also warn about other likely problems which don't
get their own individual warning option categoy, 
for whatever reason.
  
Why consider this?  A number of developers have
basically expressed the position that all of the
current proposals amount to either i. penalizing
the (code performance of the) many for the sake 
of the few (ugly bit-twiddlings that break), or
ii. providing a set of warnings which is not
a natural category unto itself and which could lead
to false assumptions about what is and is not detected
by the compiler.  This proposal would allow the compiler
to add warnings about the most egregrious, easily
detectable type aliasing problems, to the simplest
and most convenient user-selectable warning option
without a lot of semantic mess about what to call
the category.   Clearly, the overall appeal of
the idea would very much depend on the extent to
which the proposal would be helpful with other
similar kinds of  issues.  


A2) Add a new feature -CVersion X.YZ meaning the
compiler attempts, on a best effort basis, to
generate correct code for the dialect of
C that yielded correct code with the older
version X.YZ of the compiler (could be useful
for C++ and other languages as well).  If this 
feature is not implemented for version X.YZ, then
either warn or exit with an error.  The 
documentation for this feature would have be
very emphatic about the fact that it is just
provided on a best effort basis, and will not
be 100% correct (even if the category of 
correctness for the feature was precisely
defineable, which it isn't), and perhaps mention
the alternative of -V X.YZ for 100% compatibility,
providing version X.YZ is installed.

Why consider this?  Because a lot, perhaps
a majority. of application programmers rely,
implicitly or explicitly, on their compiler of 
choice as a guide to correctness standards for 
their language of choice.  When that pseudo-standard
changes from version to version of the compiler,
and their code breaks, it causes inconvenience.
If there is a lot of code that breaks and no
maintainer for it, then it can cause a lot
of inconvenience.  This feature also has the
potential to be very convenient from the
vantage point of anyone doing tech support.


- Josh


^ permalink raw reply	[flat|nested] 404+ messages in thread
[parent not found: <9377.936981585@upchuck.cygnus.com>]
* Re: type based aliasing again
@ 1999-09-11 21:48 N8TM
  1999-09-30 18:02 ` N8TM
  0 siblings, 1 reply; 404+ messages in thread
From: N8TM @ 1999-09-11 21:48 UTC (permalink / raw)
  To: pedwards, gcc

In a message dated 9/11/99 8:22:15 PM EST, pedwards@jaj.com writes:

> it's not evil (illegal), it's just handicapped or elderly (invalid)?
I would agree with those epithets applied to the source code for struct, but 
it works fine (on linux and unix, not on cygwin) with strict-aliasing.  It 
uses plenty of untyped pointers.  I haven't had to fix any bugs in it for 10 
years.

Tim
tprince@computer.org

^ permalink raw reply	[flat|nested] 404+ messages in thread
* Re: type based aliasing again
@ 1999-09-10  8:43 craig
  1999-09-12  0:49 ` Richard Stallman
  1999-09-30 18:02 ` craig
  0 siblings, 2 replies; 404+ messages in thread
From: craig @ 1999-09-10  8:43 UTC (permalink / raw)
  To: jvickers, jbuck, law, mark, gcc, rms; +Cc: craig

RMS wrote:
> In C, we cannot divide all user code into "right" and "wrong" in this
> kind of simple way, and certainly not based on the ISO standard.  That
> standard is just the decisions of a certain committee (which I was a
> member of) about what cases conforming compilers should commit to
> support.  We must not let ourselves start thinking that C code is
> "wrong", just because it is not conforming ISO C code.

Saying the standard is "just the decisions of a certain committee" is
like saying C is "just a language made up by bored hackers".

If you're prepared to offer substantial replacements for the care,
consideration, expertise, thoughtfulness, expectation of public
participation in the process, and so on, that the C standards
committee (presumably) provides, fine.

But, I've watched (reasonably carefully) how successful this attitude
of "ignore the standards bodies except when we find them convenient"
has worked since I first heard about GNU using it so many years ago
(at which point I found it *very* persuasive).

To put it simply, it's a failure when it comes to the C language,
as far as I can tell.  The very people who seem most
enthusiastic about their ability and willingness to substitute
their designs for those of a standards body, while insisting on
using the same name that body goes to substantial effort to preserve
as a going concern, are the ones who strike me as least willing
to spend substantial time and effort designing their variant of
the language, specifying it, patiently calling for public comment
and *listening* to it, ensuring it's widely understood in terms of
its differences vis-a-vis its "standard" namesake, and documenting
it.  (If you think documenting and specifying are the same, you're
wrong -- the C standard is a specification, all those books
describing how to write C code is documentation.  If you replace
the standards body, you not only must write the specification yourself,
you must write the first documentation yourself, and, further, give
authors of documentation some incentive to write documents for your
language.  I don't think "C minus the silly aliasing restriction"
is enough incentive, since I don't believe anybody's published
serious end-programmer documentation on the GNU C language, despite
all its extensions.)

So, yes, we support many extensions in GCC, and that's nice, when
looked at in isolation.  But when I think of all the bug reports
I've seen, all the confusion over how these features are supposed
to work, the lack of clear documentation *or* specifications regarding
these extensions and their interactions with each other, and the lack
of adequate testing of many of them, I think that, overall, the attitude
that we can do things our own way has led to an overall failure to
provide a C compiler that users can rely upon *now* and in the *future*
to correctly compile the (GNU C, not just ISO C) code they write.

Particularly insidious is this practice of redefining constructs
that aren't blatantly non-standard in a small chunk of code.  Which
is what RMS (and Linus) appears to want, without users having to specify
-fno-strict-aliasing -- an option that at least gives users *some*
heads-up about the code being in some special dialect, not C.

It's one thing for an expert in ISO C to recognize that
"... __complex__ float x; ..." is obviously not ISO C code.
The "__complex__", or similarly undefined, keyword, gives such
things away.

It's entirely another thing for such an expert to see some code
making references via pointers, see *nothing* wrong with the code
vis-a-vis ISO C, and thus reasonably assume that, since it works
on a wide variety of architectures, that code is playing *no*
aliasing games...and then be proven wrong, because what he *didn't*
know is that the code requires an RMS C compiler to work, because
it *is* playing aliasing games.  By which time, he's devoted many
hours, perhaps days, to making changes to that code (just a portion
of a program, so the *other* portions had to work together with it
to violate the aliasing rules), changes that are then recognized
as a huge waste of time.

If you, the reader, don't grasp what I'm saying there, that's okay,
all it means is you don't understand some basic language-design
principles.  It doesn't mean you're not a great programmer, it just
means you shouldn't be doing language design (e.g. proposing changes
to a language or dialect, especially not pushing for them from
a position of power).

But I'll illustrate (in Fortran, since it's actually clearer) this
concept with an example.  Suppose Barney Super Fortran Programmer
is looking at code like this:

   SUBROUTINE X (A, B)
   ...
   A = B * 2
   ...
   B = B + 9
   ...
   END

No matter what the "call tree" from X down looks like, he *knows*
that, assuming the code is considered "correct" according to the
Fortran standards (and there's no command-line options used to
compile it to say otherwise), e.g. it runs on a wide variety
of platforms, that A *cannot* alias B.

Given that knowledge, he need *not* examine *any* callers of X
to see whether A actually *might* alias B.

That means he can, *legitimately*, change that code to read:

   SUBROUTINE X (A, B)
   ...
   TMPB = B
   B = B + 9
   A = TMPB * 2
   ...
   ...
   END

(All he has to do is ensure that the "..." following A don't explicitly
reference B...the usual sorts of things that programmers check for.)

Never mind why he might want to make that change.  Maybe it's for
performance reasons.

The point is, he *can* make that change because he *knows* A and B don't
alias each other.  Period.  End of story.

But wait!  Turns out this code is always compiled by RMS Fortran.  RMS
decided this aliasing prohibition, put in by the Fortran standards
committee back in the '70s and preserved ever since, was just silly,
so he eliminated it from his dialect.  (Maybe he only *partially*
eliminated it, by saying "let's do a cost/performance analysis each
time we considered breaking code like the above in a given instance",
and the net result was the same -- most RMS Fortran users thinking
there were no alias restrictions in the language, because they always
got away with that, except perhaps in "extremely obvious" instances
such as small self-contained DO loops.)

But he called his dialect "Fortran" anyway, called his compiler
"RMS Fortran" (as versus his operating system, which is called
"...*not* Unix"), and thus set the stage for Barney, our super-programmer,
wasting his time by adding bugs to working code.

How?  Because it turns out X *does* get called with A and B aliased,
that the caller *relies* on the changing of A happening before B is
modified, and that the caller is thus *highly* sensitive to the particular
ordering of the modifications.

In other words, while X looks like it is written in standard Fortran,
and while every single one of X's callers, *in isolation* (without
looking at X itself), might look like *they* are written in standard
Fortran, the reality is, the whole *program* is, in fact, *not* standard
Fortran.  It is RMS Fortran.  The original programmers of that
code got away with it because the compiler happened to avoid ever
reordering things like that, except in instances "everybody" -- meaning
only those RMS Fortran users truly paying attention to these issues -
would agree such reordering was desirable.

And the result is buggy code.

All of the usual responses -- "well, if Barney was so good, why didn't
he read the docs", for example -- would have applied just as well
if RMS hadn't changed the dialect in this way and left it up to
*Fortran* programmers to read the industry-standard *Fortran* specification
and the widely published books on *Fortran* programming.

Further, the *overall* quality of the RMS Fortran product plus RMS
Fortran code is *lower*, because it is less of a good language.
That is, it plays tricks -- appearing to mean one thing, when it
means another, leading people who misunderstand it to break code
written in it.

So, to cater to the mediocre programmers who won't read *any* docs,
not even the widely published ones on the general language they're
using, we *do*, in fact, punish the *great* programmers who *do*
read the *right* docs, but to whom we've given no adequate notice,
in instances such as the above, that there are some *other* docs
they need to go read and study.

(Yes, the quality of those industry-wide specifications and docs
might be low.  That's a separately addressed problem, to be
fixed by offering better ones, *not* by changing the language being
specified.)

If you're going to insist that we continue to chart our own course
for the language GCC compiles vis-a-vis ISO C, then I suggest you
consider renaming *that* language to something else, like "GNU P",
so as to avoid confusing users.

After all, you insisted the EGCS project be named EGCS, not GCC3,
to avoid confusing users.  I suggest you (RMS) apply the Golden Rule
here -- if you were so concerned about EGCS polluting the "good name"
of GCC back then, I suggest you consider how the ISO C people feel
about this continued willingness of the GCC people to say they
compile code written in something called "C", when they're at the
same time so willing to say "ISO C is just a committee" to excuse
ignoring, whenever convenient, what ISO C says about what C "means"
as a language name.

Then, when GNU P has proven to be a better C language than ISO C,
such that the *overall* community prefers it just as it ended up
prefering EGCS to GCC2, we can rename everything back.

No, I'm not arguing for "aggressively breaking bad code", because
I don't think that's wise, taken literally -- and because I
know it's pretty hard to do, and would actually make code *slower*.

I agree with what I think Mark *meant* by that phrase, though, which
is "let's not bother trying to make all sorts of cost/benefit analyses
for every possible conflict between some optimization and whether
that might break some existing bad code out there".  We have better things
to do with our time, like make sure GCC generates *fast* code and that,
when compiled with -fno-strict-aliasing, it generates code that accommodates
the aliasing bug in user code.

        tq vm, (burley)

^ permalink raw reply	[flat|nested] 404+ messages in thread
* Re: type based aliasing again
@ 1999-09-09 21:54 Alex Rosenberg
  1999-09-30 18:02 ` Alex Rosenberg
  0 siblings, 1 reply; 404+ messages in thread
From: Alex Rosenberg @ 1999-09-09 21:54 UTC (permalink / raw)
  To: Claus Fischer, Jeffrey A Law
  Cc: Joe Buck, Mark Mitchell, GCC mailing list, Richard Stallman

> Well this option would just tell the compiler that there are no aliases,
> guaranteed, on my full responsibility. Like in a function:
>
>    double f(double *x, double *y, long n)
...
>
> when I the programmer happen to know there can't be an alias (the
> memory areas x and y are totally nonoverlapping on the full range)
> but the compiler can't detect that since n could have any value.

IBM's xlC and Apple's MrC use the following syntax for this case:

#pragma disjoint (x,y)

Where any pointer name with any number of dereferences, denoted by an
asterix, can appear in a group.

AFAIK, C9X's restrict keyword doesn't help here since we're only asserting
that these two pointers aren't overlapping, not that they don't overlap with
something else of interest to the compiler.

Another possible solution is a syntax I've seen in Microsoft's VC++:

__assume(x != y);

Where __assume() is usually a non-debug replacement for assert(). This
particular expression doesn't denote lack of overlap, but possibly some
suitable expression can be devised that works. This is also a desirable
general mechanism for other assertions. (If anybody knows of a paper on this
as a general mechanism, I'd love to read it.)

+------------------------------------------------------------+
| Alexander M. Rosenberg           < mailto:alexr@_spies.com > |
| Nobody cares what I say. Remove the underscore to mail me. |

^ permalink raw reply	[flat|nested] 404+ messages in thread
* type based aliasing again
@ 1999-09-09 15:40 Claus Fischer
  1999-09-09 15:57 ` David Starner
                   ` (2 more replies)
  0 siblings, 3 replies; 404+ messages in thread
From: Claus Fischer @ 1999-09-09 15:40 UTC (permalink / raw)
  To: Joe Buck, Mark Mitchell; +Cc: GCC mailing list, Richard Stallman

Hi,

I wouldn't try to explain the concept of 'aliasing' and its relevance
to the user. The right place for that might be a special chapter in
the info pages but not inlined in the main commandline option
information or in a warning.

Personally I've always liked the linux kernel config saying
'if you don't know what this is all about, choose No'.
Most users probably don't care and don't want to know.

A warning in case the user has already chosen an aliasing option
(knowing the ISO rules or knowing (s)he knows nothing about them)
would be an annoyance. A warning in the no-option case, however,
is extremely desirable.





Here is my very personal wishlist of the compiler behaviour:


1 no flags given
================

   The compiler detects potentially different behaviour under both
   old and new alias detection strategies and gives a warning; the
   warning points the user to the strict-aliasing and
   no-strict-aliasing options.

   I don't care about the default behaviour which the compiler
   assumes.


2 no-strict-aliasing
====================

   Use the old alias detection strategy.

   In the info pages, tell the user 'if you have no clue what this
   is all about, choose this option; it's safe.'


3 strict-aliasing
=================

   Use an ANSI/ISO conformant alias detection strategy, as aggressive
   as possible under the ISO rules. Subject to change between gcc
   releases.

   Tell the user 'by choosing this option you ask the compiler
   to assume that your code conforms to the strict ISO aliasing
   rules; note that this might break your code if you are not
   aware of the ISO rules'.


4 assume-unaliased
==================

   Assume access to memory is never aliased even though it might
   be considered so under the ISO rules. (New flag).

   Tell the user that 'this option will most likely break all your
   code; use this option only if you know what you are doing'.


I personally would love option 4. Presently, a simple Fortran
vector sum is equivalent to various forms of optimum C code,
depending on the machine architecture: some with pointer
arithmetic, some with manual loop unrolling, some using
special assembler instructions. I don't want to learn
assembler to say

     do 1 i=1,10000
 1   a(i) = x*b(i)+y*c(i)

in C without twisting my tongue ;)




Claus

(please CC: me or accept a delay since I read the list on http)

-- 
claus.fischer@intel.com   Intel Corporation SC12-205 ... not speaking
phone   +1-408-765-6808   2200 Mission College Blvd.           for Intel
fax     +1-408-765-9322   Santa Clara, CA 95052-8119



^ permalink raw reply	[flat|nested] 404+ messages in thread
* Re: type based aliasing again
@ 1999-09-09 14:26 Mike Stump
  1999-09-09 14:38 ` Mark Mitchell
  1999-09-30 18:02 ` Mike Stump
  0 siblings, 2 replies; 404+ messages in thread
From: Mike Stump @ 1999-09-09 14:26 UTC (permalink / raw)
  To: jbuck, mark; +Cc: gcc, rms

> From: Mark Mitchell <mark@codesourcery.com>
> Date: Wed, 08 Sep 1999 20:29:57 -0700

> There will be cases where A will pessimize code that does not have
> undefined behavior.

I was trying to envision this.  Do you have an example?  I was
thinking Joe meant doing this is cases were we can prove that they in
fact do alias, but for which the types don't match.  Lessor cases were
we cannot prove they alias, would not issue a warning.

^ permalink raw reply	[flat|nested] 404+ messages in thread
* Re: type based aliasing again
@ 1999-09-08 19:13 Mike Stump
  1999-09-08 19:31 ` Joe Buck
                   ` (3 more replies)
  0 siblings, 4 replies; 404+ messages in thread
From: Mike Stump @ 1999-09-08 19:13 UTC (permalink / raw)
  To: gcc, jbuck; +Cc: rms

My comment is similar to Mark's comment.  Documentation, what can we
document as working?  Can users rely upon it working?

Is it less confusing to a user to have the compiler predictably
generate wrong code, or for it to almost always generate right code,
even for bad code, except in really obscure and hard to understand
cases?

Anway, more questions from me than answers...  Off hand though, if we
can make the compiler generate `right' code in more cases, even if the
users code is wrong, I think we should probably do it.  I say this not
with a language designer's hat on, but as someone that has to support
users with possibly broken code.  Kind of a quick fix to get them to
leave me alone.

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

end of thread, other threads:[~1999-09-30 18:02 UTC | newest]

Thread overview: 404+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1999-09-11 18:21 type based aliasing again Phil Edwards
1999-09-30 18:02 ` Phil Edwards
     [not found] <19990921182843.25292.qmail@deer>
1999-09-21 15:47 ` John W. Stevens
1999-09-21 16:15   ` craig
1999-09-21 20:37     ` David Edelsohn
1999-09-30 18:02       ` David Edelsohn
1999-09-23  9:06     ` John W. Stevens
1999-09-23 11:06       ` craig
1999-09-30 18:02         ` craig
1999-09-30 18:02       ` John W. Stevens
1999-09-30 18:02     ` craig
1999-09-27  6:56   ` Rask Ingemann Lambertsen
1999-09-27  8:32     ` Joe Buck
1999-09-30 18:02       ` Joe Buck
1999-09-30 18:02     ` Rask Ingemann Lambertsen
1999-09-30 18:02   ` John W. Stevens
  -- strict thread matches above, loose matches on Subject: below --
1999-09-21  8:48 Harvey J. Stein
1999-09-22 12:15 ` Richard Stallman
1999-09-22 13:08   ` Harvey J. Stein
1999-09-24 23:37     ` Richard Stallman
1999-09-30 18:02       ` Richard Stallman
1999-09-30 18:02     ` Harvey J. Stein
1999-09-30 18:02   ` Richard Stallman
1999-09-30 18:02 ` Harvey J. Stein
1999-09-18  8:33 N8TM
1999-09-30 18:02 ` N8TM
1999-09-18  7:30 Stephen L Moshier
1999-09-30 18:02 ` Stephen L Moshier
1999-09-18  3:25 Artem Hodyush
1999-09-18 11:29 ` Russ Allbery
1999-09-20  5:54   ` Joern Rennecke
1999-09-30 18:02     ` Joern Rennecke
1999-09-30 18:02   ` Russ Allbery
1999-09-19 13:54 ` Richard Stallman
1999-09-30 18:02   ` Richard Stallman
1999-09-21  8:50 ` Harvey J. Stein
1999-09-30 18:02   ` Harvey J. Stein
1999-09-30 18:02 ` Artem Hodyush
1999-09-18  2:51 Ross Morgan-Linial
     [not found] ` <19990918151905.F1650@cerebro.laendle>
1999-09-18 22:18   ` Ross Morgan-Linial
1999-09-30 18:02     ` Ross Morgan-Linial
1999-09-30 18:02 ` Ross Morgan-Linial
1999-09-17  9:02 Harvey J. Stein
1999-09-30 18:02 ` Harvey J. Stein
     [not found] <199909161750.LAA12073@basho.fc.hp.com>
1999-09-16 14:29 ` craig
1999-09-20 15:17   ` John W. Stevens
1999-09-30 18:02     ` John W. Stevens
1999-09-30 18:02   ` craig
1999-09-16  6:12 Artem Hodyush
1999-09-16 23:15 ` Richard Stallman
1999-09-16 23:38   ` Gabriel Dos_Reis
1999-09-17 22:16     ` Richard Stallman
1999-09-30 18:02       ` Richard Stallman
1999-09-30 18:02     ` Gabriel Dos_Reis
1999-09-30 18:02   ` Richard Stallman
1999-09-30 18:02 ` Artem Hodyush
     [not found] <Pine.SO4.4.05.9909160153420.23533-100000@tamarack.cs.mtu.edu>
1999-09-16  2:19 ` craig
1999-09-30 18:02   ` craig
1999-09-15 21:47 Florin Mateoc
1999-09-16  2:18 ` craig
1999-09-30 18:02   ` craig
1999-09-30 18:02 ` Florin Mateoc
1999-09-15 11:42 Michael J. Bedy
1999-09-15 14:32 ` craig
1999-09-16 23:14   ` Richard Stallman
1999-09-30 18:02     ` Richard Stallman
1999-09-30 18:02   ` craig
1999-09-30 18:02 ` Michael J. Bedy
1999-09-15  8:27 Kaveh R. Ghazi
1999-09-15  8:57 ` Nathan Sidwell
1999-09-30 18:02   ` Nathan Sidwell
1999-09-30 18:02 ` Kaveh R. Ghazi
1999-09-15  7:02 David Ronis
1999-09-30 18:02 ` David Ronis
1999-09-14  6:46 Marcel Cox
1999-09-14  6:50 ` Bernd Schmidt
1999-09-14  7:14   ` Marcel Cox
1999-09-14  8:45     ` Jamie Lokier
1999-09-30 18:02       ` Jamie Lokier
1999-09-30 18:02     ` Marcel Cox
1999-09-30 18:02   ` Bernd Schmidt
1999-09-30 18:02 ` Marcel Cox
1999-09-13 21:45 N8TM
1999-09-14  4:01 ` Marc Espie
1999-09-14  9:56   ` David Edelsohn
1999-09-14 10:10     ` Richard Earnshaw
1999-09-14 10:31       ` Nick Ing-Simmons
1999-09-14 10:52         ` David Edelsohn
1999-09-14 11:11           ` craig
1999-09-14 14:44             ` David Edelsohn
1999-09-30 18:02               ` David Edelsohn
1999-09-14 15:06             ` David Edelsohn
1999-09-14 17:35               ` Marc Lehmann
1999-09-30 18:02                 ` Marc Lehmann
1999-09-14 23:41               ` craig
1999-09-15  8:28                 ` Marc Lehmann
1999-09-30 18:02                   ` Marc Lehmann
1999-09-15  9:19                 ` David Edelsohn
1999-09-15  9:59                   ` Nick Ing-Simmons
1999-09-15 15:33                     ` David Edelsohn
1999-09-30 18:02                       ` David Edelsohn
1999-09-30 18:02                     ` Nick Ing-Simmons
1999-09-15 10:01                   ` craig
1999-09-30 18:02                     ` craig
1999-09-30 18:02                   ` David Edelsohn
1999-09-30 18:02                 ` craig
1999-09-30 18:02               ` David Edelsohn
1999-09-30 18:02             ` craig
1999-09-14 11:58           ` Gerald Pfeifer
1999-09-30 18:02             ` Gerald Pfeifer
1999-09-30 18:02           ` David Edelsohn
1999-09-14 11:01         ` craig
1999-09-14 11:14           ` craig
1999-09-30 18:02             ` craig
1999-09-14 11:39           ` Mark Mitchell
1999-09-14 14:48             ` Toon Moene
1999-09-14 15:00               ` David Edelsohn
1999-09-14 16:01                 ` Toon Moene
1999-09-14 16:15                   ` David Edelsohn
1999-09-14 16:43                     ` Mark Mitchell
1999-09-30 18:02                       ` Mark Mitchell
1999-09-14 17:39                     ` Marc Lehmann
1999-09-30 18:02                       ` Marc Lehmann
1999-09-30 18:02                     ` David Edelsohn
1999-09-14 16:19                   ` dvv
1999-09-14 17:38                     ` Michael Meissner
1999-09-30 18:02                       ` Michael Meissner
1999-09-30 18:02                     ` Dima Volodin
1999-09-30 18:02                   ` Toon Moene
1999-09-30 18:02                 ` David Edelsohn
1999-09-14 15:08               ` Mark Mitchell
1999-09-30 18:02                 ` Mark Mitchell
1999-09-30 18:02               ` Toon Moene
1999-09-30 18:02             ` Mark Mitchell
1999-09-30 18:02           ` craig
1999-09-14 23:46         ` Geoff Keating
1999-09-15  7:47           ` Nick Ing-Simmons
1999-09-30 18:02             ` Nick Ing-Simmons
1999-09-30 18:02           ` Geoff Keating
1999-09-30 18:02         ` Nick Ing-Simmons
1999-09-30 18:02       ` Richard Earnshaw
1999-09-14 17:22     ` Marc Lehmann
1999-09-30 18:02       ` Marc Lehmann
1999-09-30 18:02     ` David Edelsohn
1999-09-14 17:23   ` Marc Lehmann
1999-09-15  1:59     ` Marc Espie
1999-09-15  8:28       ` Marc Lehmann
1999-09-30 18:02         ` Marc Lehmann
1999-09-30 18:02       ` Marc Espie
1999-09-30 18:02     ` Marc Lehmann
1999-09-15  2:01   ` Jeffrey A Law
1999-09-30 18:02     ` Jeffrey A Law
1999-09-30 18:02   ` Marc Espie
1999-09-30 18:02 ` N8TM
1999-09-13 16:34 Mike Stump
1999-09-14 22:20 ` Richard Stallman
1999-09-30 18:02   ` Richard Stallman
1999-09-30 18:02 ` Mike Stump
1999-09-13 10:55 R. Kelley Cook
1999-09-13 13:22 ` craig
1999-09-30 18:02   ` craig
1999-09-30 18:02 ` R. Kelley Cook
1999-09-12 11:20 Josh Stern
1999-09-30 18:02 ` Josh Stern
     [not found] <9377.936981585@upchuck.cygnus.com>
1999-09-12  0:52 ` Richard Stallman
1999-09-30 18:02   ` Richard Stallman
1999-09-11 21:48 N8TM
1999-09-30 18:02 ` N8TM
1999-09-10  8:43 craig
1999-09-12  0:49 ` Richard Stallman
1999-09-30 18:02   ` Richard Stallman
1999-09-30 18:02 ` craig
1999-09-09 21:54 Alex Rosenberg
1999-09-30 18:02 ` Alex Rosenberg
1999-09-09 15:40 Claus Fischer
1999-09-09 15:57 ` David Starner
1999-09-09 16:24   ` Claus Fischer
1999-09-09 16:55     ` Joe Buck
1999-09-09 17:31       ` Claus Fischer
1999-09-30 18:02         ` Claus Fischer
1999-09-30 18:02       ` Joe Buck
1999-09-10  8:42     ` craig
1999-09-30 18:02       ` craig
1999-09-30 18:02     ` Claus Fischer
1999-09-30 18:02   ` David Starner
1999-09-09 16:37 ` Jeffrey A Law
1999-09-09 17:15   ` Claus Fischer
1999-09-30 18:02     ` Claus Fischer
1999-09-30 18:02   ` Jeffrey A Law
1999-09-30 18:02 ` Claus Fischer
1999-09-09 14:26 Mike Stump
1999-09-09 14:38 ` Mark Mitchell
1999-09-11  0:16   ` Richard Stallman
1999-09-15  2:07     ` Jeffrey A Law
1999-09-30 18:02       ` Jeffrey A Law
1999-09-30 18:02     ` Richard Stallman
1999-09-30 18:02   ` Mark Mitchell
1999-09-30 18:02 ` Mike Stump
1999-09-08 19:13 Mike Stump
1999-09-08 19:31 ` Joe Buck
1999-09-30 18:02   ` Joe Buck
1999-09-09  7:12 ` Marc Espie
1999-09-09 20:35   ` Jeffrey A Law
1999-09-10 12:29     ` Sudish Joseph
1999-09-30 18:02       ` Sudish Joseph
1999-09-30 18:02     ` Jeffrey A Law
1999-09-30 18:02   ` Marc Espie
1999-09-09 23:25 ` Richard Stallman
1999-09-08 18:11   ` Joe Buck
1999-09-08 18:43     ` Mark Mitchell
1999-09-08 19:25       ` Joe Buck
1999-09-08 19:51         ` David Edelsohn
1999-09-30 18:02           ` David Edelsohn
1999-09-30 18:02         ` Joe Buck
1999-09-08 19:44       ` Joe Buck
1999-09-08 20:26         ` Mark Mitchell
1999-09-08 20:43           ` Joe Buck
1999-09-08 21:45             ` Mark Mitchell
1999-09-08 22:04               ` Joe Buck
1999-09-08 22:25                 ` Mark Mitchell
1999-09-30 18:02                   ` Mark Mitchell
1999-09-09  2:08                 ` Jeffrey A Law
1999-09-09 10:51                   ` Joe Buck
1999-09-09 16:51                     ` John Vickers
1999-09-09 17:04                       ` Joe Buck
1999-09-09 17:12                         ` John Vickers
1999-09-30 18:02                           ` John Vickers
1999-09-30 18:02                         ` Joe Buck
1999-09-30 18:02                       ` John Vickers
1999-09-15  2:07                     ` Jeffrey A Law
1999-09-30 18:02                       ` Jeffrey A Law
1999-09-30 18:02                     ` Joe Buck
1999-09-09 23:26                   ` Richard Stallman
1999-09-30 18:02                     ` Richard Stallman
1999-09-09 23:26                   ` Richard Stallman
1999-09-09 23:38                     ` Jeffrey A Law
1999-09-30 18:02                       ` Jeffrey A Law
1999-09-30 18:02                     ` Richard Stallman
1999-09-30 18:02                   ` Jeffrey A Law
1999-09-09 23:25                 ` Richard Stallman
1999-09-10  0:06                   ` Mark Mitchell
1999-09-10  0:13                     ` Joe Buck
1999-09-30 18:02                       ` Joe Buck
1999-09-11  0:17                     ` Richard Stallman
1999-09-30 18:02                       ` Richard Stallman
1999-09-30 18:02                     ` Mark Mitchell
1999-09-30 18:02                   ` Richard Stallman
1999-09-30 18:02                 ` Joe Buck
1999-09-08 23:20               ` Richard Henderson
1999-09-08 23:41                 ` Mark Mitchell
1999-09-08 23:44                   ` Richard Henderson
1999-09-08 23:51                     ` Mark Mitchell
1999-09-30 18:02                       ` Mark Mitchell
1999-09-09  2:45                     ` Jeffrey A Law
1999-09-30 18:02                       ` Jeffrey A Law
1999-09-30 18:02                     ` Richard Henderson
1999-09-30 18:02                   ` Mark Mitchell
1999-09-30 18:02                 ` Richard Henderson
1999-09-30 18:02               ` Mark Mitchell
1999-09-30 18:02             ` Joe Buck
1999-09-08 21:33           ` Joe Buck
1999-09-08 21:56             ` Mark Mitchell
1999-09-30 18:02               ` Mark Mitchell
1999-09-09  1:38             ` Martin v. Loewis
1999-09-30 18:02               ` Martin v. Loewis
1999-09-09 23:25             ` Richard Stallman
1999-09-30 18:02               ` Richard Stallman
1999-09-30 18:02             ` Joe Buck
1999-09-09  2:20           ` Jeffrey A Law
1999-09-09  7:58             ` craig
1999-09-09 10:36               ` Joe Buck
1999-09-09 10:55                 ` Mark Mitchell
1999-09-11  0:15                   ` Richard Stallman
1999-09-30 18:02                     ` Richard Stallman
1999-09-30 18:02                   ` Mark Mitchell
1999-09-09 11:51                 ` craig
1999-09-09 12:45                   ` Joe Buck
1999-09-30 18:02                     ` Joe Buck
1999-09-30 18:02                   ` craig
1999-09-30 18:02                 ` Joe Buck
1999-09-30 18:02               ` craig
1999-09-30 18:02             ` Jeffrey A Law
1999-09-09 23:26           ` Richard Stallman
1999-09-30 18:02             ` Richard Stallman
1999-09-30 18:02           ` Mark Mitchell
1999-09-30 18:02         ` Joe Buck
1999-09-09 23:25       ` Richard Stallman
1999-09-10  0:03         ` Mark Mitchell
1999-09-10  0:23           ` Joe Buck
1999-09-11  0:17             ` Richard Stallman
1999-09-30 18:02               ` Richard Stallman
1999-09-30 18:02             ` Joe Buck
1999-09-11  0:17           ` Richard Stallman
1999-09-30 18:02             ` Richard Stallman
1999-09-30 18:02           ` Mark Mitchell
1999-09-10 14:29         ` Marc Lehmann
1999-09-30 18:02           ` Marc Lehmann
1999-09-15  2:05         ` Jeffrey A Law
1999-09-15  7:55           ` Nick Ing-Simmons
1999-09-30 18:02             ` Nick Ing-Simmons
1999-09-15 23:14           ` Richard Stallman
1999-09-30 18:02             ` Richard Stallman
1999-09-30 18:02           ` Jeffrey A Law
1999-09-30 18:02         ` Richard Stallman
1999-09-30 18:02       ` Mark Mitchell
1999-09-08 20:44     ` Joe Buck
1999-09-30 18:02       ` Joe Buck
1999-09-14  3:04     ` Alexandre Oliva
1999-09-14  5:34       ` Bernd Schmidt
1999-09-14  5:45         ` Alexandre Oliva
1999-09-14  5:52           ` Bernd Schmidt
1999-09-30 18:02             ` Bernd Schmidt
1999-09-21  1:16           ` Rask Ingemann Lambertsen
1999-09-21  2:02             ` Jamie Lokier
1999-09-30 18:02               ` Jamie Lokier
1999-09-30 18:02             ` Rask Ingemann Lambertsen
1999-09-30 18:02           ` Alexandre Oliva
1999-09-14  9:31         ` Andi Kleen
1999-09-30 18:02           ` Andi Kleen
1999-09-30 18:02         ` Bernd Schmidt
1999-09-14 22:22       ` Richard Stallman
1999-09-30 18:02         ` Richard Stallman
1999-09-30 18:02       ` Alexandre Oliva
1999-09-30 18:02     ` Joe Buck
1999-09-10  0:11   ` Joe Buck
1999-09-10  8:43     ` craig
1999-09-10 18:25       ` Jonathan Larmour
1999-09-11  3:50         ` craig
1999-09-30 18:02           ` craig
1999-09-30 18:02         ` Jonathan Larmour
1999-09-11  0:15       ` Richard Stallman
1999-09-11  3:51         ` craig
1999-09-12  0:51           ` Richard Stallman
1999-09-12  8:54             ` craig
1999-09-13  0:47               ` Richard Stallman
1999-09-30 18:02                 ` Richard Stallman
1999-09-30 18:02               ` craig
1999-09-30 18:02             ` Richard Stallman
1999-09-30 18:02           ` craig
1999-09-30 18:02         ` Richard Stallman
1999-09-30 18:02       ` craig
1999-09-11  0:14     ` Richard Stallman
1999-09-11 15:20       ` Mark Mitchell
1999-09-11 18:04         ` David Edelsohn
1999-09-11 18:20           ` Mark Mitchell
1999-09-11 23:40             ` Sudish Joseph
1999-09-30 18:02               ` Sudish Joseph
1999-09-12  8:16             ` Robert Lipe
1999-09-30 18:02               ` Robert Lipe
1999-09-30 18:02             ` Mark Mitchell
1999-09-13  0:47           ` Richard Stallman
1999-09-15  2:06             ` Jeffrey A Law
1999-09-15  8:02               ` Nick Ing-Simmons
1999-09-15  9:20                 ` Jeffrey A Law
1999-09-15  9:31                   ` David Edelsohn
1999-09-15 10:02                     ` craig
1999-09-16 23:13                       ` Richard Stallman
1999-09-17  1:51                         ` craig
1999-09-17 22:16                           ` Richard Stallman
1999-09-30 18:02                             ` Richard Stallman
1999-09-30 18:02                           ` craig
1999-09-30 18:02                         ` Richard Stallman
1999-09-30 18:02                       ` craig
1999-09-30 18:02                     ` David Edelsohn
1999-09-15  9:56                   ` Nick Ing-Simmons
1999-09-15 10:08                     ` craig
1999-09-15 10:48                       ` Nick Ing-Simmons
1999-09-15 14:32                         ` craig
1999-09-30 18:02                           ` craig
1999-09-30 18:02                         ` Nick Ing-Simmons
1999-09-16 10:54                       ` Andi Kleen
1999-09-16 12:08                         ` Joern Rennecke
1999-09-16 12:18                           ` Mark Mitchell
1999-09-30 18:02                             ` Mark Mitchell
1999-09-30 18:02                           ` Joern Rennecke
1999-09-16 14:29                         ` craig
1999-09-16 22:19                           ` Andi Kleen
1999-09-30 18:02                             ` Andi Kleen
1999-09-30 18:02                           ` craig
1999-09-30 18:02                         ` Andi Kleen
1999-09-16 23:13                       ` Richard Stallman
1999-09-30 18:02                         ` Richard Stallman
1999-09-30 18:02                       ` craig
1999-09-30 18:02                     ` Nick Ing-Simmons
1999-09-30 18:02                   ` Jeffrey A Law
1999-09-30 18:02                 ` Nick Ing-Simmons
1999-09-15 23:14               ` Richard Stallman
1999-09-30 18:02                 ` Richard Stallman
1999-09-30 18:02               ` Jeffrey A Law
1999-09-30 18:02             ` Richard Stallman
1999-09-30 18:02           ` David Edelsohn
1999-09-12  9:45         ` Jonathan Larmour
1999-09-30 18:02           ` Jonathan Larmour
1999-09-13  0:47         ` Richard Stallman
1999-09-30 18:02           ` Richard Stallman
1999-09-13  4:05         ` Richard Earnshaw
1999-09-15  2:05           ` Jeffrey A Law
1999-09-30 18:02             ` Jeffrey A Law
1999-09-30 18:02           ` Richard Earnshaw
1999-09-30 18:02         ` Mark Mitchell
1999-09-30 18:02       ` Richard Stallman
1999-09-30 18:02     ` Joe Buck
1999-09-30 18:02   ` Richard Stallman
1999-09-30 18:02 ` Mike Stump

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