www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 16295] New: REG since 2.069: undefined symbol that should be

https://issues.dlang.org/show_bug.cgi?id=16295

          Issue ID: 16295
           Summary: REG since 2.069: undefined symbol that should be
                    defined
           Product: D
           Version: D2
          Hardware: x86
                OS: Mac OS X
            Status: NEW
          Severity: regression
          Priority: P1
         Component: dmd
          Assignee: nobody puremagic.com
          Reporter: timothee.cour2 gmail.com

out_D=/tmp/

dmd=$dmd_069_X



$dmd -c -of$out_D/main.o main.d && nm $out_D/main.o | grep ' U _D4main8__'

For dmd v2.071.1 and dmd v2.069, we these undefined symbols; the ones starting
with _D4main8_ should not be undefined:

U _D15TypeInfo_Struct6__vtblZ
U _D4main8__T1AThZ1A8__T1BThZ1B5emptyMFNaNbNdNiNfZi
U _D4main8__T1AThZ1A8__T1BThZ1B5frontMFNaNbNiNfZPv
U _D4main8__T1AThZ1A8__T1BThZ1B8popFrontMFNaNbNiNfZv
U __d_arraybounds
U __d_assert
U __d_assert_msg
U __d_unittest

eg, _D4main8__T1AThZ1A8__T1BThZ1B5frontMFNaNbNiNfZPv corresponds to:
pure nothrow  nogc  safe void* main.A!(ubyte).A.B!(ubyte).B.front()

For ldc (based on DMD v2.071.1 and LLVM 3.8.0) and dmd dmd v2.068, we get the
correct undefined symbols:
U _D15TypeInfo_Struct6__vtblZ
U __d_arraybounds
U __d_assert
U __d_assert_msg
U __d_unittest

----

fun.d:
----
import main;
void fun(A!(ubyte) a){
}

main.d:
----
module main;
import fun;

struct A(T)
{
    void test()
    {
        foreach (v; this)
        {
        }
    }

    auto range()
    {
        return B!T();
    }

    int opApply(int delegate(T))
    {
        auto r = range;
        foreach (v; r)
        {
        }
        return 0;
    }

    struct B(T)
    {
        auto front()
        {
            void* a;
            return a;
        }

         property empty()
        {
            return 0;
        }

        void popFront()
        {
        }
    }

}

alias Au = A!(ubyte);

--
Jul 18 2016