Thread overview
[Issue 3775] New: Compiler segfaults on cast(string) stdin.byLine.
Feb 06, 2010
Bernard Helyer
[Issue 3775] Segfault(cast.c): casting no-parameter template function using property syntax
Feb 09, 2010
Don
Feb 09, 2010
Don
Feb 12, 2010
Walter Bright
Feb 12, 2010
Kosmonaut
Mar 09, 2010
Walter Bright
February 06, 2010
http://d.puremagic.com/issues/show_bug.cgi?id=3775

           Summary: Compiler segfaults on cast(string) stdin.byLine.
           Product: D
           Version: 2.040
          Platform: x86
        OS/Version: Linux
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody@puremagic.com
        ReportedBy: blood.of.life@gmail.com


--- Comment #0 from Bernard Helyer <blood.of.life@gmail.com> 2010-02-05 18:36:45 PST ---
Apologies if this is a duplicate, I couldn't see anything *obvious*.

I'm sure this is invalid code, but I got on to doing this (don't ask):

---
module segfault;

import std.stdio;

void main()
{
    foreach (line; cast(string) stdin.byLine) {}
}
---

Which leads to:

---
$ dmd segfault
Segmentation fault
---

Needless to say, no object or executable file is produced.

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


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

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Version|2.040                       |1.00
            Summary|Segfault(cast.c): on        |Segfault(cast.c): casting
                   |cast(string) stdin.byLine.  |no-parameter template
                   |                            |function using property
                   |                            |syntax


--- Comment #1 from Don <clugdbug@yahoo.com.au> 2010-02-09 06:10:02 PST ---
Reduced test case also segfaults on D1, even ancient ones like DMD0.175.

struct Bug3775 {
  static int byLine()()    { return 1;   }
}

static assert( cast(int) Bug3775.byLine);

Somehow, in DotIdExp::semantic, it has no type.

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



--- Comment #2 from Don <clugdbug@yahoo.com.au> 2010-02-09 11:28:25 PST ---
ROOT CAUSE: This is an interaction between IFTI and property syntax.

PATCH: At the end of CastExp::semantic, make sure that the function has a type.

Index: expression.c ===================================================================
--- expression.c    (revision 373)
+++ expression.c    (working copy)
@@ -7796,7 +7796,11 @@

     // BUG: Check for casting array types, such as void[] to int*[]
     }
-
+    if (!e1->type && e1->op==TOKdottd)
+    {
+    error("%s is a template and cannot be called with property syntax",
e1->toChars());
+    return new ErrorExp();
+    }
     e = e1->castTo(sc, to);
     return e;
 }

=====
Some similar cases cause the compiler to do strange things (see below), so I'm
not completely satisfied with the patch. But let's just fix the segfault.

struct Bug3775 {
  static int byLine()()    { return 1;   }
}
void main(){ auto xxx = Bug3775.byLine; } // accepted; xxx is an int.
void main(){ int xxx = Bug3775.byLine; } // rejected: (Bug3775).byLine() has no
value

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


Walter Bright <bugzilla@digitalmars.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |bugzilla@digitalmars.com


--- Comment #3 from Walter Bright <bugzilla@digitalmars.com> 2010-02-11 22:55:17 PST ---
changeset 378 and 379

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


Kosmonaut <Kosmonaut@tempinbox.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |Kosmonaut@tempinbox.com


--- Comment #4 from Kosmonaut <Kosmonaut@tempinbox.com> 2010-02-12 11:46:05 PST ---
(In reply to comment #3)
> changeset 378 and 379

http://www.dsource.org/projects/dmd/changeset/378 http://www.dsource.org/projects/dmd/changeset/379

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


Walter Bright <bugzilla@digitalmars.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|                            |FIXED


--- Comment #5 from Walter Bright <bugzilla@digitalmars.com> 2010-03-08 22:23:27 PST ---
Fixed dmd 1.057 and 2.041

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