From: Venelin Mitov (vmitov_at_gmail_dot_com)
Date: Mon Jan 03 2005 - 14:38:59 PST
I received the following error when trying to compile (upcc -nightly -T 1 -o point point.c) the program below: Error during remote HTTP translation: upcc: error during UPC-to-C translation (sgiupc stage): ### Compiler Error in file point.i during UPC Lowering phase: ### Could not find field at the given offset 2 It worked when I replaced the lines H.pts[0].X = 9; H.pts[0].Y = 4; // H.pts[1].X = 9; H.pts[1].Y = 6; H.pts[2].X = 6; H.pts[2].Y = 8; H.pts[3].X = 5; H.pts[3].Y = 7; H.pts[4].X = 5; H.pts[4].Y = 6; H.pts[5].X = 6; H.pts[5].Y = 4; H.pts[6].X = 8; H.pts[6].Y = 3; with int i =0; H.pts[i].X = 9; H.pts[i++].Y = 4; H.pts[i].X = 9; H.pts[i++].Y = 6; H.pts[i].X = 6; H.pts[i++].Y = 8; H.pts[i].X = 5; H.pts[i++].Y = 7; H.pts[i].X = 5; H.pts[i++].Y = 6; H.pts[i].X = 6; H.pts[i++].Y = 4; H.pts[i].X = 8; H.pts[i++].Y = 3; #include <upc_relaxed.h> #include <stdio.h> #define N (2*THREADS) #define MODE_ELLIPSE 0 #define MODE_RECTANGLE 1 typedef struct { int X, Y; } Point; typedef struct { shared[] Point * pts; int leftest; int end; } Hull; void hullcpy(shared Hull* dst, shared Hull* src){ int i; dst->pts = (shared[] Point *)upc_alloc(src->end*sizeof(Point)); printf("t%d:hullcpy thread of dst->pts=%d\n", MYTHREAD, upc_threadof(dst->pts)); upc_memcpy(dst->pts, src->pts, src->end*sizeof(Point)); dst->end = src->end; dst->leftest = src->leftest; } int prod(Point p1, Point q1, Point p2, Point q2){ return (q1.X - p1.X)*(q2.Y - p2.Y) - (q1.Y - p1.Y)*(q2.X - p2.X); } /*********************************** MAIN ***********************************/ int main(){ if(MYTHREAD == 0){ Hull H; H.end = 7; H.leftest = 4; H.pts = (shared[] Point *)upc_alloc(H.end*sizeof(Point)); H.pts[0].X = 9; H.pts[0].Y = 4; // H.pts[1].X = 9; H.pts[1].Y = 6; H.pts[2].X = 6; H.pts[2].Y = 8; H.pts[3].X = 5; H.pts[3].Y = 7; H.pts[4].X = 5; H.pts[4].Y = 6; H.pts[5].X = 6; H.pts[5].Y = 4; H.pts[6].X = 8; H.pts[6].Y = 3; Point P, Q; P.X = 1; P.Y = 5; Q.X = 4; Q.Y = 6; //int over = PQLeftOverH(P, Q, H); // printf("over=%d", over); } return 0; } Is there something wrong in the way I use pointers here?