www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 6196] New: with statement with single statement breaks linking

reply d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=6196

           Summary: with statement with single statement breaks linking
           Product: D
           Version: D2
          Platform: Other
        OS/Version: Windows
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody puremagic.com
        ReportedBy: andrej.mitrovich gmail.com



11:05:51 PDT ---
module test;
static import std.stdio;

void main()
{
    with (std.stdio) writeln();
}

OPTLINK (R) for Win32  Release 8.00.12
Copyright (C) Digital Mars 1989-2010  All rights reserved.
http://www.digitalmars.com/ctg/optlink.html
C:\DOCUME~1\Andrej\LOCALS~1\Temp\.rdmd\rdmd-test.d-A365FA805A6F8950E12081529066367B\test-d-A365FA805A6F8950E12081529066367B.obj(test-d-A365FA805A6F8950E12081529066367B)
 Error 42: Symbol Undefined _D3std5stdio12__T7writelnZ7writelnFZv

This will work:
module test;
static import std.stdio;

void main()
{
    with (std.stdio) { writeln(); }
}

Note how in the next example the first `with` statement has curly braces and
references writeln(), it gets linked in, and the linker errors are gone for the
second `with` statement:

static import std.stdio;

void main()
{
    with (std.stdio) { writeln(); }
    with (std.stdio) writeln();
}

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jun 22 2011
next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=6196


bearophile_hugs eml.cc changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |bearophile_hugs eml.cc




 module test;
 static import std.stdio;
 
 void main()
 {
     with (std.stdio) writeln();
My guess is that with() was designed mostly for struct instances, class instances, and enum instances. I didn't even know you are allowed to use it with modules. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jun 22 2011
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=6196


SomeDude <lovelydear mailmetrash.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |lovelydear mailmetrash.com



PDT ---
Compiles and runs fine with 2.059 Win32.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Apr 24 2012
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=6196




14:10:20 PDT ---

 Compiles and runs fine with 2.059 Win32.
That's not true. module test; static import std.stdio; void main() { with (std.stdio) writeln(); } $ dmd test.d
 OPTLINK (R) for Win32  Release 8.00.12
Copyright (C) Digital Mars 1989-2010 All rights reserved. http://www.digitalmars.com/ctg/optlink.html test.obj(test) Error 42: Symbol Undefined _D3std5stdio12__T7writelnZ7writelnFZv --- errorlevel 1 Maybe it works on Posix, but it's not working on my win32 system. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Apr 24 2012
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=6196


hsteoh quickfur.ath.cx changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |hsteoh quickfur.ath.cx



It doesn't work on Linux 64-bit, git HEAD:

$ dmd test
test.o: In function `_Dmain':
test.d:(.text._Dmain+0x4): undefined reference to
`_D3std5stdio12__T7writelnZ7writelnFZv'
collect2: error: ld returned 1 exit status
--- errorlevel 1

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Oct 27 2012
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=6196




Interestingly enough, if I replace the with() clause with std.stdio.writeln()
(which links without errors) and look at the resulting executable, it does
define _D3std5stdio12__T7writelnZ7writelnFZv.

Which means that the template isn't getting instantiated when used with a
'with' clause, perhaps?

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Oct 27 2012
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=6196




10:47:27 PDT ---
The symbol is probably not referenced properly or something.

module test;
static import std.stdio;

void main()
{
    std.stdio.writeln("test");  // reference symbol
    with (std.stdio) writeln("test");
}

If you remove the commented line you'll get a linker error.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Oct 27 2012
prev sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=6196




09:59:11 PST ---
*** Issue 8414 has been marked as a duplicate of this issue. ***

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Feb 18 2013