OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [gcc.dg/] [guality/] [example.c] - Rev 708

Go to most recent revision | Compare with Previous | Blame | View Log

/* { dg-do run { xfail *-*-* } } */
/* { dg-options "-g" } */
 
#define GUALITY_DONT_FORCE_LIVE_AFTER -1
 
#ifndef STATIC_INLINE
#define STATIC_INLINE /*static*/
#endif
 
#include "guality.h"
 
#include <assert.h>
 
/* Test the debug info for the functions used in the VTA
   presentation at the GCC Summit 2008.  */
 
typedef struct list {
  struct list *n;
  int v;
} elt, *node;
 
STATIC_INLINE node
find_val (node c, int v, node e)
{
  while (c < e)
    {
      GUALCHK (c);
      GUALCHK (v);
      GUALCHK (e);
      if (c->v == v)
	return c;
      GUALCHK (c);
      GUALCHK (v);
      GUALCHK (e);
      c++;
    }
  return NULL;
}
 
STATIC_INLINE node
find_prev (node c, node w)
{
  while (c)
    {
      node o = c;
      c = c->n;
      GUALCHK (c);
      GUALCHK (o);
      GUALCHK (w);
      if (c == w)
	return o;
      GUALCHK (c);
      GUALCHK (o);
      GUALCHK (w);
    }
  return NULL;
}
 
STATIC_INLINE node
check_arr (node c, node e)
{
  if (c == e)
    return NULL;
  e--;
  while (c < e)
    {
      GUALCHK (c);
      GUALCHK (e);
      if (c->v > (c+1)->v)
	return c;
      GUALCHK (c);
      GUALCHK (e);
      c++;
    }
  return NULL;
}
 
STATIC_INLINE node
check_list (node c, node t)
{
  while (c != t)
    {
      node n = c->n;
      GUALCHK (c);
      GUALCHK (n);
      GUALCHK (t);
      if (c->v > n->v)
	return c;
      GUALCHK (c);
      GUALCHK (n);
      GUALCHK (t);
      c = n;
    }
  return NULL;
}
 
struct list testme[] = {
  { &testme[1],  2 },
  { &testme[2],  3 },
  { &testme[3],  5 },
  { &testme[4],  7 },
  { &testme[5], 11 },
  { NULL, 13 },
};
 
int
main (int argc, char *argv[])
{
  int n = sizeof (testme) / sizeof (*testme);
  node first, last, begin, end, ret;
 
  GUALCHKXPR (n);
 
  begin = first = &testme[0];
  last = &testme[n-1];
  end = &testme[n];
 
  GUALCHKXPR (first);
  GUALCHKXPR (last);
  GUALCHKXPR (begin);
  GUALCHKXPR (end);
 
  ret = find_val (begin, 13, end);
  GUALCHK (ret);
  assert (ret == last);
 
  ret = find_prev (first, last);
  GUALCHK (ret);
  assert (ret == &testme[n-2]);
 
  ret = check_arr (begin, end);
  GUALCHK (ret);
  assert (!ret);
 
  ret = check_list (first, last);
  GUALCHK (ret);
  assert (!ret);
}
 

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.