view bin/ldmd @ 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 c3c23d2c5407
children 593f99fddd2f
line wrap: on
line source

#! /usr/bin/env bash

# Default to 'ldc' next to this file
LDC=`basename "$0"`/ldc
if [ ! -x "$LDC" ]; then
    # If that doesn't work, assume this script was called via $PATH
    # and do the same for ldc
    if which ldc &> /dev/null; then
        LDC=ldc
    else
        echo 'ldc not found, check your installation' >/dev/stderr
        exit 1
    fi
fi

declare -a ARGS
IDX=0
for arg; do
    case "$arg" in
    -C*)
        # turn -Cfoo into -foo.
        # Useful for passing -inline to ldc, for instance.
        arg="-${arg:2}"
        ;;
    -debug|-debug=*|-version=*)
        arg="-d$arg"
        ;;
    -inline)
        arg="-enable-inlining"
        ;;
    -fPIC)
        arg="-relocation-model=pic"
        ;;
    --a|--b|--c|--f|--r|--w|--x|--y)
        # "Hidden debug switches"
        # Are these ever used?
        arg="-hidden-debug${arg:1}"
        ;;
    esac
    ARGS[IDX++]="$arg"
done

exec "$LDC" "${ARGS[@]}"