1 /* This ICEd due to an incomplete fix for PR57993.  */
2 /* { dg-do compile } */
3 
4 extern "C"
5 {
6   extern double sqrt (double __x) throw ();
7   typedef long unsigned int size_t;
8   typedef struct
9   {
10   }
11   __mbstate_t;
12   void *pov_malloc (size_t size, const char *file, int line, const char *msg);
13   typedef struct Object_Struct OBJECT;
14   typedef struct Ray_Struct RAY;
15   typedef struct istack_struct ISTACK;
16   typedef struct istk_entry INTERSECTION;
17   typedef double UV_VECT[2];
18   typedef double VECTOR[3];
19   typedef struct Transform_Struct TRANSFORM;
20   typedef struct Method_Struct METHODS;
21   typedef int (*ALL_INTERSECTIONS_METHOD) (OBJECT *, RAY *, ISTACK *);
22   typedef int (*INSIDE_METHOD) (VECTOR, OBJECT *);
23   typedef void (*NORMAL_METHOD) (VECTOR, OBJECT *, INTERSECTION *);
24   typedef void (*UVCOORD_METHOD) (UV_VECT, OBJECT *, INTERSECTION *);
25   typedef void *(*COPY_METHOD) (OBJECT *);
26   typedef void (*TRANSLATE_METHOD) (OBJECT *, VECTOR, TRANSFORM *);
27   typedef void (*ROTATE_METHOD) (OBJECT *, VECTOR, TRANSFORM *);
28   typedef void (*SCALE_METHOD) (OBJECT *, VECTOR, TRANSFORM *);
29   typedef void (*TRANSFORM_METHOD) (OBJECT *, TRANSFORM *);
30   typedef void (*INVERT_METHOD) (OBJECT *);
31   typedef void (*DESTROY_METHOD) (OBJECT *);
32   struct Method_Struct
33   {
34     ALL_INTERSECTIONS_METHOD All_Intersections_Method;
35     INSIDE_METHOD Inside_Method;
36     NORMAL_METHOD Normal_Method;
37     UVCOORD_METHOD UVCoord_Method;
38     COPY_METHOD Copy_Method;
39     TRANSLATE_METHOD Translate_Method;
40     ROTATE_METHOD Rotate_Method;
41     SCALE_METHOD Scale_Method;
42     TRANSFORM_METHOD Transform_Method;
43     INVERT_METHOD Invert_Method;
44     DESTROY_METHOD Destroy_Method;
45   };
46   typedef struct Bicubic_Patch_Struct BICUBIC_PATCH;
47   typedef struct Bezier_Node_Struct BEZIER_NODE;
48   struct Bezier_Node_Struct
49   {
50     int Node_Type;
51     int Count;
52   };
53   struct Bicubic_Patch_Struct
54   {
55     METHODS *Methods;
56     int Patch_Type, U_Steps, V_Steps;
57     VECTOR Control_Points[4][4];
58     BEZIER_NODE *Node_Tree;
59   };
60   typedef enum
61   {
62     CSV, SYS, PPM, TARGA, PNG, NONE
63   }
64   SHELLDATA;
65   typedef enum STATS
66   {
67     Number_Of_Pixels =
68       0, Number_Of_Pixels_Supersampled, Number_Of_Samples, Number_Of_Rays,
69       Calls_To_DNoise, Calls_To_Noise, ADC_Saves, Istack_overflows,
70       Ray_RBezier_Tests, Ray_RBezier_Tests_Succeeded, Ray_Bicubic_Tests,
71       Ray_Bicubic_Tests_Succeeded, Ray_Blob_Tests, Ray_Blob_Tests_Succeeded,
72       Blob_Element_Tests, Blob_Element_Tests_Succeeded, Blob_Bound_Tests,
73       Blob_Bound_Tests_Succeeded, Ray_Box_Tests, Ray_Box_Tests_Succeeded,
74       Ray_Cone_Tests, Ray_Cone_Tests_Succeeded, Ray_CSG_Intersection_Tests,
75       Ray_CSG_Intersection_Tests_Succeeded, Ray_CSG_Merge_Tests,
76       Ray_CSG_Merge_Tests_Succeeded, Ray_CSG_Union_Tests,
77       Ray_CSG_Union_Tests_Succeeded, Ray_Disc_Tests, Ray_Disc_Tests_Succeeded,
78       Ray_Fractal_Tests, Ray_Fractal_Tests_Succeeded, Ray_HField_Tests,
79       Ray_HField_Tests_Succeeded, Ray_HField_Box_Tests,
80       Ray_HField_Box_Tests_Succeeded, Ray_HField_Triangle_Tests,
81       Ray_HField_Triangle_Tests_Succeeded, Ray_HField_Block_Tests,
82       Ray_HField_Block_Tests_Succeeded, Ray_HField_Cell_Tests,
83       Ray_HField_Cell_Tests_Succeeded, Ray_IsoSurface_Tests,
84       Ray_IsoSurface_Tests_Succeeded, Ray_IsoSurface_Bound_Tests,
85       Ray_IsoSurface_Bound_Tests_Succeeded, Ray_IsoSurface_Cache,
86       Ray_IsoSurface_Cache_Succeeded, Ray_Lathe_Tests,
87       Ray_Lathe_Tests_Succeeded, Lathe_Bound_Tests,
88       Lathe_Bound_Tests_Succeeded, Ray_Mesh_Tests, Ray_Mesh_Tests_Succeeded,
89       Ray_Plane_Tests, Ray_Plane_Tests_Succeeded, Ray_Polygon_Tests,
90       Ray_Polygon_Tests_Succeeded, Ray_Prism_Tests, Ray_Prism_Tests_Succeeded,
91       Prism_Bound_Tests, Prism_Bound_Tests_Succeeded, Ray_Parametric_Tests,
92       Ray_Parametric_Tests_Succeeded, Ray_Par_Bound_Tests,
93       Ray_Par_Bound_Tests_Succeeded, Ray_Quadric_Tests,
94       Ray_Quadric_Tests_Succeeded, Ray_Poly_Tests, Ray_Poly_Tests_Succeeded,
95       Ray_Sphere_Tests, Ray_Sphere_Tests_Succeeded, Ray_Sphere_Sweep_Tests,
96       Ray_Sphere_Sweep_Tests_Succeeded, Ray_Superellipsoid_Tests,
97       Ray_Superellipsoid_Tests_Succeeded, Ray_Sor_Tests,
98       Ray_Sor_Tests_Succeeded, Sor_Bound_Tests, Sor_Bound_Tests_Succeeded,
99       Ray_Torus_Tests, Ray_Torus_Tests_Succeeded, Torus_Bound_Tests,
100       Torus_Bound_Tests_Succeeded, Ray_Triangle_Tests,
101       Ray_Triangle_Tests_Succeeded, Ray_TTF_Tests, Ray_TTF_Tests_Succeeded,
102       Bounding_Region_Tests, Bounding_Region_Tests_Succeeded,
103       Clipping_Region_Tests, Clipping_Region_Tests_Succeeded,
104       Ray_IsoSurface_Find_Root, Ray_Function_VM_Calls,
105       Ray_Function_VM_Instruction_Est, VBuffer_Tests, VBuffer_Tests_Succeeded,
106       LBuffer_Tests, LBuffer_Tests_Succeeded, Media_Samples, Media_Intervals,
107       Reflected_Rays_Traced, Refracted_Rays_Traced, Transmitted_Rays_Traced,
108       Internal_Reflected_Rays_Traced, Shadow_Cache_Hits,
109       Shadow_Rays_Succeeded, Shadow_Ray_Tests, nChecked, nEnqueued,
110       totalQueues, totalQueueResets, totalQueueResizes, Polynomials_Tested,
111       Roots_Eliminated, MemStat_Smallest_Alloc, MemStat_Largest_Alloc,
112       MemStat_Largest_Mem_Usage, Number_Of_Photons_Shot,
113       Number_Of_Photons_Stored, Number_Of_Global_Photons_Stored,
114       Number_Of_Media_Photons_Stored, Priority_Queue_Add,
115       Priority_Queue_Remove, Gather_Performed_Count, Gather_Expanded_Count,
116       MaxStat
117   }
118   Stats;
119   static int All_Bicubic_Patch_Intersections (OBJECT * Object, RAY * Ray,
120 					      ISTACK * Depth_Stack);
121   static int Inside_Bicubic_Patch (VECTOR IPoint, OBJECT * Object);
122   static void Bicubic_Patch_Normal (VECTOR Result, OBJECT * Object,
123 				    INTERSECTION * Inter);
124   static void Bicubic_Patch_UVCoord (UV_VECT Result, OBJECT * Object,
125 				     INTERSECTION * Inter);
126   static BICUBIC_PATCH *Copy_Bicubic_Patch (OBJECT * Object);
127   static void Translate_Bicubic_Patch (OBJECT * Object, VECTOR Vector,
128 				       TRANSFORM * Trans);
129   static void Rotate_Bicubic_Patch (OBJECT * Object, VECTOR Vector,
130 				    TRANSFORM * Trans);
131   static void Scale_Bicubic_Patch (OBJECT * Object, VECTOR Vector,
132 				   TRANSFORM * Trans);
133   static void Transform_Bicubic_Patch (OBJECT * Object, TRANSFORM * Trans);
134   static void Invert_Bicubic_Patch (OBJECT * Object);
135   static void Destroy_Bicubic_Patch (OBJECT * Object);
136   static METHODS Bicubic_Patch_Methods = {
137     All_Bicubic_Patch_Intersections, Inside_Bicubic_Patch,
138       Bicubic_Patch_Normal, Bicubic_Patch_UVCoord,
139       (COPY_METHOD) Copy_Bicubic_Patch, Translate_Bicubic_Patch,
140       Rotate_Bicubic_Patch, Scale_Bicubic_Patch, Transform_Bicubic_Patch,
141       Invert_Bicubic_Patch, Destroy_Bicubic_Patch
142   };
bezier_value(VECTOR (* Control_Points)[4][4],double u0,double v0,VECTOR P,VECTOR N)143   static void bezier_value (VECTOR (*Control_Points)[4][4], double u0,
144 			    double v0, VECTOR P, VECTOR N)
145   {
146     int i, j;
147     double c, t, ut, vt;
148     double u[4], uu[4], v[4], vv[4];
149     double du[4], duu[4], dv[4], dvv[4];
150     for (i = 1; i < 4; i++)
151       {
152 	vv[i] = vv[i - 1] * (1.0 - v0);
153 	dvv[i] = -i * vv[i - 1];
154       }
155     for (i = 0; i < 4; i++)
156       {
157 	for (j = 0; j < 4; j++)
158 	  {
159 	    t = c * ut * (dv[j] * vv[3 - j] + v[j] * dvv[3 - j]);
160 	  }
161 	t = 1.0 / sqrt (t);
162       }
163   }
intersect_subpatch(BICUBIC_PATCH * Shape,RAY * ray,VECTOR V1[3],double uu[3],double vv[3],double * Depth,VECTOR P,VECTOR N,double * u,double * v)164   static int intersect_subpatch (BICUBIC_PATCH * Shape, RAY * ray,
165 				 VECTOR V1[3], double uu[3], double vv[3],
166 				 double *Depth, VECTOR P, VECTOR N, double *u,
167 				 double *v)
168   {
169     VECTOR Q, T1;
170     VECTOR B[3], IB[3], NN[3];
171     bezier_value ((VECTOR (*)[4][4]) & Shape->Control_Points, uu[1], vv[1],
172 		  T1, NN[1]);
173   }
bezier_tree_walker(RAY * Ray,BICUBIC_PATCH * Shape,BEZIER_NODE * Node,ISTACK * Depth_Stack)174   static int bezier_tree_walker (RAY * Ray, BICUBIC_PATCH * Shape,
175 				 BEZIER_NODE * Node, ISTACK * Depth_Stack)
176   {
177     int i, cnt = 0;
178     double Depth, u, v;
179     double uu[3], vv[3];
180     VECTOR N, P;
181     VECTOR V1[3];
182     if (Node->Node_Type == 0)
183       {
184 	for (i = 0; i < Node->Count; i++)
185 	  {
186 	  }
187 	if (intersect_subpatch (Shape, Ray, V1, uu, vv, &Depth, P, N, &u, &v))
188 	  {
189 	  }
190       }
191   }
All_Bicubic_Patch_Intersections(OBJECT * Object,RAY * Ray,ISTACK * Depth_Stack)192   static int All_Bicubic_Patch_Intersections (OBJECT * Object, RAY * Ray,
193 					      ISTACK * Depth_Stack)
194   {
195     int Found, cnt = 0;
196     switch (((BICUBIC_PATCH *) Object)->Patch_Type)
197       {
198       case 1:
199 	cnt =
200 	  bezier_tree_walker (Ray, (BICUBIC_PATCH *) Object,
201 			      ((BICUBIC_PATCH *) Object)->Node_Tree,
202 			      Depth_Stack);
203       }
204   }
Create_Bicubic_Patch()205   BICUBIC_PATCH *Create_Bicubic_Patch ()
206   {
207     BICUBIC_PATCH *New;
208     New =
209       (BICUBIC_PATCH *) pov_malloc ((sizeof (BICUBIC_PATCH)), "bezier.cpp",
210 				    2079, ("bicubic patch"));
211     New->Methods = &Bicubic_Patch_Methods;
212   }
213 }
214