Thread overview
[Issue 2862] New: ICE: assert template.c(4048) global.errors
Apr 20, 2009
d-bugmail
Oct 21, 2009
Don
[Issue 2862] ICE(template.c) using type tuple as function argument
Oct 23, 2009
Don
Oct 24, 2009
Don
Nov 02, 2009
Leandro Lucarella
Nov 06, 2009
Walter Bright
April 20, 2009
http://d.puremagic.com/issues/show_bug.cgi?id=2862

           Summary: ICE: assert template.c(4048) global.errors
           Product: D
           Version: 2.028
          Platform: PC
        OS/Version: Windows
            Status: NEW
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: bugzilla@digitalmars.com
        ReportedBy: davidl@126.com


import std.stdio;
void bug(T...)(T t)
{
  writefln(T);
}

void main()
{
  bug(1,2);
}


-- 

October 21, 2009
http://d.puremagic.com/issues/show_bug.cgi?id=2862


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

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Version|2.028                       |1.00


--- Comment #1 from Don <clugdbug@yahoo.com.au> 2009-10-21 03:11:17 PDT ---
An ancient bug. Reduced test case fails on D1 as well, as far back as 0.175.

void foo(T...)(T t) {}
void bug(T...)(T t){
   foo(T);
}

void main(){
  bug(1,2);
}

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


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

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |patch
            Summary|ICE: assert                 |ICE(template.c) using type
                   |template.c(4048)            |tuple as function argument
                   |global.errors               |


--- Comment #2 from Don <clugdbug@yahoo.com.au> 2009-10-23 01:01:17 PDT ---
Root cause: should not be able to use a type as a function parameter. Currently, error messages are generated in the back-end, but some cases are missed. This moves the error message to the front-end where it belongs.
---
Example of backend error now moved to front-end:
void foo(int x){}

alias int BAD;
void main(){
  foo(BAD);
}
---
And also note that non-type tuples are OK as function parameters. This test
case still passes.
int foo(T...)(T t) { return t[0]+t[1]; }
template bug(T...){
   int x = foo(T) + 4;
}

void main(){
  int z = bug!(1, 2).x;
  assert(z==7);
}
---



Index: expression.c ===================================================================
--- expression.c    (revision 215)
+++ expression.c    (working copy)
@@ -462,7 +462,10 @@

     for (size_t i = 0; i < exps->dim; i++)
     {   Expression *arg = (Expression *)exps->data[i];
-
+        if (arg->op == TOKtype)
+        {    arg->error("type %s is not an expression", arg->toChars());
+        arg = new IntegerExp(arg->loc, 0, Type::tint32);
+        }
         if (!arg->type)
         {

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



--- Comment #3 from Don <clugdbug@yahoo.com.au> 2009-10-23 23:15:46 PDT ---
Aargh, this doesn't work because types ARE valid function arguments inside type
expressions. There does not seem to be better place to catch this error
(functionArguments is too late).
So a superficial patch is just to turn the ICE into an error message. It's not
obvious how to phrase the error message so that it makes sense though.

template.c line 4226.

        else
        {
+        if (ta->ty==Ttuple) {
+            ta->error(loc, "Type tuple %s is not a valid template argument",
ta->toChars());
+            continue;
+        }

#ifdef DEBUG
        printf("ta = %d, %d, %s\n", ta->ty, Ttuple, ta->toChars());
#endif
        assert(global.errors);
        }

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
November 02, 2009
http://d.puremagic.com/issues/show_bug.cgi?id=2862


Leandro Lucarella <llucax@gmail.com> changed:

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


--- Comment #4 from Leandro Lucarella <llucax@gmail.com> 2009-11-01 18:48:36 PST ---
SVN commit: http://www.dsource.org/projects/dmd/changeset/233

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
November 06, 2009
http://d.puremagic.com/issues/show_bug.cgi?id=2862


Walter Bright <bugzilla@digitalmars.com> changed:

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


--- Comment #5 from Walter Bright <bugzilla@digitalmars.com> 2009-11-06 11:30:02 PST ---
Fixed dmd 1.051 and 2.036

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