Thread overview
[Issue 4623] New: Non-integer type allowed as static array size
Aug 11, 2010
Iain Buclaw
Sep 29, 2010
Don
Sep 29, 2010
Iain Buclaw
Sep 30, 2010
Iain Buclaw
Sep 30, 2010
Don
Oct 01, 2010
Iain Buclaw
Oct 02, 2010
Don
Oct 09, 2010
Walter Bright
August 11, 2010
http://d.puremagic.com/issues/show_bug.cgi?id=4623

           Summary: Non-integer type allowed as static array size
           Product: D
           Version: D1 & D2
          Platform: All
        OS/Version: Linux
            Status: NEW
          Severity: major
          Priority: P2
         Component: DMD
        AssignedTo: nobody@puremagic.com
        ReportedBy: ibuclaw@ubuntu.com


--- Comment #0 from Iain Buclaw <ibuclaw@ubuntu.com> 2010-08-11 11:44:22 PDT ---
The code:

void main()
{
    int[0.128] a;
}

Should not compile, rather error with the message stating that either the size of array 'a' has non-integer type, or that the compiler cannot implicitly convert expression (0.128) of type double to uint.

See: http://dstress.kuehne.cn/nocompile/o/opIndex_05.d

Regards

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


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

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |patch
                 CC|                            |clugdbug@yahoo.com.au


--- Comment #1 from Don <clugdbug@yahoo.com.au> 2010-09-29 12:43:23 PDT ---
PATCH mtype.c, TypeSArray::semantic(), line 3344.

        dinteger_t d1 = dim->toInteger();
-        dim = dim->castTo(sc, tsize_t);
+        dim = dim->implicitCastTo(sc, Type::tsize_t);
        dim = dim->optimize(WANTvalue);
        dinteger_t d2 = dim->toInteger();
        if (dim->op == TOKerror)
           goto Lbaddim;

        if (d1 != d2)
            goto Loverflow;

... and further down:

              Loverflow:
                error(loc, "index %jd overflow for static array", d1);
+              Lbaddim:
                dim = new IntegerExp(0, 1, tsize_t);

TEST CASE for test suite
//bug 4623
static assert( !is (typeof(() {int[123.1] x; return x; })));

I've done this patch in a relatively complicated way, so that something like:
int[7654321.0] bug4623b;
generates only one error message, not two.

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



--- Comment #2 from Iain Buclaw <ibuclaw@ubuntu.com> 2010-09-29 14:50:14 PDT ---
Can't you catch it in the lexer?

Just thinking out loud...

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



--- Comment #3 from Iain Buclaw <ibuclaw@ubuntu.com> 2010-09-29 17:39:15 PDT ---
You can catch it in parse.c

@@ -2428,6 +2428,12 @@
                 {
                     //printf("it's type[expression]\n");
                     inBrackets++;
+
+            if (token.value != TOKint32v && token.value != TOKuns32v &&
+            token.value != TOKint64v && token.value != TOKuns64v &&
+                peekNext() == TOKrbracket)
+            error("I should be a an integral value, not [%s]",
token.toChars());
+
                     Expression *e = parseAssignExp();           // [
expression ]
                     if (token.value == TOKslice)
                     {


I certainly don't mind either way. Your patch works just great, thanks!

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



--- Comment #4 from Don <clugdbug@yahoo.com.au> 2010-09-30 06:26:43 PDT ---
(In reply to comment #3)
> You can catch it in parse.c
[snip]

You can, but then it doesn't catch things like:

const float f = 1.23;

int[f] z;

> I certainly don't mind either way. Your patch works just great, thanks!

It looks as though you got that case from dstress. Have you been running the dstress tests? If you have, I'd be very interested to see the results. I believe that all the compiler ICE bugs are fixed, but I have no idea about how many others are still failing.

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



--- Comment #5 from Iain Buclaw <ibuclaw@ubuntu.com> 2010-10-01 11:18:20 PDT ---
I haven't ran dstress using the DMD compiler. I think I stumbled upon the case somewhere from an archived message on the ML that probably got forgotten about.

I wouldn't go as far as saying all compiler ICE bugs are fixed just yet (I raised an issue recently with CTFE with a patch supplied, for example), though they certainly are very far and few between now.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
October 02, 2010
d-bugmail@puremagic.com wrote:
> http://d.puremagic.com/issues/show_bug.cgi?id=4623
> 
> 
> 
> --- Comment #5 from Iain Buclaw <ibuclaw@ubuntu.com> 2010-10-01 11:18:20 PDT ---
> I haven't ran dstress using the DMD compiler. I think I stumbled upon the case
> somewhere from an archived message on the ML that probably got forgotten about.

Ah, OK.

> I wouldn't go as far as saying all compiler ICE bugs are fixed just yet (I
> raised an issue recently with CTFE with a patch supplied, for example), though
> they certainly are very far and few between now.

I was only referring to the ICE bugs in dstress.
October 09, 2010
http://d.puremagic.com/issues/show_bug.cgi?id=4623


Walter Bright <bugzilla@digitalmars.com> changed:

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


--- Comment #6 from Walter Bright <bugzilla@digitalmars.com> 2010-10-08 18:18:23 PDT ---
http://www.dsource.org/projects/dmd/changeset/712

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