[TUHS] reviving a bit of WWB

Rob Pike robpike at gmail.com
Tue Sep 22 07:22:08 AEST 2020


Back when we were running v5 at the University of Toronto, we had a
graphics device that we accessed, on our split I&D space 11/45, using 0,
something like this:

struct x {
   int reg0, reg1, ...;
};

0->reg1 = 0234;

Several old details of old C made this possible as well: Struct tags were
global, -> worked on any pointer, and ints and pointers were
interchangeable.

-rob


On Tue, Sep 22, 2020 at 6:51 AM John Cowan <cowan at ccil.org> wrote:

>
>
> On Mon, Sep 21, 2020 at 1:55 AM Steve Nickolas <usotsuki at buric.co> wrote:
>
>
>> I've never written anything that uses varargs, so I've never run into
>> that.  But I've actually done quite a bit of work with an environment
>> where this isn't true: MS-DOS using the large or huge model.  In this
>> environment, sizeof(int)=2, and sizeof(void*) is 4. Of course, it's not
>> conformant to pass an int variable as an argument where a pointer variable
>> is expected.
>>
>
> If the compiler was ISO-conformant (which it almost certainly was not),
> that would not matter.  0 in int context would be a 2-byte int with all
> bits zero, and 0 in pointer context would be a 4-byte null pointer,
> probably with all bits zero.
>
> C doesn't require that the address represented by the null pointer
> (whether or not it is all-bits-zero) is inaccessible, merely that there is
> no C object or function there.  A simple shim of the appropriate size (1,
> 2, 4, 8 bytes depending on the CPU's alignment rules) will suffice.
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://minnie.tuhs.org/pipermail/tuhs/attachments/20200922/af28107b/attachment.htm>


More information about the TUHS mailing list