Mercurial > projects > ldc
view tests/testincludes/Makefile @ 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 | 6aaa3d3c1183 |
children | 628433c343b4 |
line wrap: on
line source
# Copied from tango runtime makefile. # Designed to work with GNU make # Targets: # make # Same as make all # make lib # Build the common library # make doc # Generate documentation # make clean # Delete unneeded files created by build process LIB_TARGET=libtangobos-partial.a LIB_MASK=libtangobos-partial.a* CP=cp -f RM=rm -f MD=mkdir -p ADD_CFLAGS= ADD_DFLAGS= #CFLAGS=-O3 $(ADD_CFLAGS) CFLAGS=-g $(ADD_CFLAGS) #DFLAGS=-release -O3 -inline -w $(ADD_DFLAGS) DFLAGS=-g -w -noasm $(ADD_DFLAGS) #TFLAGS=-O3 -inline -w $(ADD_DFLAGS) TFLAGS=-g -w -noasm $(ADD_DFLAGS) DOCFLAGS=-version=DDoc CC=gcc LC=llvm-ar rsv CLC=ar rsv DC=ldc LLC=llvm-as LLVMLINK=llvm-link LLC=llc INC_DEST= LIB_DEST= DOC_DEST= .SUFFIXES: .d .bc .d.bc: $(DC) -c $(DFLAGS) $< -of$@ # $(DC) -c $(DFLAGS) $< -of$@ targets : lib all : lib lib : tangobos.lib ###################################################### OBJ_CORE= \ std/gc.bc \ std/outofmemory.bc \ # std/asserterror.bc \ # std/math.bc \ # std/stdarg.bc # std/format.bc \ ALL_OBJS= \ $(OBJ_CORE) ###################################################### tangobos.lib : $(LIB_TARGET) $(LIB_TARGET) : $(ALL_OBJS) $(RM) $(LIB_MASK) $(LLVMLINK) -o=$(LIB_TARGET).bc `find -name "*.bc"` $(LLC) -o=$(LIB_TARGET).s $(LIB_TARGET).bc $(CC) -c -o $(LIB_TARGET) $(LIB_TARGET).s clean : $(RM) $(ALL_OBJS) find . -name "$(LIB_MASK)" | xargs $(RM)