Bug 38 – Template crashes DMD

Status
RESOLVED
Resolution
FIXED
Severity
normal
Priority
P2
Component
dmd
Product
D
Version
D1 (retired)
Platform
PowerPC
OS
Mac OS X
Creation time
2006-03-12T12:54:00Z
Last change time
2014-02-15T02:10:05Z
Keywords
ice-on-invalid-code, ice-on-valid-code
Assigned to
bugzilla
Creator
braddr

Comments

Comment #0 by braddr — 2006-03-12T12:54:34Z
Issues with the code that follows. 1) Both "if" statements in the foreach in main crash DMD. They can be commented in any way as long as they're not commented together and they'll crash. 2) If you uncomment the "exists" function declaration (that is currently commented) and comment the one below it, DMD will crash. I could just be using templates incorrectly here, but in either case, it's a bug that DMD crashes. I'm using Win2k, DMD 0.149. :void main() { : char[][] result, test; : : foreach (x; test) { : if (exists!(char[][], char[])(result, x) == true) { : return true; : } : if (exists(result, x) == true) { : return true; : } : } :} :template exists(T, U) { : //bool exists(T[][] src, U[] test) { : bool exists(T src, U test) { : foreach (x; src) { : if (x == test) { : return true; : } : } : : return false; : } :} -Kramer
Comment #1 by smjg — 2006-05-18T08:32:08Z
Let me try to make sense of this: - The code as it is crashes DMD. - If you comment out one of the if statements, then it still crashes DMD. - If you comment out both of the if statements, then it doesn't crash. - If you replace the function signature of exists with the one that's commented out, then, in the same way, DMD crashes as long as at least one of the if statements is active. But your code seems valid in most cases. With exists(T, U), it's instantiated as exists!(char[][], char[]). With exists(T[][], U[]), it's instantiated as exists!(char, char). The first if statement is valid for exists(T, U), but not for exists(T[][], U[]).
Comment #2 by thomas-dloop — 2006-06-26T14:09:24Z
Fixed 0.150