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 + -
显示快捷键?