www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 4623] New: Non-integer type allowed as static array size

reply d-bugmail puremagic.com writes:
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: -------
Aug 11 2010
next sibling parent d-bugmail puremagic.com writes:
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: -------
Sep 29 2010
prev sibling next sibling parent d-bugmail puremagic.com writes:
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: -------
Sep 29 2010
prev sibling next sibling parent d-bugmail puremagic.com writes:
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: -------
Sep 29 2010
prev sibling next sibling parent d-bugmail puremagic.com writes:
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: -------
Sep 30 2010
prev sibling next sibling parent reply d-bugmail puremagic.com writes:
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: -------
Oct 01 2010
parent Don <nospam nospam.com> writes:
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.
Oct 01 2010
prev sibling parent d-bugmail puremagic.com writes:
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: -------
Oct 08 2010