diff dmd/mtype.c @ 772:cd7da2ba14d1

Fix bug reported by downs. Related to delegate types within tuple template parameters.
author Christian Kamm <kamm incasoftware de>
date Tue, 18 Nov 2008 17:14:57 +0100
parents bfabbac8e705
children 2cf440d511bb
line wrap: on
line diff
--- a/dmd/mtype.c	Sun Nov 16 20:42:45 2008 +0100
+++ b/dmd/mtype.c	Tue Nov 18 17:14:57 2008 +0100
@@ -2951,6 +2951,11 @@
 	{   Argument *arg = Argument::getNth(tf->parameters, i);
 	    Type *t;
 
+	    // each function needs its own copy of a tuple arg, since
+	    // they mustn't share arg flags like inreg, ...
+	    if (arg->type->ty == Ttuple)
+		arg->type = arg->type->syntaxCopy();
+
 	    tf->inuse++;
 	    arg->type = arg->type->semantic(loc,sc);
 	    if (tf->inuse == 1) tf->inuse--;
@@ -3466,7 +3471,7 @@
 	    }
 	}
 	if (t->ty == Ttuple)
-	    *pt = t->syntaxCopy();
+	    *pt = t;
 	else
 	    *pt = t->merge();
     }