your vec_dist looks wrong. You need to be more specific with the pointers. target is not a pointer, it's just a 3 dimensional vector, so it doesn't need the .x.
vec_dist(my.x, target);
Also, don't use target, as it changes every frame. Store target in a local var[3] before the while loop, and then check with that.
Final code:
Code:
var targ[3];
vec_set(temp, my.x);
temp.z -= 900; // trace downwards 500 quants below
c_trace (my.x, temp, IGNORE_ME|IGNORE_MODELS|IGNORE_SPRITES|IGNORE_YOU);
my.push = 0;
my.passable=off;
while(vec_dist(my.x, targ) > 5)
{
c_move(my, nullvector, vector(0,0,-7*time_step),ignore_you|ignore_sprites);
if (my.roll<90)||(my.roll>180){my.roll+=10*time;} // rolls while falling
wait(1);
}