🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: comp.std.c++
Article #661

Re: Zero-length structures and pointer comparisons

#661
From: Steve Clamage
Date: Wed, 11 Nov 1992 19:37
43 lines
2187 bytes
lewis@sophists.com (Lewis G. Pringle) writes:

|In article <1992Nov4.080805.13496@jyu.fi> sakkinen@jyu.fi (Markku Sakkinen) writes:
|...
|>I would first like to return to a much more important, related problem,
|>which somebody brought up here rather recently.
|>Namely, there is nothing in the ARM explicitly saying that
|>p == q  might not yield 1 even when p and q are pointing at two different
|>objects.  This hole makes e.g. some standard idioms in Stroustrup's books
|>implementation dependent.

There is language in the C standard (ANSI 3.3.9, Equality Operators)
which requires that pointers which compare equal point to the same
object (plus some weasel wording).  This is missing from 5.10 of the
ARM and (so far) from the C++ Committee Working Paper.  This issue
should probably be addressed.

|Given code like:

|char* start = new char [10];
|char* end   = start+10;
|char* p     = start;

|assert ((p >= start) && (p <= end));	// 1. this is gauranteed by ANSI-C
|p += 10;
|assert ((p >= start) && (p <= end));	// 2. this is gauranteed by ANSI-C
|p = start;
|p--;
|assert (! ((p >= start) && (p <= end))); // 3. ???????

|Is the last assertion portable? ARM/ANSI-C References?

The first two are also guaranteed by 5.9 in the ARM.

The third example does not have defined behavior in Standard C or C++.
You are allowed to create an address one unit past the end of an array,
but you are not necessarily allowed to create an address ahead of the
array.  The expression "p--" is not necessarily valid, and the following
comparison has no defined semantics.  See ANSI C 3.3.8 and ARM 5.9.
-- 

Steve Clamage, TauMetric Corp, steve@taumet.com
Vice Chair, ANSI C++ Committee, X3J16
Technical Details
Message-ID: <1992Nov11.193744.5560@taumet.com>
Path: arc1-ca.pugleaf.net!sparky!uunet!taumet!steve
References: <1992Oct28.184135.25475@ucc.su.OZ.AU> <1992Oct30.003946.10484@microsoft.com> <1992Nov4.080805.13496@jyu.fi> <1992Nov10.185247.14128@sophists.com>

Show Full Headers
Complete Article Headers
Newsgroups: comp.std.c++
Path: arc1-ca.pugleaf.net!sparky!uunet!taumet!steve
From: steve@taumet.com (Steve Clamage)
Subject: Re: Zero-length structures and pointer comparisons
Message-ID: <1992Nov11.193744.5560@taumet.com>
Organization: TauMetric Corporation
References: <1992Oct28.184135.25475@ucc.su.OZ.AU> <1992Oct30.003946.10484@microsoft.com> <1992Nov4.080805.13496@jyu.fi> <1992Nov10.185247.14128@sophists.com>
Date: Wed, 11 Nov 1992 19:37:44 GMT
Lines: 43