void op_arg_check ( op_set set, int m, op_arg arg, int * ninds, const char * name ) { /* error checking for op_arg_dat */ if ( arg.argtype == OP_ARG_DAT ) { if ( set == NULL ) op_err_print ( "invalid set", m, name ); if ( arg.map != NULL && strstr( arg.type, ":soa")!= NULL) op_err_print( "SoA dataset accessed indirectly", m, name ); if ( arg.map == NULL && arg.dat->set != set ) op_err_print ( "dataset set does not match loop set", m, name ); if ( arg.map != NULL && ( arg.map->from != set || arg.map->to != arg.dat->set ) ) op_err_print ( "mapping error", m, name ); if ( ( arg.map == NULL && arg.idx != -1 ) || ( arg.map != NULL && ( arg.idx >= arg.map->dim || arg.idx < -1*arg.map->dim ) ) ) op_err_print ( "invalid index", m, name ); if ( arg.dat->dim != arg.dim ) op_err_print ( "dataset dim does not match declared dim", m, name ); if ( strcmp ( arg.dat->type, arg.type ) ) op_err_print ( "dataset type does not match declared type", m, name ); if ( arg.idx >= 0 ) ( *ninds )++; } /* error checking for op_arg_gbl */ if ( arg.argtype == OP_ARG_GBL ) { if ( !strcmp ( arg.type, "error" ) ) op_err_print ( "datatype does not match declared type", m, name ); if ( arg.dim <= 0 ) op_err_print ( "dimension should be strictly positive", m, name ); if ( arg.data == NULL ) op_err_print ( "NULL pointer for global data", m, name ); } }
void op_arg_check ( op_set set, int m, op_arg arg, int * ninds, const char * name ) { /* error checking for op_arg_dat */ switch ( arg.argtype ) { /* error checking for op_arg_dat */ case OP_ARG_DAT: if ( set == NULL ) op_err_print ( "invalid set", m, name ); if ( arg.map == NULL && arg.dat->set != set ) op_err_print ( "dataset set does not match loop set", m, name ); if ( arg.map != NULL && ( arg.map->from != set || arg.map->to != arg.dat->set ) ) op_err_print ( "mapping error", m, name ); if ( ( arg.map == NULL && arg.idx != OP_NONE ) || ( arg.map != NULL && ( (arg.idx != OP_ALL && arg.idx < 0) || arg.idx >= arg.map->dim ) ) ) op_err_print ( "invalid index", m, name ); if ( arg.dat->dim != arg.dim ) op_err_print ( "dataset dim does not match declared dim", m, name ); if ( strcmp ( arg.dat->type, arg.type ) ) op_err_print ( "dataset type does not match declared type", m, name ); if ( arg.idx >= 0 || arg.idx == OP_ALL ) ( *ninds )++; break; /* error checking for op_arg_mat */ case OP_ARG_MAT: if ( set == NULL ) op_err_print ( "invalid set", m, name ); if ( arg.map == NULL && arg.mat->rowset != set ) op_err_print ( "row dataset does not match loop set", m, name ); if ( arg.map2 == NULL && arg.mat->colset != set ) op_err_print ( "row dataset does not match loop set", m, name ); if ( arg.map != NULL && ( arg.map->from != set || arg.map->to != arg.mat->rowset ) ) op_err_print ( "mapping error in rowmap", m, name ); if ( arg.map2 != NULL && ( arg.map2->from != set || arg.map2->to != arg.mat->colset ) ) op_err_print ( "mapping error in colmap", m, name ); if ( ( arg.map == NULL && arg.idx != OP_NONE ) || ( arg.map != NULL && ( (arg.idx != OP_ALL && arg.idx > OP_I_OFFSET && arg.idx < 0) || arg.idx >= arg.map->dim ) ) ) op_err_print ( "invalid row index", m, name ); if ( ( arg.map2 == NULL && arg.idx2 != OP_NONE ) || ( arg.map2 != NULL && ( (arg.idx2 != OP_ALL && arg.idx2 > OP_I_OFFSET && arg.idx2 < 0) || arg.idx2 >= arg.map2->dim ) ) ) op_err_print ( "invalid col index", m, name ); if ( arg.mat->dim != arg.dim ) op_err_print ( "dataset dim does not match declared dim", m, name ); if ( strcmp ( arg.mat->type, arg.type ) ) op_err_print ( "dataset type does not match declared type", m, name ); if ( arg.idx >= 0 || arg.idx == OP_ALL ) ( *ninds )++; break; /* error checking for op_arg_gbl */ case OP_ARG_GBL: if ( !strcmp ( arg.type, "error" ) ) op_err_print ( "datatype does not match declared type", m, name ); if ( arg.dim <= 0 ) op_err_print ( "dimension should be strictly positive", m, name ); if ( arg.data == NULL ) op_err_print ( "NULL pointer for global data", m, name ); break; } }