bug#45214: guile segfaults on 32-bit big-endian targets

John David Anglin <[email protected]>
Newsgroups gmane.lisp.guile.bugs
Message-ID <[email protected]>
On 2020-12-12 5:21 p.m., John David Anglin wrote:
> On 2020-12-12 4:26 p.m., John Paul Adrian Glaubitz wrote:
>> I assume the crash has got something to do how values are packed and unpacked
>> into the SCM object type. I have not been able to find the problem yet myself,
>> unfortunately which is why I am reporting this issue here.
> I see this in scm.h:
>
> /* The 0?: constructions makes sure that the code is never executed, and
>    that there is no performance hit.  However, the alternative is
>    compiled, and does generate a warning when used with the wrong
>    pointer type.  We use a volatile pointer type to avoid warnings from
>    clang.
>
>    The Tru64 and ia64-hp-hpux11.23 compilers fail on `case (0?0=0:x)'
>    statements, so for them type-checking is disabled.  */
> # if defined __DECC || defined __HP_cc
> #  define SCM_UNPACK(x) ((scm_t_bits) (x))
> # else
> #  define SCM_UNPACK(x) ((scm_t_bits) (0? (*(volatile SCM *)0=(x)): x))
> # endif
Also just before, there is:
/* But as external interface, we define SCM, which may, according to the
   desired level of type checking, be defined in several ways.  */
#if (SCM_DEBUG_TYPING_STRICTNESS == 2)
  typedef union SCM { struct { scm_t_bits n; } n; } SCM;
# define SCM_UNPACK(x) ((x).n.n)
# define SCM_PACK(x) ((SCM) { { (scm_t_bits) (x) } })
#elif (SCM_DEBUG_TYPING_STRICTNESS == 1)
/* This is the default, which provides an intermediate level of compile
   time type checking while still resulting in very efficient code.  */
  typedef struct scm_unused_struct { char scm_unused_field; } *SCM;

The fault on hppa appears to be at strictness 1.

Regards,
Dave

-- 
John David Anglin  [email protected]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.