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

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [gcc-4.2.2/] [gcc/] [testsuite/] [g++.old-deja/] [g++.mike/] [p646.C] - Diff between revs 149 and 154

Only display areas with differences | Details | Blame | View Log

Rev 149 Rev 154
// { dg-do assemble  }
// { dg-do assemble  }
// { dg-options "-Wno-deprecated -Wreturn-type" }
// { dg-options "-Wno-deprecated -Wreturn-type" }
// GROUPS passed i960
// GROUPS passed i960
/*
/*
  Bug Id: bnr
  Bug Id: bnr
  PMRS Id: p0000646
  PMRS Id: p0000646
  Bug is: Urgent Code Generation Problem in gcc-i960 V 1.95
  Bug is: Urgent Code Generation Problem in gcc-i960 V 1.95
*/
*/
extern "C"
extern "C"
{
{
  int printf (const char *, ...);
  int printf (const char *, ...);
  void abort ();
  void abort ();
}
}
struct foo
struct foo
{
{
  static int si;
  static int si;
  int i;
  int i;
  foo ();
  foo ();
  foo (const foo&);
  foo (const foo&);
  ~foo ();
  ~foo ();
};
};
int
int
foo_parm_returns_i (foo foo_arg)
foo_parm_returns_i (foo foo_arg)
{
{
  return foo_arg.i;
  return foo_arg.i;
}
}
int foo::si = 0;
int foo::si = 0;
foo::foo ()
foo::foo ()
{
{
  si++;
  si++;
  printf ("new foo @ 0x%x; now %d foos\n", this, si);
  printf ("new foo @ 0x%x; now %d foos\n", this, si);
}
}
foo::foo (const foo &other)
foo::foo (const foo &other)
{
{
  si++;
  si++;
  printf ("another foo @ 0x%x; now %d foos\n", this, si);
  printf ("another foo @ 0x%x; now %d foos\n", this, si);
  *this = other;
  *this = other;
}
}
foo::~foo ()
foo::~foo ()
{
{
  si--;
  si--;
  printf ("deleted foo @ 0x%x; now %d foos\n", this, si);
  printf ("deleted foo @ 0x%x; now %d foos\n", this, si);
}
}
int
int
return_1 ()
return_1 ()
{
{
  foo f;
  foo f;
  printf ("returning 1\n");
  printf ("returning 1\n");
  return 1;
  return 1;
}
}
int
int
return_arg (int arg)
return_arg (int arg)
{
{
  foo f;
  foo f;
  printf ("returning %d\n", arg);
  printf ("returning %d\n", arg);
  return arg;
  return arg;
}
}
int
int
return_sum (int x, int y)
return_sum (int x, int y)
{
{
  foo f;
  foo f;
  printf ("returning %d+%d\n", x, y);
  printf ("returning %d+%d\n", x, y);
  return x + y;
  return x + y;
}
}
foo
foo
return_foo ()
return_foo ()
{
{
  foo f;
  foo f;
  printf ("returning foo\n");
  printf ("returning foo\n");
  return f;
  return f;
}
}
foo
foo
foo_parm_returns_foo (foo f)
foo_parm_returns_foo (foo f)
{
{
  return f;
  return f;
}
}
void
void
abort_because (const char *str)
abort_because (const char *str)
{
{
  printf ("aborting because %s\n", str);
  printf ("aborting because %s\n", str);
  abort ();
  abort ();
}
}
int
int
warn_return_1 ()
warn_return_1 ()
{
{
  foo f;
  foo f;
  printf ("returning 1\n");
  printf ("returning 1\n");
}                              // { dg-warning "" } control reaches end
}                              // { dg-warning "" } control reaches end
int
int
warn_return_arg (int arg)
warn_return_arg (int arg)
{
{
  foo f;
  foo f;
  printf ("returning %d\n", arg);
  printf ("returning %d\n", arg);
  arg;
  arg;
}                              // { dg-warning "" } control reaches end
}                              // { dg-warning "" } control reaches end
int
int
warn_return_sum (int x, int y)
warn_return_sum (int x, int y)
{
{
  foo f;
  foo f;
  printf ("returning %d+%d\n", x, y);
  printf ("returning %d+%d\n", x, y);
  x + y;
  x + y;
}                              // { dg-warning "" } control reaches end
}                              // { dg-warning "" } control reaches end
foo
foo
warn_return_foo ()
warn_return_foo ()
{
{
  foo f;
  foo f;
  printf ("returning foo\n");
  printf ("returning foo\n");
}                              // { dg-warning "" } control reaches end
}                              // { dg-warning "" } control reaches end
foo
foo
warn_foo_parm_returns_foo (foo f)
warn_foo_parm_returns_foo (foo f)
{
{
  f;
  f;
}                              // { dg-warning "" } control reaches end
}                              // { dg-warning "" } control reaches end
main ()                        // { dg-warning "" } no type
main ()                        // { dg-warning "" } no type
{
{
  int ii = return_1 ();
  int ii = return_1 ();
  if (ii != 1)
  if (ii != 1)
    abort_because ("wrong value returned");
    abort_because ("wrong value returned");
  int j = return_arg (42);
  int j = return_arg (42);
  if (j != 42)
  if (j != 42)
    abort_because ("wrong value returned");
    abort_because ("wrong value returned");
  int k = return_sum (-69, 69);
  int k = return_sum (-69, 69);
  if (k != 0)
  if (k != 0)
    abort_because ("wrong value returned");
    abort_because ("wrong value returned");
  foo f1 = return_foo ();
  foo f1 = return_foo ();
  if (foo::si != 1)
  if (foo::si != 1)
    abort_because ("wrong number of foos");
    abort_because ("wrong number of foos");
  f1.i = 5;
  f1.i = 5;
  int l = foo_parm_returns_i (f1);
  int l = foo_parm_returns_i (f1);
  if (l != 5)
  if (l != 5)
    abort_because ("l != 5");
    abort_because ("l != 5");
  foo f2 = foo_parm_returns_foo (f1);
  foo f2 = foo_parm_returns_foo (f1);
  if (foo::si != 2)
  if (foo::si != 2)
    abort_because ("wrong number of foos");
    abort_because ("wrong number of foos");
  if (f2.i != 5)
  if (f2.i != 5)
    abort_because ("f2.i != 5");
    abort_because ("f2.i != 5");
  foo f3 = return_foo ();
  foo f3 = return_foo ();
  if (foo::si != 3)
  if (foo::si != 3)
    abort_because ("wrong number of foos");
    abort_because ("wrong number of foos");
  printf("PASS\n");
  printf("PASS\n");
  return 0;
  return 0;
}
}
 
 

powered by: WebSVN 2.1.0

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