[m-users.] Change in compiler behaviour for 22.01.8 ? Pointer type strictness increased?

Volker Wysk post at volker-wysk.de
Wed May 1 04:34:01 AEST 2024


Am Samstag, dem 27.04.2024 um 10:25 -0700 schrieb M McDonough:
> 
> I just want to note this, as it's caused me issues in the past. It's a
> bad idea to have anything other than a variable or integral expression
> (no function calls, no macros, etc) as the argument to MR_list_cons
> (and I would generally say any of the MR_* macros unless you've read
> them carefully). You can end up with issues where things are executed
> in an unexpected order, and in particular on the low-level C grades,
> this can cause big issues with Mercury registers being clobbered
> leading to very hard to debug issues with seemingly impossible
> behavior.

Hmmm... I've read your thread from July 2023 about this problem. I'm
wondering if it could be remedied by wrapping it in an inline C function,
like this:


static inline MR_Word mr_list_cons(MR_Word head, MR_Word tail)
{
   MR_Word result = MR_list_cons(head, tail); 
   return result;
}


This would ensure that the expressions head, tail and the body of
MR_list_cons are evaluated in the expected order.

Cheers,
Volker


More information about the users mailing list