unofficial mirror of guile-devel@gnu.org 
 help / color / mirror / Atom feed
* gcc 2.95 inline scm_is_pair workaround
@ 2006-05-19 23:51 Kevin Ryde
  2006-05-20 23:41 ` Marius Vollmer
  0 siblings, 1 reply; 5+ messages in thread
From: Kevin Ryde @ 2006-05-19 23:51 UTC (permalink / raw)


[-- Attachment #1: Type: text/plain, Size: 211 bytes --]

I added the code below to the inline scm_is_pair.  The comment should
be self-explanatory.  Notice it's deliberately confined to just 2.95,
whatever the problem is it doesn't seem to afflict the current gcc 4.


[-- Attachment #2: inline.h.workaround.diff --]
[-- Type: text/plain, Size: 1290 bytes --]

--- inline.h.~1.30.2.1.~	2006-02-14 08:58:58.000000000 +1100
+++ inline.h	2006-05-20 09:48:46.000000000 +1000
@@ -248,6 +248,27 @@
 int
 scm_is_pair (SCM x)
 {
+  /* The following "workaround_for_gcc_295" avoids bad code generated by
+     i386 gcc 2.95.4 (the Debian packaged 2.95.4-24 at least).
+
+     Under the default -O2 the inlined SCM_I_CONSP test gets "optimized" so
+     the fetch of the tag word from x is done before confirming it's a
+     non-immediate (SCM_NIMP).  Needless to say that bombs badly if x is a
+     immediate.  This was seen to afflict scm_srfi1_split_at and something
+     deep in the bowels of ceval().  In both cases segvs resulted from
+     deferencing a random immediate value.  srfi-1.test exposes the problem
+     through a short list, the immediate being SCM_EOL in that case.
+     Something in syntax.test exposed the ceval() problem.
+
+     Just "volatile SCM workaround_for_gcc_295 = lst" is enough to avoid the
+     problem, without even using that variable.  The "w=w" is just to
+     prevent a warning about it being unused.
+     */
+#if defined (__GNUC__) && __GNUC__ == 2 && __GNUC_MINOR__ == 95
+  volatile SCM workaround_for_gcc_295 = x;
+  workaround_for_gcc_295 = workaround_for_gcc_295;
+#endif
+
   return SCM_I_CONSP (x);
 }
 

[-- Attachment #3: Type: text/plain, Size: 143 bytes --]

_______________________________________________
Guile-devel mailing list
Guile-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/guile-devel

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

* Re: gcc 2.95 inline scm_is_pair workaround
  2006-05-19 23:51 gcc 2.95 inline scm_is_pair workaround Kevin Ryde
@ 2006-05-20 23:41 ` Marius Vollmer
       [not found]   ` <87y7wwus6o.fsf@zip.com.au>
                     ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Marius Vollmer @ 2006-05-20 23:41 UTC (permalink / raw)


Kevin Ryde <user42@zip.com.au> writes:

> I added the code below to the inline scm_is_pair.  The comment should
> be self-explanatory.  Notice it's deliberately confined to just 2.95,
> whatever the problem is it doesn't seem to afflict the current gcc 4.

There was a similar issue in scm_ithrow, if I remember correctly, but
we removed the workaround in 2003.  Should we still support GCC 2.95?

2003-05-04  Marius Vollmer  <mvo@zagadka.de>

	* throw.c (scm_ithrow): Remove "asm volatile" hack.  It used to
	work around a bug in GCC 2.95.2 but is now a bug in itself.

-- 
GPG: D5D4E405 - 2F9B BCCC 8527 692A 04E3  331E FAF8 226A D5D4 E405


_______________________________________________
Guile-devel mailing list
Guile-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/guile-devel


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

* Re: gcc 2.95 inline scm_is_pair workaround
       [not found]   ` <87y7wwus6o.fsf@zip.com.au>
@ 2006-05-21 23:38     ` Marius Vollmer
  0 siblings, 0 replies; 5+ messages in thread
From: Marius Vollmer @ 2006-05-21 23:38 UTC (permalink / raw)


Kevin Ryde <user42@zip.com.au> writes:

>> Should we still support GCC 2.95?
>
> It's still in current debian unstable, so it's not totally dead.

I had the impression it is only there for compiling old Linux
kernels...

> Using it guards against some c99-isms (local variables in the middle
> of functions) so it has some use for development.

Isn't there some option for GCC 4 that warns about those?  I think
"-std=c89 -ansi -pedantic" might do it.

>> 	* throw.c (scm_ithrow): Remove "asm volatile" hack.  It used to
>> 	work around a bug in GCC 2.95.2 but is now a bug in itself.
>
> Doesn't look so evil as to cause a bug itself ...

I think the "asm volatile" hack stopped being accepted by GCC in some
version.

-- 
GPG: D5D4E405 - 2F9B BCCC 8527 692A 04E3  331E FAF8 226A D5D4 E405


_______________________________________________
Guile-devel mailing list
Guile-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/guile-devel


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

* Re: gcc 2.95 inline scm_is_pair workaround
  2006-05-20 23:41 ` Marius Vollmer
       [not found]   ` <87y7wwus6o.fsf@zip.com.au>
@ 2006-05-22  6:49   ` Ludovic Courtès
  2006-05-27 23:44   ` Kevin Ryde
  2 siblings, 0 replies; 5+ messages in thread
From: Ludovic Courtès @ 2006-05-22  6:49 UTC (permalink / raw)
  Cc: guile-devel

Hi,

Marius Vollmer <mvo@zagadka.de> writes:

> Should we still support GCC 2.95?

If it's not too costly (in terms of necessary workarounds), perhaps we
should.  Some people argue that GCC 2.95 is still very useful notably
because it's much faster that newer GCCs (and that will certainly always
be true).

Thanks,
Ludovic.


_______________________________________________
Guile-devel mailing list
Guile-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/guile-devel


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

* Re: gcc 2.95 inline scm_is_pair workaround
  2006-05-20 23:41 ` Marius Vollmer
       [not found]   ` <87y7wwus6o.fsf@zip.com.au>
  2006-05-22  6:49   ` Ludovic Courtès
@ 2006-05-27 23:44   ` Kevin Ryde
  2 siblings, 0 replies; 5+ messages in thread
From: Kevin Ryde @ 2006-05-27 23:44 UTC (permalink / raw)


[delayed by a mail bounce]

Marius Vollmer <mvo@zagadka.de> writes:
>
> Should we still support GCC 2.95?

It's still in current debian unstable, so it's not totally dead.
Using it guards against some c99-isms (local variables in the middle
of functions) so it has some use for development.

> 	* throw.c (scm_ithrow): Remove "asm volatile" hack.  It used to
> 	work around a bug in GCC 2.95.2 but is now a bug in itself.

Doesn't look so evil as to cause a bug itself ...

I put mine conditionalized precisely to gcc==2.95, so as to restrict
its effect.  All this sort of thing is pretty ugly, but at least if
it's tightly delimited then it's clear what you can rip out in 10
years time.


_______________________________________________
Guile-devel mailing list
Guile-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/guile-devel


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

end of thread, other threads:[~2006-05-27 23:44 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-05-19 23:51 gcc 2.95 inline scm_is_pair workaround Kevin Ryde
2006-05-20 23:41 ` Marius Vollmer
     [not found]   ` <87y7wwus6o.fsf@zip.com.au>
2006-05-21 23:38     ` Marius Vollmer
2006-05-22  6:49   ` Ludovic Courtès
2006-05-27 23:44   ` Kevin Ryde

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