Jump to page: 1 2
Thread overview
[Issue 3979] New: Order-of-compilation and forward reference errors
Jun 10, 2010
Don
Jul 20, 2010
Rainer Schuetze
Aug 16, 2010
Adam D. Ruppe
Aug 16, 2010
Rainer Schuetze
Aug 27, 2010
Walter Bright
March 17, 2010
http://d.puremagic.com/issues/show_bug.cgi?id=3979

           Summary: Order-of-compilation and forward reference errors
           Product: D
           Version: 2.041
          Platform: Other
        OS/Version: All
            Status: NEW
          Severity: blocker
          Priority: P2
         Component: DMD
        AssignedTo: nobody@puremagic.com
        ReportedBy: bugzilla@kyllingen.net


--- Comment #0 from Lars T. Kyllingstad <bugzilla@kyllingen.net> 2010-03-17 01:39:39 PDT ---
I've run into this while working on std.process.  Take the following two files:

    // This is a.d:
    import std.stdio;

    // This is process.d:
    module std.process;
    import std.stdio;
    void foo(File f = std.stdio.stdin);

Compile them in the order they're written here, and you get a nonsensical error:

    lars@neutrino:~/tmp$ dmd -c a.d process.d
    process.d(3): Error: cannot implicitly convert expression (stdin)
    of type File to File

Make the following change to process.d:

    module std.process;
    import std.stdio: File, stdin;  // Selective imports now
    void foo(File f = std.stdio.stdin);

This causes an additional forward reference error:

    lars@neutrino:~/tmp$ dmd -c a.d process.d
    process.d(2): Error: alias std.process.stdin forward reference of
    stdin
    process.d(3): Error: cannot implicitly convert expression (stdin)
    of type File to File

Compile them in reverse order, and it works fine in both cases:

    lars@neutrino:~/tmp$ dmd -c process.d a.d


Note:  I'm marking this as a blocker because it's rather crucial to the new std.process design, and I don't want to muck about with Andrei's makefile just to make it compile.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
June 10, 2010
http://d.puremagic.com/issues/show_bug.cgi?id=3979


Don <clugdbug@yahoo.com.au> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |clugdbug@yahoo.com.au
           Severity|blocker                     |normal


--- Comment #1 from Don <clugdbug@yahoo.com.au> 2010-06-09 23:57:00 PDT ---
This is a weird bug, but it seems to be caused by having a module with the same
name as one in the standard library. If you change the module statement to (for
example) module.std.process2; the problem disappears.
Since this is obscure (you probably won't encounter it unless you're working on
Phobos!) and has a trivial workaround, downgrading from blocker.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
June 10, 2010
http://d.puremagic.com/issues/show_bug.cgi?id=3979



--- Comment #2 from Lars T. Kyllingstad <bugzilla@kyllingen.net> 2010-06-10 00:18:56 PDT ---
I agree, the workaround is trivial up to the point where you want to include the module in Phobos.  But that's exactly where I am now.

I can build Phobos with the module in question by changing the order of modules in the makefile, but it's very fragile.  When I try to run the unittests, for instance, the bug reappears.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
July 20, 2010
http://d.puremagic.com/issues/show_bug.cgi?id=3979


Lars T. Kyllingstad <bugzilla@kyllingen.net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |schveiguy@yahoo.com


--- Comment #3 from Lars T. Kyllingstad <bugzilla@kyllingen.net> 2010-07-20 11:41:52 PDT ---
Anxious to get this extremely annoying problem fixed, I've finally been able to reduce it to a small test case:

  // This is a.d
  module a;
  import b;
  struct Foo {}
  Foo foo;

  // This is b.d
  module b;
  import a;
  void fun(Foo f = a.foo);

Compilation gives:

  $ dmd -c a.d b.d
  b.d(4): Error: cannot implicitly convert expression (foo) of type Foo to Foo

Phew!  It took a while, hopefully it's worth it.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
July 20, 2010
http://d.puremagic.com/issues/show_bug.cgi?id=3979


Rainer Schuetze <r.sagitario@gmx.de> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |r.sagitario@gmx.de


--- Comment #4 from Rainer Schuetze <r.sagitario@gmx.de> 2010-07-20 13:24:50 PDT ---
Now, it very much looks like bug 190 with the forward reference hidden in the cyclic import.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
August 16, 2010
http://d.puremagic.com/issues/show_bug.cgi?id=3979


Adam D. Ruppe <destructionator@gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |destructionator@gmail.com


--- Comment #5 from Adam D. Ruppe <destructionator@gmail.com> 2010-08-16 07:40:21 PDT ---
Has anyone tried Rainer's patch in bug 190 to see if it fixes this?

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
August 16, 2010
http://d.puremagic.com/issues/show_bug.cgi?id=3979



--- Comment #6 from Rainer Schuetze <r.sagitario@gmx.de> 2010-08-16 08:15:19 PDT ---
(In reply to comment #5)
> Has anyone tried Rainer's patch in bug 190 to see if it fixes this?

Yes, I did and it works for the reduced test case, too. Can't tell about the original report, though.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
August 17, 2010
http://d.puremagic.com/issues/show_bug.cgi?id=3979



--- Comment #7 from Lars T. Kyllingstad <bugzilla@kyllingen.net> 2010-08-17 00:46:28 PDT ---
It does indeed fix the original problem.  Thanks, Rainer!

Any chance we can get this into the next release?

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
August 27, 2010
http://d.puremagic.com/issues/show_bug.cgi?id=3979


Walter Bright <bugzilla@digitalmars.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
                 CC|                            |bugzilla@digitalmars.com
         Resolution|                            |FIXED


--- Comment #8 from Walter Bright <bugzilla@digitalmars.com> 2010-08-27 16:06:37 PDT ---
http://www.dsource.org/projects/dmd/changeset/634

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
September 08, 2010
http://d.puremagic.com/issues/show_bug.cgi?id=3979


Steven Schveighoffer <schveiguy@yahoo.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|RESOLVED                    |REOPENED
         Depends on|                            |190, 4753
         Resolution|FIXED                       |


--- Comment #9 from Steven Schveighoffer <schveiguy@yahoo.com> 2010-09-08 05:33:34 PDT ---
Reopened, Walter reverted the changes that fix this in http://www.dsource.org/projects/dmd/changeset/652

It appears that 4753 has an updated patch, can be applied soon?

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
« First   ‹ Prev
1 2