Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.compilers > #2754

Re: Union C++ standard

From gah4 <gah4@u.washington.edu>
Newsgroups comp.compilers
Subject Re: Union C++ standard
Date 2021-11-26 12:16 -0800
Organization Compilers Central
Message-ID <21-11-007@comp.compilers> (permalink)
References <21-11-004@comp.compilers>

Show all headers | View raw


On Friday, November 26, 2021 at 9:32:00 AM UTC-8, Hans-Peter Diettrich wrote:
> Can somebody explain why the access to members of a union is "undefined"
> except for the most recently written member?

> What can be undefined in a union of data types of the same typesize end
> alignment? Any member written will result in a unique bit/byte pattern
> in memory, whose reading may not make sense in a different type but
> undoubtedly is well defined.

In addition to the previously mentioned reasons, which I agree with,
there used to be (maybe still are) machines that tag memory with the
type stored.  That makes it very difficult to access memory as bits of
a different type.  Some language standards are written to allow for
those machines.

Many languages originated before IEEE floating point, where there
was no expectation that floating point values would agree between
different machines. Even more, some have "trap" values in floating
point, such that one can't reference some values. (VAX has a trap
value for negative zero.)  Since the language can't control all this,
it is made undefined. (But otherwise, machine dependent.)

JVM, while not using tags, is defined such that programs don't
do that.  The verifier is supposed to catch attempts, even if not
executed, to access memory the wrong way. Among others,
that allows for programs to be endian independent. (long takes
twice as much memory as int, but by refusing such access,
programs can't detect that, and so work on all hardware.)

(Not that it is likely that there will be a C++ compiler for JVM.)
[I think the Unisys Libra series may still run tagged Burroughs
architecture code, but if so I doubt there was ever a C compiler. -John]

Back to comp.compilers | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

Union C++ standard Hans-Peter Diettrich <DrDiettrich1@netscape.net> - 2021-11-25 11:11 +0100
  Re: Union C++ standard Kaz Kylheku <480-992-1380@kylheku.com> - 2021-11-26 18:06 +0000
  Re: Union C++ standard gah4 <gah4@u.washington.edu> - 2021-11-26 12:16 -0800
  Re: Union C++ standard David Brown <david.brown@hesbynett.no> - 2021-11-27 16:59 +0100
    Re: Union C++ standard Derek Jones <derek@NOSPAM-knosof.co.uk> - 2021-11-28 12:51 +0000
      Re: Union C++ standard David Brown <david.brown@hesbynett.no> - 2021-11-28 19:00 +0100
        Re: Union C++ standard Derek Jones <derek@NOSPAM-knosof.co.uk> - 2021-11-29 00:09 +0000
          Re: Union C++ standard David Brown <david.brown@hesbynett.no> - 2021-11-29 21:00 +0100
            Re: Union C++ standard Derek Jones <derek@NOSPAM-knosof.co.uk> - 2021-11-30 00:46 +0000
              Re: Union C++ standard George Neuner <gneuner2@comcast.net> - 2021-11-30 17:18 -0500
                Re: Union C++ standard terminology Derek Jones <derek@knosof.co.uk> - 2021-12-01 13:35 +0000
              Re: Union C++ standard David Brown <david.brown@hesbynett.no> - 2021-11-30 23:24 +0100
        Re: Union C++ standard Kaz Kylheku <480-992-1380@kylheku.com> - 2021-11-29 16:39 +0000
          Re: Union C++ standard Keith Thompson <Keith.S.Thompson+u@gmail.com> - 2021-11-29 14:32 -0800

csiph-web