Mercurial > projects > ldc
view dmd2/readme.txt @ 1499:df11cdec45a2
Another shot at fixing the issues with (constant) struct literals and their addresses. See DMD2682, #218, #324.
The idea is to separate the notion of const from 'this variable can always be
replaced with its initializer' in the frontend. To do that, I introduced
Declaration::isSameAsInitializer, which is overridden in VarDeclaration to
return false for constants that have a struct literal initializer.
So
{{{
const S s = S(5);
void foo() { auto ps = &s; }
// is no longer replaced by
void foo() { auto ps = &(S(5)); }
}}}
To make taking the address of a struct constant with a struct-initializer
outside of function scope possible, I made sure that AddrExp::optimize doesn't
try to run the argument's optimization with WANTinterpret - that'd again
replace the constant with a struct literal temporary.
author | Christian Kamm <kamm incasoftware de> |
---|---|
date | Sun, 14 Jun 2009 19:49:58 +0200 |
parents | 638d16625da2 |
children |
line wrap: on
line source
The D Programming Language Compiler Front End Source Copyright (c) 1999-2009, by Digital Mars http://www.digitalmars.com All Rights Reserved This is the source code to the front end Digital Mars D compiler. It covers the lexical analysis, parsing, and semantic analysis of the D Programming Language defined in the documents at http://www.digitalmars.com/d/ These sources are free, they are redistributable and modifiable under the terms of the GNU General Public License (attached as gpl.txt), or the Artistic License (attached as artistic.txt). The optimizer and code generator sources are covered under a separate license, backendlicense.txt. It does not apply to anything else distributed by Digital Mars, including D compiler executables. -Walter Bright