p646.c

来自「this is a gcc file, you can download it 」· C语言 代码 · 共 176 行

C
176
字号
// GROUPS passed i960/*  Bug Id: bnr  PMRS Id: p0000646  Bug is: Urgent Code Generation Problem in gcc-i960 V 1.95*/// Special g++ Options: -Wno-deprecated -Wreturn-typeextern "C"{  int printf (const char *, ...);  void abort ();}struct foo{  static int si;  int i;  foo ();  foo (const foo&);  ~foo ();};intfoo_parm_returns_i (foo foo_arg){  return foo_arg.i;}int foo::si = 0;foo::foo (){  si++;  printf ("new foo @ 0x%x; now %d foos\n", this, si);}foo::foo (const foo &other){  si++;  printf ("another foo @ 0x%x; now %d foos\n", this, si);  *this = other;}foo::~foo (){  si--;  printf ("deleted foo @ 0x%x; now %d foos\n", this, si);}intreturn_1 (){  foo f;  printf ("returning 1\n");  return 1;}intreturn_arg (int arg){  foo f;  printf ("returning %d\n", arg);  return arg;}intreturn_sum (int x, int y){  foo f;  printf ("returning %d+%d\n", x, y);  return x + y;}fooreturn_foo (){  foo f;  printf ("returning foo\n");  return f;}fooreturn_named_foo () return f{  printf ("returning named foo\n");  return f;}foofoo_parm_returns_foo (foo f){  return f;}voidabort_because (char *str){  printf ("aborting because %s\n", str);  abort ();}intwarn_return_1 (){  foo f;  printf ("returning 1\n");}                              // WARNING - control reaches endintwarn_return_arg (int arg){  foo f;  printf ("returning %d\n", arg);  arg;}                              // WARNING - control reaches endintwarn_return_sum (int x, int y){  foo f;  printf ("returning %d+%d\n", x, y);  x + y;}                              // WARNING - control reaches endfoowarn_return_foo (){  foo f;  printf ("returning foo\n");}                              // WARNING - control reaches endfoonowarn_return_named_foo () return f{  printf ("returning named foo\n");}foowarn_foo_parm_returns_foo (foo f){  f;}                              // WARNING - control reaches endmain (){				// WARNING - no type  int ii = return_1 ();  if (ii != 1)    abort_because ("wrong value returned");  int j = return_arg (42);  if (j != 42)    abort_because ("wrong value returned");  int k = return_sum (-69, 69);  if (k != 0)    abort_because ("wrong value returned");  foo f1 = return_named_foo ();  if (foo::si != 1)    abort_because ("wrong number of foos");  f1.i = 5;  int l = foo_parm_returns_i (f1);  if (l != 5)    abort_because ("l != 5");  foo f2 = foo_parm_returns_foo (f1);  if (foo::si != 2)    abort_because ("wrong number of foos");  if (f2.i != 5)    abort_because ("f2.i != 5");  foo f3 = return_foo ();  if (foo::si != 3)    abort_because ("wrong number of foos");  printf("PASS\n");  return 0;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?