219
|
1 // $HeadURL$
|
|
2 // $Date$
|
|
3 // $Author$
|
|
4
|
|
5 // @author@ h3r3tic <foo@bar.baz>
|
|
6 // @date@ 2004-12-26
|
|
7 // @uri@ news:cqmufn$26oj$1@digitaldaemon.com
|
|
8 // @url@ nntp://digitalmars.com/digitalmars.D.bugs/2606
|
|
9
|
|
10 // __DSTRESS_DFLAGS__ -inline
|
|
11
|
|
12 module dstress.run.bug_20041226_A;
|
|
13
|
678
|
14 void dummy(...){
|
219
|
15 }
|
|
16
|
|
17 struct vec3{
|
|
18 vec3 opSub(vec3 a){
|
|
19 vec3 x;
|
|
20 return x;
|
|
21 }
|
|
22 }
|
|
23
|
|
24 struct Face{
|
|
25 vec3 a;
|
|
26 }
|
|
27
|
|
28 struct Mesh{
|
|
29 Face[] faces;
|
|
30 }
|
|
31
|
|
32 struct GeomObject{
|
|
33 Mesh mesh;
|
|
34 char[] name;
|
|
35 vec3 xlate;
|
|
36 }
|
|
37
|
|
38 class AseLoader{
|
|
39 this(){
|
|
40 GeomObject go;
|
|
41 go.name = "NODE";
|
|
42 geomObjects ~= go;
|
|
43 }
|
|
44
|
|
45 GeomObject[] geomObjects;
|
|
46 }
|
|
47
|
|
48
|
|
49 void extractTriangles(GeomObject geomObj){
|
|
50 void foobar(){
|
|
51 try{
|
|
52 writefln("name: ", geomObj.name);
|
|
53
|
|
54 return; // avoid accessing the array with 0 elements in the next line
|
|
55 geomObj.mesh.faces[0].a - geomObj.xlate; // when this line is removed, the bug doesn't appear
|
|
56 }catch(Object err){
|
|
57 throw err;
|
|
58 }
|
|
59 }
|
|
60
|
|
61 foobar();
|
|
62 }
|
|
63
|
|
64 int main(){
|
|
65 try{
|
|
66 AseLoader al = new AseLoader;
|
|
67
|
|
68 foreach(GeomObject go; al.geomObjects){
|
678
|
69 dummy("processing ", go.name);
|
219
|
70 extractTriangles(go);
|
|
71 }
|
|
72 }catch(Object err){
|
678
|
73 dummy("Exception caught:", err);
|
219
|
74 }
|
|
75
|
|
76 return 0;
|
|
77 }
|
678
|
78
|