www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 8711] New: Missing line number and bad error messages with a wrong functions array initialization

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

           Summary: Missing line number and bad error messages with a
                    wrong functions array initialization
           Product: D
           Version: D2
          Platform: x86
        OS/Version: Windows
            Status: NEW
          Keywords: diagnostic
          Severity: major
          Priority: P2
         Component: DMD
        AssignedTo: nobody puremagic.com
        ReportedBy: bearophile_hugs eml.cc



This is correct code:

int function(int)[] foos = [x => 0];
void main() {}


This wrong program is the same, but it lacks the []:

int function(int) foos = [x => 0];
void main() {}


DMD 2.061alpha gives on the second program:

temp.d(1): Error: cannot implicitly convert expression (__lambda2) of type int
function(int x) pure nothrow  safe to int(int)
Error: no size for type int(int)


Some problems:
- The first line doesn't seem to mention that foos is not typed as an array.
- The second error message lacks a line number:
- I am not sure that "no size for ..." is correct.

(This bug has severity 'major' as Don asked me for error messages missing line
numbers.)

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Sep 23 2012
parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=8711


yebblies <yebblies gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |yebblies gmail.com
           Platform|x86                         |All
         OS/Version|Windows                     |All
           Severity|major                       |normal



It is valid to initialize a pointer to T with an array of T, unless it is a
function pointer.

Lowering the priority because the first error _does_ have a line number, and
the second is just nonsense.

   -493,13 +493,12    Initializer *ArrayInitializer::semantic(Scope *sc, Type
*t, NeedInterpret needIn
     type = t;
     Initializer *aa = NULL;
     t = t->toBasetype();
     switch (t->ty)
     {
-        case Tpointer:
         case Tsarray:
         case Tarray:
             break;

         case Tvector:
             t = ((TypeVector *)t)->basetype;
             break;

        case Taarray:
             // was actually an associative array literal
             aa = new ExpInitializer(loc, toAssocArrayLiteral());
             return aa->semantic(sc, t, needInterpret);

+        case Tpointer:
+            if (t->nextOf()->ty != Tfunction)
+                break;
         default:
             error(loc, "cannot use array to initialize %s", type->toChars());
             goto Lerr;
     }

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