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