예제 #1
0
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 );
  }
}
예제 #2
0
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;
  }
}