This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: not computable at load time


On Tue, 29 May 2018, Richard Biener wrote:

> The testcase dates back to some repository creation rev. (egcs?) and
> I'm not sure we may compute the difference of addresses of structure
> members.  So that GCC accepts this is probably not required.  Joseph
> may have a definitive answer here.

My model of constant expressions for GNU C says this sort of subtraction 
(of two address constants based on the same object or function address) is 
a symbolic difference constant expression, which should be accepted as 
constant in initializers as an extension; it should be folded like other 
offsetof-like constructs.  That should not depend on whether the result 
gets converted to a type of different width.

However, the result of converting an address constant pointer to an 
integer type is only expected to be a constant expression if the resulting 
type *is* the same width as pointers.

-- 
Joseph S. Myers
joseph@codesourcery.com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]