Subject: Re: bug#79483: Segmentation fault: set-car! in compiled code

From: Tomas Volf <[email-masked]>
Date: Mon, 22 Sep 2025 21:27:54 +0200

<[email-masked]> writes:

> On Mon, Sep 22, 2025 at 12:50:57AM +0300, var-vniiaes--- via Bug reports for GUILE, GNU's Ubiquitous Extension Language wrote:
>> 
>> Hello,
>>  
>> Execution of   (set-car! '(0) 1)   *in compiled code*  leads to segfault:
>
> First of all: you shouldn't be doing that :)
>
> You are mutating a constant. I don't know what the Scheme specification says
> to it (if at all).

--8<---------------cut here---------------start------------->8---
As noted in section 3.4, it is an error to attempt to alter
a constant (i.e. the value of a literal expression) using a
mutation procedure like set-car! or string-set!
--8<---------------cut here---------------end--------------->8---

> The other question is whether Guile should/could catch that and signal an
> error instead.

I believe it should not.  Memory-safe languages (and, Guile is supposed
to be one) should never segfault but instead terminate with a sensible
error.  I realize that 1.3.2 allows to "fail catastrophically", which
segfault probably qualifies as, but I believe we should do better.

Tomas

-- 
There are only two hard things in Computer Science:
cache invalidation, naming things and off-by-one errors.