From 921e5a0eb4f27bab1d45761abdf877d611c6bc9b Mon Sep 17 00:00:00 2001 From: Jeff Law <law@gcc.gnu.org> Date: Tue, 19 Aug 1997 01:34:40 -0600 Subject: [PATCH] Initial revision From-SVN: r14840 --- gcc/testsuite/ChangeLog | 1928 ++++ gcc/testsuite/README.g++ | 64 + gcc/testsuite/README.gcc | 71 + gcc/testsuite/config/default.exp | 20 + gcc/testsuite/g++.old-deja/Makefile.in | 12 + gcc/testsuite/g++.old-deja/configure.in | 15 + .../g++.old-deja/g++.benjamin/.cvsignore | 2 + .../g++.old-deja/g++.benjamin/p12475.C | 5 + gcc/testsuite/g++.old-deja/g++.bob/array1.C | 6 + gcc/testsuite/g++.old-deja/g++.bob/array2.C | 4 + gcc/testsuite/g++.old-deja/g++.bob/case1.C | 13 + gcc/testsuite/g++.old-deja/g++.bob/cond1.C | 31 + gcc/testsuite/g++.old-deja/g++.bob/delete1.C | 22 + gcc/testsuite/g++.old-deja/g++.bob/extern_C.C | 9 + gcc/testsuite/g++.old-deja/g++.bob/friend1.C | 4 + .../g++.old-deja/g++.bob/incomplete-cast1.C | 16 + gcc/testsuite/g++.old-deja/g++.bob/inherit1.C | 25 + gcc/testsuite/g++.old-deja/g++.bob/inherit2.C | 22 + gcc/testsuite/g++.old-deja/g++.bob/nested1.C | 15 + gcc/testsuite/g++.old-deja/g++.bob/packed1.C | 16 + .../g++.old-deja/g++.bob/protected1.C | 41 + gcc/testsuite/g++.old-deja/g++.bob/static1.C | 12 + .../g++.old-deja/g++.bob/template1.C | 27 + .../g++.old-deja/g++.bob/template2.C | 49 + .../g++.old-deja/g++.bob/template3.C | 48 + .../g++.old-deja/g++.bob/template4.C | 20 + gcc/testsuite/g++.old-deja/g++.brendan/README | 41 + .../g++.old-deja/g++.brendan/abstract1.C | 25 + .../g++.old-deja/g++.brendan/access1.C | 23 + .../g++.old-deja/g++.brendan/alignof.C | 13 + .../g++.old-deja/g++.brendan/ambiguity1.C | 17 + .../g++.old-deja/g++.brendan/anon-union1.C | 7 + gcc/testsuite/g++.old-deja/g++.brendan/arm1.C | 10 + gcc/testsuite/g++.old-deja/g++.brendan/arm2.C | 19 + gcc/testsuite/g++.old-deja/g++.brendan/arm3.C | 9 + .../g++.old-deja/g++.brendan/array-refs.C | 6 + .../g++.old-deja/g++.brendan/array1.C | 7 + .../g++.old-deja/g++.brendan/asm-extn1.C | 14 + .../g++.old-deja/g++.brendan/bit-fields1.C | 5 + .../g++.old-deja/g++.brendan/bit-fields2.C | 13 + .../g++.old-deja/g++.brendan/bool1.C | 11 + .../g++.old-deja/g++.brendan/code-gen1.C | 40 + .../g++.old-deja/g++.brendan/code-gen2.C | 18 + .../g++.old-deja/g++.brendan/code-gen3.C | 34 + .../g++.old-deja/g++.brendan/code-gen4.C | 31 + .../g++.old-deja/g++.brendan/code-gen5.C | 57 + .../g++.old-deja/g++.brendan/code-gen6.C | 54 + .../g++.old-deja/g++.brendan/copy1.C | 21 + .../g++.old-deja/g++.brendan/copy2.C | 79 + .../g++.old-deja/g++.brendan/copy3.C | 57 + .../g++.old-deja/g++.brendan/copy4.C | 58 + .../g++.old-deja/g++.brendan/copy5.C | 84 + .../g++.old-deja/g++.brendan/copy6.C | 55 + .../g++.old-deja/g++.brendan/copy7.C | 29 + .../g++.old-deja/g++.brendan/copy8.C | 67 + .../g++.old-deja/g++.brendan/copy9.C | 40 + .../g++.old-deja/g++.brendan/crash1.C | 44 + .../g++.old-deja/g++.brendan/crash10.C | 28 + .../g++.old-deja/g++.brendan/crash11.C | 23 + .../g++.old-deja/g++.brendan/crash12.C | 10 + .../g++.old-deja/g++.brendan/crash13.C | 35 + .../g++.old-deja/g++.brendan/crash14.C | 23 + .../g++.old-deja/g++.brendan/crash15.C | 21 + .../g++.old-deja/g++.brendan/crash16.C | 12 + .../g++.old-deja/g++.brendan/crash17.C | 35 + .../g++.old-deja/g++.brendan/crash18.C | 17 + .../g++.old-deja/g++.brendan/crash19.C | 1704 ++++ .../g++.old-deja/g++.brendan/crash2.C | 10 + .../g++.old-deja/g++.brendan/crash20.C | 13 + .../g++.old-deja/g++.brendan/crash22.C | 11 + .../g++.old-deja/g++.brendan/crash23.C | 15 + .../g++.old-deja/g++.brendan/crash24.C | 19 + .../g++.old-deja/g++.brendan/crash25.C | 18 + .../g++.old-deja/g++.brendan/crash26.C | 11 + .../g++.old-deja/g++.brendan/crash27.C | 20 + .../g++.old-deja/g++.brendan/crash28.C | 12 + .../g++.old-deja/g++.brendan/crash29.C | 18 + .../g++.old-deja/g++.brendan/crash3.C | 14 + .../g++.old-deja/g++.brendan/crash30.C | 9 + .../g++.old-deja/g++.brendan/crash31.C | 16 + .../g++.old-deja/g++.brendan/crash32.C | 5 + .../g++.old-deja/g++.brendan/crash33.C | 6 + .../g++.old-deja/g++.brendan/crash34.C | 3 + .../g++.old-deja/g++.brendan/crash35.C | 20 + .../g++.old-deja/g++.brendan/crash36.C | 7 + .../g++.old-deja/g++.brendan/crash37.C | 16 + .../g++.old-deja/g++.brendan/crash38.C | 42 + .../g++.old-deja/g++.brendan/crash39.C | 8 + .../g++.old-deja/g++.brendan/crash4.C | 6 + .../g++.old-deja/g++.brendan/crash40.C | 17 + .../g++.old-deja/g++.brendan/crash41.C | 11 + .../g++.old-deja/g++.brendan/crash42.C | 6 + .../g++.old-deja/g++.brendan/crash43.C | 25 + .../g++.old-deja/g++.brendan/crash44.C | 26 + .../g++.old-deja/g++.brendan/crash45.C | 3 + .../g++.old-deja/g++.brendan/crash46.C | 26 + .../g++.old-deja/g++.brendan/crash47.C | 93 + .../g++.old-deja/g++.brendan/crash48.C | 21 + .../g++.old-deja/g++.brendan/crash49.C | 12 + .../g++.old-deja/g++.brendan/crash5.C | 106 + .../g++.old-deja/g++.brendan/crash50.C | 29 + .../g++.old-deja/g++.brendan/crash51.C | 24 + .../g++.old-deja/g++.brendan/crash52.C | 13 + .../g++.old-deja/g++.brendan/crash53.C | 24 + .../g++.old-deja/g++.brendan/crash54.C | 9 + .../g++.old-deja/g++.brendan/crash55.C | 12 + .../g++.old-deja/g++.brendan/crash56.C | 383 + .../g++.old-deja/g++.brendan/crash57.C | 13 + .../g++.old-deja/g++.brendan/crash58.C | 10 + .../g++.old-deja/g++.brendan/crash59.C | 1374 +++ .../g++.old-deja/g++.brendan/crash6.C | 16 + .../g++.old-deja/g++.brendan/crash60.C | 12 + .../g++.old-deja/g++.brendan/crash61.C | 5 + .../g++.old-deja/g++.brendan/crash62.C | 32 + .../g++.old-deja/g++.brendan/crash63.C | 15 + .../g++.old-deja/g++.brendan/crash64.C | 19 + .../g++.old-deja/g++.brendan/crash65.C | 14 + .../g++.old-deja/g++.brendan/crash66.C | 137 + .../g++.old-deja/g++.brendan/crash67.C | 3 + .../g++.old-deja/g++.brendan/crash68.C | 28 + .../g++.old-deja/g++.brendan/crash7.C | 47 + .../g++.old-deja/g++.brendan/crash8.C | 12 + .../g++.old-deja/g++.brendan/crash9.C | 24 + .../g++.old-deja/g++.brendan/ctors1.C | 27 + .../g++.old-deja/g++.brendan/ctors2.C | 28 + .../g++.old-deja/g++.brendan/ctors3.C | 17 + gcc/testsuite/g++.old-deja/g++.brendan/cvt1.C | 44 + gcc/testsuite/g++.old-deja/g++.brendan/cvt2.C | 9 + gcc/testsuite/g++.old-deja/g++.brendan/cvt3.C | 48 + gcc/testsuite/g++.old-deja/g++.brendan/cvt4.C | 27 + gcc/testsuite/g++.old-deja/g++.brendan/cvt5.C | 27 + .../g++.old-deja/g++.brendan/def-fns1.C | 22 + .../g++.old-deja/g++.brendan/delete1.C | 15 + .../g++.old-deja/g++.brendan/delete2.C | 25 + .../g++.old-deja/g++.brendan/dtors1.C | 56 + .../g++.old-deja/g++.brendan/dtors2.C | 74 + .../g++.old-deja/g++.brendan/dtors3.C | 66 + .../g++.old-deja/g++.brendan/enum-clash.C | 6 + .../g++.old-deja/g++.brendan/enum1.C | 14 + .../g++.old-deja/g++.brendan/enum10.C | 21 + .../g++.old-deja/g++.brendan/enum11.C | 16 + .../g++.old-deja/g++.brendan/enum12.C | 12 + .../g++.old-deja/g++.brendan/enum13.C | 15 + .../g++.old-deja/g++.brendan/enum14.C | 4 + .../g++.old-deja/g++.brendan/enum2.C | 19 + .../g++.old-deja/g++.brendan/enum3.C | 15 + .../g++.old-deja/g++.brendan/enum4.C | 10 + .../g++.old-deja/g++.brendan/enum5.C | 10 + .../g++.old-deja/g++.brendan/enum6.C | 16 + .../g++.old-deja/g++.brendan/enum7.C | 7 + .../g++.old-deja/g++.brendan/enum8.C | 25 + .../g++.old-deja/g++.brendan/enum9.C | 15 + .../g++.old-deja/g++.brendan/err-msg1.C | 6 + .../g++.old-deja/g++.brendan/err-msg10.C | 6 + .../g++.old-deja/g++.brendan/err-msg11.C | 3 + .../g++.old-deja/g++.brendan/err-msg12.C | 6 + .../g++.old-deja/g++.brendan/err-msg2.C | 4 + .../g++.old-deja/g++.brendan/err-msg3.C | 20 + .../g++.old-deja/g++.brendan/err-msg4.C | 10 + .../g++.old-deja/g++.brendan/err-msg5.C | 4 + .../g++.old-deja/g++.brendan/err-msg6.C | 7 + .../g++.old-deja/g++.brendan/err-msg7.C | 6 + .../g++.old-deja/g++.brendan/err-msg8.C | 3 + .../g++.old-deja/g++.brendan/err-msg9.C | 6 + .../g++.old-deja/g++.brendan/friend1.C | 19 + .../g++.old-deja/g++.brendan/friend2.C | 15 + .../g++.old-deja/g++.brendan/friend3.C | 28 + .../g++.old-deja/g++.brendan/friend4.C | 6 + .../g++.old-deja/g++.brendan/groff1.C | 33 + .../g++.old-deja/g++.brendan/init1.C | 11 + .../g++.old-deja/g++.brendan/init10.C | 3 + .../g++.old-deja/g++.brendan/init11.C | 9 + .../g++.old-deja/g++.brendan/init12.C | 9 + .../g++.old-deja/g++.brendan/init13.C | 7 + .../g++.old-deja/g++.brendan/init2.C | 5 + .../g++.old-deja/g++.brendan/init3.C | 38 + .../g++.old-deja/g++.brendan/init4.C | 5 + .../g++.old-deja/g++.brendan/init5.C | 6 + .../g++.old-deja/g++.brendan/init6.C | 15 + .../g++.old-deja/g++.brendan/init7.C | 16 + .../g++.old-deja/g++.brendan/init8.C | 16 + .../g++.old-deja/g++.brendan/init9.C | 11 + .../g++.old-deja/g++.brendan/label1.C | 4 + .../g++.old-deja/g++.brendan/label2.C | 11 + .../g++.old-deja/g++.brendan/line1.C | 4 + .../g++.old-deja/g++.brendan/misc1.C | 6 + .../g++.old-deja/g++.brendan/misc10.C | 6 + .../g++.old-deja/g++.brendan/misc11.C | 20 + .../g++.old-deja/g++.brendan/misc12.C | 16 + .../g++.old-deja/g++.brendan/misc13.C | 9 + .../g++.old-deja/g++.brendan/misc14.C | 12 + .../g++.old-deja/g++.brendan/misc15.C | 13 + .../g++.old-deja/g++.brendan/misc16.C | 19 + .../g++.old-deja/g++.brendan/misc17.C | 36 + .../g++.old-deja/g++.brendan/misc2.C | 11 + .../g++.old-deja/g++.brendan/misc3.C | 12 + .../g++.old-deja/g++.brendan/misc4.C | 10 + .../g++.old-deja/g++.brendan/misc5.C | 7 + .../g++.old-deja/g++.brendan/misc6.C | 9 + .../g++.old-deja/g++.brendan/misc7.C | 15 + .../g++.old-deja/g++.brendan/misc8.C | 18 + .../g++.old-deja/g++.brendan/misc9.C | 28 + .../g++.old-deja/g++.brendan/mutable1.C | 6 + .../g++.old-deja/g++.brendan/nest1.C | 15 + .../g++.old-deja/g++.brendan/nest10.C | 30 + .../g++.old-deja/g++.brendan/nest11.C | 19 + .../g++.old-deja/g++.brendan/nest12.C | 21 + .../g++.old-deja/g++.brendan/nest13.C | 20 + .../g++.old-deja/g++.brendan/nest15.C | 37 + .../g++.old-deja/g++.brendan/nest16.C | 41 + .../g++.old-deja/g++.brendan/nest17.C | 12 + .../g++.old-deja/g++.brendan/nest18.C | 31 + .../g++.old-deja/g++.brendan/nest19.C | 40 + .../g++.old-deja/g++.brendan/nest2.C | 18 + .../g++.old-deja/g++.brendan/nest20.C | 30 + .../g++.old-deja/g++.brendan/nest21.C | 95 + .../g++.old-deja/g++.brendan/nest22.C | 7 + .../g++.old-deja/g++.brendan/nest23.C | 15 + .../g++.old-deja/g++.brendan/nest24.C | 14 + .../g++.old-deja/g++.brendan/nest3.C | 12 + .../g++.old-deja/g++.brendan/nest4.C | 9 + .../g++.old-deja/g++.brendan/new-array.C | 18 + gcc/testsuite/g++.old-deja/g++.brendan/new1.C | 5 + gcc/testsuite/g++.old-deja/g++.brendan/new2.C | 67 + gcc/testsuite/g++.old-deja/g++.brendan/new3.C | 35 + gcc/testsuite/g++.old-deja/g++.brendan/ns1.C | 18 + .../g++.old-deja/g++.brendan/operators1.C | 14 + .../g++.old-deja/g++.brendan/operators2.C | 4 + .../g++.old-deja/g++.brendan/operators3.C | 4 + .../g++.old-deja/g++.brendan/operators4.C | 121 + .../g++.old-deja/g++.brendan/operators5.C | 52 + .../g++.old-deja/g++.brendan/operators6.C | 11 + .../g++.old-deja/g++.brendan/operators7.C | 13 + .../g++.old-deja/g++.brendan/operators8.C | 11 + .../g++.old-deja/g++.brendan/overload1.C | 21 + .../g++.old-deja/g++.brendan/overload10.C | 25 + .../g++.old-deja/g++.brendan/overload11.C | 11 + .../g++.old-deja/g++.brendan/overload2.C | 43 + .../g++.old-deja/g++.brendan/overload3.C | 27 + .../g++.old-deja/g++.brendan/overload4.C | 23 + .../g++.old-deja/g++.brendan/overload5.C | 23 + .../g++.old-deja/g++.brendan/overload6.C | 24 + .../g++.old-deja/g++.brendan/overload7.C | 41 + .../g++.old-deja/g++.brendan/overload8.C | 9 + .../g++.old-deja/g++.brendan/overload9.C | 20 + .../g++.old-deja/g++.brendan/parse1.C | 17 + .../g++.old-deja/g++.brendan/parse2.C | 10 + .../g++.old-deja/g++.brendan/prepost1.C | 15 + .../g++.old-deja/g++.brendan/prepost2.C | 10 + .../g++.old-deja/g++.brendan/prepost3.C | 7 + .../g++.old-deja/g++.brendan/prepost4.C | 10 + .../g++.old-deja/g++.brendan/ptolemy1.C | 23 + .../g++.old-deja/g++.brendan/ptolemy2.C | 69 + .../g++.old-deja/g++.brendan/ptrmem1.C | 21 + .../g++.old-deja/g++.brendan/ptrmem2.C | 26 + .../g++.old-deja/g++.brendan/ptrmem3.C | 32 + .../g++.old-deja/g++.brendan/ptrmem4.C | 16 + .../g++.old-deja/g++.brendan/recurse.C | 80 + .../g++.old-deja/g++.brendan/redecl1.C | 5 + .../g++.old-deja/g++.brendan/redecl2.C | 51 + .../g++.old-deja/g++.brendan/redecl3.C | 17 + .../g++.old-deja/g++.brendan/reference1.C | 53 + .../g++.old-deja/g++.brendan/rtti1.C | 8 + .../g++.old-deja/g++.brendan/scope1.C | 8 + .../g++.old-deja/g++.brendan/scope2.C | 29 + .../g++.old-deja/g++.brendan/scope3.C | 25 + .../g++.old-deja/g++.brendan/scope4.C | 32 + .../g++.old-deja/g++.brendan/scope5.C | 21 + .../g++.old-deja/g++.brendan/shadow1.C | 8 + .../g++.old-deja/g++.brendan/sizeof1.C | 15 + .../g++.old-deja/g++.brendan/sizeof2.C | 18 + .../g++.old-deja/g++.brendan/sizeof3.C | 15 + .../g++.old-deja/g++.brendan/sizeof4.C | 13 + .../g++.old-deja/g++.brendan/sizeof5.C | 17 + .../g++.old-deja/g++.brendan/sorry1.C | 36 + .../g++.old-deja/g++.brendan/static1.C | 4 + .../g++.old-deja/g++.brendan/static2.C | 19 + .../g++.old-deja/g++.brendan/static3.C | 15 + .../g++.old-deja/g++.brendan/synth1.C | 33 + .../g++.old-deja/g++.brendan/template1.C | 17 + .../g++.old-deja/g++.brendan/template11.C | 47 + .../g++.old-deja/g++.brendan/template12.C | 8 + .../g++.old-deja/g++.brendan/template13.C | 15 + .../g++.old-deja/g++.brendan/template15.C | 19 + .../g++.old-deja/g++.brendan/template16.C | 10 + .../g++.old-deja/g++.brendan/template17.C | 12 + .../g++.old-deja/g++.brendan/template18.C | 14 + .../g++.old-deja/g++.brendan/template19.C | 26 + .../g++.old-deja/g++.brendan/template2.C | 14 + .../g++.old-deja/g++.brendan/template20.C | 21 + .../g++.old-deja/g++.brendan/template21.C | 43 + .../g++.old-deja/g++.brendan/template22.C | 22 + .../g++.old-deja/g++.brendan/template23.C | 34 + .../g++.old-deja/g++.brendan/template24.C | 20 + .../g++.old-deja/g++.brendan/template25.C | 36 + .../g++.old-deja/g++.brendan/template26.C | 31 + .../g++.old-deja/g++.brendan/template27.C | 14 + .../g++.old-deja/g++.brendan/template28.C | 13 + .../g++.old-deja/g++.brendan/template29.C | 12 + .../g++.old-deja/g++.brendan/template3.C | 49 + .../g++.old-deja/g++.brendan/template30.C | 16 + .../g++.old-deja/g++.brendan/template4.C | 11 + .../g++.old-deja/g++.brendan/template5.C | 48 + .../g++.old-deja/g++.brendan/template6.C | 30 + .../g++.old-deja/g++.brendan/template7.C | 48 + .../g++.old-deja/g++.brendan/template8.C | 20 + .../g++.old-deja/g++.brendan/template9.C | 19 + .../g++.old-deja/g++.brendan/temporary1.C | 13 + .../g++.old-deja/g++.brendan/typedef1.C | 29 + .../g++.old-deja/g++.brendan/union1.C | 14 + .../g++.old-deja/g++.brendan/union2.C | 13 + .../g++.old-deja/g++.brendan/union3.C | 14 + .../g++.old-deja/g++.brendan/visibility1.C | 16 + .../g++.old-deja/g++.brendan/visibility10.C | 14 + .../g++.old-deja/g++.brendan/visibility2.C | 10 + .../g++.old-deja/g++.brendan/visibility3.C | 38 + .../g++.old-deja/g++.brendan/visibility4.C | 14 + .../g++.old-deja/g++.brendan/visibility5.C | 8 + .../g++.old-deja/g++.brendan/visibility6.C | 17 + .../g++.old-deja/g++.brendan/visibility7.C | 15 + .../g++.old-deja/g++.brendan/visibility8.C | 15 + .../g++.old-deja/g++.brendan/visibility9.C | 16 + .../g++.old-deja/g++.brendan/vtables1.C | 42 + .../g++.old-deja/g++.brendan/warnings1.C | 6 + .../g++.old-deja/g++.brendan/warnings10.C | 10 + .../g++.old-deja/g++.brendan/warnings2.C | 7 + .../g++.old-deja/g++.brendan/warnings3.C | 16 + .../g++.old-deja/g++.brendan/warnings4.C | 10 + .../g++.old-deja/g++.brendan/warnings5.C | 10 + .../g++.old-deja/g++.brendan/warnings6.C | 9 + .../g++.old-deja/g++.brendan/warnings7.C | 21 + .../g++.old-deja/g++.brendan/warnings8.C | 7 + .../g++.old-deja/g++.brendan/warnings9.C | 7 + .../g++.old-deja/g++.bugs/891229_02.C | 24 + .../g++.old-deja/g++.bugs/891230_01.C | 20 + .../g++.old-deja/g++.bugs/900107_01.C | 37 + .../g++.old-deja/g++.bugs/900119_01.C | 46 + .../g++.old-deja/g++.bugs/900121_01.C | 16 + .../g++.old-deja/g++.bugs/900121_02.C | 49 + .../g++.old-deja/g++.bugs/900121_05.C | 30 + .../g++.old-deja/g++.bugs/900127_01.C | 25 + .../g++.old-deja/g++.bugs/900127_02.C | 46 + .../g++.old-deja/g++.bugs/900205_02.C | 28 + .../g++.old-deja/g++.bugs/900205_03.C | 48 + .../g++.old-deja/g++.bugs/900205_04.C | 26 + .../g++.old-deja/g++.bugs/900207_03.C | 49 + .../g++.old-deja/g++.bugs/900208_02.C | 17 + .../g++.old-deja/g++.bugs/900208_03.C | 18 + .../g++.old-deja/g++.bugs/900208_04.C | 20 + .../g++.old-deja/g++.bugs/900209_01.C | 20 + .../g++.old-deja/g++.bugs/900210_01.C | 112 + .../g++.old-deja/g++.bugs/900210_02.C | 112 + .../g++.old-deja/g++.bugs/900210_03.C | 26 + .../g++.old-deja/g++.bugs/900210_05.C | 37 + .../g++.old-deja/g++.bugs/900210_06.C | 25 + .../g++.old-deja/g++.bugs/900210_07.C | 19 + .../g++.old-deja/g++.bugs/900210_08.C | 18 + .../g++.old-deja/g++.bugs/900210_09.C | 32 + .../g++.old-deja/g++.bugs/900210_10.C | 14 + .../g++.old-deja/g++.bugs/900211_01.C | 16 + .../g++.old-deja/g++.bugs/900211_02.C | 24 + .../g++.old-deja/g++.bugs/900211_03.C | 14 + .../g++.old-deja/g++.bugs/900211_04.C | 27 + .../g++.old-deja/g++.bugs/900212_01.C | 38 + .../g++.old-deja/g++.bugs/900212_02.C | 27 + .../g++.old-deja/g++.bugs/900212_03.C | 33 + .../g++.old-deja/g++.bugs/900213_01.C | 26 + .../g++.old-deja/g++.bugs/900213_02.C | 21 + .../g++.old-deja/g++.bugs/900213_03.C | 28 + .../g++.old-deja/g++.bugs/900214_01.C | 22 + .../g++.old-deja/g++.bugs/900215_01.C | 39 + .../g++.old-deja/g++.bugs/900215_02.C | 47 + .../g++.old-deja/g++.bugs/900220_01.C | 36 + .../g++.old-deja/g++.bugs/900220_02.C | 30 + .../g++.old-deja/g++.bugs/900220_03.C | 51 + .../g++.old-deja/g++.bugs/900221_01.C | 21 + .../g++.old-deja/g++.bugs/900227_01.C | 38 + .../g++.old-deja/g++.bugs/900321_01.C | 29 + .../g++.old-deja/g++.bugs/900321_02.C | 27 + .../g++.old-deja/g++.bugs/900321_04.C | 16 + .../g++.old-deja/g++.bugs/900321_05.C | 20 + .../g++.old-deja/g++.bugs/900322_01.C | 51 + .../g++.old-deja/g++.bugs/900324_02.C | 18 + .../g++.old-deja/g++.bugs/900324_03.C | 21 + .../g++.old-deja/g++.bugs/900324_04.C | 25 + .../g++.old-deja/g++.bugs/900324_05.C | 21 + .../g++.old-deja/g++.bugs/900324_06.C | 28 + .../g++.old-deja/g++.bugs/900325_01.C | 17 + .../g++.old-deja/g++.bugs/900330_01.C | 52 + .../g++.old-deja/g++.bugs/900330_02.C | 29 + .../g++.old-deja/g++.bugs/900331_02.C | 27 + .../g++.old-deja/g++.bugs/900331_03.C | 31 + .../g++.old-deja/g++.bugs/900331_04.C | 32 + .../g++.old-deja/g++.bugs/900401_01.C | 15 + .../g++.old-deja/g++.bugs/900402_01.C | 15 + .../g++.old-deja/g++.bugs/900402_02.C | 21 + .../g++.old-deja/g++.bugs/900403_01.C | 19 + .../g++.old-deja/g++.bugs/900403_04.C | 12 + .../g++.old-deja/g++.bugs/900404_01.C | 15 + .../g++.old-deja/g++.bugs/900404_02.C | 24 + .../g++.old-deja/g++.bugs/900404_03.C | 27 + .../g++.old-deja/g++.bugs/900404_04.C | 20 + .../g++.old-deja/g++.bugs/900404_07.C | 17 + .../g++.old-deja/g++.bugs/900405_01.C | 19 + .../g++.old-deja/g++.bugs/900406_01.C | 19 + .../g++.old-deja/g++.bugs/900406_02.C | 25 + .../g++.old-deja/g++.bugs/900407_01.C | 36 + .../g++.old-deja/g++.bugs/900407_02.C | 32 + .../g++.old-deja/g++.bugs/900428_01.C | 51 + .../g++.old-deja/g++.bugs/900428_02.C | 27 + .../g++.old-deja/g++.bugs/900428_03.C | 44 + .../g++.old-deja/g++.bugs/900511_01.C | 42 + .../g++.old-deja/g++.bugs/900511_02.C | 21 + .../g++.old-deja/g++.bugs/900511_03.C | 19 + .../g++.old-deja/g++.bugs/900514_03.C | 115 + .../g++.old-deja/g++.bugs/900519_01.C | 16 + .../g++.old-deja/g++.bugs/900519_02.C | 32 + .../g++.old-deja/g++.bugs/900519_03.C | 47 + .../g++.old-deja/g++.bugs/900519_04.C | 21 + .../g++.old-deja/g++.bugs/900519_05.C | 18 + .../g++.old-deja/g++.bugs/900519_06.C | 22 + .../g++.old-deja/g++.bugs/900519_07.C | 16 + .../g++.old-deja/g++.bugs/900519_08.C | 15 + .../g++.old-deja/g++.bugs/900519_09.C | 29 + .../g++.old-deja/g++.bugs/900519_12.C | 11 + .../g++.old-deja/g++.bugs/900519_13.C | 35 + .../g++.old-deja/g++.bugs/900520_02.C | 34 + .../g++.old-deja/g++.bugs/900520_03.C | 49 + .../g++.old-deja/g++.bugs/900520_04.C | 40 + .../g++.old-deja/g++.bugs/900520_05.C | 23 + .../g++.old-deja/g++.bugs/900520_06.C | 78 + gcc/testsuite/g++.old-deja/g++.ext/array1.C | 22 + gcc/testsuite/g++.old-deja/g++.ext/array2.C | 13 + gcc/testsuite/g++.old-deja/g++.ext/arrnew.C | 5 + .../g++.old-deja/g++.ext/constructor.C | 19 + gcc/testsuite/g++.old-deja/g++.ext/default.C | 26 + gcc/testsuite/g++.old-deja/g++.ext/memconst.C | 24 + gcc/testsuite/g++.old-deja/g++.ext/null1.C | 8 + gcc/testsuite/g++.old-deja/g++.ext/pretty.C | 43 + gcc/testsuite/g++.old-deja/g++.gb/README | 20 + gcc/testsuite/g++.old-deja/g++.gb/scope01.C | 4 + gcc/testsuite/g++.old-deja/g++.gb/scope02.C | 10 + gcc/testsuite/g++.old-deja/g++.gb/scope03.C | 10 + gcc/testsuite/g++.old-deja/g++.gb/scope04.C | 15 + gcc/testsuite/g++.old-deja/g++.gb/scope05.C | 12 + gcc/testsuite/g++.old-deja/g++.gb/scope06.C | 14 + gcc/testsuite/g++.old-deja/g++.gb/scope07.C | 11 + gcc/testsuite/g++.old-deja/g++.gb/scope08.C | 14 + gcc/testsuite/g++.old-deja/g++.gb/scope09.C | 16 + gcc/testsuite/g++.old-deja/g++.gb/scope10.C | 9 + gcc/testsuite/g++.old-deja/g++.gb/scope11.C | 28 + gcc/testsuite/g++.old-deja/g++.gb/scope12.C | 35 + gcc/testsuite/g++.old-deja/g++.gb/scope13.C | 11 + gcc/testsuite/g++.old-deja/g++.gb/sig01.C | 33 + gcc/testsuite/g++.old-deja/g++.gb/sig02.C | 45 + gcc/testsuite/g++.old-deja/g++.gb/sig03.C | 33 + gcc/testsuite/g++.old-deja/g++.gb/sig04.C | 46 + gcc/testsuite/g++.old-deja/g++.gb/sig05.C | 31 + gcc/testsuite/g++.old-deja/g++.gb/sig06.C | 31 + gcc/testsuite/g++.old-deja/g++.gb/sig07.C | 29 + gcc/testsuite/g++.old-deja/g++.gb/sig08.C | 40 + gcc/testsuite/g++.old-deja/g++.gb/sig09.C | 34 + gcc/testsuite/g++.old-deja/g++.gb/sig10.C | 38 + gcc/testsuite/g++.old-deja/g++.gb/sig11.C | 34 + gcc/testsuite/g++.old-deja/g++.gb/sig12.C | 40 + gcc/testsuite/g++.old-deja/g++.gb/sig13.C | 38 + gcc/testsuite/g++.old-deja/g++.gb/sig14.C | 55 + gcc/testsuite/g++.old-deja/g++.gb/sig15.C | 35 + gcc/testsuite/g++.old-deja/g++.gb/sig16.C | 44 + gcc/testsuite/g++.old-deja/g++.gb/sig17.C | 54 + gcc/testsuite/g++.old-deja/g++.gb/sig18.C | 33 + gcc/testsuite/g++.old-deja/g++.gb/sig19.C | 38 + gcc/testsuite/g++.old-deja/g++.gb/sig20.C | 38 + gcc/testsuite/g++.old-deja/g++.gb/sig21.C | 56 + gcc/testsuite/g++.old-deja/g++.gb/sig22.C | 59 + gcc/testsuite/g++.old-deja/g++.gb/sig23.C | 53 + gcc/testsuite/g++.old-deja/g++.gb/sig24.C | 36 + gcc/testsuite/g++.old-deja/g++.gb/sig25.C | 33 + gcc/testsuite/g++.old-deja/g++.gb/sig26.C | 34 + gcc/testsuite/g++.old-deja/g++.gb/sig27.C | 38 + gcc/testsuite/g++.old-deja/g++.gb/sig28.C | 46 + gcc/testsuite/g++.old-deja/g++.gb/sig29.C | 46 + gcc/testsuite/g++.old-deja/g++.gb/sig30.C | 48 + gcc/testsuite/g++.old-deja/g++.gb/sig31.C | 52 + gcc/testsuite/g++.old-deja/g++.jason/2371.C | 583 ++ gcc/testsuite/g++.old-deja/g++.jason/3523.C | 40 + .../g++.old-deja/g++.jason/access1.C | 17 + .../g++.old-deja/g++.jason/access10.C | 14 + .../g++.old-deja/g++.jason/access11.C | 12 + .../g++.old-deja/g++.jason/access12.C | 16 + .../g++.old-deja/g++.jason/access13.C | 15 + .../g++.old-deja/g++.jason/access14.C | 10 + .../g++.old-deja/g++.jason/access15.C | 18 + .../g++.old-deja/g++.jason/access16.C | 20 + .../g++.old-deja/g++.jason/access17.C | 24 + .../g++.old-deja/g++.jason/access18.C | 23 + .../g++.old-deja/g++.jason/access2.C | 11 + .../g++.old-deja/g++.jason/access20.C | 39 + .../g++.old-deja/g++.jason/access21.C | 22 + .../g++.old-deja/g++.jason/access22.C | 21 + .../g++.old-deja/g++.jason/access23.C | 79 + .../g++.old-deja/g++.jason/access24.C | 11 + .../g++.old-deja/g++.jason/access3.C | 12 + .../g++.old-deja/g++.jason/access4.C | 14 + .../g++.old-deja/g++.jason/access5.C | 12 + .../g++.old-deja/g++.jason/access6.C | 12 + .../g++.old-deja/g++.jason/access7.C | 13 + .../g++.old-deja/g++.jason/access8.C | 29 + .../g++.old-deja/g++.jason/access9.C | 9 + .../g++.old-deja/g++.jason/aggregate.C | 13 + gcc/testsuite/g++.old-deja/g++.jason/ambig1.C | 6 + gcc/testsuite/g++.old-deja/g++.jason/ambig2.C | 11 + gcc/testsuite/g++.old-deja/g++.jason/ambig3.C | 16 + gcc/testsuite/g++.old-deja/g++.jason/anon.C | 18 + gcc/testsuite/g++.old-deja/g++.jason/anon2.C | 7 + gcc/testsuite/g++.old-deja/g++.jason/anon3.C | 25 + gcc/testsuite/g++.old-deja/g++.jason/anon4.C | 14 + .../g++.old-deja/g++.jason/binding.C | 11 + .../g++.old-deja/g++.jason/binding2.C | 15 + .../g++.old-deja/g++.jason/binding3.C | 20 + gcc/testsuite/g++.old-deja/g++.jason/bool.C | 46 + gcc/testsuite/g++.old-deja/g++.jason/bool2.C | 14 + gcc/testsuite/g++.old-deja/g++.jason/bool3.C | 13 + gcc/testsuite/g++.old-deja/g++.jason/bool4.C | 10 + gcc/testsuite/g++.old-deja/g++.jason/bool5.C | 10 + gcc/testsuite/g++.old-deja/g++.jason/bool6.C | 9 + gcc/testsuite/g++.old-deja/g++.jason/bool7.C | 29 + .../g++.old-deja/g++.jason/builtin.C | 10 + .../g++.old-deja/g++.jason/builtin2.C | 8 + gcc/testsuite/g++.old-deja/g++.jason/byval.C | 19 + gcc/testsuite/g++.old-deja/g++.jason/byval2.C | 23 + gcc/testsuite/g++.old-deja/g++.jason/byval3.C | 14 + .../g++.old-deja/g++.jason/c-inline.C | 11 + gcc/testsuite/g++.old-deja/g++.jason/c2.C | 18 + gcc/testsuite/g++.old-deja/g++.jason/cast1.C | 8 + gcc/testsuite/g++.old-deja/g++.jason/cast2.C | 15 + gcc/testsuite/g++.old-deja/g++.jason/cast3.C | 16 + .../g++.old-deja/g++.jason/cleanup.C | 23 + .../g++.old-deja/g++.jason/cleanup2.C | 15 + .../g++.old-deja/g++.jason/complete1.C | 12 + gcc/testsuite/g++.old-deja/g++.jason/cond.C | 39 + gcc/testsuite/g++.old-deja/g++.jason/cond2.C | 65 + .../g++.old-deja/g++.jason/condexp.C | 14 + gcc/testsuite/g++.old-deja/g++.jason/const.C | 16 + gcc/testsuite/g++.old-deja/g++.jason/const2.C | 14 + gcc/testsuite/g++.old-deja/g++.jason/const3.C | 10 + gcc/testsuite/g++.old-deja/g++.jason/const4.C | 24 + .../g++.old-deja/g++.jason/context.C | 20 + .../g++.old-deja/g++.jason/conversion.C | 16 + .../g++.old-deja/g++.jason/conversion10.C | 19 + .../g++.old-deja/g++.jason/conversion11.C | 26 + .../g++.old-deja/g++.jason/conversion2.C | 6 + .../g++.old-deja/g++.jason/conversion3.C | 7 + .../g++.old-deja/g++.jason/conversion4.C | 14 + .../g++.old-deja/g++.jason/conversion5.C | 12 + .../g++.old-deja/g++.jason/conversion6.C | 40 + .../g++.old-deja/g++.jason/conversion7.C | 16 + .../g++.old-deja/g++.jason/conversion8.C | 10 + .../g++.old-deja/g++.jason/conversion9.C | 13 + gcc/testsuite/g++.old-deja/g++.jason/crash1.C | 29 + .../g++.old-deja/g++.jason/crash10.C | 7 + .../g++.old-deja/g++.jason/crash11.C | 9 + .../g++.old-deja/g++.jason/crash12.C | 10 + gcc/testsuite/g++.old-deja/g++.jason/crash2.C | 10 + gcc/testsuite/g++.old-deja/g++.jason/crash3.C | 13 + gcc/testsuite/g++.old-deja/g++.jason/crash4.C | 38 + gcc/testsuite/g++.old-deja/g++.jason/crash5.C | 4 + gcc/testsuite/g++.old-deja/g++.jason/crash6.C | 9 + gcc/testsuite/g++.old-deja/g++.jason/crash7.C | 5 + gcc/testsuite/g++.old-deja/g++.jason/crash8.C | 9 + gcc/testsuite/g++.old-deja/g++.jason/crash9.C | 29 + gcc/testsuite/g++.old-deja/g++.jason/ctor1.C | 26 + gcc/testsuite/g++.old-deja/g++.jason/ctor2.C | 16 + gcc/testsuite/g++.old-deja/g++.jason/dcast1.C | 20 + gcc/testsuite/g++.old-deja/g++.jason/dcast2.C | 18 + gcc/testsuite/g++.old-deja/g++.jason/dcast3.C | 32 + .../g++.old-deja/g++.jason/default1.C | 16 + .../g++.old-deja/g++.jason/default2.C | 31 + .../g++.old-deja/g++.jason/default3.C | 6 + .../g++.old-deja/g++.jason/defctor.C | 15 + .../g++.old-deja/g++.jason/delete1.C | 5 + .../g++.old-deja/g++.jason/delete2.C | 16 + .../g++.old-deja/g++.jason/delete3.C | 18 + .../g++.old-deja/g++.jason/destruct.C | 33 + .../g++.old-deja/g++.jason/destruct2.C | 20 + .../g++.old-deja/g++.jason/destruct3.C | 44 + .../g++.old-deja/g++.jason/destruct4.C | 14 + gcc/testsuite/g++.old-deja/g++.jason/dot.C | 20 + gcc/testsuite/g++.old-deja/g++.jason/dtor.C | 13 + gcc/testsuite/g++.old-deja/g++.jason/dtor2.C | 10 + gcc/testsuite/g++.old-deja/g++.jason/dtor3.C | 18 + gcc/testsuite/g++.old-deja/g++.jason/dtor4.C | 23 + gcc/testsuite/g++.old-deja/g++.jason/dtor5.C | 24 + gcc/testsuite/g++.old-deja/g++.jason/enum.C | 19 + gcc/testsuite/g++.old-deja/g++.jason/enum2.C | 8 + gcc/testsuite/g++.old-deja/g++.jason/enum3.C | 19 + gcc/testsuite/g++.old-deja/g++.jason/enum4.C | 10 + gcc/testsuite/g++.old-deja/g++.jason/enum5.C | 8 + gcc/testsuite/g++.old-deja/g++.jason/enum6.C | 15 + gcc/testsuite/g++.old-deja/g++.jason/enum7.C | 15 + gcc/testsuite/g++.old-deja/g++.jason/enum8.C | 20 + .../g++.old-deja/g++.jason/explicit.C | 15 + gcc/testsuite/g++.old-deja/g++.jason/expr1.C | 12 + gcc/testsuite/g++.old-deja/g++.jason/friend.C | 18 + .../g++.old-deja/g++.jason/friend2.C | 21 + gcc/testsuite/g++.old-deja/g++.jason/groff1.C | 40 + gcc/testsuite/g++.old-deja/g++.jason/hmc1.C | 19 + .../g++.old-deja/g++.jason/incomplete1.C | 15 + .../g++.old-deja/g++.jason/incomplete2.C | 7 + gcc/testsuite/g++.old-deja/g++.jason/init.C | 7 + gcc/testsuite/g++.old-deja/g++.jason/init2.C | 9 + gcc/testsuite/g++.old-deja/g++.jason/init3.C | 42 + gcc/testsuite/g++.old-deja/g++.jason/init4.C | 3 + gcc/testsuite/g++.old-deja/g++.jason/inline.C | 21 + .../g++.old-deja/g++.jason/inline2.C | 12 + gcc/testsuite/g++.old-deja/g++.jason/jump.C | 14 + gcc/testsuite/g++.old-deja/g++.jason/lex1.C | 6 + gcc/testsuite/g++.old-deja/g++.jason/lineno.C | 6 + .../g++.old-deja/g++.jason/lineno2.C | 14 + .../g++.old-deja/g++.jason/lineno3.C | 13 + .../g++.old-deja/g++.jason/lineno4.C | 13 + .../g++.old-deja/g++.jason/lineno5.C | 10 + gcc/testsuite/g++.old-deja/g++.jason/local.C | 20 + gcc/testsuite/g++.old-deja/g++.jason/lookup.C | 30 + .../g++.old-deja/g++.jason/lookup2.C | 13 + .../g++.old-deja/g++.jason/lookup3.C | 15 + .../g++.old-deja/g++.jason/loverload.C | 11 + .../g++.old-deja/g++.jason/loverload3.C | 12 + .../g++.old-deja/g++.jason/loverload4.C | 8 + gcc/testsuite/g++.old-deja/g++.jason/lvalue.C | 22 + .../g++.old-deja/g++.jason/lvalue2.C | 20 + .../g++.old-deja/g++.jason/lvalue3.C | 9 + .../g++.old-deja/g++.jason/lvalue4.C | 6 + .../g++.old-deja/g++.jason/mangle1.C | 23 + .../g++.old-deja/g++.jason/mangle2.C | 23 + .../g++.old-deja/g++.jason/mangle3.C | 19 + gcc/testsuite/g++.old-deja/g++.jason/member.C | 35 + .../g++.old-deja/g++.jason/member1.C | 4 + gcc/testsuite/g++.old-deja/g++.jason/method.C | 12 + gcc/testsuite/g++.old-deja/g++.jason/mi.C | 16 + .../g++.old-deja/g++.jason/mutable1.C | 11 + .../g++.old-deja/g++.jason/nested1.C | 12 + .../g++.old-deja/g++.jason/nested2.C | 26 + .../g++.old-deja/g++.jason/nested4.C | 17 + .../g++.old-deja/g++.jason/nested5.C | 11 + .../g++.old-deja/g++.jason/nested6.C | 5 + .../g++.old-deja/g++.jason/nested7.C | 16 + .../g++.old-deja/g++.jason/nested8.C | 8 + gcc/testsuite/g++.old-deja/g++.jason/net.C | 10 + gcc/testsuite/g++.old-deja/g++.jason/net2.C | 37 + gcc/testsuite/g++.old-deja/g++.jason/new.C | 25 + gcc/testsuite/g++.old-deja/g++.jason/new2.C | 12 + gcc/testsuite/g++.old-deja/g++.jason/new3.C | 23 + gcc/testsuite/g++.old-deja/g++.jason/new4.C | 22 + gcc/testsuite/g++.old-deja/g++.jason/new5.C | 5 + .../g++.old-deja/g++.jason/offset1.C | 17 + .../g++.old-deja/g++.jason/offset2.C | 23 + .../g++.old-deja/g++.jason/offset3.C | 22 + .../g++.old-deja/g++.jason/offset4.C | 15 + gcc/testsuite/g++.old-deja/g++.jason/opeq.C | 39 + gcc/testsuite/g++.old-deja/g++.jason/opeq2.C | 26 + gcc/testsuite/g++.old-deja/g++.jason/opeq3.C | 15 + gcc/testsuite/g++.old-deja/g++.jason/opeq4.C | 8 + gcc/testsuite/g++.old-deja/g++.jason/opeq5.C | 26 + gcc/testsuite/g++.old-deja/g++.jason/opeq6.C | 24 + .../g++.old-deja/g++.jason/operator.C | 31 + .../g++.old-deja/g++.jason/operator2.C | 14 + gcc/testsuite/g++.old-deja/g++.jason/opover.C | 15 + .../g++.old-deja/g++.jason/optimize.C | 42 + .../g++.old-deja/g++.jason/optimize2.C | 19 + .../g++.old-deja/g++.jason/overload.C | 20 + .../g++.old-deja/g++.jason/overload1.C | 12 + .../g++.old-deja/g++.jason/overload10.C | 21 + .../g++.old-deja/g++.jason/overload11.C | 17 + .../g++.old-deja/g++.jason/overload12.C | 15 + .../g++.old-deja/g++.jason/overload13.C | 27 + .../g++.old-deja/g++.jason/overload14.C | 10 + .../g++.old-deja/g++.jason/overload15.C | 10 + .../g++.old-deja/g++.jason/overload16.C | 6 + .../g++.old-deja/g++.jason/overload17.C | 20 + .../g++.old-deja/g++.jason/overload18.C | 6 + .../g++.old-deja/g++.jason/overload19.C | 11 + .../g++.old-deja/g++.jason/overload2.C | 12 + .../g++.old-deja/g++.jason/overload20.C | 11 + .../g++.old-deja/g++.jason/overload21.C | 12 + .../g++.old-deja/g++.jason/overload22.C | 17 + .../g++.old-deja/g++.jason/overload23.C | 27 + .../g++.old-deja/g++.jason/overload24.C | 23 + .../g++.old-deja/g++.jason/overload26.C | 22 + .../g++.old-deja/g++.jason/overload27.C | 7 + .../g++.old-deja/g++.jason/overload28.C | 11 + .../g++.old-deja/g++.jason/overload29.C | 16 + .../g++.old-deja/g++.jason/overload3.C | 12 + .../g++.old-deja/g++.jason/overload30.C | 17 + .../g++.old-deja/g++.jason/overload31.C | 24 + .../g++.old-deja/g++.jason/overload32.C | 19 + .../g++.old-deja/g++.jason/overload33.C | 78 + .../g++.old-deja/g++.jason/overload34.C | 8 + .../g++.old-deja/g++.jason/overload35.C | 25 + .../g++.old-deja/g++.jason/overload4.C | 11 + .../g++.old-deja/g++.jason/overload5.C | 4 + .../g++.old-deja/g++.jason/overload6.C | 15 + .../g++.old-deja/g++.jason/overload7.C | 15 + .../g++.old-deja/g++.jason/overload8.C | 7 + .../g++.old-deja/g++.jason/overload9.C | 39 + gcc/testsuite/g++.old-deja/g++.jason/parse1.C | 8 + .../g++.old-deja/g++.jason/parse10.C | 15 + .../g++.old-deja/g++.jason/parse11.C | 9 + .../g++.old-deja/g++.jason/parse12.C | 17 + .../g++.old-deja/g++.jason/parse13.C | 8 + .../g++.old-deja/g++.jason/parse14.C | 12 + gcc/testsuite/g++.old-deja/g++.jason/parse2.C | 6 + gcc/testsuite/g++.old-deja/g++.jason/parse3.C | 6 + gcc/testsuite/g++.old-deja/g++.jason/parse4.C | 7 + gcc/testsuite/g++.old-deja/g++.jason/parse5.C | 12 + gcc/testsuite/g++.old-deja/g++.jason/parse6.C | 9 + gcc/testsuite/g++.old-deja/g++.jason/parse7.C | 7 + gcc/testsuite/g++.old-deja/g++.jason/parse8.C | 2 + gcc/testsuite/g++.old-deja/g++.jason/parse9.C | 18 + gcc/testsuite/g++.old-deja/g++.jason/pmem.C | 11 + gcc/testsuite/g++.old-deja/g++.jason/pmem2.C | 43 + gcc/testsuite/g++.old-deja/g++.jason/pmem3.C | 11 + gcc/testsuite/g++.old-deja/g++.jason/pmem4.C | 10 + gcc/testsuite/g++.old-deja/g++.jason/pmf.C | 7 + gcc/testsuite/g++.old-deja/g++.jason/pmf2.C | 13 + gcc/testsuite/g++.old-deja/g++.jason/pmf3.C | 19 + gcc/testsuite/g++.old-deja/g++.jason/pmf4.C | 9 + gcc/testsuite/g++.old-deja/g++.jason/pmf5.C | 18 + gcc/testsuite/g++.old-deja/g++.jason/pmf6.C | 11 + gcc/testsuite/g++.old-deja/g++.jason/pmf7.C | 27 + gcc/testsuite/g++.old-deja/g++.jason/pmf8.C | 29 + .../g++.old-deja/g++.jason/pmftemp.C | 16 + .../g++.old-deja/g++.jason/precedence.C | 14 + .../g++.old-deja/g++.jason/redecl1.C | 12 + gcc/testsuite/g++.old-deja/g++.jason/ref1.C | 8 + gcc/testsuite/g++.old-deja/g++.jason/ref10.C | 31 + gcc/testsuite/g++.old-deja/g++.jason/ref11.C | 17 + gcc/testsuite/g++.old-deja/g++.jason/ref12.C | 5 + gcc/testsuite/g++.old-deja/g++.jason/ref2.C | 6 + gcc/testsuite/g++.old-deja/g++.jason/ref3.C | 7 + gcc/testsuite/g++.old-deja/g++.jason/ref4.C | 4 + gcc/testsuite/g++.old-deja/g++.jason/ref5.C | 10 + gcc/testsuite/g++.old-deja/g++.jason/ref6.C | 2 + gcc/testsuite/g++.old-deja/g++.jason/ref7.C | 21 + gcc/testsuite/g++.old-deja/g++.jason/ref8.C | 17 + gcc/testsuite/g++.old-deja/g++.jason/ref9.C | 25 + gcc/testsuite/g++.old-deja/g++.jason/report.C | 68 + gcc/testsuite/g++.old-deja/g++.jason/return.C | 21 + .../g++.old-deja/g++.jason/return2.C | 23 + .../g++.old-deja/g++.jason/return3.C | 19 + gcc/testsuite/g++.old-deja/g++.jason/rfg1.C | 13 + gcc/testsuite/g++.old-deja/g++.jason/rfg10.C | 9 + gcc/testsuite/g++.old-deja/g++.jason/rfg11.C | 1 + gcc/testsuite/g++.old-deja/g++.jason/rfg12.C | 1 + gcc/testsuite/g++.old-deja/g++.jason/rfg13.C | 11 + gcc/testsuite/g++.old-deja/g++.jason/rfg14.C | 15 + gcc/testsuite/g++.old-deja/g++.jason/rfg15.C | 6 + gcc/testsuite/g++.old-deja/g++.jason/rfg16.C | 5 + gcc/testsuite/g++.old-deja/g++.jason/rfg17.C | 15 + gcc/testsuite/g++.old-deja/g++.jason/rfg18.C | 11 + gcc/testsuite/g++.old-deja/g++.jason/rfg2.C | 6 + gcc/testsuite/g++.old-deja/g++.jason/rfg20.C | 10 + gcc/testsuite/g++.old-deja/g++.jason/rfg21.C | 1 + gcc/testsuite/g++.old-deja/g++.jason/rfg22.C | 6 + gcc/testsuite/g++.old-deja/g++.jason/rfg23.C | 2 + gcc/testsuite/g++.old-deja/g++.jason/rfg24.C | 8 + gcc/testsuite/g++.old-deja/g++.jason/rfg25.C | 1 + gcc/testsuite/g++.old-deja/g++.jason/rfg26.C | 9 + gcc/testsuite/g++.old-deja/g++.jason/rfg27.C | 4 + gcc/testsuite/g++.old-deja/g++.jason/rfg28.C | 9 + gcc/testsuite/g++.old-deja/g++.jason/rfg3.C | 15 + gcc/testsuite/g++.old-deja/g++.jason/rfg4.C | 12 + gcc/testsuite/g++.old-deja/g++.jason/rfg5.C | 10 + gcc/testsuite/g++.old-deja/g++.jason/rfg6.C | 4 + gcc/testsuite/g++.old-deja/g++.jason/rfg7.C | 6 + gcc/testsuite/g++.old-deja/g++.jason/rfg8.C | 4 + gcc/testsuite/g++.old-deja/g++.jason/rfg9.C | 9 + .../g++.old-deja/g++.jason/rvalue1.C | 51 + .../g++.old-deja/g++.jason/rvalue2.C | 17 + .../g++.old-deja/g++.jason/rvalue3.C | 5 + .../g++.old-deja/g++.jason/scoping.C | 12 + .../g++.old-deja/g++.jason/scoping10.C | 14 + .../g++.old-deja/g++.jason/scoping11.C | 11 + .../g++.old-deja/g++.jason/scoping12.C | 9 + .../g++.old-deja/g++.jason/scoping13.C | 10 + .../g++.old-deja/g++.jason/scoping14.C | 8 + .../g++.old-deja/g++.jason/scoping15.C | 20 + .../g++.old-deja/g++.jason/scoping16.C | 4 + .../g++.old-deja/g++.jason/scoping17.C | 8 + .../g++.old-deja/g++.jason/scoping2.C | 15 + .../g++.old-deja/g++.jason/scoping3.C | 8 + .../g++.old-deja/g++.jason/scoping4.C | 30 + .../g++.old-deja/g++.jason/scoping5.C | 6 + .../g++.old-deja/g++.jason/scoping6.C | 27 + .../g++.old-deja/g++.jason/scoping7.C | 6 + .../g++.old-deja/g++.jason/scoping8.C | 7 + .../g++.old-deja/g++.jason/scoping9.C | 12 + .../g++.old-deja/g++.jason/shadow1.C | 16 + .../g++.old-deja/g++.jason/soverload.C | 10 + .../g++.old-deja/g++.jason/special.C | 6 + .../g++.old-deja/g++.jason/static1.C | 31 + gcc/testsuite/g++.old-deja/g++.jason/synth.C | 13 + .../g++.old-deja/g++.jason/synth10.C | 52 + gcc/testsuite/g++.old-deja/g++.jason/synth2.C | 8 + gcc/testsuite/g++.old-deja/g++.jason/synth3.C | 6 + gcc/testsuite/g++.old-deja/g++.jason/synth4.C | 15 + gcc/testsuite/g++.old-deja/g++.jason/synth5.C | 14 + gcc/testsuite/g++.old-deja/g++.jason/synth6.C | 15 + gcc/testsuite/g++.old-deja/g++.jason/synth7.C | 11 + gcc/testsuite/g++.old-deja/g++.jason/synth8.C | 20 + gcc/testsuite/g++.old-deja/g++.jason/synth9.C | 20 + .../g++.old-deja/g++.jason/tempargs.C | 8 + .../g++.old-deja/g++.jason/tempcons.C | 8 + .../g++.old-deja/g++.jason/tempdest.C | 20 + .../g++.old-deja/g++.jason/tempinst1.C | 21 + .../g++.old-deja/g++.jason/template1.C | 20 + .../g++.old-deja/g++.jason/template10.C | 26 + .../g++.old-deja/g++.jason/template11.C | 14 + .../g++.old-deja/g++.jason/template12.C | 14 + .../g++.old-deja/g++.jason/template13.C | 10 + .../g++.old-deja/g++.jason/template14.C | 16 + .../g++.old-deja/g++.jason/template15.C | 27 + .../g++.old-deja/g++.jason/template16.C | 33 + .../g++.old-deja/g++.jason/template17.C | 11 + .../g++.old-deja/g++.jason/template18.C | 16 + .../g++.old-deja/g++.jason/template19.C | 9 + .../g++.old-deja/g++.jason/template2.C | 12 + .../g++.old-deja/g++.jason/template20.C | 9 + .../g++.old-deja/g++.jason/template21.C | 16 + .../g++.old-deja/g++.jason/template22.C | 31 + .../g++.old-deja/g++.jason/template23.C | 12 + .../g++.old-deja/g++.jason/template24.C | 21 + .../g++.old-deja/g++.jason/template25.C | 48 + .../g++.old-deja/g++.jason/template26.C | 114 + .../g++.old-deja/g++.jason/template27.C | 48 + .../g++.old-deja/g++.jason/template28.C | 33 + .../g++.old-deja/g++.jason/template29.C | 19 + .../g++.old-deja/g++.jason/template3.C | 14 + .../g++.old-deja/g++.jason/template30.C | 13 + .../g++.old-deja/g++.jason/template31.C | 38 + .../g++.old-deja/g++.jason/template32.C | 10 + .../g++.old-deja/g++.jason/template33.C | 17 + .../g++.old-deja/g++.jason/template34.C | 24 + .../g++.old-deja/g++.jason/template35.C | 15 + .../g++.old-deja/g++.jason/template36.C | 51 + .../g++.old-deja/g++.jason/template37.C | 36 + .../g++.old-deja/g++.jason/template38.C | 18 + .../g++.old-deja/g++.jason/template39.C | 22 + .../g++.old-deja/g++.jason/template4.C | 21 + .../g++.old-deja/g++.jason/template40.C | 19 + .../g++.old-deja/g++.jason/template41.C | 33 + .../g++.old-deja/g++.jason/template42.C | 18 + .../g++.old-deja/g++.jason/template43.C | 30 + .../g++.old-deja/g++.jason/template5.C | 28 + .../g++.old-deja/g++.jason/template6.C | 20 + .../g++.old-deja/g++.jason/template7.C | 9 + .../g++.old-deja/g++.jason/template8.C | 10 + .../g++.old-deja/g++.jason/template9.C | 12 + .../g++.old-deja/g++.jason/temporary.C | 19 + .../g++.old-deja/g++.jason/temporary2.C | 16 + .../g++.old-deja/g++.jason/temporary3.C | 26 + .../g++.old-deja/g++.jason/temporary4.C | 31 + .../g++.old-deja/g++.jason/temporary5.C | 16 + .../g++.old-deja/g++.jason/temporary6.C | 8 + .../g++.old-deja/g++.jason/temporary7.C | 35 + .../g++.old-deja/g++.jason/temporary8.C | 25 + .../g++.old-deja/g++.jason/tempover.C | 14 + .../g++.old-deja/g++.jason/tempparse.C | 29 + .../g++.old-deja/g++.jason/tempsub.C | 28 + gcc/testsuite/g++.old-deja/g++.jason/this.C | 16 + gcc/testsuite/g++.old-deja/g++.jason/thunk1.C | 47 + gcc/testsuite/g++.old-deja/g++.jason/thunk2.C | 48 + gcc/testsuite/g++.old-deja/g++.jason/thunk3.C | 56 + gcc/testsuite/g++.old-deja/g++.jason/tpt-1.cc | 30 + .../g++.old-deja/g++.jason/tredecl.C | 17 + .../g++.old-deja/g++.jason/tredecl2.C | 5 + .../g++.old-deja/g++.jason/tredecl3.C | 11 + .../g++.old-deja/g++.jason/tredecl4.C | 5 + .../g++.old-deja/g++.jason/trivial.C | 71 + gcc/testsuite/g++.old-deja/g++.jason/typeck.C | 19 + .../g++.old-deja/g++.jason/typedef.C | 9 + .../g++.old-deja/g++.jason/typedef2.C | 12 + .../g++.old-deja/g++.jason/typedef3.C | 8 + .../g++.old-deja/g++.jason/typeid1.C | 11 + .../g++.old-deja/g++.jason/typeid2.C | 30 + gcc/testsuite/g++.old-deja/g++.jason/union.C | 11 + gcc/testsuite/g++.old-deja/g++.jason/vecdel.C | 19 + .../g++.old-deja/g++.jason/virtual.C | 41 + .../g++.old-deja/g++.jason/virtual2.C | 13 + .../g++.old-deja/g++.jason/warning1.C | 7 + .../g++.old-deja/g++.jason/warning10.C | 19 + .../g++.old-deja/g++.jason/warning2.C | 14 + .../g++.old-deja/g++.jason/warning3.C | 12 + .../g++.old-deja/g++.jason/warning4.C | 16 + .../g++.old-deja/g++.jason/warning5.C | 23 + .../g++.old-deja/g++.jason/warning6.C | 7 + .../g++.old-deja/g++.jason/warning7.C | 6 + .../g++.old-deja/g++.jason/warning8.C | 17 + .../g++.old-deja/g++.jason/warning9.C | 13 + gcc/testsuite/g++.old-deja/g++.law/access1.C | 34 + gcc/testsuite/g++.old-deja/g++.law/access2.C | 20 + gcc/testsuite/g++.old-deja/g++.law/access3.C | 16 + gcc/testsuite/g++.old-deja/g++.law/access4.C | 27 + gcc/testsuite/g++.old-deja/g++.law/access5.C | 24 + gcc/testsuite/g++.old-deja/g++.law/arg1.C | 29 + gcc/testsuite/g++.old-deja/g++.law/arg10.C | 20 + gcc/testsuite/g++.old-deja/g++.law/arg11.C | 23 + gcc/testsuite/g++.old-deja/g++.law/arg2.C | 22 + gcc/testsuite/g++.old-deja/g++.law/arg3.C | 22 + gcc/testsuite/g++.old-deja/g++.law/arg4.C | 20 + gcc/testsuite/g++.old-deja/g++.law/arg5.C | 16 + gcc/testsuite/g++.old-deja/g++.law/arg6.C | 15 + gcc/testsuite/g++.old-deja/g++.law/arg7.C | 33 + gcc/testsuite/g++.old-deja/g++.law/arg8.C | 27 + gcc/testsuite/g++.old-deja/g++.law/arg9.C | 39 + gcc/testsuite/g++.old-deja/g++.law/arm1.C | 21 + gcc/testsuite/g++.old-deja/g++.law/arm10.C | 9 + gcc/testsuite/g++.old-deja/g++.law/arm11.C | 15 + gcc/testsuite/g++.old-deja/g++.law/arm12.C | 47 + gcc/testsuite/g++.old-deja/g++.law/arm13.C | 16 + gcc/testsuite/g++.old-deja/g++.law/arm14.C | 24 + gcc/testsuite/g++.old-deja/g++.law/arm15.C | 53 + gcc/testsuite/g++.old-deja/g++.law/arm16.C | 14 + gcc/testsuite/g++.old-deja/g++.law/arm2.C | 17 + gcc/testsuite/g++.old-deja/g++.law/arm3.C | 20 + gcc/testsuite/g++.old-deja/g++.law/arm4.C | 28 + gcc/testsuite/g++.old-deja/g++.law/arm5.C | 24 + gcc/testsuite/g++.old-deja/g++.law/arm6.C | 23 + gcc/testsuite/g++.old-deja/g++.law/arm7.C | 41 + gcc/testsuite/g++.old-deja/g++.law/arm8.C | 16 + gcc/testsuite/g++.old-deja/g++.law/arm9.C | 33 + gcc/testsuite/g++.old-deja/g++.law/array1.C | 31 + gcc/testsuite/g++.old-deja/g++.law/array2.C | 11 + .../g++.old-deja/g++.law/bad-error1.C | 14 + .../g++.old-deja/g++.law/bad-error3.C | 21 + .../g++.old-deja/g++.law/bad-error4.C | 14 + .../g++.old-deja/g++.law/bad-error6.C | 26 + .../g++.old-deja/g++.law/bad-error7.C | 24 + .../g++.old-deja/g++.law/bit-fields1.C | 9 + .../g++.old-deja/g++.law/bit-fields2.C | 36 + .../g++.old-deja/g++.law/bit-fields3.C | 7 + gcc/testsuite/g++.old-deja/g++.law/builtin1.C | 17 + gcc/testsuite/g++.old-deja/g++.law/casts1.C | 13 + gcc/testsuite/g++.old-deja/g++.law/casts2.C | 39 + gcc/testsuite/g++.old-deja/g++.law/casts3.C | 9 + .../g++.old-deja/g++.law/code-gen1.C | 20 + .../g++.old-deja/g++.law/code-gen2.C | 34 + .../g++.old-deja/g++.law/code-gen3.C | 33 + .../g++.old-deja/g++.law/code-gen4.C | 30 + .../g++.old-deja/g++.law/code-gen5.C | 283 + gcc/testsuite/g++.old-deja/g++.law/copy1.C | 66 + gcc/testsuite/g++.old-deja/g++.law/copy2.C | 35 + gcc/testsuite/g++.old-deja/g++.law/ctors1.C | 20 + gcc/testsuite/g++.old-deja/g++.law/ctors10.C | 24 + gcc/testsuite/g++.old-deja/g++.law/ctors11.C | 21 + gcc/testsuite/g++.old-deja/g++.law/ctors12.C | 33 + gcc/testsuite/g++.old-deja/g++.law/ctors13.C | 16 + gcc/testsuite/g++.old-deja/g++.law/ctors14.C | 43 + gcc/testsuite/g++.old-deja/g++.law/ctors15.C | 26 + gcc/testsuite/g++.old-deja/g++.law/ctors16.C | 49 + gcc/testsuite/g++.old-deja/g++.law/ctors17.C | 21 + gcc/testsuite/g++.old-deja/g++.law/ctors18.C | 27 + gcc/testsuite/g++.old-deja/g++.law/ctors19.C | 33 + gcc/testsuite/g++.old-deja/g++.law/ctors2.C | 69 + gcc/testsuite/g++.old-deja/g++.law/ctors20.C | 35 + gcc/testsuite/g++.old-deja/g++.law/ctors21.C | 16 + gcc/testsuite/g++.old-deja/g++.law/ctors3.C | 29 + gcc/testsuite/g++.old-deja/g++.law/ctors4.C | 27 + gcc/testsuite/g++.old-deja/g++.law/ctors5.C | 33 + gcc/testsuite/g++.old-deja/g++.law/ctors6.C | 15 + gcc/testsuite/g++.old-deja/g++.law/ctors7.C | 35 + gcc/testsuite/g++.old-deja/g++.law/ctors8.C | 24 + gcc/testsuite/g++.old-deja/g++.law/ctors9.C | 39 + gcc/testsuite/g++.old-deja/g++.law/cvt1.C | 12 + gcc/testsuite/g++.old-deja/g++.law/cvt10.C | 60 + gcc/testsuite/g++.old-deja/g++.law/cvt11.C | 30 + gcc/testsuite/g++.old-deja/g++.law/cvt12.C | 29 + gcc/testsuite/g++.old-deja/g++.law/cvt13.C | 19 + gcc/testsuite/g++.old-deja/g++.law/cvt14.C | 15 + gcc/testsuite/g++.old-deja/g++.law/cvt15.C | 18 + gcc/testsuite/g++.old-deja/g++.law/cvt16.C | 29 + gcc/testsuite/g++.old-deja/g++.law/cvt17.C | 20 + gcc/testsuite/g++.old-deja/g++.law/cvt18.C | 24 + gcc/testsuite/g++.old-deja/g++.law/cvt19.C | 27 + gcc/testsuite/g++.old-deja/g++.law/cvt2.C | 42 + gcc/testsuite/g++.old-deja/g++.law/cvt20.C | 20 + gcc/testsuite/g++.old-deja/g++.law/cvt21.C | 36 + gcc/testsuite/g++.old-deja/g++.law/cvt22.C | 14 + gcc/testsuite/g++.old-deja/g++.law/cvt23.C | 18 + gcc/testsuite/g++.old-deja/g++.law/cvt3.C | 16 + gcc/testsuite/g++.old-deja/g++.law/cvt4.C | 27 + gcc/testsuite/g++.old-deja/g++.law/cvt5.C | 28 + gcc/testsuite/g++.old-deja/g++.law/cvt6.C | 28 + gcc/testsuite/g++.old-deja/g++.law/cvt7.C | 74 + gcc/testsuite/g++.old-deja/g++.law/cvt8.C | 35 + gcc/testsuite/g++.old-deja/g++.law/cvt9.C | 17 + gcc/testsuite/g++.old-deja/g++.law/dossier1.C | 18 + gcc/testsuite/g++.old-deja/g++.law/dtors1.C | 13 + gcc/testsuite/g++.old-deja/g++.law/dtors2.C | 40 + gcc/testsuite/g++.old-deja/g++.law/dtors3.C | 37 + gcc/testsuite/g++.old-deja/g++.law/dtors4.C | 22 + gcc/testsuite/g++.old-deja/g++.law/dtors5.C | 33 + gcc/testsuite/g++.old-deja/g++.law/enum1.C | 14 + gcc/testsuite/g++.old-deja/g++.law/enum2.C | 27 + gcc/testsuite/g++.old-deja/g++.law/enum3.C | 21 + gcc/testsuite/g++.old-deja/g++.law/enum4.C | 29 + gcc/testsuite/g++.old-deja/g++.law/enum5.C | 234 + gcc/testsuite/g++.old-deja/g++.law/enum6.C | 19 + gcc/testsuite/g++.old-deja/g++.law/enum7.C | 14 + gcc/testsuite/g++.old-deja/g++.law/enum8.C | 4 + gcc/testsuite/g++.old-deja/g++.law/enum9.C | 14 + gcc/testsuite/g++.old-deja/g++.law/except1.C | 29 + gcc/testsuite/g++.old-deja/g++.law/except2.C | 13 + gcc/testsuite/g++.old-deja/g++.law/except3.C | 50 + gcc/testsuite/g++.old-deja/g++.law/except4.C | 34 + gcc/testsuite/g++.old-deja/g++.law/except5.C | 39 + gcc/testsuite/g++.old-deja/g++.law/except6.C | 27 + gcc/testsuite/g++.old-deja/g++.law/friend1.C | 17 + gcc/testsuite/g++.old-deja/g++.law/friend4.C | 20 + gcc/testsuite/g++.old-deja/g++.law/friend5.C | 23 + .../g++.old-deja/g++.law/global-init1.C | 20 + gcc/testsuite/g++.old-deja/g++.law/incdec1.C | 47 + gcc/testsuite/g++.old-deja/g++.law/init1.C | 25 + gcc/testsuite/g++.old-deja/g++.law/init10.C | 26 + gcc/testsuite/g++.old-deja/g++.law/init11.C | 24 + gcc/testsuite/g++.old-deja/g++.law/init13.C | 19 + gcc/testsuite/g++.old-deja/g++.law/init14.C | 26 + gcc/testsuite/g++.old-deja/g++.law/init2.C | 9 + gcc/testsuite/g++.old-deja/g++.law/init3.C | 12 + gcc/testsuite/g++.old-deja/g++.law/init4.C | 13 + gcc/testsuite/g++.old-deja/g++.law/init5.C | 18 + gcc/testsuite/g++.old-deja/g++.law/init6.C | 13 + gcc/testsuite/g++.old-deja/g++.law/init7.C | 11 + gcc/testsuite/g++.old-deja/g++.law/init8.C | 22 + gcc/testsuite/g++.old-deja/g++.law/init9.C | 35 + gcc/testsuite/g++.old-deja/g++.law/inline1.C | 3598 ++++++++ gcc/testsuite/g++.old-deja/g++.law/inline2.C | 3601 ++++++++ gcc/testsuite/g++.old-deja/g++.law/inline4.C | 20 + gcc/testsuite/g++.old-deja/g++.law/inline6.C | 17 + gcc/testsuite/g++.old-deja/g++.law/inline7.C | 13 + .../g++.old-deja/g++.law/memoized1.C | 28 + gcc/testsuite/g++.old-deja/g++.law/mentor1.C | 21 + .../g++.old-deja/g++.law/missed-error1.C | 11 + .../g++.old-deja/g++.law/missed-error2.C | 26 + .../g++.old-deja/g++.law/missed-error3.C | 124 + gcc/testsuite/g++.old-deja/g++.law/missing1.C | 12 + gcc/testsuite/g++.old-deja/g++.law/nest1.C | 15 + gcc/testsuite/g++.old-deja/g++.law/nest2.C | 13 + gcc/testsuite/g++.old-deja/g++.law/nest3.C | 25 + gcc/testsuite/g++.old-deja/g++.law/nest4.C | 20 + gcc/testsuite/g++.old-deja/g++.law/nest5.C | 17 + .../g++.old-deja/g++.law/operators1.C | 27 + .../g++.old-deja/g++.law/operators10.C | 23 + .../g++.old-deja/g++.law/operators11.C | 36 + .../g++.old-deja/g++.law/operators12.C | 20 + .../g++.old-deja/g++.law/operators13.C | 24 + .../g++.old-deja/g++.law/operators14.C | 10 + .../g++.old-deja/g++.law/operators15.C | 27 + .../g++.old-deja/g++.law/operators16.C | 29 + .../g++.old-deja/g++.law/operators17.C | 12 + .../g++.old-deja/g++.law/operators18.C | 17 + .../g++.old-deja/g++.law/operators19.C | 19 + .../g++.old-deja/g++.law/operators2.C | 15 + .../g++.old-deja/g++.law/operators21.C | 16 + .../g++.old-deja/g++.law/operators22.C | 15 + .../g++.old-deja/g++.law/operators23.C | 35 + .../g++.old-deja/g++.law/operators24.C | 14 + .../g++.old-deja/g++.law/operators25.C | 16 + .../g++.old-deja/g++.law/operators27.C | 33 + .../g++.old-deja/g++.law/operators28.C | 30 + .../g++.old-deja/g++.law/operators29.C | 24 + .../g++.old-deja/g++.law/operators3.C | 22 + .../g++.old-deja/g++.law/operators30.C | 25 + .../g++.old-deja/g++.law/operators31.C | 19 + .../g++.old-deja/g++.law/operators32.C | 55 + .../g++.old-deja/g++.law/operators33.C | 28 + .../g++.old-deja/g++.law/operators34.C | 12 + .../g++.old-deja/g++.law/operators4.C | 30 + .../g++.old-deja/g++.law/operators6.C | 24 + .../g++.old-deja/g++.law/operators7.C | 44 + .../g++.old-deja/g++.law/operators8.C | 49 + .../g++.old-deja/g++.law/operators9.C | 19 + gcc/testsuite/g++.old-deja/g++.law/parsing1.C | 21 + .../g++.old-deja/g++.law/parsing10.C | 32 + gcc/testsuite/g++.old-deja/g++.law/parsing2.C | 11 + gcc/testsuite/g++.old-deja/g++.law/parsing3.C | 15 + gcc/testsuite/g++.old-deja/g++.law/parsing4.C | 10 + gcc/testsuite/g++.old-deja/g++.law/parsing5.C | 11 + gcc/testsuite/g++.old-deja/g++.law/parsing6.C | 15 + gcc/testsuite/g++.old-deja/g++.law/parsing7.C | 24 + gcc/testsuite/g++.old-deja/g++.law/parsing8.C | 31 + gcc/testsuite/g++.old-deja/g++.law/parsing9.C | 32 + gcc/testsuite/g++.old-deja/g++.law/patches1.C | 24 + gcc/testsuite/g++.old-deja/g++.law/pic1.C | 9 + gcc/testsuite/g++.old-deja/g++.law/profile1.C | 9 + gcc/testsuite/g++.old-deja/g++.law/refs1.C | 42 + gcc/testsuite/g++.old-deja/g++.law/refs2.C | 11 + gcc/testsuite/g++.old-deja/g++.law/refs3.C | 6 + gcc/testsuite/g++.old-deja/g++.law/refs4.C | 21 + gcc/testsuite/g++.old-deja/g++.law/scope1.C | 20 + gcc/testsuite/g++.old-deja/g++.law/scope2.C | 44 + gcc/testsuite/g++.old-deja/g++.law/scope3.C | 22 + gcc/testsuite/g++.old-deja/g++.law/scope4.C | 16 + gcc/testsuite/g++.old-deja/g++.law/scope5.C | 25 + gcc/testsuite/g++.old-deja/g++.law/shadow1.C | 28 + gcc/testsuite/g++.old-deja/g++.law/shadow2.C | 28 + .../g++.old-deja/g++.law/static-mem2.C | 27 + .../g++.old-deja/g++.law/static-mem3.C | 23 + .../g++.old-deja/g++.law/static-mem4.C | 13 + .../g++.old-deja/g++.law/static-mem5.C | 23 + .../g++.old-deja/g++.law/template1.C | 30 + .../g++.old-deja/g++.law/template2.C | 16 + .../g++.old-deja/g++.law/template3.C | 17 + gcc/testsuite/g++.old-deja/g++.law/temps1.C | 18 + gcc/testsuite/g++.old-deja/g++.law/temps2.C | 54 + gcc/testsuite/g++.old-deja/g++.law/temps3.C | 28 + gcc/testsuite/g++.old-deja/g++.law/temps4.C | 38 + gcc/testsuite/g++.old-deja/g++.law/temps5.C | 41 + gcc/testsuite/g++.old-deja/g++.law/temps6.C | 24 + gcc/testsuite/g++.old-deja/g++.law/temps7.C | 12 + gcc/testsuite/g++.old-deja/g++.law/typeck1.C | 18 + gcc/testsuite/g++.old-deja/g++.law/typeck2.C | 16 + gcc/testsuite/g++.old-deja/g++.law/typeck3.C | 23 + gcc/testsuite/g++.old-deja/g++.law/typeck4.C | 21 + gcc/testsuite/g++.old-deja/g++.law/union1.C | 30 + gcc/testsuite/g++.old-deja/g++.law/union2.C | 25 + gcc/testsuite/g++.old-deja/g++.law/union3.C | 13 + gcc/testsuite/g++.old-deja/g++.law/union4.C | 13 + .../g++.old-deja/g++.law/unsorted1.C | 31 + .../g++.old-deja/g++.law/unsorted2.C | 26 + gcc/testsuite/g++.old-deja/g++.law/vbase1.C | 28 + gcc/testsuite/g++.old-deja/g++.law/virtual1.C | 21 + gcc/testsuite/g++.old-deja/g++.law/virtual2.C | 31 + gcc/testsuite/g++.old-deja/g++.law/virtual3.C | 47 + gcc/testsuite/g++.old-deja/g++.law/virtual4.C | 31 + .../g++.old-deja/g++.law/visibility10.C | 21 + .../g++.old-deja/g++.law/visibility11.C | 48 + .../g++.old-deja/g++.law/visibility12.C | 18 + .../g++.old-deja/g++.law/visibility13.C | 108 + .../g++.old-deja/g++.law/visibility14.C | 21 + .../g++.old-deja/g++.law/visibility15.C | 25 + .../g++.old-deja/g++.law/visibility16.C | 35 + .../g++.old-deja/g++.law/visibility17.C | 63 + .../g++.old-deja/g++.law/visibility18.C | 20 + .../g++.old-deja/g++.law/visibility19.C | 40 + .../g++.old-deja/g++.law/visibility20.C | 36 + .../g++.old-deja/g++.law/visibility21.C | 17 + .../g++.old-deja/g++.law/visibility22.C | 26 + .../g++.old-deja/g++.law/visibility23.C | 27 + .../g++.old-deja/g++.law/visibility24.C | 40 + .../g++.old-deja/g++.law/visibility25.C | 26 + .../g++.old-deja/g++.law/visibility26.C | 18 + .../g++.old-deja/g++.law/visibility27.C | 19 + .../g++.old-deja/g++.law/visibility28.C | 24 + .../g++.old-deja/g++.law/visibility3.C | 22 + .../g++.old-deja/g++.law/visibility4.C | 25 + .../g++.old-deja/g++.law/visibility5.C | 17 + .../g++.old-deja/g++.law/visibility6.C | 23 + .../g++.old-deja/g++.law/visibility7.C | 71 + .../g++.old-deja/g++.law/visibility8.C | 26 + .../g++.old-deja/g++.law/visibility9.C | 22 + gcc/testsuite/g++.old-deja/g++.law/vtable1.C | 27 + gcc/testsuite/g++.old-deja/g++.law/vtable2.C | 19 + gcc/testsuite/g++.old-deja/g++.law/vtable3.C | 24 + .../g++.old-deja/g++.mike/.cvsignore | 2 + gcc/testsuite/g++.old-deja/g++.mike/align1.C | 56 + gcc/testsuite/g++.old-deja/g++.mike/align2.C | 16 + gcc/testsuite/g++.old-deja/g++.mike/ambig1.C | 32 + gcc/testsuite/g++.old-deja/g++.mike/asm1.C | 9 + gcc/testsuite/g++.old-deja/g++.mike/asm2.C | 27 + gcc/testsuite/g++.old-deja/g++.mike/bool1.C | 16 + gcc/testsuite/g++.old-deja/g++.mike/bool2.C | 57 + gcc/testsuite/g++.old-deja/g++.mike/bool4.C | 3 + gcc/testsuite/g++.old-deja/g++.mike/conv1.C | 10 + gcc/testsuite/g++.old-deja/g++.mike/debug1.C | 14 + .../g++.old-deja/g++.mike/dyncast1.C | 22 + .../g++.old-deja/g++.mike/dyncast2.C | 25 + .../g++.old-deja/g++.mike/dyncast3.C | 19 + .../g++.old-deja/g++.mike/dyncast4.C | 4 + .../g++.old-deja/g++.mike/dyncast5.C | 71 + .../g++.old-deja/g++.mike/dyncast6.C | 12 + .../g++.old-deja/g++.mike/dyncast7.C | 28 + .../g++.old-deja/g++.mike/dyncast8.C | 18 + .../g++.old-deja/g++.mike/dyncast9.C | 16 + gcc/testsuite/g++.old-deja/g++.mike/eh1.C | 37 + gcc/testsuite/g++.old-deja/g++.mike/eh10.C | 28 + gcc/testsuite/g++.old-deja/g++.mike/eh11.C | 15 + gcc/testsuite/g++.old-deja/g++.mike/eh12.C | 14 + gcc/testsuite/g++.old-deja/g++.mike/eh13.C | 6 + gcc/testsuite/g++.old-deja/g++.mike/eh14.C | 25 + gcc/testsuite/g++.old-deja/g++.mike/eh15.C | 6 + gcc/testsuite/g++.old-deja/g++.mike/eh16.C | 26 + gcc/testsuite/g++.old-deja/g++.mike/eh17.C | 25 + gcc/testsuite/g++.old-deja/g++.mike/eh18.C | 63 + gcc/testsuite/g++.old-deja/g++.mike/eh19.C | 23 + gcc/testsuite/g++.old-deja/g++.mike/eh2.C | 71 + gcc/testsuite/g++.old-deja/g++.mike/eh20.C | 6 + gcc/testsuite/g++.old-deja/g++.mike/eh21.C | 14 + gcc/testsuite/g++.old-deja/g++.mike/eh23.C | 46 + gcc/testsuite/g++.old-deja/g++.mike/eh24.C | 33 + gcc/testsuite/g++.old-deja/g++.mike/eh25.C | 30 + gcc/testsuite/g++.old-deja/g++.mike/eh26.C | 15 + gcc/testsuite/g++.old-deja/g++.mike/eh27.C | 17 + gcc/testsuite/g++.old-deja/g++.mike/eh28.C | 17 + gcc/testsuite/g++.old-deja/g++.mike/eh29.C | 27 + gcc/testsuite/g++.old-deja/g++.mike/eh3.C | 21 + gcc/testsuite/g++.old-deja/g++.mike/eh30.C | 5 + gcc/testsuite/g++.old-deja/g++.mike/eh31.C | 23 + gcc/testsuite/g++.old-deja/g++.mike/eh32.C | 20 + gcc/testsuite/g++.old-deja/g++.mike/eh33.C | 19 + gcc/testsuite/g++.old-deja/g++.mike/eh34.C | 14 + gcc/testsuite/g++.old-deja/g++.mike/eh35.C | 17 + gcc/testsuite/g++.old-deja/g++.mike/eh36.C | 29 + gcc/testsuite/g++.old-deja/g++.mike/eh37.C | 21 + gcc/testsuite/g++.old-deja/g++.mike/eh38.C | 28 + gcc/testsuite/g++.old-deja/g++.mike/eh39.C | 28 + gcc/testsuite/g++.old-deja/g++.mike/eh4.C | 6 + gcc/testsuite/g++.old-deja/g++.mike/eh40.C | 29 + gcc/testsuite/g++.old-deja/g++.mike/eh41.C | 29 + gcc/testsuite/g++.old-deja/g++.mike/eh42.C | 18 + gcc/testsuite/g++.old-deja/g++.mike/eh43.C | 741 ++ gcc/testsuite/g++.old-deja/g++.mike/eh44.C | 36 + gcc/testsuite/g++.old-deja/g++.mike/eh45.C | 34 + gcc/testsuite/g++.old-deja/g++.mike/eh46.C | 47 + gcc/testsuite/g++.old-deja/g++.mike/eh47.C | 22 + gcc/testsuite/g++.old-deja/g++.mike/eh48.C | 32 + gcc/testsuite/g++.old-deja/g++.mike/eh49.C | 15 + gcc/testsuite/g++.old-deja/g++.mike/eh5.C | 21 + gcc/testsuite/g++.old-deja/g++.mike/eh50.C | 19 + gcc/testsuite/g++.old-deja/g++.mike/eh51.C | 19 + gcc/testsuite/g++.old-deja/g++.mike/eh52.C | 14 + gcc/testsuite/g++.old-deja/g++.mike/eh53.C | 15 + gcc/testsuite/g++.old-deja/g++.mike/eh54.C | 3 + gcc/testsuite/g++.old-deja/g++.mike/eh55.C | 16 + gcc/testsuite/g++.old-deja/g++.mike/eh56.C | 22 + gcc/testsuite/g++.old-deja/g++.mike/eh57.C | 18 + gcc/testsuite/g++.old-deja/g++.mike/eh58.C | 18 + gcc/testsuite/g++.old-deja/g++.mike/eh6.C | 19 + gcc/testsuite/g++.old-deja/g++.mike/eh7.C | 7 + gcc/testsuite/g++.old-deja/g++.mike/eh8.C | 20 + gcc/testsuite/g++.old-deja/g++.mike/eh9.C | 4 + gcc/testsuite/g++.old-deja/g++.mike/enum1.C | 11 + gcc/testsuite/g++.old-deja/g++.mike/err1.C | 8 + gcc/testsuite/g++.old-deja/g++.mike/err2.C | 6 + gcc/testsuite/g++.old-deja/g++.mike/err3.C | 9 + .../g++.old-deja/g++.mike/explicit1.C | 15 + .../g++.old-deja/g++.mike/explicit2.C | 24 + gcc/testsuite/g++.old-deja/g++.mike/for1.C | 3 + gcc/testsuite/g++.old-deja/g++.mike/for2.C | 19 + gcc/testsuite/g++.old-deja/g++.mike/fresco1.C | 13 + gcc/testsuite/g++.old-deja/g++.mike/hog1.C | 187 + gcc/testsuite/g++.old-deja/g++.mike/init1.C | 25 + gcc/testsuite/g++.old-deja/g++.mike/init2.C | 9 + gcc/testsuite/g++.old-deja/g++.mike/leak1.C | 38 + gcc/testsuite/g++.old-deja/g++.mike/mangle1.C | 27 + gcc/testsuite/g++.old-deja/g++.mike/mangle2.C | 17 + gcc/testsuite/g++.old-deja/g++.mike/mangle3.C | 14 + .../g++.old-deja/g++.mike/memoize1.C | 4 + gcc/testsuite/g++.old-deja/g++.mike/mi1.C | 44 + gcc/testsuite/g++.old-deja/g++.mike/mi2.C | 46 + gcc/testsuite/g++.old-deja/g++.mike/misc1.C | 53 + gcc/testsuite/g++.old-deja/g++.mike/misc11.C | 4 + gcc/testsuite/g++.old-deja/g++.mike/misc12.C | 8 + gcc/testsuite/g++.old-deja/g++.mike/misc13.C | 53 + gcc/testsuite/g++.old-deja/g++.mike/misc14.C | 27 + gcc/testsuite/g++.old-deja/g++.mike/misc2.C | 11 + gcc/testsuite/g++.old-deja/g++.mike/misc3.C | 4 + gcc/testsuite/g++.old-deja/g++.mike/misc5.C | 11 + gcc/testsuite/g++.old-deja/g++.mike/misc6.C | 11 + gcc/testsuite/g++.old-deja/g++.mike/misc7.C | 16 + gcc/testsuite/g++.old-deja/g++.mike/misc8.C | 5 + gcc/testsuite/g++.old-deja/g++.mike/misc9.C | 13 + gcc/testsuite/g++.old-deja/g++.mike/net1.C | 19 + gcc/testsuite/g++.old-deja/g++.mike/net10.C | 15 + gcc/testsuite/g++.old-deja/g++.mike/net11.C | 16 + gcc/testsuite/g++.old-deja/g++.mike/net12.C | 16 + gcc/testsuite/g++.old-deja/g++.mike/net13.C | 14 + gcc/testsuite/g++.old-deja/g++.mike/net14.C | 7 + gcc/testsuite/g++.old-deja/g++.mike/net15.C | 46 + gcc/testsuite/g++.old-deja/g++.mike/net16.C | 7 + gcc/testsuite/g++.old-deja/g++.mike/net17.C | 58 + gcc/testsuite/g++.old-deja/g++.mike/net18.C | 21 + gcc/testsuite/g++.old-deja/g++.mike/net19.C | 20 + gcc/testsuite/g++.old-deja/g++.mike/net2.C | 13 + gcc/testsuite/g++.old-deja/g++.mike/net20.C | 11 + gcc/testsuite/g++.old-deja/g++.mike/net21.C | 59 + gcc/testsuite/g++.old-deja/g++.mike/net22.C | 13 + gcc/testsuite/g++.old-deja/g++.mike/net23.C | 15 + gcc/testsuite/g++.old-deja/g++.mike/net24.C | 3 + gcc/testsuite/g++.old-deja/g++.mike/net25.C | 17 + gcc/testsuite/g++.old-deja/g++.mike/net26.C | 27 + gcc/testsuite/g++.old-deja/g++.mike/net27.C | 9 + gcc/testsuite/g++.old-deja/g++.mike/net28.C | 28 + gcc/testsuite/g++.old-deja/g++.mike/net29.C | 27 + gcc/testsuite/g++.old-deja/g++.mike/net3.C | 16 + gcc/testsuite/g++.old-deja/g++.mike/net30.C | 18 + gcc/testsuite/g++.old-deja/g++.mike/net31.C | 68 + gcc/testsuite/g++.old-deja/g++.mike/net32.C | 10 + gcc/testsuite/g++.old-deja/g++.mike/net34.C | 36 + gcc/testsuite/g++.old-deja/g++.mike/net35.C | 27 + gcc/testsuite/g++.old-deja/g++.mike/net36.C | 19 + gcc/testsuite/g++.old-deja/g++.mike/net37.C | 39 + gcc/testsuite/g++.old-deja/g++.mike/net38.C | 28 + gcc/testsuite/g++.old-deja/g++.mike/net39.C | 30 + gcc/testsuite/g++.old-deja/g++.mike/net4.C | 32 + gcc/testsuite/g++.old-deja/g++.mike/net40.C | 18 + gcc/testsuite/g++.old-deja/g++.mike/net41.C | 3 + gcc/testsuite/g++.old-deja/g++.mike/net42.C | 25 + gcc/testsuite/g++.old-deja/g++.mike/net43.C | 11 + gcc/testsuite/g++.old-deja/g++.mike/net44.C | 11 + gcc/testsuite/g++.old-deja/g++.mike/net45.C | 20 + gcc/testsuite/g++.old-deja/g++.mike/net46.C | 15 + gcc/testsuite/g++.old-deja/g++.mike/net47.C | 8 + gcc/testsuite/g++.old-deja/g++.mike/net48.C | 14 + gcc/testsuite/g++.old-deja/g++.mike/net5.C | 7 + gcc/testsuite/g++.old-deja/g++.mike/net6.C | 5 + gcc/testsuite/g++.old-deja/g++.mike/net7.C | 7 + gcc/testsuite/g++.old-deja/g++.mike/net8.C | 32 + gcc/testsuite/g++.old-deja/g++.mike/net9.C | 15 + gcc/testsuite/g++.old-deja/g++.mike/ns1.C | 11 + gcc/testsuite/g++.old-deja/g++.mike/ns10.C | 10 + gcc/testsuite/g++.old-deja/g++.mike/ns11.C | 19 + gcc/testsuite/g++.old-deja/g++.mike/ns12.C | 14 + gcc/testsuite/g++.old-deja/g++.mike/ns13.C | 14 + gcc/testsuite/g++.old-deja/g++.mike/ns14.C | 12 + gcc/testsuite/g++.old-deja/g++.mike/ns2.C | 9 + gcc/testsuite/g++.old-deja/g++.mike/ns3.C | 4 + gcc/testsuite/g++.old-deja/g++.mike/ns4.C | 6 + gcc/testsuite/g++.old-deja/g++.mike/ns5.C | 5 + gcc/testsuite/g++.old-deja/g++.mike/ns6.C | 9 + gcc/testsuite/g++.old-deja/g++.mike/ns7.C | 9 + gcc/testsuite/g++.old-deja/g++.mike/ns8.C | 9 + gcc/testsuite/g++.old-deja/g++.mike/ns9.C | 12 + gcc/testsuite/g++.old-deja/g++.mike/offset1.C | 38 + gcc/testsuite/g++.old-deja/g++.mike/opr-as1.C | 11 + .../g++.old-deja/g++.mike/opr-dot1.C | 22 + gcc/testsuite/g++.old-deja/g++.mike/p10148.C | 33 + gcc/testsuite/g++.old-deja/g++.mike/p10247.C | 6 + gcc/testsuite/g++.old-deja/g++.mike/p10416.C | 9 + gcc/testsuite/g++.old-deja/g++.mike/p10511.C | 15 + gcc/testsuite/g++.old-deja/g++.mike/p10769a.C | 45 + gcc/testsuite/g++.old-deja/g++.mike/p10769b.C | 25 + gcc/testsuite/g++.old-deja/g++.mike/p10849a.C | 33 + gcc/testsuite/g++.old-deja/g++.mike/p10951.C | 21 + gcc/testsuite/g++.old-deja/g++.mike/p11012.C | 14 + gcc/testsuite/g++.old-deja/g++.mike/p11110.C | 20 + gcc/testsuite/g++.old-deja/g++.mike/p11116.C | 22 + gcc/testsuite/g++.old-deja/g++.mike/p11142.C | 18 + gcc/testsuite/g++.old-deja/g++.mike/p11144.C | 17 + gcc/testsuite/g++.old-deja/g++.mike/p11482.C | 10 + gcc/testsuite/g++.old-deja/g++.mike/p11667.C | 62 + gcc/testsuite/g++.old-deja/g++.mike/p12306.C | 75 + gcc/testsuite/g++.old-deja/g++.mike/p12306a.C | 35 + gcc/testsuite/g++.old-deja/g++.mike/p1248.C | 28 + gcc/testsuite/g++.old-deja/g++.mike/p1567.C | 41 + gcc/testsuite/g++.old-deja/g++.mike/p1862.C | 62 + gcc/testsuite/g++.old-deja/g++.mike/p1989.C | 494 + gcc/testsuite/g++.old-deja/g++.mike/p2394.C | 36 + gcc/testsuite/g++.old-deja/g++.mike/p2431.C | 23 + gcc/testsuite/g++.old-deja/g++.mike/p2573.C | 14 + gcc/testsuite/g++.old-deja/g++.mike/p2736.C | 28 + gcc/testsuite/g++.old-deja/g++.mike/p2746.C | 156 + gcc/testsuite/g++.old-deja/g++.mike/p2793.C | 6 + gcc/testsuite/g++.old-deja/g++.mike/p2806.C | 20 + gcc/testsuite/g++.old-deja/g++.mike/p2846.C | 55 + gcc/testsuite/g++.old-deja/g++.mike/p2846a.C | 34 + gcc/testsuite/g++.old-deja/g++.mike/p2846b.C | 52 + gcc/testsuite/g++.old-deja/g++.mike/p2855.C | 21 + gcc/testsuite/g++.old-deja/g++.mike/p2960.C | 30 + gcc/testsuite/g++.old-deja/g++.mike/p3041.C | 33 + gcc/testsuite/g++.old-deja/g++.mike/p3060c.C | 23 + gcc/testsuite/g++.old-deja/g++.mike/p3060d.C | 34 + gcc/testsuite/g++.old-deja/g++.mike/p3068.C | 60 + gcc/testsuite/g++.old-deja/g++.mike/p3070.C | 32 + gcc/testsuite/g++.old-deja/g++.mike/p3139.C | 25 + gcc/testsuite/g++.old-deja/g++.mike/p3524a.C | 25 + gcc/testsuite/g++.old-deja/g++.mike/p3524b.C | 21 + gcc/testsuite/g++.old-deja/g++.mike/p3524c.C | 15 + gcc/testsuite/g++.old-deja/g++.mike/p3538a.C | 33 + gcc/testsuite/g++.old-deja/g++.mike/p3538b.C | 35 + gcc/testsuite/g++.old-deja/g++.mike/p3570.C | 29 + gcc/testsuite/g++.old-deja/g++.mike/p3579.C | 39 + gcc/testsuite/g++.old-deja/g++.mike/p3708.C | 86 + gcc/testsuite/g++.old-deja/g++.mike/p3708a.C | 86 + gcc/testsuite/g++.old-deja/g++.mike/p3708b.C | 85 + gcc/testsuite/g++.old-deja/g++.mike/p3764.C | 25 + gcc/testsuite/g++.old-deja/g++.mike/p3836.C | 14 + gcc/testsuite/g++.old-deja/g++.mike/p4068.C | 22 + gcc/testsuite/g++.old-deja/g++.mike/p4104.C | 15 + gcc/testsuite/g++.old-deja/g++.mike/p4173.C | 24 + gcc/testsuite/g++.old-deja/g++.mike/p418.C | 18 + gcc/testsuite/g++.old-deja/g++.mike/p4238.C | 7 + gcc/testsuite/g++.old-deja/g++.mike/p4246.C | 48 + gcc/testsuite/g++.old-deja/g++.mike/p4263.C | 14 + gcc/testsuite/g++.old-deja/g++.mike/p438.C | 23 + gcc/testsuite/g++.old-deja/g++.mike/p4484.C | 26 + gcc/testsuite/g++.old-deja/g++.mike/p4511.C | 33 + gcc/testsuite/g++.old-deja/g++.mike/p4619.C | 10 + gcc/testsuite/g++.old-deja/g++.mike/p4623.C | 35 + gcc/testsuite/g++.old-deja/g++.mike/p4667.C | 31 + gcc/testsuite/g++.old-deja/g++.mike/p4671.C | 16 + gcc/testsuite/g++.old-deja/g++.mike/p4677.C | 9 + gcc/testsuite/g++.old-deja/g++.mike/p4693.C | 24 + gcc/testsuite/g++.old-deja/g++.mike/p4736a.C | 39 + gcc/testsuite/g++.old-deja/g++.mike/p4736b.C | 48 + gcc/testsuite/g++.old-deja/g++.mike/p4736c.C | 62 + gcc/testsuite/g++.old-deja/g++.mike/p4750.C | 11 + gcc/testsuite/g++.old-deja/g++.mike/p5469.C | 21 + gcc/testsuite/g++.old-deja/g++.mike/p5469a.C | 21 + gcc/testsuite/g++.old-deja/g++.mike/p5571.C | 70 + gcc/testsuite/g++.old-deja/g++.mike/p5611.C | 11 + gcc/testsuite/g++.old-deja/g++.mike/p5673.C | 20 + gcc/testsuite/g++.old-deja/g++.mike/p5718.C | 37 + gcc/testsuite/g++.old-deja/g++.mike/p5793.C | 21 + gcc/testsuite/g++.old-deja/g++.mike/p5840.C | 33 + gcc/testsuite/g++.old-deja/g++.mike/p5958.C | 27 + gcc/testsuite/g++.old-deja/g++.mike/p6004.C | 20 + gcc/testsuite/g++.old-deja/g++.mike/p6058.C | 18 + gcc/testsuite/g++.old-deja/g++.mike/p6149.C | 4 + gcc/testsuite/g++.old-deja/g++.mike/p6311.C | 16 + gcc/testsuite/g++.old-deja/g++.mike/p646.C | 175 + gcc/testsuite/g++.old-deja/g++.mike/p6578.C | 8 + gcc/testsuite/g++.old-deja/g++.mike/p658.C | 101 + gcc/testsuite/g++.old-deja/g++.mike/p6610a.C | 13 + gcc/testsuite/g++.old-deja/g++.mike/p6610b.C | 14 + gcc/testsuite/g++.old-deja/g++.mike/p6611.C | 26 + gcc/testsuite/g++.old-deja/g++.mike/p6746.C | 18 + gcc/testsuite/g++.old-deja/g++.mike/p6901.C | 7 + gcc/testsuite/g++.old-deja/g++.mike/p6927.C | 16 + gcc/testsuite/g++.old-deja/g++.mike/p700.C | 2387 +++++ gcc/testsuite/g++.old-deja/g++.mike/p701.C | 34 + gcc/testsuite/g++.old-deja/g++.mike/p710.C | 43 + gcc/testsuite/g++.old-deja/g++.mike/p7180.C | 17 + gcc/testsuite/g++.old-deja/g++.mike/p7325.C | 55 + gcc/testsuite/g++.old-deja/g++.mike/p7476.C | 20 + gcc/testsuite/g++.old-deja/g++.mike/p755.C | 17 + gcc/testsuite/g++.old-deja/g++.mike/p755a.C | 14 + gcc/testsuite/g++.old-deja/g++.mike/p7626.C | 43 + gcc/testsuite/g++.old-deja/g++.mike/p7635.C | 6 + gcc/testsuite/g++.old-deja/g++.mike/p7651.C | 25 + gcc/testsuite/g++.old-deja/g++.mike/p783.C | 15 + gcc/testsuite/g++.old-deja/g++.mike/p783a.C | 26 + gcc/testsuite/g++.old-deja/g++.mike/p783b.C | 37 + gcc/testsuite/g++.old-deja/g++.mike/p784.C | 3702 ++++++++ gcc/testsuite/g++.old-deja/g++.mike/p785.C | 8154 +++++++++++++++++ gcc/testsuite/g++.old-deja/g++.mike/p786.C | 35 + gcc/testsuite/g++.old-deja/g++.mike/p7865.C | 28 + gcc/testsuite/g++.old-deja/g++.mike/p7868.C | 21 + gcc/testsuite/g++.old-deja/g++.mike/p789.C | 28 + gcc/testsuite/g++.old-deja/g++.mike/p789a.C | 43 + gcc/testsuite/g++.old-deja/g++.mike/p7912.C | 23 + gcc/testsuite/g++.old-deja/g++.mike/p8009.C | 12 + gcc/testsuite/g++.old-deja/g++.mike/p8018.C | 85 + gcc/testsuite/g++.old-deja/g++.mike/p8039.C | 14 + gcc/testsuite/g++.old-deja/g++.mike/p807.C | 34 + gcc/testsuite/g++.old-deja/g++.mike/p807a.C | 22 + gcc/testsuite/g++.old-deja/g++.mike/p811.C | 549 ++ gcc/testsuite/g++.old-deja/g++.mike/p8154.C | 19 + gcc/testsuite/g++.old-deja/g++.mike/p8155.C | 147 + gcc/testsuite/g++.old-deja/g++.mike/p8175.C | 14 + gcc/testsuite/g++.old-deja/g++.mike/p8269.C | 11 + gcc/testsuite/g++.old-deja/g++.mike/p8460.C | 17 + gcc/testsuite/g++.old-deja/g++.mike/p8483.C | 35 + gcc/testsuite/g++.old-deja/g++.mike/p8620.C | 14 + gcc/testsuite/g++.old-deja/g++.mike/p8785.C | 25 + gcc/testsuite/g++.old-deja/g++.mike/p8786.C | 24 + gcc/testsuite/g++.old-deja/g++.mike/p8804.C | 18 + gcc/testsuite/g++.old-deja/g++.mike/p8825.C | 14 + gcc/testsuite/g++.old-deja/g++.mike/p9068.C | 21 + gcc/testsuite/g++.old-deja/g++.mike/p9129.C | 12 + gcc/testsuite/g++.old-deja/g++.mike/p9206.C | 21 + gcc/testsuite/g++.old-deja/g++.mike/p9506.C | 7 + gcc/testsuite/g++.old-deja/g++.mike/p9706.C | 33 + gcc/testsuite/g++.old-deja/g++.mike/p9732a.C | 36 + gcc/testsuite/g++.old-deja/g++.mike/p9732b.C | 42 + gcc/testsuite/g++.old-deja/g++.mike/p9732c.C | 5 + gcc/testsuite/g++.old-deja/g++.mike/p991.C | 22 + gcc/testsuite/g++.old-deja/g++.mike/parse1.C | 7 + gcc/testsuite/g++.old-deja/g++.mike/pmd1.C | 12 + gcc/testsuite/g++.old-deja/g++.mike/pmf1.C | 90 + gcc/testsuite/g++.old-deja/g++.mike/pmf2.C | 54 + gcc/testsuite/g++.old-deja/g++.mike/pmf3.C | 19 + gcc/testsuite/g++.old-deja/g++.mike/pmf4.C | 13 + gcc/testsuite/g++.old-deja/g++.mike/pmf5.C | 31 + gcc/testsuite/g++.old-deja/g++.mike/pmf6.C | 12 + gcc/testsuite/g++.old-deja/g++.mike/pmf7.C | 29 + gcc/testsuite/g++.old-deja/g++.mike/pmf8.C | 31 + gcc/testsuite/g++.old-deja/g++.mike/pmf9.C | 23 + gcc/testsuite/g++.old-deja/g++.mike/pt1.C | 36 + gcc/testsuite/g++.old-deja/g++.mike/pt2.C | 22 + gcc/testsuite/g++.old-deja/g++.mike/pt3.C | 26 + gcc/testsuite/g++.old-deja/g++.mike/pt4.C | 4 + gcc/testsuite/g++.old-deja/g++.mike/ref1.C | 21 + gcc/testsuite/g++.old-deja/g++.mike/rtti1.C | 4 + gcc/testsuite/g++.old-deja/g++.mike/rtti2.C | 5 + gcc/testsuite/g++.old-deja/g++.mike/rtti3.C | 23 + gcc/testsuite/g++.old-deja/g++.mike/scast1.C | 7 + gcc/testsuite/g++.old-deja/g++.mike/temp.C | 31 + gcc/testsuite/g++.old-deja/g++.mike/thunk1.C | 19 + gcc/testsuite/g++.old-deja/g++.mike/thunk2.C | 39 + gcc/testsuite/g++.old-deja/g++.mike/thunk3.C | 35 + gcc/testsuite/g++.old-deja/g++.mike/unroll1.C | 11 + gcc/testsuite/g++.old-deja/g++.mike/virt1.C | 13 + gcc/testsuite/g++.old-deja/g++.mike/virt2.C | 25 + gcc/testsuite/g++.old-deja/g++.mike/virt3.C | 17 + gcc/testsuite/g++.old-deja/g++.mike/virt4.C | 25 + gcc/testsuite/g++.old-deja/g++.mike/virt5.C | 53 + gcc/testsuite/g++.old-deja/g++.mike/warn1.C | 13 + gcc/testsuite/g++.old-deja/g++.mike/warn2.C | 24 + gcc/testsuite/g++.old-deja/g++.mike/warn3.C | 12 + gcc/testsuite/g++.old-deja/g++.mike/warn4.C | 1 + gcc/testsuite/g++.old-deja/g++.mike/warn5.C | 21 + gcc/testsuite/g++.old-deja/g++.mike/warn6.C | 42 + gcc/testsuite/g++.old-deja/g++.mike/warn7.C | 14 + gcc/testsuite/g++.old-deja/g++.mike/warn8.C | 19 + .../g++.old-deja/g++.niklas/.cvsignore | 2 + .../g++.old-deja/g++.niklas/Makefile.in | 12 + gcc/testsuite/g++.old-deja/g++.niklas/README | 18 + .../g++.old-deja/g++.niklas/configure.in | 15 + gcc/testsuite/g++.old-deja/g++.niklas/t113.C | 7 + gcc/testsuite/g++.old-deja/g++.niklas/t114.C | 5 + gcc/testsuite/g++.old-deja/g++.niklas/t115.C | 7 + gcc/testsuite/g++.old-deja/g++.niklas/t118.C | 4 + gcc/testsuite/g++.old-deja/g++.niklas/t119.C | 6 + gcc/testsuite/g++.old-deja/g++.niklas/t120.C | 5 + gcc/testsuite/g++.old-deja/g++.niklas/t121.C | 5 + gcc/testsuite/g++.old-deja/g++.niklas/t122.C | 14 + gcc/testsuite/g++.old-deja/g++.niklas/t123.C | 4 + gcc/testsuite/g++.old-deja/g++.niklas/t124.C | 10 + gcc/testsuite/g++.old-deja/g++.niklas/t125.C | 10 + gcc/testsuite/g++.old-deja/g++.niklas/t126.C | 11 + gcc/testsuite/g++.old-deja/g++.niklas/t127.C | 4 + gcc/testsuite/g++.old-deja/g++.niklas/t128.C | 5 + gcc/testsuite/g++.old-deja/g++.niklas/t129.C | 6 + gcc/testsuite/g++.old-deja/g++.niklas/t130.C | 4 + gcc/testsuite/g++.old-deja/g++.niklas/t131.C | 4 + gcc/testsuite/g++.old-deja/g++.niklas/t132.C | 5 + gcc/testsuite/g++.old-deja/g++.niklas/t133.C | 4 + gcc/testsuite/g++.old-deja/g++.niklas/t134.C | 4 + gcc/testsuite/g++.old-deja/g++.niklas/t135.C | 28 + gcc/testsuite/g++.old-deja/g++.niklas/t136.C | 4 + gcc/testsuite/g++.old-deja/g++.niklas/t137.C | 6 + gcc/testsuite/g++.old-deja/g++.niklas/t138.C | 6 + gcc/testsuite/g++.old-deja/g++.niklas/t139.C | 7 + gcc/testsuite/g++.old-deja/g++.niklas/t140.C | 11 + gcc/testsuite/g++.old-deja/g++.niklas/t141.C | 6 + .../g++.old-deja/g++.other/.cvsignore | 2 + .../g++.old-deja/g++.other/900403_04.C | 12 + .../g++.old-deja/g++.other/900519_12.C | 11 + .../g++.old-deja/g++.other/Makefile.in | 12 + .../g++.old-deja/g++.other/configure.in | 15 + gcc/testsuite/g++.old-deja/g++.other/dll-1.C | 10 + gcc/testsuite/g++.old-deja/g++.other/dll-2.C | 19 + gcc/testsuite/g++.old-deja/g++.other/dll-3.C | 17 + gcc/testsuite/g++.old-deja/g++.other/dll-4.C | 14 + gcc/testsuite/g++.old-deja/g++.other/dll-5.C | 13 + gcc/testsuite/g++.old-deja/g++.other/dll-6.C | 15 + gcc/testsuite/g++.old-deja/g++.other/rtti1.C | 121 + gcc/testsuite/g++.old-deja/g++.other/rtti2.C | 88 + gcc/testsuite/g++.old-deja/g++.other/rtti3.C | 96 + gcc/testsuite/g++.old-deja/g++.other/rtti4.C | 86 + gcc/testsuite/g++.old-deja/g++.other/rttid2.C | 100 + gcc/testsuite/g++.old-deja/g++.other/rttid3.C | 115 + gcc/testsuite/g++.old-deja/g++.other/rttid4.C | 111 + gcc/testsuite/g++.old-deja/g++.pt/eichin01.C | 27 + gcc/testsuite/g++.old-deja/g++.pt/eichin01a.C | 21 + gcc/testsuite/g++.old-deja/g++.pt/eichin01b.C | 21 + gcc/testsuite/g++.old-deja/g++.pt/m1.C | 16 + gcc/testsuite/g++.old-deja/g++.pt/m2.C | 9 + gcc/testsuite/g++.old-deja/g++.pt/m3.C | 9 + gcc/testsuite/g++.old-deja/g++.pt/m4.C | 7 + gcc/testsuite/g++.old-deja/g++.pt/m5.C | 6 + gcc/testsuite/g++.old-deja/g++.pt/m6.C | 14 + gcc/testsuite/g++.old-deja/g++.pt/m7.C | 13 + gcc/testsuite/g++.old-deja/g++.pt/m8.C | 22 + gcc/testsuite/g++.old-deja/g++.pt/m9.C | 16 + gcc/testsuite/g++.old-deja/g++.pt/m9a.C | 5 + gcc/testsuite/g++.old-deja/g++.pt/niklas01.C | 6 + gcc/testsuite/g++.old-deja/g++.pt/niklas01a.C | 8 + gcc/testsuite/g++.old-deja/g++.pt/niklas01b.C | 6 + gcc/testsuite/g++.old-deja/g++.pt/niklas02.C | 15 + gcc/testsuite/g++.old-deja/g++.pt/niklas03.C | 12 + gcc/testsuite/g++.old-deja/g++.pt/t00.C | 12 + gcc/testsuite/g++.old-deja/g++.pt/t01.C | 6 + gcc/testsuite/g++.old-deja/g++.pt/t03.C | 7 + gcc/testsuite/g++.old-deja/g++.pt/t04.C | 8 + gcc/testsuite/g++.old-deja/g++.pt/t05.C | 9 + gcc/testsuite/g++.old-deja/g++.pt/t06.C | 25 + gcc/testsuite/g++.old-deja/g++.pt/t07.C | 10 + gcc/testsuite/g++.old-deja/g++.pt/t08.C | 10 + gcc/testsuite/g++.old-deja/g++.pt/t09.C | 6 + gcc/testsuite/g++.old-deja/g++.pt/t10.C | 6 + gcc/testsuite/g++.old-deja/g++.pt/t11.C | 9 + gcc/testsuite/g++.old-deja/g++.pt/t11a.C | 9 + gcc/testsuite/g++.old-deja/g++.pt/t12.C | 25 + gcc/testsuite/g++.old-deja/g++.pt/t12a.C | 5 + gcc/testsuite/g++.old-deja/g++.pt/t13.C | 19 + gcc/testsuite/g++.old-deja/g++.pt/t14.C | 24 + gcc/testsuite/g++.old-deja/g++.pt/t14a.C | 25 + gcc/testsuite/g++.old-deja/g++.pt/t16.C | 30 + gcc/testsuite/g++.old-deja/g++.pt/t18.C | 19 + gcc/testsuite/g++.old-deja/g++.pt/t20.C | 15 + gcc/testsuite/g++.old-deja/g++.pt/t21.C | 8 + gcc/testsuite/g++.old-deja/g++.pt/t22.C | 10 + gcc/testsuite/g++.old-deja/g++.pt/t23.C | 18 + gcc/testsuite/g++.old-deja/g++.pt/t24.C | 8 + gcc/testsuite/g++.old-deja/g++.pt/t25.C | 8 + gcc/testsuite/g++.old-deja/g++.pt/t26.C | 8 + gcc/testsuite/g++.old-deja/g++.pt/t27.C | 8 + gcc/testsuite/g++.old-deja/g++.pt/t28.C | 10 + gcc/testsuite/g++.old-deja/g++.pt/t29.C | 8 + gcc/testsuite/g++.old-deja/g++.pt/t30.C | 8 + gcc/testsuite/g++.old-deja/g++.pt/t31.C | 17 + gcc/testsuite/g++.old-deja/g++.pt/t32.C | 14 + gcc/testsuite/g++.old-deja/g++.pt/t32a.C | 10 + gcc/testsuite/g++.old-deja/g++.pt/t34.C | 8 + gcc/testsuite/g++.old-deja/g++.pt/t34a.C | 16 + gcc/testsuite/g++.old-deja/g++.pt/t35.C | 12 + gcc/testsuite/g++.old-deja/g++.pt/t36.C | 6 + gcc/testsuite/g++.old-deja/g++.pt/t37.C | 17 + gcc/testsuite/g++.old-deja/g++.pt/t37a.C | 18 + gcc/testsuite/g++.old-deja/g++.pt/t38.C | 19 + gcc/testsuite/g++.old-deja/g++.pt/t39.C | 25 + gcc/testsuite/g++.old-deja/g++.pt/t40.C | 11 + gcc/testsuite/g++.old-deja/g++.pt/t41.C | 11 + gcc/testsuite/g++.old-deja/g++.pt/t42.C | 17 + gcc/testsuite/g++.old-deja/g++.pt/test5.C | 3 + gcc/testsuite/g++.old-deja/g++.pt/tiemann1r.C | 8 + gcc/testsuite/g++.old-deja/g++.pt/tiemann2.C | 34 + gcc/testsuite/g++.old-deja/g++.pt/to2.C | 7 + gcc/testsuite/g++.old-deja/g++.pt/tt.C | 33 + gcc/testsuite/g++.old-deja/g++.pt/tt2.C | 22 + .../g++.old-deja/g++.rfg/00321_01-.C | 14 + .../g++.old-deja/g++.rfg/00324_02-.C | 16 + gcc/testsuite/g++.old-deja/g++.rfg/README | 30 + gcc/testsuite/g++.old-deja/old-deja.exp | 64 + gcc/testsuite/gcc.c-torture/ChangeLog | 659 ++ .../gcc.c-torture/code_quality/920608-1.c | 25 + .../gcc.c-torture/code_quality/Makefile.in | 12 + .../code_quality/code_quality.exp | 55 + .../gcc.c-torture/code_quality/configure.in | 15 + .../gcc.c-torture/compat/Makefile.in | 12 + .../gcc.c-torture/compat/configure.in | 15 + .../gcc.c-torture/compat/strct-layout.c | 69 + .../gcc.c-torture/compat/struct-align.c | 52 + .../gcc.c-torture/compat/struct-big.c | 54 + gcc/testsuite/gcc.c-torture/compat/struct-i.c | 46 + .../gcc.c-torture/compat/struct-ic.c | 48 + .../gcc.c-torture/compat/struct-ii.c | 48 + .../gcc.c-torture/compat/struct-ret-1.c | 25 + .../gcc.c-torture/compile/900116-1.c | 14 + .../gcc.c-torture/compile/900216-1.c | 9 + .../gcc.c-torture/compile/900313-1.c | 172 + .../gcc.c-torture/compile/900407-1.c | 10 + .../gcc.c-torture/compile/900516-1.c | 1 + .../gcc.c-torture/compile/920301-1.c | 4 + .../gcc.c-torture/compile/920409-1.c | 1 + .../gcc.c-torture/compile/920409-2.c | 2 + .../gcc.c-torture/compile/920410-1.c | 30 + .../gcc.c-torture/compile/920410-2.c | 12 + .../gcc.c-torture/compile/920411-2.c | 1 + .../gcc.c-torture/compile/920413-1.c | 2 + .../gcc.c-torture/compile/920415-1.c | 17 + .../gcc.c-torture/compile/920428-1.c | 1 + .../gcc.c-torture/compile/920428-2.c | 531 ++ .../gcc.c-torture/compile/920428-3.c | 5 + .../gcc.c-torture/compile/920428-4.c | 1 + .../gcc.c-torture/compile/920428-5.c | 1 + .../gcc.c-torture/compile/920428-6.c | 22 + .../gcc.c-torture/compile/920428-7.c | 1 + .../gcc.c-torture/compile/920501-1.c | 7 + .../gcc.c-torture/compile/920501-10.c | 1 + .../gcc.c-torture/compile/920501-11.c | 1 + .../gcc.c-torture/compile/920501-12.c | 5 + .../gcc.c-torture/compile/920501-13.c | 1 + .../gcc.c-torture/compile/920501-15.c | 1 + .../gcc.c-torture/compile/920501-16.c | 1 + .../gcc.c-torture/compile/920501-17.c | 1 + .../gcc.c-torture/compile/920501-18.c | 2 + .../gcc.c-torture/compile/920501-19.c | 1 + .../gcc.c-torture/compile/920501-2.c | 11 + .../gcc.c-torture/compile/920501-20.c | 1 + .../gcc.c-torture/compile/920501-21.c | 3 + .../gcc.c-torture/compile/920501-22.c | 1 + .../gcc.c-torture/compile/920501-23.c | 16 + .../gcc.c-torture/compile/920501-24.c | 221 + .../gcc.c-torture/compile/920501-3.c | 2 + .../gcc.c-torture/compile/920501-4.c | 49 + .../gcc.c-torture/compile/920501-6.c | 1 + .../gcc.c-torture/compile/920501-7.c | 7 + .../gcc.c-torture/compile/920501-8.c | 1 + .../gcc.c-torture/compile/920501-9.c | 1 + .../gcc.c-torture/compile/920502-1.c | 1 + .../gcc.c-torture/compile/920502-2.c | 1 + .../gcc.c-torture/compile/920529-1.c | 21 + .../gcc.c-torture/compile/920611-2.c | 53 + .../gcc.c-torture/compile/920615-1.c | 4 + .../gcc.c-torture/compile/920617-1.c | 1 + .../gcc.c-torture/compile/920617-2.c | 1 + .../gcc.c-torture/compile/920623-1.c | 2 + .../gcc.c-torture/compile/920624-1.c | 2 + .../gcc.c-torture/compile/920625-1.c | 279 + .../gcc.c-torture/compile/920625-2.c | 103 + .../gcc.c-torture/compile/920626-1.c | 1 + .../gcc.c-torture/compile/920701-1.c | 1 + .../gcc.c-torture/compile/920702-1.c | 10 + .../gcc.c-torture/compile/920706-1.c | 1 + .../gcc.c-torture/compile/920710-2.c | 36 + .../gcc.c-torture/compile/920711-1.c | 1 + .../gcc.c-torture/compile/920721-1.c | 11 + .../gcc.c-torture/compile/920723-1.c | 23 + .../gcc.c-torture/compile/920729-1.c | 2 + .../gcc.c-torture/compile/920806-1.c | 1 + .../gcc.c-torture/compile/920808-1.c | 1 + .../gcc.c-torture/compile/920809-1.c | 1 + .../gcc.c-torture/compile/920817-1.c | 1 + .../gcc.c-torture/compile/920820-1.c | 1 + .../gcc.c-torture/compile/920821-1.c | 1 + .../gcc.c-torture/compile/920821-2.c | 4 + .../gcc.c-torture/compile/920825-1.c | 3 + .../gcc.c-torture/compile/920825-2.c | 3 + .../gcc.c-torture/compile/920826-1.c | 1 + .../gcc.c-torture/compile/920828-1.c | 1 + .../gcc.c-torture/compile/920829-1.c | 1 + .../gcc.c-torture/compile/920831-1.c | 1 + .../gcc.c-torture/compile/920902-1.c | 2 + .../gcc.c-torture/compile/920909-1.c | 1 + .../gcc.c-torture/compile/920917-1.c | 2 + .../gcc.c-torture/compile/920928-1.c | 2 + .../gcc.c-torture/compile/920928-2.c | 19 + .../gcc.c-torture/compile/920928-3.c | 19 + .../gcc.c-torture/compile/920928-4.c | 113 + .../gcc.c-torture/compile/920928-5.c | 7 + .../gcc.c-torture/compile/920928-6.c | 2 + .../gcc.c-torture/compile/921004-1.c | 6 + .../gcc.c-torture/compile/921011-1.c | 27 + .../gcc.c-torture/compile/921011-2.c | 65 + .../gcc.c-torture/compile/921012-1.c | 4 + .../gcc.c-torture/compile/921012-2.c | 7 + .../gcc.c-torture/compile/921013-1.c | 4 + .../gcc.c-torture/compile/921019-1.c | 9 + .../gcc.c-torture/compile/921021-1.c | 12 + .../gcc.c-torture/compile/921024-1.c | 9 + .../gcc.c-torture/compile/921026-1.c | 4 + .../gcc.c-torture/compile/921103-1.c | 12 + .../gcc.c-torture/compile/921109-1.c | 28 + .../gcc.c-torture/compile/921109-3.c | 46 + .../gcc.c-torture/compile/921111-1.c | 40 + .../gcc.c-torture/compile/921116-2.c | 9 + .../gcc.c-torture/compile/921118-1.c | 8 + .../gcc.c-torture/compile/921126-1.c | 11 + .../gcc.c-torture/compile/921202-1.c | 22 + .../gcc.c-torture/compile/921202-2.c | 8 + .../gcc.c-torture/compile/921203-1.c | 5 + .../gcc.c-torture/compile/921203-2.c | 13 + .../gcc.c-torture/compile/921206-1.c | 28 + .../gcc.c-torture/compile/921227-1.c | 5 + .../gcc.c-torture/compile/930109-1.c | 12 + .../gcc.c-torture/compile/930109-2.c | 11 + .../gcc.c-torture/compile/930111-1.c | 10 + .../gcc.c-torture/compile/930117-1.c | 4 + .../gcc.c-torture/compile/930118-1.c | 6 + .../gcc.c-torture/compile/930120-1.c | 138 + .../gcc.c-torture/compile/930126-1.c | 74 + .../gcc.c-torture/compile/930210-1.c | 11 + .../gcc.c-torture/compile/930217-1.c | 14 + .../gcc.c-torture/compile/930222-1.c | 16 + .../gcc.c-torture/compile/930325-1.c | 23 + .../gcc.c-torture/compile/930326-1.c | 6 + .../gcc.c-torture/compile/930411-1.c | 36 + .../gcc.c-torture/compile/930421-1.c | 19 + .../gcc.c-torture/compile/930427-2.c | 9 + .../gcc.c-torture/compile/930503-1.c | 8 + .../gcc.c-torture/compile/930503-2.c | 5 + .../gcc.c-torture/compile/930506-1.c | 12 + .../gcc.c-torture/compile/930506-2.c | 15 + .../gcc.c-torture/compile/930510-1.c | 18 + .../gcc.c-torture/compile/930513-1.c | 9 + .../gcc.c-torture/compile/930513-2.c | 9 + .../gcc.c-torture/compile/930513-3.c | 9 + .../gcc.c-torture/compile/930523-1.c | 54 + .../gcc.c-torture/compile/930525-1.c | 7 + .../gcc.c-torture/compile/930527-1.c | 16 + .../gcc.c-torture/compile/930529-1.c | 83 + .../gcc.c-torture/compile/930530-1.c | 5 + .../gcc.c-torture/compile/930602-1.c | 13 + .../gcc.c-torture/compile/930603-1.c | 10 + .../gcc.c-torture/compile/930607-1.c | 9 + .../gcc.c-torture/compile/930609-1.c | 104 + .../gcc.c-torture/compile/930611-1.c | 7 + .../gcc.c-torture/compile/930618-1.c | 8 + .../gcc.c-torture/compile/930621-1.c | 30 + .../gcc.c-torture/compile/930623-1.c | 7 + .../gcc.c-torture/compile/930623-2.c | 91 + .../gcc.c-torture/compile/930702-1.c | 5 + .../gcc.c-torture/compile/930926-1.c | 7 + .../gcc.c-torture/compile/930927-1.c | 3 + .../gcc.c-torture/compile/931003-1.c | 15 + .../gcc.c-torture/compile/931004-1.c | 8 + .../gcc.c-torture/compile/931013-1.c | 10 + .../gcc.c-torture/compile/931013-2.c | 20 + .../gcc.c-torture/compile/931013-3.c | 11 + .../gcc.c-torture/compile/931018-1.c | 14 + .../gcc.c-torture/compile/931031-1.c | 9 + .../gcc.c-torture/compile/931102-1.c | 111 + .../gcc.c-torture/compile/931102-2.c | 21 + .../gcc.c-torture/compile/931203-1.c | 5 + .../gcc.c-torture/compile/940611-1.c | 10 + .../gcc.c-torture/compile/940712-1.c | 4 + .../gcc.c-torture/compile/940718-1.c | 7 + .../gcc.c-torture/compile/941014-1.c | 11 + .../gcc.c-torture/compile/941014-2.c | 37 + .../gcc.c-torture/compile/941014-3.c | 72 + .../gcc.c-torture/compile/941014-4.c | 16 + .../gcc.c-torture/compile/941019-1.c | 1 + .../gcc.c-torture/compile/941111-1.c | 8 + .../gcc.c-torture/compile/941113-1.c | 12 + .../gcc.c-torture/compile/950122-1.c | 5 + .../gcc.c-torture/compile/950124-1.c | 15 + .../gcc.c-torture/compile/950221-1.c | 16 + .../gcc.c-torture/compile/950329-1.c | 19 + .../gcc.c-torture/compile/950512-1.c | 6 + .../gcc.c-torture/compile/950530-1.c | 4 + .../gcc.c-torture/compile/950607-1.c | 38 + .../gcc.c-torture/compile/950610-1.c | 1 + .../gcc.c-torture/compile/950612-1.c | 134 + .../gcc.c-torture/compile/950613-1.c | 31 + .../gcc.c-torture/compile/950618-1.c | 2 + .../gcc.c-torture/compile/950719-1.c | 11 + .../gcc.c-torture/compile/950729-1.c | 39 + .../gcc.c-torture/compile/950816-1.c | 7 + .../gcc.c-torture/compile/950816-2.c | 8 + .../gcc.c-torture/compile/950816-3.c | 8 + .../gcc.c-torture/compile/950910-1.c | 22 + .../gcc.c-torture/compile/950919-1.c | 5 + .../gcc.c-torture/compile/950921-1.c | 12 + .../gcc.c-torture/compile/950922-1.c | 68 + .../gcc.c-torture/compile/951004-1.c | 23 + .../gcc.c-torture/compile/951106-1.c | 4 + .../gcc.c-torture/compile/951116-1.c | 9 + .../gcc.c-torture/compile/951128-1.c | 5 + .../gcc.c-torture/compile/951220-1.c | 4 + .../gcc.c-torture/compile/951222-1.c | 15 + .../gcc.c-torture/compile/960106-1.c | 4 + .../gcc.c-torture/compile/960130-1.c | 8 + .../gcc.c-torture/compile/960201-1.c | 5 + .../gcc.c-torture/compile/960218-1.c | 2 + .../gcc.c-torture/compile/960220-1.c | 6 + .../gcc.c-torture/compile/960221-1.c | 11 + .../gcc.c-torture/compile/960319-1.c | 10 + .../gcc.c-torture/compile/960514-1.c | 12 + .../gcc.c-torture/compile/960704-1.c | 10 + .../gcc.c-torture/compile/960829-1.c | 4 + .../gcc.c-torture/compile/961004-1.c | 37 + .../gcc.c-torture/compile/961010-1.c | 1 + .../gcc.c-torture/compile/961019-1.c | 11 + .../gcc.c-torture/compile/961031-1.c | 16 + .../gcc.c-torture/compile/961126-1.c | 107 + .../gcc.c-torture/compile/961203-1.c | 14 + .../gcc.c-torture/compile/970206-1.c | 13 + .../gcc.c-torture/compile/970214-1.c | 3 + .../gcc.c-torture/compile/Makefile.in | 12 + gcc/testsuite/gcc.c-torture/compile/calls.c | 22 + gcc/testsuite/gcc.c-torture/compile/cmpdi-1.c | 15 + .../gcc.c-torture/compile/combine-hang.c | 26 + .../gcc.c-torture/compile/compile.exp | 35 + .../gcc.c-torture/compile/configure.in | 15 + .../gcc.c-torture/compile/funcptr-1.c | 19 + gcc/testsuite/gcc.c-torture/compile/goto-1.c | 16 + gcc/testsuite/gcc.c-torture/compile/init-1.c | 19 + gcc/testsuite/gcc.c-torture/compile/init-2.c | 4 + .../gcc.c-torture/compile/labels-1.c | 13 + .../gcc.c-torture/compile/packed-1.c | 14 + .../gcc.c-torture/compile/widechar-1.c | 1 + .../gcc.c-torture/compile/zero-strct-1.c | 7 + .../gcc.c-torture/execute/900409-1.c | 20 + .../gcc.c-torture/execute/920202-1.c | 18 + .../gcc.c-torture/execute/920302-1.c | 42 + .../gcc.c-torture/execute/920409-1.c | 1 + .../gcc.c-torture/execute/920410-1.c | 6 + .../gcc.c-torture/execute/920411-1.c | 24 + .../gcc.c-torture/execute/920415-1.c | 7 + .../gcc.c-torture/execute/920428-1.c | 2 + .../gcc.c-torture/execute/920428-2.c | 7 + .../gcc.c-torture/execute/920428-2.cexp | 6 + .../gcc.c-torture/execute/920429-1.c | 3 + .../gcc.c-torture/execute/920501-1.c | 3 + .../gcc.c-torture/execute/920501-2.c | 114 + .../gcc.c-torture/execute/920501-3.c | 35 + .../gcc.c-torture/execute/920501-4.c | 6 + .../gcc.c-torture/execute/920501-5.c | 19 + .../gcc.c-torture/execute/920501-6.c | 91 + .../gcc.c-torture/execute/920501-7.c | 34 + .../gcc.c-torture/execute/920501-7.cexp | 6 + .../gcc.c-torture/execute/920501-8.c | 39 + .../gcc.c-torture/execute/920501-9.c | 27 + .../gcc.c-torture/execute/920506-1.c | 2 + .../gcc.c-torture/execute/920520-1.c | 36 + .../gcc.c-torture/execute/920603-1.c | 2 + .../gcc.c-torture/execute/920604-1.c | 13 + .../gcc.c-torture/execute/920612-1.c | 2 + .../gcc.c-torture/execute/920612-2.c | 12 + .../gcc.c-torture/execute/920618-1.c | 1 + .../gcc.c-torture/execute/920625-1.c | 38 + .../gcc.c-torture/execute/920710-1.c | 11 + .../gcc.c-torture/execute/920711-1.c | 2 + .../gcc.c-torture/execute/920715-1.c | 67 + .../gcc.c-torture/execute/920715-1.cexp | 13 + .../gcc.c-torture/execute/920721-1.c | 2 + .../gcc.c-torture/execute/920721-2.c | 2 + .../gcc.c-torture/execute/920721-3.c | 26 + .../gcc.c-torture/execute/920721-4.c | 60 + .../gcc.c-torture/execute/920726-1.c | 63 + .../gcc.c-torture/execute/920728-1.c | 24 + .../gcc.c-torture/execute/920731-1.c | 2 + .../gcc.c-torture/execute/920810-1.c | 23 + .../gcc.c-torture/execute/920812-1.c | 3 + .../gcc.c-torture/execute/920829-1.c | 2 + .../gcc.c-torture/execute/920908-1.c | 28 + .../gcc.c-torture/execute/920908-2.c | 23 + .../gcc.c-torture/execute/920909-1.c | 2 + .../gcc.c-torture/execute/920922-1.c | 14 + .../gcc.c-torture/execute/920929-1.c | 13 + .../gcc.c-torture/execute/921006-1.c | 6 + .../gcc.c-torture/execute/921007-1.c | 7 + .../gcc.c-torture/execute/921013-1.c | 20 + .../gcc.c-torture/execute/921016-1.c | 10 + .../gcc.c-torture/execute/921017-1.c | 15 + .../gcc.c-torture/execute/921019-1.c | 8 + .../gcc.c-torture/execute/921019-2.c | 8 + .../gcc.c-torture/execute/921029-1.c | 42 + .../gcc.c-torture/execute/921104-1.c | 8 + .../gcc.c-torture/execute/921110-1.c | 7 + .../gcc.c-torture/execute/921112-1.c | 21 + .../gcc.c-torture/execute/921113-1.c | 63 + .../gcc.c-torture/execute/921117-1.c | 22 + .../gcc.c-torture/execute/921123-1.c | 13 + .../gcc.c-torture/execute/921123-2.c | 24 + .../gcc.c-torture/execute/921124-1.c | 19 + .../gcc.c-torture/execute/921202-1.c | 36 + .../gcc.c-torture/execute/921202-2.c | 13 + .../gcc.c-torture/execute/921204-1.c | 36 + .../gcc.c-torture/execute/921207-1.c | 15 + .../gcc.c-torture/execute/921208-1.c | 18 + .../gcc.c-torture/execute/921208-2.c | 26 + .../gcc.c-torture/execute/921215-1.c | 24 + .../gcc.c-torture/execute/921218-1.c | 11 + .../gcc.c-torture/execute/921218-2.c | 17 + .../gcc.c-torture/execute/930106-1.c | 27 + .../gcc.c-torture/execute/930111-1.c | 22 + .../gcc.c-torture/execute/930123-1.c | 16 + .../gcc.c-torture/execute/930126-1.c | 20 + .../gcc.c-torture/execute/930208-1.c | 23 + .../gcc.c-torture/execute/930406-1.c | 19 + .../gcc.c-torture/execute/930408-1.c | 27 + .../gcc.c-torture/execute/930429-1.c | 14 + .../gcc.c-torture/execute/930429-2.c | 14 + .../gcc.c-torture/execute/930513-1.c | 16 + .../gcc.c-torture/execute/930513-2.c | 27 + .../gcc.c-torture/execute/930518-1.c | 24 + .../gcc.c-torture/execute/930526-1.c | 18 + .../gcc.c-torture/execute/930527-1.c | 11 + .../gcc.c-torture/execute/930529-1.c | 45 + .../gcc.c-torture/execute/930603-1.c | 22 + .../gcc.c-torture/execute/930603-2.c | 19 + .../gcc.c-torture/execute/930603-3.c | 30 + .../gcc.c-torture/execute/930608-1.c | 11 + .../gcc.c-torture/execute/930614-1.c | 19 + .../gcc.c-torture/execute/930614-2.c | 20 + .../gcc.c-torture/execute/930621-1.c | 19 + .../gcc.c-torture/execute/930622-1.c | 22 + .../gcc.c-torture/execute/930622-2.c | 24 + .../gcc.c-torture/execute/930628-1.c | 27 + .../gcc.c-torture/execute/930630-1.c | 19 + .../gcc.c-torture/execute/930702-1.c | 14 + .../gcc.c-torture/execute/930713-1.c | 23 + .../gcc.c-torture/execute/930718-1.c | 34 + .../gcc.c-torture/execute/930719-1.c | 23 + .../gcc.c-torture/execute/930725-1.c | 21 + .../gcc.c-torture/execute/930818-1.c | 15 + .../gcc.c-torture/execute/930916-1.c | 13 + .../gcc.c-torture/execute/930921-1.c | 15 + .../gcc.c-torture/execute/930929-1.c | 36 + .../gcc.c-torture/execute/930930-1.c | 35 + .../gcc.c-torture/execute/930930-2.c | 30 + .../gcc.c-torture/execute/931002-1.c | 28 + .../gcc.c-torture/execute/931004-1.c | 30 + .../gcc.c-torture/execute/931004-10.c | 44 + .../gcc.c-torture/execute/931004-11.c | 50 + .../gcc.c-torture/execute/931004-12.c | 50 + .../gcc.c-torture/execute/931004-13.c | 60 + .../gcc.c-torture/execute/931004-14.c | 56 + .../gcc.c-torture/execute/931004-2.c | 38 + .../gcc.c-torture/execute/931004-3.c | 30 + .../gcc.c-torture/execute/931004-4.c | 38 + .../gcc.c-torture/execute/931004-5.c | 40 + .../gcc.c-torture/execute/931004-6.c | 44 + .../gcc.c-torture/execute/931004-7.c | 30 + .../gcc.c-torture/execute/931004-8.c | 38 + .../gcc.c-torture/execute/931004-9.c | 40 + .../gcc.c-torture/execute/931005-1.c | 23 + .../gcc.c-torture/execute/931009-1.c | 26 + .../gcc.c-torture/execute/931012-1.c | 13 + .../gcc.c-torture/execute/931017-1.c | 54 + .../gcc.c-torture/execute/931018-1.c | 18 + .../gcc.c-torture/execute/931031-1.c | 24 + .../gcc.c-torture/execute/931102-1.c | 30 + .../gcc.c-torture/execute/931102-2.c | 31 + .../gcc.c-torture/execute/931110-1.c | 18 + .../gcc.c-torture/execute/931110-2.c | 12 + .../gcc.c-torture/execute/931208-1.c | 14 + .../gcc.c-torture/execute/931228-1.c | 15 + .../gcc.c-torture/execute/940115-1.c | 13 + .../gcc.c-torture/execute/940122-1.c | 21 + .../gcc.c-torture/execute/941014-1.c | 15 + .../gcc.c-torture/execute/941014-2.c | 33 + .../gcc.c-torture/execute/941015-1.c | 35 + .../gcc.c-torture/execute/941021-1.c | 20 + .../gcc.c-torture/execute/941025-1.c | 12 + .../gcc.c-torture/execute/941031-1.c | 27 + .../gcc.c-torture/execute/941101-1.c | 15 + .../gcc.c-torture/execute/941110-1.c | 16 + .../gcc.c-torture/execute/941202-1.c | 21 + .../gcc.c-torture/execute/950221-1.c | 51 + .../gcc.c-torture/execute/950322-1.c | 30 + .../gcc.c-torture/execute/950426-1.c | 32 + .../gcc.c-torture/execute/950426-2.c | 13 + .../gcc.c-torture/execute/950503-1.c | 15 + .../gcc.c-torture/execute/950511-1.c | 11 + .../gcc.c-torture/execute/950512-1.c | 24 + .../gcc.c-torture/execute/950605-1.c | 12 + .../gcc.c-torture/execute/950607-1.c | 9 + .../gcc.c-torture/execute/950607-2.c | 41 + .../gcc.c-torture/execute/950612-1.c | 48 + .../gcc.c-torture/execute/950621-1.c | 20 + .../gcc.c-torture/execute/950628-1.c | 31 + .../gcc.c-torture/execute/950704-1.c | 59 + .../gcc.c-torture/execute/950706-1.c | 16 + .../gcc.c-torture/execute/950710-1.c | 54 + .../gcc.c-torture/execute/950714-1.c | 17 + .../gcc.c-torture/execute/950809-1.c | 33 + .../gcc.c-torture/execute/950906-1.c | 16 + .../gcc.c-torture/execute/950915-1.c | 15 + .../gcc.c-torture/execute/950929-1.c | 21 + .../gcc.c-torture/execute/951003-1.c | 21 + .../gcc.c-torture/execute/951115-1.c | 24 + .../gcc.c-torture/execute/951204-1.c | 18 + .../gcc.c-torture/execute/960116-1.c | 20 + .../gcc.c-torture/execute/960117-1.c | 46 + .../gcc.c-torture/execute/960209-1.c | 43 + .../gcc.c-torture/execute/960215-1.c | 25 + .../gcc.c-torture/execute/960218-1.c | 22 + .../gcc.c-torture/execute/960219-1.c | 11 + .../gcc.c-torture/execute/960301-1.c | 22 + .../gcc.c-torture/execute/960302-1.c | 21 + .../gcc.c-torture/execute/960311-1.c | 69 + .../gcc.c-torture/execute/960311-2.c | 69 + .../gcc.c-torture/execute/960311-3.c | 69 + .../gcc.c-torture/execute/960312-1.c | 34 + .../gcc.c-torture/execute/960317-1.c | 22 + .../gcc.c-torture/execute/960321-1.c | 14 + .../gcc.c-torture/execute/960326-1.c | 16 + .../gcc.c-torture/execute/960327-1.c | 30 + .../gcc.c-torture/execute/960402-1.c | 11 + .../gcc.c-torture/execute/960405-1.c | 13 + .../gcc.c-torture/execute/960416-1.c | 63 + .../gcc.c-torture/execute/960419-1.c | 17 + .../gcc.c-torture/execute/960419-2.c | 13 + .../gcc.c-torture/execute/960512-1.c | 19 + .../gcc.c-torture/execute/960513-1.c | 25 + .../gcc.c-torture/execute/960521-1.c | 30 + .../gcc.c-torture/execute/960608-1.c | 34 + .../gcc.c-torture/execute/960801-1.c | 32 + .../gcc.c-torture/execute/960802-1.c | 36 + .../gcc.c-torture/execute/960830-1.c | 22 + .../gcc.c-torture/execute/960909-1.c | 29 + .../gcc.c-torture/execute/961004-1.c | 22 + .../gcc.c-torture/execute/961017-1.c | 8 + .../gcc.c-torture/execute/961017-2.c | 32 + .../gcc.c-torture/execute/961026-1.c | 17 + .../gcc.c-torture/execute/961112-1.c | 13 + .../gcc.c-torture/execute/961122-1.c | 23 + .../gcc.c-torture/execute/961122-2.c | 12 + .../gcc.c-torture/execute/961125-1.c | 33 + .../gcc.c-torture/execute/961206-1.c | 52 + .../gcc.c-torture/execute/961213-1.c | 22 + .../gcc.c-torture/execute/961223-1.c | 19 + .../gcc.c-torture/execute/970214-1.c | 5 + .../gcc.c-torture/execute/970214-2.c | 5 + .../gcc.c-torture/execute/970217-1.c | 10 + .../gcc.c-torture/execute/970312-1.c | 71 + .../gcc.c-torture/execute/Makefile.in | 12 + gcc/testsuite/gcc.c-torture/execute/arith-1.c | 15 + .../gcc.c-torture/execute/arith-rand.c | 114 + .../gcc.c-torture/execute/bf-layout-1.c | 9 + .../gcc.c-torture/execute/bf-pack-1.c | 23 + .../gcc.c-torture/execute/bf-sign-1.c | 18 + .../gcc.c-torture/execute/bf-sign-2.c | 52 + gcc/testsuite/gcc.c-torture/execute/bf64-1.c | 40 + gcc/testsuite/gcc.c-torture/execute/cbrt.c | 91 + gcc/testsuite/gcc.c-torture/execute/cmpdi-1.c | 218 + gcc/testsuite/gcc.c-torture/execute/cmpsi-1.c | 32 + .../gcc.c-torture/execute/comp-goto-1.c | 164 + .../gcc.c-torture/execute/complex-1.c | 40 + .../gcc.c-torture/execute/complex-2.c | 27 + .../gcc.c-torture/execute/complex-3.c | 25 + .../gcc.c-torture/execute/complex-4.c | 9 + .../gcc.c-torture/execute/complex-5.c | 20 + .../gcc.c-torture/execute/compndlit-1.c | 15 + .../gcc.c-torture/execute/configure.in | 15 + .../gcc.c-torture/execute/conversion.c | 364 + gcc/testsuite/gcc.c-torture/execute/cvt-1.c | 30 + .../gcc.c-torture/execute/cvt-1.cexp | 7 + gcc/testsuite/gcc.c-torture/execute/dbra-1.c | 95 + .../gcc.c-torture/execute/divconst-1.c | 21 + .../gcc.c-torture/execute/divconst-2.c | 12 + .../gcc.c-torture/execute/divconst-3.c | 12 + .../gcc.c-torture/execute/divmod-1.c | 72 + gcc/testsuite/gcc.c-torture/execute/enum-1.c | 43 + .../gcc.c-torture/execute/execute.exp | 46 + .../gcc.c-torture/execute/func-ptr-1.c | 16 + gcc/testsuite/gcc.c-torture/execute/gofast.c | 99 + .../gcc.c-torture/execute/ieee/920518-1.c | 8 + .../gcc.c-torture/execute/ieee/920810-1.c | 3 + .../gcc.c-torture/execute/ieee/930529-1.c | 27 + .../gcc.c-torture/execute/ieee/Makefile.in | 12 + .../gcc.c-torture/execute/ieee/configure.in | 15 + .../gcc.c-torture/execute/ieee/fp-cmp-1.c | 40 + .../gcc.c-torture/execute/ieee/ieee.exp | 51 + .../gcc.c-torture/execute/ieee/minuszero.c | 22 + .../gcc.c-torture/execute/ieee/rbug.c | 41 + .../gcc.c-torture/execute/ieee/rbug.cexp | 7 + gcc/testsuite/gcc.c-torture/execute/index-1.c | 20 + .../gcc.c-torture/execute/inst-check.c | 14 + .../gcc.c-torture/execute/int-compare.c | 108 + gcc/testsuite/gcc.c-torture/execute/loop-1.c | 18 + gcc/testsuite/gcc.c-torture/execute/loop-2.c | 17 + gcc/testsuite/gcc.c-torture/execute/loop-2b.c | 22 + gcc/testsuite/gcc.c-torture/execute/loop-2c.c | 23 + gcc/testsuite/gcc.c-torture/execute/loop-2d.c | 18 + gcc/testsuite/gcc.c-torture/execute/loop-2e.c | 60 + gcc/testsuite/gcc.c-torture/execute/loop-2f.c | 63 + gcc/testsuite/gcc.c-torture/execute/loop-3.c | 27 + gcc/testsuite/gcc.c-torture/execute/loop-3b.c | 28 + gcc/testsuite/gcc.c-torture/execute/loop-3c.c | 31 + .../gcc.c-torture/execute/memcpy-1.c | 63 + gcc/testsuite/gcc.c-torture/execute/mod-1.c | 11 + .../gcc.c-torture/execute/nest-stdar-1.c | 19 + .../gcc.c-torture/execute/nestfunc-1.c | 28 + .../gcc.c-torture/execute/packed-1.c | 19 + .../gcc.c-torture/execute/pending-4.c | 33 + .../gcc.c-torture/execute/ptr-arith-1.c | 14 + .../gcc.c-torture/execute/regstack-1.c | 26 + gcc/testsuite/gcc.c-torture/execute/scope-1.c | 17 + gcc/testsuite/gcc.c-torture/execute/scope-2.c | 17 + .../gcc.c-torture/execute/strct-pack-1.c | 25 + .../gcc.c-torture/execute/strct-pack-2.c | 13 + .../gcc.c-torture/execute/strct-pack-3.c | 28 + .../gcc.c-torture/execute/strct-pack-4.c | 29 + .../gcc.c-torture/execute/strct-varg-1.c | 56 + .../gcc.c-torture/execute/struct-ini-1.c | 15 + .../gcc.c-torture/execute/struct-ini-2.c | 17 + .../gcc.c-torture/execute/struct-ini-3.c | 11 + .../gcc.c-torture/execute/struct-ini-4.c | 15 + .../gcc.c-torture/execute/struct-ret-1.c | 57 + .../gcc.c-torture/execute/struct-ret-2.c | 29 + gcc/testsuite/gcc.c-torture/execute/tstdi-1.c | 139 + .../gcc.c-torture/execute/va-arg-1.c | 24 + .../gcc.c-torture/execute/va-arg-2.c | 292 + .../gcc.c-torture/execute/va-arg-3.c | 339 + .../gcc.c-torture/execute/va-arg-4.c | 33 + .../gcc.c-torture/execute/va-arg-5.c | 44 + .../gcc.c-torture/execute/va-arg-6.c | 35 + .../gcc.c-torture/execute/widechar-1.c | 14 + .../gcc.c-torture/noncompile/920507-1.c | 1 + .../gcc.c-torture/noncompile/920616-2.c | 1 + .../gcc.c-torture/noncompile/920721-2.c | 1 + .../gcc.c-torture/noncompile/920824-1.c | 1 + .../gcc.c-torture/noncompile/920923-1.c | 36 + .../gcc.c-torture/noncompile/921102-1.c | 1 + .../gcc.c-torture/noncompile/921116-1.c | 1 + .../gcc.c-torture/noncompile/930301-1.c | 5 + .../gcc.c-torture/noncompile/930622-1.c | 6 + .../gcc.c-torture/noncompile/930622-2.c | 6 + .../gcc.c-torture/noncompile/930714-1.c | 25 + .../gcc.c-torture/noncompile/931203-1.c | 11 + .../gcc.c-torture/noncompile/940112-1.c | 7 + .../gcc.c-torture/noncompile/940227-1.c | 5 + .../gcc.c-torture/noncompile/940510-1.c | 1 + .../gcc.c-torture/noncompile/940712-1.c | 14 + .../gcc.c-torture/noncompile/940712-1.h | 10 + .../gcc.c-torture/noncompile/940712-1a.h | 4 + .../gcc.c-torture/noncompile/940712-1b.h | 2 + .../gcc.c-torture/noncompile/950825-1.c | 1 + .../gcc.c-torture/noncompile/950921-1.c | 10 + .../gcc.c-torture/noncompile/951025-1.c | 1 + .../gcc.c-torture/noncompile/951123-1.c | 2 + .../gcc.c-torture/noncompile/951227-1.c | 2 + .../gcc.c-torture/noncompile/Makefile.in | 12 + .../gcc.c-torture/noncompile/configure.in | 15 + .../gcc.c-torture/noncompile/init-1.c | 17 + .../gcc.c-torture/noncompile/init-2.c | 1 + .../gcc.c-torture/noncompile/invalid_asm.c | 1 + .../gcc.c-torture/noncompile/noncompile.exp | 307 + .../gcc.c-torture/noncompile/va-arg-1.c | 8 + .../gcc.c-torture/special/920413-1.c | 1 + .../gcc.c-torture/special/920520-1.c | 1 + .../gcc.c-torture/special/920521-1.c | 1 + .../gcc.c-torture/special/920717-x.c | 3 + .../gcc.c-torture/special/920717-y.c | 8 + .../gcc.c-torture/special/920730-1.c | 32 + .../gcc.c-torture/special/921210-1.c | 4 + .../gcc.c-torture/special/930510-1.c | 3 + .../gcc.c-torture/special/951130-1.c | 2 + .../gcc.c-torture/special/960224-1.c | 6 + .../gcc.c-torture/special/960224-2.c | 4 + .../gcc.c-torture/special/Makefile.in | 12 + .../gcc.c-torture/special/configure.in | 15 + .../gcc.c-torture/special/special.exp | 100 + gcc/testsuite/gcc.c-torture/unsorted/386.c | 23 + gcc/testsuite/gcc.c-torture/unsorted/86.c | 19 + gcc/testsuite/gcc.c-torture/unsorted/BUG1.c | 37 + gcc/testsuite/gcc.c-torture/unsorted/BUG11.c | 29 + gcc/testsuite/gcc.c-torture/unsorted/BUG12.c | 5 + gcc/testsuite/gcc.c-torture/unsorted/BUG13.c | 19 + gcc/testsuite/gcc.c-torture/unsorted/BUG16.c | 6 + gcc/testsuite/gcc.c-torture/unsorted/BUG17.c | 8 + gcc/testsuite/gcc.c-torture/unsorted/BUG18.c | 5 + gcc/testsuite/gcc.c-torture/unsorted/BUG2.c | 8 + gcc/testsuite/gcc.c-torture/unsorted/BUG21.c | 22 + gcc/testsuite/gcc.c-torture/unsorted/BUG22.c | 6 + gcc/testsuite/gcc.c-torture/unsorted/BUG23.c | 18 + gcc/testsuite/gcc.c-torture/unsorted/BUG24.c | 15 + gcc/testsuite/gcc.c-torture/unsorted/BUG25.c | 5 + gcc/testsuite/gcc.c-torture/unsorted/BUG3.c | 8 + gcc/testsuite/gcc.c-torture/unsorted/BUG4.c | 20 + gcc/testsuite/gcc.c-torture/unsorted/BUG5.c | 18 + gcc/testsuite/gcc.c-torture/unsorted/BUG6.c | 8 + gcc/testsuite/gcc.c-torture/unsorted/DFcmp.c | 280 + gcc/testsuite/gcc.c-torture/unsorted/HIcmp.c | 280 + gcc/testsuite/gcc.c-torture/unsorted/HIset.c | 216 + .../gcc.c-torture/unsorted/Makefile.in | 12 + gcc/testsuite/gcc.c-torture/unsorted/PYRBUG.c | 17 + gcc/testsuite/gcc.c-torture/unsorted/QIcmp.c | 280 + gcc/testsuite/gcc.c-torture/unsorted/QIset.c | 216 + gcc/testsuite/gcc.c-torture/unsorted/SFset.c | 216 + gcc/testsuite/gcc.c-torture/unsorted/SIcmp.c | 280 + gcc/testsuite/gcc.c-torture/unsorted/SIset.c | 216 + gcc/testsuite/gcc.c-torture/unsorted/UHIcmp.c | 280 + gcc/testsuite/gcc.c-torture/unsorted/UQIcmp.c | 280 + gcc/testsuite/gcc.c-torture/unsorted/USIcmp.c | 280 + gcc/testsuite/gcc.c-torture/unsorted/a.c | 4 + gcc/testsuite/gcc.c-torture/unsorted/a1.c | 7 + gcc/testsuite/gcc.c-torture/unsorted/a3.c | 12 + gcc/testsuite/gcc.c-torture/unsorted/aa.c | 8 + gcc/testsuite/gcc.c-torture/unsorted/aaa.c | 11 + gcc/testsuite/gcc.c-torture/unsorted/abs.c | 9 + gcc/testsuite/gcc.c-torture/unsorted/ac.c | 30 + gcc/testsuite/gcc.c-torture/unsorted/acc.c | 8 + gcc/testsuite/gcc.c-torture/unsorted/add.c | 5 + gcc/testsuite/gcc.c-torture/unsorted/add386.c | 4 + gcc/testsuite/gcc.c-torture/unsorted/addcc.c | 18 + gcc/testsuite/gcc.c-torture/unsorted/andm.c | 15 + gcc/testsuite/gcc.c-torture/unsorted/andmem.c | 22 + gcc/testsuite/gcc.c-torture/unsorted/andn.c | 5 + gcc/testsuite/gcc.c-torture/unsorted/andok.c | 6 + gcc/testsuite/gcc.c-torture/unsorted/andsi.c | 4 + .../gcc.c-torture/unsorted/andsparc.c | 11 + gcc/testsuite/gcc.c-torture/unsorted/aos.c | 8 + gcc/testsuite/gcc.c-torture/unsorted/arr.c | 9 + gcc/testsuite/gcc.c-torture/unsorted/as.c | 14 + gcc/testsuite/gcc.c-torture/unsorted/ase.c | 10 + gcc/testsuite/gcc.c-torture/unsorted/b.c | 4 + gcc/testsuite/gcc.c-torture/unsorted/b1.c | 11 + gcc/testsuite/gcc.c-torture/unsorted/b2.c | 24 + gcc/testsuite/gcc.c-torture/unsorted/b3.c | 12 + gcc/testsuite/gcc.c-torture/unsorted/b88.c | 12 + gcc/testsuite/gcc.c-torture/unsorted/bad.c | 26 + gcc/testsuite/gcc.c-torture/unsorted/band.c | 16 + gcc/testsuite/gcc.c-torture/unsorted/bb0.c | 5 + gcc/testsuite/gcc.c-torture/unsorted/bb1.c | 8 + gcc/testsuite/gcc.c-torture/unsorted/bbb.c | 12 + gcc/testsuite/gcc.c-torture/unsorted/bc.c | 4 + gcc/testsuite/gcc.c-torture/unsorted/bcopy.c | 64 + gcc/testsuite/gcc.c-torture/unsorted/bf.c | 31 + gcc/testsuite/gcc.c-torture/unsorted/bfins.c | 15 + gcc/testsuite/gcc.c-torture/unsorted/bfx.c | 9 + gcc/testsuite/gcc.c-torture/unsorted/bge.c | 7 + gcc/testsuite/gcc.c-torture/unsorted/bit.c | 13 + gcc/testsuite/gcc.c-torture/unsorted/bitf.c | 17 + gcc/testsuite/gcc.c-torture/unsorted/bitw.c | 9 + gcc/testsuite/gcc.c-torture/unsorted/blk.c | 18 + gcc/testsuite/gcc.c-torture/unsorted/bt.c | 7 + gcc/testsuite/gcc.c-torture/unsorted/bt386.c | 18 + gcc/testsuite/gcc.c-torture/unsorted/bug.c | 4 + gcc/testsuite/gcc.c-torture/unsorted/bugc.c | 7 + gcc/testsuite/gcc.c-torture/unsorted/buns.c | 12 + gcc/testsuite/gcc.c-torture/unsorted/bx.c | 12 + gcc/testsuite/gcc.c-torture/unsorted/c.c | 17 + gcc/testsuite/gcc.c-torture/unsorted/c1.c | 7 + gcc/testsuite/gcc.c-torture/unsorted/c2.c | 5 + gcc/testsuite/gcc.c-torture/unsorted/call.c | 7 + .../gcc.c-torture/unsorted/call386.c | 20 + .../gcc.c-torture/unsorted/callind.c | 8 + gcc/testsuite/gcc.c-torture/unsorted/cc.c | 96 + .../gcc.c-torture/unsorted/charmtst.c | 15 + gcc/testsuite/gcc.c-torture/unsorted/cmb.c | 6 + gcc/testsuite/gcc.c-torture/unsorted/cmp.c | 11 + gcc/testsuite/gcc.c-torture/unsorted/cmphi.c | 4 + .../gcc.c-torture/unsorted/cmpsi386.c | 14 + gcc/testsuite/gcc.c-torture/unsorted/cmul.c | 4 + gcc/testsuite/gcc.c-torture/unsorted/cn1.c | 5 + gcc/testsuite/gcc.c-torture/unsorted/comb.c | 7 + .../gcc.c-torture/unsorted/configure.in | 15 + gcc/testsuite/gcc.c-torture/unsorted/consec.c | 17 + gcc/testsuite/gcc.c-torture/unsorted/const.c | 4 + gcc/testsuite/gcc.c-torture/unsorted/conv.c | 32 + .../gcc.c-torture/unsorted/conv_tst.c | 66 + gcc/testsuite/gcc.c-torture/unsorted/cp.c | 42 + gcc/testsuite/gcc.c-torture/unsorted/csebug.c | 7 + gcc/testsuite/gcc.c-torture/unsorted/cvt.c | 9 + gcc/testsuite/gcc.c-torture/unsorted/d.c | 19 + .../gcc.c-torture/unsorted/dbl_parm.c | 10 + gcc/testsuite/gcc.c-torture/unsorted/dblbug.c | 21 + gcc/testsuite/gcc.c-torture/unsorted/ddd.c | 7 + gcc/testsuite/gcc.c-torture/unsorted/dead.c | 5 + gcc/testsuite/gcc.c-torture/unsorted/delay.c | 11 + gcc/testsuite/gcc.c-torture/unsorted/di.c | 12 + gcc/testsuite/gcc.c-torture/unsorted/dic.c | 5 + .../gcc.c-torture/unsorted/dilayout.c | 33 + gcc/testsuite/gcc.c-torture/unsorted/dimove.c | 4 + gcc/testsuite/gcc.c-torture/unsorted/dimul.c | 6 + gcc/testsuite/gcc.c-torture/unsorted/div.c | 4 + gcc/testsuite/gcc.c-torture/unsorted/divdf.c | 5 + gcc/testsuite/gcc.c-torture/unsorted/dm.c | 24 + gcc/testsuite/gcc.c-torture/unsorted/dshift.c | 10 + gcc/testsuite/gcc.c-torture/unsorted/e.c | 10 + gcc/testsuite/gcc.c-torture/unsorted/ex.c | 11 + gcc/testsuite/gcc.c-torture/unsorted/ext.c | 13 + gcc/testsuite/gcc.c-torture/unsorted/f1.c | 5 + gcc/testsuite/gcc.c-torture/unsorted/f2.c | 4 + gcc/testsuite/gcc.c-torture/unsorted/fdmul.c | 2 + gcc/testsuite/gcc.c-torture/unsorted/flo.c | 7 + gcc/testsuite/gcc.c-torture/unsorted/float.c | 6 + .../gcc.c-torture/unsorted/flt_const.c | 5 + gcc/testsuite/gcc.c-torture/unsorted/fnul.c | 23 + gcc/testsuite/gcc.c-torture/unsorted/foo.c | 8 + .../gcc.c-torture/unsorted/forgetcc.c | 11 + gcc/testsuite/gcc.c-torture/unsorted/fq.c | 25 + gcc/testsuite/gcc.c-torture/unsorted/g.c | 9 + .../gcc.c-torture/unsorted/gen_tst.c | 67 + gcc/testsuite/gcc.c-torture/unsorted/glob.c | 12 + gcc/testsuite/gcc.c-torture/unsorted/gronk.c | 8 + gcc/testsuite/gcc.c-torture/unsorted/hi.c | 5 + gcc/testsuite/gcc.c-torture/unsorted/hibug.c | 15 + gcc/testsuite/gcc.c-torture/unsorted/i++.c | 7 + gcc/testsuite/gcc.c-torture/unsorted/i.c | 8 + .../gcc.c-torture/unsorted/i386bug.c | 51 + gcc/testsuite/gcc.c-torture/unsorted/ic.c | 7 + gcc/testsuite/gcc.c-torture/unsorted/icmp.c | 10 + gcc/testsuite/gcc.c-torture/unsorted/ifreg.c | 12 + gcc/testsuite/gcc.c-torture/unsorted/imm.c | 7 + gcc/testsuite/gcc.c-torture/unsorted/isinf.c | 5 + gcc/testsuite/gcc.c-torture/unsorted/jmp.c | 20 + .../gcc.c-torture/unsorted/jumptab.c | 20 + gcc/testsuite/gcc.c-torture/unsorted/l.c | 4 + gcc/testsuite/gcc.c-torture/unsorted/layout.c | 13 + gcc/testsuite/gcc.c-torture/unsorted/lbug.c | 7 + gcc/testsuite/gcc.c-torture/unsorted/ll1.c | 5 + gcc/testsuite/gcc.c-torture/unsorted/llbug.c | 13 + gcc/testsuite/gcc.c-torture/unsorted/lll.c | 45 + gcc/testsuite/gcc.c-torture/unsorted/load8.c | 4 + .../gcc.c-torture/unsorted/loadhicc.c | 15 + gcc/testsuite/gcc.c-torture/unsorted/log2.c | 6 + gcc/testsuite/gcc.c-torture/unsorted/logic.c | 37 + gcc/testsuite/gcc.c-torture/unsorted/loop-1.c | 11 + .../gcc.c-torture/unsorted/loop386.c | 15 + gcc/testsuite/gcc.c-torture/unsorted/lop.c | 6 + gcc/testsuite/gcc.c-torture/unsorted/m1.c | 5 + gcc/testsuite/gcc.c-torture/unsorted/m2.c | 44 + gcc/testsuite/gcc.c-torture/unsorted/m5.c | 4 + gcc/testsuite/gcc.c-torture/unsorted/m68.c | 14 + gcc/testsuite/gcc.c-torture/unsorted/mbyte.c | 14 + gcc/testsuite/gcc.c-torture/unsorted/mchar.c | 11 + gcc/testsuite/gcc.c-torture/unsorted/mcmp.c | 9 + .../gcc.c-torture/unsorted/mdouble.c | 6 + gcc/testsuite/gcc.c-torture/unsorted/memtst.c | 20 + .../gcc.c-torture/unsorted/miscomp.c | 15 + gcc/testsuite/gcc.c-torture/unsorted/mm.c | 4 + gcc/testsuite/gcc.c-torture/unsorted/mod.c | 4 + gcc/testsuite/gcc.c-torture/unsorted/modcc.c | 4 + gcc/testsuite/gcc.c-torture/unsorted/move.c | 9 + .../gcc.c-torture/unsorted/move_qhi.c | 12 + .../gcc.c-torture/unsorted/mregtst.c | 17 + gcc/testsuite/gcc.c-torture/unsorted/msp.c | 5 + gcc/testsuite/gcc.c-torture/unsorted/mtst.c | 17 + gcc/testsuite/gcc.c-torture/unsorted/mu.c | 4 + gcc/testsuite/gcc.c-torture/unsorted/mul.c | 5 + gcc/testsuite/gcc.c-torture/unsorted/mword.c | 29 + gcc/testsuite/gcc.c-torture/unsorted/mword1.c | 12 + gcc/testsuite/gcc.c-torture/unsorted/n.c | 6 + gcc/testsuite/gcc.c-torture/unsorted/n1.c | 10 + gcc/testsuite/gcc.c-torture/unsorted/nand.c | 4 + gcc/testsuite/gcc.c-torture/unsorted/neg.c | 1 + gcc/testsuite/gcc.c-torture/unsorted/o.c | 12 + gcc/testsuite/gcc.c-torture/unsorted/omit.c | 11 + gcc/testsuite/gcc.c-torture/unsorted/opout.c | 10 + gcc/testsuite/gcc.c-torture/unsorted/opt.c | 5 + gcc/testsuite/gcc.c-torture/unsorted/or.c | 4 + gcc/testsuite/gcc.c-torture/unsorted/or386.c | 13 + gcc/testsuite/gcc.c-torture/unsorted/p.c | 6 + gcc/testsuite/gcc.c-torture/unsorted/parms.c | 7 + gcc/testsuite/gcc.c-torture/unsorted/pass.c | 13 + gcc/testsuite/gcc.c-torture/unsorted/pmt.c | 6 + gcc/testsuite/gcc.c-torture/unsorted/poor.c | 34 + gcc/testsuite/gcc.c-torture/unsorted/pp.c | 9 + .../gcc.c-torture/unsorted/pret-arg.c | 5 + gcc/testsuite/gcc.c-torture/unsorted/pyr.c | 11 + gcc/testsuite/gcc.c-torture/unsorted/pyr2.c | 4 + gcc/testsuite/gcc.c-torture/unsorted/q.c | 7 + gcc/testsuite/gcc.c-torture/unsorted/r.c | 7 + gcc/testsuite/gcc.c-torture/unsorted/r1.c | 29 + gcc/testsuite/gcc.c-torture/unsorted/rel.c | 8 + gcc/testsuite/gcc.c-torture/unsorted/rmsc.c | 46 + gcc/testsuite/gcc.c-torture/unsorted/round.c | 13 + gcc/testsuite/gcc.c-torture/unsorted/run.c | 11 + gcc/testsuite/gcc.c-torture/unsorted/s.c | 24 + gcc/testsuite/gcc.c-torture/unsorted/sar.c | 10 + gcc/testsuite/gcc.c-torture/unsorted/sc.c | 5 + gcc/testsuite/gcc.c-torture/unsorted/scal.c | 19 + gcc/testsuite/gcc.c-torture/unsorted/scc.c | 11 + gcc/testsuite/gcc.c-torture/unsorted/scond.c | 4 + .../gcc.c-torture/unsorted/selfrec.c | 5 + gcc/testsuite/gcc.c-torture/unsorted/seq.c | 4 + gcc/testsuite/gcc.c-torture/unsorted/set386.c | 5 + gcc/testsuite/gcc.c-torture/unsorted/set88.c | 9 + gcc/testsuite/gcc.c-torture/unsorted/sh.c | 4 + gcc/testsuite/gcc.c-torture/unsorted/shand.c | 11 + gcc/testsuite/gcc.c-torture/unsorted/shft.c | 15 + gcc/testsuite/gcc.c-torture/unsorted/shift.c | 7 + gcc/testsuite/gcc.c-torture/unsorted/shloop.c | 7 + gcc/testsuite/gcc.c-torture/unsorted/shm.c | 5 + .../gcc.c-torture/unsorted/signext.c | 27 + .../gcc.c-torture/unsorted/signext2.c | 11 + gcc/testsuite/gcc.c-torture/unsorted/sim.c | 7 + gcc/testsuite/gcc.c-torture/unsorted/simple.c | 4 + gcc/testsuite/gcc.c-torture/unsorted/sne.c | 4 + gcc/testsuite/gcc.c-torture/unsorted/sound.c | 13 + .../gcc.c-torture/unsorted/sparcbug.c | 5 + gcc/testsuite/gcc.c-torture/unsorted/speed.c | 8 + gcc/testsuite/gcc.c-torture/unsorted/stor.c | 12 + gcc/testsuite/gcc.c-torture/unsorted/store0.c | 4 + .../gcc.c-torture/unsorted/storecc.c | 6 + gcc/testsuite/gcc.c-torture/unsorted/str.c | 13 + gcc/testsuite/gcc.c-torture/unsorted/stru.c | 9 + .../gcc.c-torture/unsorted/structret.c | 69 + gcc/testsuite/gcc.c-torture/unsorted/stuct.c | 16 + gcc/testsuite/gcc.c-torture/unsorted/sub32.c | 4 + gcc/testsuite/gcc.c-torture/unsorted/subcc.c | 31 + gcc/testsuite/gcc.c-torture/unsorted/subcse.c | 6 + gcc/testsuite/gcc.c-torture/unsorted/sym.c | 4 + .../gcc.c-torture/unsorted/symconst.c | 4 + gcc/testsuite/gcc.c-torture/unsorted/t.c | 18 + .../gcc.c-torture/unsorted/test-flow.c | 12 + .../gcc.c-torture/unsorted/test-loop.c | 7 + gcc/testsuite/gcc.c-torture/unsorted/test.c | 6 + gcc/testsuite/gcc.c-torture/unsorted/time.c | 7 + gcc/testsuite/gcc.c-torture/unsorted/tmp.c | 5 + .../gcc.c-torture/unsorted/trivial.c | 1 + gcc/testsuite/gcc.c-torture/unsorted/trunc.c | 11 + gcc/testsuite/gcc.c-torture/unsorted/u.c | 1 + .../gcc.c-torture/unsorted/udconvert.c | 30 + .../gcc.c-torture/unsorted/udivmod4.c | 56 + gcc/testsuite/gcc.c-torture/unsorted/uns.c | 5 + .../gcc.c-torture/unsorted/uns_tst.c | 19 + .../gcc.c-torture/unsorted/unsorted.exp | 54 + gcc/testsuite/gcc.c-torture/unsorted/uuarg.c | 4 + gcc/testsuite/gcc.c-torture/unsorted/v.c | 11 + gcc/testsuite/gcc.c-torture/unsorted/w.c | 1 + gcc/testsuite/gcc.c-torture/unsorted/ww.c | 7 + gcc/testsuite/gcc.c-torture/unsorted/x.c | 1 + gcc/testsuite/gcc.c-torture/unsorted/xb.c | 17 + gcc/testsuite/gcc.c-torture/unsorted/xbg.c | 14 + gcc/testsuite/gcc.c-torture/unsorted/xc.c | 11 + .../gcc.c-torture/unsorted/xcsebug.c | 14 + gcc/testsuite/gcc.c-torture/unsorted/xdi.c | 15 + gcc/testsuite/gcc.c-torture/unsorted/xfoo.c | 4 + gcc/testsuite/gcc.c-torture/unsorted/xi.c | 7 + gcc/testsuite/gcc.c-torture/unsorted/xlop.c | 11 + gcc/testsuite/gcc.c-torture/unsorted/xmtst.c | 26 + gcc/testsuite/gcc.c-torture/unsorted/xneg.c | 5 + gcc/testsuite/gcc.c-torture/unsorted/xopt.c | 35 + gcc/testsuite/gcc.c-torture/unsorted/xor.c | 4 + gcc/testsuite/gcc.c-torture/unsorted/xorn.c | 31 + gcc/testsuite/gcc.c-torture/unsorted/xp.c | 4 + gcc/testsuite/gcc.c-torture/unsorted/xpp.c | 12 + gcc/testsuite/gcc.c-torture/unsorted/xs.c | 9 + gcc/testsuite/gcc.c-torture/unsorted/xsh.c | 7 + gcc/testsuite/gcc.c-torture/unsorted/xxs.c | 202 + gcc/testsuite/gcc.c-torture/unsorted/xz.c | 4 + gcc/testsuite/gcc.c-torture/unsorted/xzz.c | 4 + gcc/testsuite/gcc.dg/README | 16 + gcc/testsuite/gcc.dg/bf-spl1.c | 58 + gcc/testsuite/gcc.dg/cpp-mi.c | 34 + gcc/testsuite/gcc.dg/cpp-mic.h | 10 + gcc/testsuite/gcc.dg/cpp-micc.h | 10 + gcc/testsuite/gcc.dg/dg.exp | 69 + gcc/testsuite/gcc.dg/dll-1.c | 9 + gcc/testsuite/gcc.dg/dll-2.c | 23 + gcc/testsuite/gcc.dg/dll-3.c | 15 + gcc/testsuite/gcc.dg/dll-4.c | 13 + gcc/testsuite/gcc.dg/splet-1.c | 21 + gcc/testsuite/gcc.dg/struct-ret-1.c | 45 + gcc/testsuite/gcc.failure/940409-1.c | 2 + gcc/testsuite/gcc.failure/940409-1.cexp | 6 + gcc/testsuite/gcc.failure/failure.exp | 58 + gcc/testsuite/gcc.misc-tests/Makefile.in | 12 + gcc/testsuite/gcc.misc-tests/acker1.c | 20 + gcc/testsuite/gcc.misc-tests/acker1.exp | 31 + gcc/testsuite/gcc.misc-tests/configure.in | 15 + gcc/testsuite/gcc.misc-tests/dg-1.c | 14 + gcc/testsuite/gcc.misc-tests/dg-10.c | 12 + gcc/testsuite/gcc.misc-tests/dg-11.c | 9 + gcc/testsuite/gcc.misc-tests/dg-12.c | 9 + gcc/testsuite/gcc.misc-tests/dg-2.c | 11 + gcc/testsuite/gcc.misc-tests/dg-3.c | 11 + gcc/testsuite/gcc.misc-tests/dg-4.c | 5 + gcc/testsuite/gcc.misc-tests/dg-5.c | 9 + gcc/testsuite/gcc.misc-tests/dg-6.c | 9 + gcc/testsuite/gcc.misc-tests/dg-7.c | 5 + gcc/testsuite/gcc.misc-tests/dg-8.c | 9 + gcc/testsuite/gcc.misc-tests/dg-9.c | 15 + gcc/testsuite/gcc.misc-tests/dg-test.exp | 41 + gcc/testsuite/gcc.misc-tests/dhry.c | 602 ++ gcc/testsuite/gcc.misc-tests/dhry.exp | 31 + gcc/testsuite/gcc.misc-tests/dhry.h | 431 + gcc/testsuite/gcc.misc-tests/gcov-1.c | 20 + gcc/testsuite/gcc.misc-tests/gcov-2.c | 21 + gcc/testsuite/gcc.misc-tests/gcov.exp | 95 + gcc/testsuite/gcc.misc-tests/m-un-1.c | 37 + gcc/testsuite/gcc.misc-tests/matrix1.c | 46 + gcc/testsuite/gcc.misc-tests/matrix1.exp | 31 + gcc/testsuite/gcc.misc-tests/mg.c | 8 + gcc/testsuite/gcc.misc-tests/mg.exp | 27 + gcc/testsuite/gcc.misc-tests/msgs.exp | 33 + gcc/testsuite/gcc.misc-tests/optbench.c | 288 + gcc/testsuite/gcc.misc-tests/optbench.exp | 31 + gcc/testsuite/gcc.misc-tests/sieve.c | 26 + gcc/testsuite/gcc.misc-tests/sieve.exp | 31 + gcc/testsuite/gcc.misc-tests/sort2.c | 54 + gcc/testsuite/gcc.misc-tests/sort2.exp | 31 + gcc/testsuite/lib/c-torture.exp | 319 + gcc/testsuite/lib/chill.exp | 365 + gcc/testsuite/lib/g++.exp | 229 + gcc/testsuite/lib/gcc-dg.exp | 84 + gcc/testsuite/lib/gcc.exp | 268 + gcc/testsuite/lib/mike-g++.exp | 264 + gcc/testsuite/lib/mike-gcc.exp | 262 + gcc/testsuite/lib/old-dejagnu.exp | 536 ++ 2559 files changed, 93270 insertions(+) create mode 100644 gcc/testsuite/ChangeLog create mode 100644 gcc/testsuite/README.g++ create mode 100644 gcc/testsuite/README.gcc create mode 100644 gcc/testsuite/config/default.exp create mode 100644 gcc/testsuite/g++.old-deja/Makefile.in create mode 100644 gcc/testsuite/g++.old-deja/configure.in create mode 100644 gcc/testsuite/g++.old-deja/g++.benjamin/.cvsignore create mode 100644 gcc/testsuite/g++.old-deja/g++.benjamin/p12475.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bob/array1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bob/array2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bob/case1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bob/cond1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bob/delete1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bob/extern_C.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bob/friend1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bob/incomplete-cast1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bob/inherit1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bob/inherit2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bob/nested1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bob/packed1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bob/protected1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bob/static1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bob/template1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bob/template2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bob/template3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bob/template4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/README create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/abstract1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/access1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/alignof.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/ambiguity1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/anon-union1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/arm1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/arm2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/arm3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/array-refs.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/array1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/asm-extn1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/bit-fields1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/bit-fields2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/bool1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/code-gen1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/code-gen2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/code-gen3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/code-gen4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/code-gen5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/code-gen6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/copy1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/copy2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/copy3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/copy4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/copy5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/copy6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/copy7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/copy8.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/copy9.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash10.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash11.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash12.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash13.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash14.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash15.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash16.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash17.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash18.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash19.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash20.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash22.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash23.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash24.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash25.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash26.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash27.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash28.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash29.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash30.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash31.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash32.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash33.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash34.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash35.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash36.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash37.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash38.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash39.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash40.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash41.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash42.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash43.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash44.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash45.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash46.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash47.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash48.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash49.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash50.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash51.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash52.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash53.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash54.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash55.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash56.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash57.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash58.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash59.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash60.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash61.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash62.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash63.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash64.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash65.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash66.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash67.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash68.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash8.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/crash9.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/ctors1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/ctors2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/ctors3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/cvt1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/cvt2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/cvt3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/cvt4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/cvt5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/def-fns1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/delete1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/delete2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/dtors1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/dtors2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/dtors3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/enum-clash.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/enum1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/enum10.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/enum11.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/enum12.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/enum13.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/enum14.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/enum2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/enum3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/enum4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/enum5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/enum6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/enum7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/enum8.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/enum9.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/err-msg1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/err-msg10.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/err-msg11.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/err-msg12.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/err-msg2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/err-msg3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/err-msg4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/err-msg5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/err-msg6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/err-msg7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/err-msg8.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/err-msg9.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/friend1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/friend2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/friend3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/friend4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/groff1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/init1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/init10.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/init11.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/init12.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/init13.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/init2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/init3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/init4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/init5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/init6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/init7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/init8.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/init9.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/label1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/label2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/line1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/misc1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/misc10.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/misc11.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/misc12.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/misc13.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/misc14.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/misc15.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/misc16.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/misc17.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/misc2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/misc3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/misc4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/misc5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/misc6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/misc7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/misc8.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/misc9.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/mutable1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/nest1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/nest10.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/nest11.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/nest12.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/nest13.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/nest15.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/nest16.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/nest17.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/nest18.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/nest19.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/nest2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/nest20.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/nest21.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/nest22.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/nest23.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/nest24.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/nest3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/nest4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/new-array.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/new1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/new2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/new3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/ns1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/operators1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/operators2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/operators3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/operators4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/operators5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/operators6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/operators7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/operators8.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/overload1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/overload10.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/overload11.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/overload2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/overload3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/overload4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/overload5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/overload6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/overload7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/overload8.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/overload9.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/parse1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/parse2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/prepost1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/prepost2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/prepost3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/prepost4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/ptolemy1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/ptolemy2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/ptrmem1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/ptrmem2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/ptrmem3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/ptrmem4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/recurse.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/redecl1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/redecl2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/redecl3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/reference1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/rtti1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/scope1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/scope2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/scope3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/scope4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/scope5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/shadow1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/sizeof1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/sizeof2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/sizeof3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/sizeof4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/sizeof5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/sorry1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/static1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/static2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/static3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/synth1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/template1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/template11.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/template12.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/template13.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/template15.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/template16.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/template17.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/template18.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/template19.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/template2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/template20.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/template21.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/template22.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/template23.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/template24.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/template25.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/template26.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/template27.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/template28.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/template29.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/template3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/template30.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/template4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/template5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/template6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/template7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/template8.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/template9.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/temporary1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/typedef1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/union1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/union2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/union3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/visibility1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/visibility10.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/visibility2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/visibility3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/visibility4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/visibility5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/visibility6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/visibility7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/visibility8.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/visibility9.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/vtables1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/warnings1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/warnings10.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/warnings2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/warnings3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/warnings4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/warnings5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/warnings6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/warnings7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/warnings8.C create mode 100644 gcc/testsuite/g++.old-deja/g++.brendan/warnings9.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/891229_02.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/891230_01.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900107_01.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900119_01.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900121_01.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900121_02.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900121_05.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900127_01.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900127_02.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900205_02.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900205_03.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900205_04.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900207_03.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900208_02.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900208_03.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900208_04.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900209_01.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900210_01.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900210_02.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900210_03.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900210_05.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900210_06.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900210_07.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900210_08.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900210_09.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900210_10.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900211_01.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900211_02.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900211_03.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900211_04.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900212_01.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900212_02.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900212_03.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900213_01.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900213_02.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900213_03.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900214_01.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900215_01.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900215_02.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900220_01.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900220_02.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900220_03.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900221_01.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900227_01.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900321_01.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900321_02.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900321_04.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900321_05.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900322_01.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900324_02.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900324_03.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900324_04.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900324_05.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900324_06.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900325_01.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900330_01.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900330_02.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900331_02.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900331_03.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900331_04.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900401_01.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900402_01.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900402_02.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900403_01.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900403_04.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900404_01.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900404_02.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900404_03.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900404_04.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900404_07.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900405_01.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900406_01.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900406_02.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900407_01.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900407_02.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900428_01.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900428_02.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900428_03.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900511_01.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900511_02.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900511_03.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900514_03.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900519_01.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900519_02.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900519_03.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900519_04.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900519_05.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900519_06.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900519_07.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900519_08.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900519_09.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900519_12.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900519_13.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900520_02.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900520_03.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900520_04.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900520_05.C create mode 100644 gcc/testsuite/g++.old-deja/g++.bugs/900520_06.C create mode 100644 gcc/testsuite/g++.old-deja/g++.ext/array1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.ext/array2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.ext/arrnew.C create mode 100644 gcc/testsuite/g++.old-deja/g++.ext/constructor.C create mode 100644 gcc/testsuite/g++.old-deja/g++.ext/default.C create mode 100644 gcc/testsuite/g++.old-deja/g++.ext/memconst.C create mode 100644 gcc/testsuite/g++.old-deja/g++.ext/null1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.ext/pretty.C create mode 100644 gcc/testsuite/g++.old-deja/g++.gb/README create mode 100644 gcc/testsuite/g++.old-deja/g++.gb/scope01.C create mode 100644 gcc/testsuite/g++.old-deja/g++.gb/scope02.C create mode 100644 gcc/testsuite/g++.old-deja/g++.gb/scope03.C create mode 100644 gcc/testsuite/g++.old-deja/g++.gb/scope04.C create mode 100644 gcc/testsuite/g++.old-deja/g++.gb/scope05.C create mode 100644 gcc/testsuite/g++.old-deja/g++.gb/scope06.C create mode 100644 gcc/testsuite/g++.old-deja/g++.gb/scope07.C create mode 100644 gcc/testsuite/g++.old-deja/g++.gb/scope08.C create mode 100644 gcc/testsuite/g++.old-deja/g++.gb/scope09.C create mode 100644 gcc/testsuite/g++.old-deja/g++.gb/scope10.C create mode 100644 gcc/testsuite/g++.old-deja/g++.gb/scope11.C create mode 100644 gcc/testsuite/g++.old-deja/g++.gb/scope12.C create mode 100644 gcc/testsuite/g++.old-deja/g++.gb/scope13.C create mode 100644 gcc/testsuite/g++.old-deja/g++.gb/sig01.C create mode 100644 gcc/testsuite/g++.old-deja/g++.gb/sig02.C create mode 100644 gcc/testsuite/g++.old-deja/g++.gb/sig03.C create mode 100644 gcc/testsuite/g++.old-deja/g++.gb/sig04.C create mode 100644 gcc/testsuite/g++.old-deja/g++.gb/sig05.C create mode 100644 gcc/testsuite/g++.old-deja/g++.gb/sig06.C create mode 100644 gcc/testsuite/g++.old-deja/g++.gb/sig07.C create mode 100644 gcc/testsuite/g++.old-deja/g++.gb/sig08.C create mode 100644 gcc/testsuite/g++.old-deja/g++.gb/sig09.C create mode 100644 gcc/testsuite/g++.old-deja/g++.gb/sig10.C create mode 100644 gcc/testsuite/g++.old-deja/g++.gb/sig11.C create mode 100644 gcc/testsuite/g++.old-deja/g++.gb/sig12.C create mode 100644 gcc/testsuite/g++.old-deja/g++.gb/sig13.C create mode 100644 gcc/testsuite/g++.old-deja/g++.gb/sig14.C create mode 100644 gcc/testsuite/g++.old-deja/g++.gb/sig15.C create mode 100644 gcc/testsuite/g++.old-deja/g++.gb/sig16.C create mode 100644 gcc/testsuite/g++.old-deja/g++.gb/sig17.C create mode 100644 gcc/testsuite/g++.old-deja/g++.gb/sig18.C create mode 100644 gcc/testsuite/g++.old-deja/g++.gb/sig19.C create mode 100644 gcc/testsuite/g++.old-deja/g++.gb/sig20.C create mode 100644 gcc/testsuite/g++.old-deja/g++.gb/sig21.C create mode 100644 gcc/testsuite/g++.old-deja/g++.gb/sig22.C create mode 100644 gcc/testsuite/g++.old-deja/g++.gb/sig23.C create mode 100644 gcc/testsuite/g++.old-deja/g++.gb/sig24.C create mode 100644 gcc/testsuite/g++.old-deja/g++.gb/sig25.C create mode 100644 gcc/testsuite/g++.old-deja/g++.gb/sig26.C create mode 100644 gcc/testsuite/g++.old-deja/g++.gb/sig27.C create mode 100644 gcc/testsuite/g++.old-deja/g++.gb/sig28.C create mode 100644 gcc/testsuite/g++.old-deja/g++.gb/sig29.C create mode 100644 gcc/testsuite/g++.old-deja/g++.gb/sig30.C create mode 100644 gcc/testsuite/g++.old-deja/g++.gb/sig31.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/2371.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/3523.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/access1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/access10.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/access11.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/access12.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/access13.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/access14.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/access15.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/access16.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/access17.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/access18.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/access2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/access20.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/access21.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/access22.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/access23.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/access24.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/access3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/access4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/access5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/access6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/access7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/access8.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/access9.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/aggregate.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/ambig1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/ambig2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/ambig3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/anon.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/anon2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/anon3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/anon4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/binding.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/binding2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/binding3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/bool.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/bool2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/bool3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/bool4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/bool5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/bool6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/bool7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/builtin.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/builtin2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/byval.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/byval2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/byval3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/c-inline.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/c2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/cast1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/cast2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/cast3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/cleanup.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/cleanup2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/complete1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/cond.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/cond2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/condexp.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/const.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/const2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/const3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/const4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/context.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/conversion.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/conversion10.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/conversion11.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/conversion2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/conversion3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/conversion4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/conversion5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/conversion6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/conversion7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/conversion8.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/conversion9.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/crash1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/crash10.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/crash11.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/crash12.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/crash2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/crash3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/crash4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/crash5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/crash6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/crash7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/crash8.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/crash9.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/ctor1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/ctor2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/dcast1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/dcast2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/dcast3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/default1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/default2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/default3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/defctor.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/delete1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/delete2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/delete3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/destruct.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/destruct2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/destruct3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/destruct4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/dot.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/dtor.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/dtor2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/dtor3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/dtor4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/dtor5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/enum.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/enum2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/enum3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/enum4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/enum5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/enum6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/enum7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/enum8.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/explicit.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/expr1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/friend.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/friend2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/groff1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/hmc1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/incomplete1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/incomplete2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/init.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/init2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/init3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/init4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/inline.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/inline2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/jump.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/lex1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/lineno.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/lineno2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/lineno3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/lineno4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/lineno5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/local.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/lookup.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/lookup2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/lookup3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/loverload.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/loverload3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/loverload4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/lvalue.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/lvalue2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/lvalue3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/lvalue4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/mangle1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/mangle2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/mangle3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/member.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/member1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/method.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/mi.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/mutable1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/nested1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/nested2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/nested4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/nested5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/nested6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/nested7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/nested8.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/net.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/net2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/new.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/new2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/new3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/new4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/new5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/offset1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/offset2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/offset3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/offset4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/opeq.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/opeq2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/opeq3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/opeq4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/opeq5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/opeq6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/operator.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/operator2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/opover.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/optimize.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/optimize2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/overload.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/overload1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/overload10.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/overload11.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/overload12.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/overload13.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/overload14.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/overload15.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/overload16.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/overload17.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/overload18.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/overload19.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/overload2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/overload20.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/overload21.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/overload22.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/overload23.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/overload24.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/overload26.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/overload27.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/overload28.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/overload29.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/overload3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/overload30.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/overload31.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/overload32.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/overload33.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/overload34.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/overload35.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/overload4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/overload5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/overload6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/overload7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/overload8.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/overload9.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/parse1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/parse10.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/parse11.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/parse12.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/parse13.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/parse14.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/parse2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/parse3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/parse4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/parse5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/parse6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/parse7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/parse8.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/parse9.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/pmem.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/pmem2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/pmem3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/pmem4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/pmf.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/pmf2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/pmf3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/pmf4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/pmf5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/pmf6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/pmf7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/pmf8.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/pmftemp.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/precedence.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/redecl1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/ref1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/ref10.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/ref11.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/ref12.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/ref2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/ref3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/ref4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/ref5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/ref6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/ref7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/ref8.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/ref9.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/report.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/return.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/return2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/return3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/rfg1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/rfg10.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/rfg11.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/rfg12.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/rfg13.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/rfg14.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/rfg15.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/rfg16.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/rfg17.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/rfg18.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/rfg2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/rfg20.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/rfg21.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/rfg22.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/rfg23.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/rfg24.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/rfg25.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/rfg26.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/rfg27.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/rfg28.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/rfg3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/rfg4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/rfg5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/rfg6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/rfg7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/rfg8.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/rfg9.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/rvalue1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/rvalue2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/rvalue3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/scoping.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/scoping10.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/scoping11.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/scoping12.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/scoping13.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/scoping14.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/scoping15.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/scoping16.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/scoping17.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/scoping2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/scoping3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/scoping4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/scoping5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/scoping6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/scoping7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/scoping8.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/scoping9.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/shadow1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/soverload.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/special.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/static1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/synth.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/synth10.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/synth2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/synth3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/synth4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/synth5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/synth6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/synth7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/synth8.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/synth9.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/tempargs.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/tempcons.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/tempdest.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/tempinst1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/template1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/template10.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/template11.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/template12.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/template13.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/template14.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/template15.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/template16.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/template17.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/template18.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/template19.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/template2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/template20.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/template21.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/template22.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/template23.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/template24.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/template25.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/template26.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/template27.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/template28.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/template29.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/template3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/template30.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/template31.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/template32.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/template33.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/template34.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/template35.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/template36.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/template37.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/template38.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/template39.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/template4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/template40.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/template41.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/template42.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/template43.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/template5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/template6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/template7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/template8.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/template9.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/temporary.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/temporary2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/temporary3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/temporary4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/temporary5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/temporary6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/temporary7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/temporary8.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/tempover.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/tempparse.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/tempsub.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/this.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/thunk1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/thunk2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/thunk3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/tpt-1.cc create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/tredecl.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/tredecl2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/tredecl3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/tredecl4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/trivial.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/typeck.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/typedef.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/typedef2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/typedef3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/typeid1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/typeid2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/union.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/vecdel.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/virtual.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/virtual2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/warning1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/warning10.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/warning2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/warning3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/warning4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/warning5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/warning6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/warning7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/warning8.C create mode 100644 gcc/testsuite/g++.old-deja/g++.jason/warning9.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/access1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/access2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/access3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/access4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/access5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/arg1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/arg10.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/arg11.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/arg2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/arg3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/arg4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/arg5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/arg6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/arg7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/arg8.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/arg9.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/arm1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/arm10.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/arm11.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/arm12.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/arm13.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/arm14.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/arm15.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/arm16.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/arm2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/arm3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/arm4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/arm5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/arm6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/arm7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/arm8.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/arm9.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/array1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/array2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/bad-error1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/bad-error3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/bad-error4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/bad-error6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/bad-error7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/bit-fields1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/bit-fields2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/bit-fields3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/builtin1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/casts1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/casts2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/casts3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/code-gen1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/code-gen2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/code-gen3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/code-gen4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/code-gen5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/copy1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/copy2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/ctors1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/ctors10.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/ctors11.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/ctors12.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/ctors13.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/ctors14.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/ctors15.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/ctors16.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/ctors17.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/ctors18.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/ctors19.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/ctors2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/ctors20.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/ctors21.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/ctors3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/ctors4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/ctors5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/ctors6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/ctors7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/ctors8.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/ctors9.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/cvt1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/cvt10.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/cvt11.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/cvt12.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/cvt13.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/cvt14.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/cvt15.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/cvt16.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/cvt17.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/cvt18.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/cvt19.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/cvt2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/cvt20.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/cvt21.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/cvt22.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/cvt23.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/cvt3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/cvt4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/cvt5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/cvt6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/cvt7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/cvt8.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/cvt9.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/dossier1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/dtors1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/dtors2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/dtors3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/dtors4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/dtors5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/enum1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/enum2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/enum3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/enum4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/enum5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/enum6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/enum7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/enum8.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/enum9.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/except1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/except2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/except3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/except4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/except5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/except6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/friend1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/friend4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/friend5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/global-init1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/incdec1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/init1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/init10.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/init11.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/init13.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/init14.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/init2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/init3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/init4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/init5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/init6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/init7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/init8.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/init9.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/inline1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/inline2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/inline4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/inline6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/inline7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/memoized1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/mentor1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/missed-error1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/missed-error2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/missed-error3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/missing1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/nest1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/nest2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/nest3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/nest4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/nest5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/operators1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/operators10.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/operators11.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/operators12.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/operators13.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/operators14.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/operators15.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/operators16.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/operators17.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/operators18.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/operators19.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/operators2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/operators21.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/operators22.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/operators23.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/operators24.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/operators25.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/operators27.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/operators28.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/operators29.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/operators3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/operators30.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/operators31.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/operators32.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/operators33.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/operators34.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/operators4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/operators6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/operators7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/operators8.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/operators9.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/parsing1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/parsing10.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/parsing2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/parsing3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/parsing4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/parsing5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/parsing6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/parsing7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/parsing8.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/parsing9.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/patches1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/pic1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/profile1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/refs1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/refs2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/refs3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/refs4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/scope1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/scope2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/scope3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/scope4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/scope5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/shadow1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/shadow2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/static-mem2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/static-mem3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/static-mem4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/static-mem5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/template1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/template2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/template3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/temps1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/temps2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/temps3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/temps4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/temps5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/temps6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/temps7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/typeck1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/typeck2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/typeck3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/typeck4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/union1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/union2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/union3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/union4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/unsorted1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/unsorted2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/vbase1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/virtual1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/virtual2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/virtual3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/virtual4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/visibility10.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/visibility11.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/visibility12.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/visibility13.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/visibility14.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/visibility15.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/visibility16.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/visibility17.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/visibility18.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/visibility19.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/visibility20.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/visibility21.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/visibility22.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/visibility23.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/visibility24.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/visibility25.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/visibility26.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/visibility27.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/visibility28.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/visibility3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/visibility4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/visibility5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/visibility6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/visibility7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/visibility8.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/visibility9.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/vtable1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/vtable2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.law/vtable3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/.cvsignore create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/align1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/align2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/ambig1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/asm1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/asm2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/bool1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/bool2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/bool4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/conv1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/debug1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/dyncast1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/dyncast2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/dyncast3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/dyncast4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/dyncast5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/dyncast6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/dyncast7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/dyncast8.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/dyncast9.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh10.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh11.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh12.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh13.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh14.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh15.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh16.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh17.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh18.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh19.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh20.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh21.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh23.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh24.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh25.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh26.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh27.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh28.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh29.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh30.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh31.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh32.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh33.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh34.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh35.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh36.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh37.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh38.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh39.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh40.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh41.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh42.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh43.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh44.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh45.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh46.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh47.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh48.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh49.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh50.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh51.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh52.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh53.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh54.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh55.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh56.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh57.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh58.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh8.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/eh9.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/enum1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/err1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/err2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/err3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/explicit1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/explicit2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/for1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/for2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/fresco1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/hog1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/init1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/init2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/leak1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/mangle1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/mangle2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/mangle3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/memoize1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/mi1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/mi2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/misc1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/misc11.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/misc12.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/misc13.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/misc14.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/misc2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/misc3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/misc5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/misc6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/misc7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/misc8.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/misc9.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/net1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/net10.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/net11.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/net12.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/net13.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/net14.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/net15.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/net16.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/net17.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/net18.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/net19.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/net2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/net20.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/net21.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/net22.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/net23.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/net24.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/net25.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/net26.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/net27.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/net28.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/net29.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/net3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/net30.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/net31.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/net32.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/net34.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/net35.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/net36.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/net37.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/net38.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/net39.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/net4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/net40.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/net41.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/net42.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/net43.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/net44.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/net45.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/net46.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/net47.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/net48.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/net5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/net6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/net7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/net8.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/net9.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/ns1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/ns10.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/ns11.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/ns12.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/ns13.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/ns14.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/ns2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/ns3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/ns4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/ns5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/ns6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/ns7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/ns8.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/ns9.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/offset1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/opr-as1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/opr-dot1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p10148.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p10247.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p10416.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p10511.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p10769a.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p10769b.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p10849a.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p10951.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p11012.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p11110.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p11116.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p11142.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p11144.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p11482.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p11667.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p12306.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p12306a.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p1248.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p1567.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p1862.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p1989.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p2394.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p2431.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p2573.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p2736.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p2746.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p2793.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p2806.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p2846.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p2846a.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p2846b.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p2855.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p2960.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p3041.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p3060c.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p3060d.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p3068.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p3070.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p3139.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p3524a.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p3524b.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p3524c.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p3538a.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p3538b.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p3570.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p3579.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p3708.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p3708a.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p3708b.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p3764.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p3836.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p4068.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p4104.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p4173.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p418.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p4238.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p4246.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p4263.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p438.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p4484.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p4511.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p4619.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p4623.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p4667.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p4671.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p4677.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p4693.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p4736a.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p4736b.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p4736c.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p4750.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p5469.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p5469a.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p5571.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p5611.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p5673.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p5718.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p5793.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p5840.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p5958.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p6004.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p6058.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p6149.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p6311.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p646.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p6578.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p658.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p6610a.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p6610b.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p6611.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p6746.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p6901.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p6927.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p700.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p701.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p710.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p7180.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p7325.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p7476.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p755.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p755a.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p7626.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p7635.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p7651.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p783.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p783a.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p783b.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p784.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p785.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p786.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p7865.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p7868.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p789.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p789a.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p7912.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p8009.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p8018.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p8039.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p807.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p807a.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p811.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p8154.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p8155.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p8175.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p8269.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p8460.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p8483.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p8620.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p8785.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p8786.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p8804.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p8825.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p9068.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p9129.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p9206.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p9506.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p9706.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p9732a.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p9732b.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p9732c.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/p991.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/parse1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/pmd1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/pmf1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/pmf2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/pmf3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/pmf4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/pmf5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/pmf6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/pmf7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/pmf8.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/pmf9.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/pt1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/pt2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/pt3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/pt4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/ref1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/rtti1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/rtti2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/rtti3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/scast1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/temp.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/thunk1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/thunk2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/thunk3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/unroll1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/virt1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/virt2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/virt3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/virt4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/virt5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/warn1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/warn2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/warn3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/warn4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/warn5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/warn6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/warn7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.mike/warn8.C create mode 100644 gcc/testsuite/g++.old-deja/g++.niklas/.cvsignore create mode 100644 gcc/testsuite/g++.old-deja/g++.niklas/Makefile.in create mode 100644 gcc/testsuite/g++.old-deja/g++.niklas/README create mode 100644 gcc/testsuite/g++.old-deja/g++.niklas/configure.in create mode 100644 gcc/testsuite/g++.old-deja/g++.niklas/t113.C create mode 100644 gcc/testsuite/g++.old-deja/g++.niklas/t114.C create mode 100644 gcc/testsuite/g++.old-deja/g++.niklas/t115.C create mode 100644 gcc/testsuite/g++.old-deja/g++.niklas/t118.C create mode 100644 gcc/testsuite/g++.old-deja/g++.niklas/t119.C create mode 100644 gcc/testsuite/g++.old-deja/g++.niklas/t120.C create mode 100644 gcc/testsuite/g++.old-deja/g++.niklas/t121.C create mode 100644 gcc/testsuite/g++.old-deja/g++.niklas/t122.C create mode 100644 gcc/testsuite/g++.old-deja/g++.niklas/t123.C create mode 100644 gcc/testsuite/g++.old-deja/g++.niklas/t124.C create mode 100644 gcc/testsuite/g++.old-deja/g++.niklas/t125.C create mode 100644 gcc/testsuite/g++.old-deja/g++.niklas/t126.C create mode 100644 gcc/testsuite/g++.old-deja/g++.niklas/t127.C create mode 100644 gcc/testsuite/g++.old-deja/g++.niklas/t128.C create mode 100644 gcc/testsuite/g++.old-deja/g++.niklas/t129.C create mode 100644 gcc/testsuite/g++.old-deja/g++.niklas/t130.C create mode 100644 gcc/testsuite/g++.old-deja/g++.niklas/t131.C create mode 100644 gcc/testsuite/g++.old-deja/g++.niklas/t132.C create mode 100644 gcc/testsuite/g++.old-deja/g++.niklas/t133.C create mode 100644 gcc/testsuite/g++.old-deja/g++.niklas/t134.C create mode 100644 gcc/testsuite/g++.old-deja/g++.niklas/t135.C create mode 100644 gcc/testsuite/g++.old-deja/g++.niklas/t136.C create mode 100644 gcc/testsuite/g++.old-deja/g++.niklas/t137.C create mode 100644 gcc/testsuite/g++.old-deja/g++.niklas/t138.C create mode 100644 gcc/testsuite/g++.old-deja/g++.niklas/t139.C create mode 100644 gcc/testsuite/g++.old-deja/g++.niklas/t140.C create mode 100644 gcc/testsuite/g++.old-deja/g++.niklas/t141.C create mode 100644 gcc/testsuite/g++.old-deja/g++.other/.cvsignore create mode 100644 gcc/testsuite/g++.old-deja/g++.other/900403_04.C create mode 100644 gcc/testsuite/g++.old-deja/g++.other/900519_12.C create mode 100644 gcc/testsuite/g++.old-deja/g++.other/Makefile.in create mode 100644 gcc/testsuite/g++.old-deja/g++.other/configure.in create mode 100644 gcc/testsuite/g++.old-deja/g++.other/dll-1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.other/dll-2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.other/dll-3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.other/dll-4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.other/dll-5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.other/dll-6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.other/rtti1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.other/rtti2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.other/rtti3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.other/rtti4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.other/rttid2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.other/rttid3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.other/rttid4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/eichin01.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/eichin01a.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/eichin01b.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/m1.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/m2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/m3.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/m4.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/m5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/m6.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/m7.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/m8.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/m9.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/m9a.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/niklas01.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/niklas01a.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/niklas01b.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/niklas02.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/niklas03.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/t00.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/t01.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/t03.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/t04.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/t05.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/t06.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/t07.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/t08.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/t09.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/t10.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/t11.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/t11a.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/t12.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/t12a.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/t13.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/t14.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/t14a.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/t16.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/t18.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/t20.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/t21.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/t22.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/t23.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/t24.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/t25.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/t26.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/t27.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/t28.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/t29.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/t30.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/t31.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/t32.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/t32a.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/t34.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/t34a.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/t35.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/t36.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/t37.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/t37a.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/t38.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/t39.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/t40.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/t41.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/t42.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/test5.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/tiemann1r.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/tiemann2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/to2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/tt.C create mode 100644 gcc/testsuite/g++.old-deja/g++.pt/tt2.C create mode 100644 gcc/testsuite/g++.old-deja/g++.rfg/00321_01-.C create mode 100644 gcc/testsuite/g++.old-deja/g++.rfg/00324_02-.C create mode 100644 gcc/testsuite/g++.old-deja/g++.rfg/README create mode 100644 gcc/testsuite/g++.old-deja/old-deja.exp create mode 100644 gcc/testsuite/gcc.c-torture/ChangeLog create mode 100644 gcc/testsuite/gcc.c-torture/code_quality/920608-1.c create mode 100644 gcc/testsuite/gcc.c-torture/code_quality/Makefile.in create mode 100644 gcc/testsuite/gcc.c-torture/code_quality/code_quality.exp create mode 100644 gcc/testsuite/gcc.c-torture/code_quality/configure.in create mode 100644 gcc/testsuite/gcc.c-torture/compat/Makefile.in create mode 100644 gcc/testsuite/gcc.c-torture/compat/configure.in create mode 100644 gcc/testsuite/gcc.c-torture/compat/strct-layout.c create mode 100644 gcc/testsuite/gcc.c-torture/compat/struct-align.c create mode 100644 gcc/testsuite/gcc.c-torture/compat/struct-big.c create mode 100644 gcc/testsuite/gcc.c-torture/compat/struct-i.c create mode 100644 gcc/testsuite/gcc.c-torture/compat/struct-ic.c create mode 100644 gcc/testsuite/gcc.c-torture/compat/struct-ii.c create mode 100644 gcc/testsuite/gcc.c-torture/compat/struct-ret-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/900116-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/900216-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/900313-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/900407-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/900516-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920301-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920409-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920409-2.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920410-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920410-2.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920411-2.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920413-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920415-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920428-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920428-2.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920428-3.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920428-4.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920428-5.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920428-6.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920428-7.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920501-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920501-10.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920501-11.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920501-12.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920501-13.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920501-15.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920501-16.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920501-17.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920501-18.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920501-19.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920501-2.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920501-20.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920501-21.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920501-22.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920501-23.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920501-24.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920501-3.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920501-4.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920501-6.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920501-7.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920501-8.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920501-9.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920502-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920502-2.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920529-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920611-2.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920615-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920617-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920617-2.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920623-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920624-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920625-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920625-2.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920626-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920701-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920702-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920706-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920710-2.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920711-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920721-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920723-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920729-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920806-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920808-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920809-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920817-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920820-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920821-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920821-2.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920825-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920825-2.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920826-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920828-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920829-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920831-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920902-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920909-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920917-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920928-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920928-2.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920928-3.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920928-4.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920928-5.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/920928-6.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/921004-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/921011-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/921011-2.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/921012-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/921012-2.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/921013-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/921019-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/921021-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/921024-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/921026-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/921103-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/921109-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/921109-3.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/921111-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/921116-2.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/921118-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/921126-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/921202-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/921202-2.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/921203-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/921203-2.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/921206-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/921227-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/930109-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/930109-2.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/930111-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/930117-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/930118-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/930120-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/930126-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/930210-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/930217-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/930222-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/930325-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/930326-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/930411-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/930421-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/930427-2.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/930503-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/930503-2.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/930506-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/930506-2.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/930510-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/930513-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/930513-2.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/930513-3.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/930523-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/930525-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/930527-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/930529-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/930530-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/930602-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/930603-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/930607-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/930609-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/930611-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/930618-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/930621-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/930623-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/930623-2.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/930702-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/930926-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/930927-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/931003-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/931004-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/931013-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/931013-2.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/931013-3.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/931018-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/931031-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/931102-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/931102-2.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/931203-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/940611-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/940712-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/940718-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/941014-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/941014-2.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/941014-3.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/941014-4.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/941019-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/941111-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/941113-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/950122-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/950124-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/950221-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/950329-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/950512-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/950530-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/950607-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/950610-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/950612-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/950613-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/950618-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/950719-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/950729-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/950816-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/950816-2.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/950816-3.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/950910-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/950919-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/950921-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/950922-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/951004-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/951106-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/951116-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/951128-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/951220-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/951222-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/960106-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/960130-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/960201-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/960218-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/960220-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/960221-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/960319-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/960514-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/960704-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/960829-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/961004-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/961010-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/961019-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/961031-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/961126-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/961203-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/970206-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/970214-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/Makefile.in create mode 100644 gcc/testsuite/gcc.c-torture/compile/calls.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/cmpdi-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/combine-hang.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/compile.exp create mode 100644 gcc/testsuite/gcc.c-torture/compile/configure.in create mode 100644 gcc/testsuite/gcc.c-torture/compile/funcptr-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/goto-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/init-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/init-2.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/labels-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/packed-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/widechar-1.c create mode 100644 gcc/testsuite/gcc.c-torture/compile/zero-strct-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/900409-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/920202-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/920302-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/920409-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/920410-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/920411-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/920415-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/920428-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/920428-2.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/920428-2.cexp create mode 100644 gcc/testsuite/gcc.c-torture/execute/920429-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/920501-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/920501-2.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/920501-3.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/920501-4.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/920501-5.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/920501-6.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/920501-7.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/920501-7.cexp create mode 100644 gcc/testsuite/gcc.c-torture/execute/920501-8.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/920501-9.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/920506-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/920520-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/920603-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/920604-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/920612-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/920612-2.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/920618-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/920625-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/920710-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/920711-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/920715-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/920715-1.cexp create mode 100644 gcc/testsuite/gcc.c-torture/execute/920721-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/920721-2.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/920721-3.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/920721-4.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/920726-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/920728-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/920731-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/920810-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/920812-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/920829-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/920908-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/920908-2.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/920909-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/920922-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/920929-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/921006-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/921007-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/921013-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/921016-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/921017-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/921019-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/921019-2.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/921029-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/921104-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/921110-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/921112-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/921113-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/921117-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/921123-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/921123-2.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/921124-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/921202-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/921202-2.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/921204-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/921207-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/921208-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/921208-2.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/921215-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/921218-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/921218-2.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/930106-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/930111-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/930123-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/930126-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/930208-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/930406-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/930408-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/930429-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/930429-2.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/930513-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/930513-2.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/930518-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/930526-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/930527-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/930529-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/930603-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/930603-2.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/930603-3.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/930608-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/930614-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/930614-2.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/930621-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/930622-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/930622-2.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/930628-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/930630-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/930702-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/930713-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/930718-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/930719-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/930725-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/930818-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/930916-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/930921-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/930929-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/930930-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/930930-2.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/931002-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/931004-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/931004-10.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/931004-11.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/931004-12.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/931004-13.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/931004-14.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/931004-2.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/931004-3.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/931004-4.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/931004-5.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/931004-6.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/931004-7.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/931004-8.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/931004-9.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/931005-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/931009-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/931012-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/931017-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/931018-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/931031-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/931102-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/931102-2.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/931110-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/931110-2.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/931208-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/931228-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/940115-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/940122-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/941014-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/941014-2.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/941015-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/941021-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/941025-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/941031-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/941101-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/941110-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/941202-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/950221-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/950322-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/950426-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/950426-2.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/950503-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/950511-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/950512-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/950605-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/950607-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/950607-2.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/950612-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/950621-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/950628-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/950704-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/950706-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/950710-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/950714-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/950809-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/950906-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/950915-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/950929-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/951003-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/951115-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/951204-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/960116-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/960117-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/960209-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/960215-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/960218-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/960219-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/960301-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/960302-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/960311-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/960311-2.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/960311-3.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/960312-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/960317-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/960321-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/960326-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/960327-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/960402-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/960405-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/960416-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/960419-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/960419-2.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/960512-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/960513-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/960521-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/960608-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/960801-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/960802-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/960830-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/960909-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/961004-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/961017-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/961017-2.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/961026-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/961112-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/961122-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/961122-2.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/961125-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/961206-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/961213-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/961223-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/970214-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/970214-2.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/970217-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/970312-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/Makefile.in create mode 100644 gcc/testsuite/gcc.c-torture/execute/arith-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/arith-rand.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/bf-layout-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/bf-pack-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/bf-sign-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/bf-sign-2.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/bf64-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/cbrt.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/cmpdi-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/cmpsi-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/comp-goto-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/complex-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/complex-2.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/complex-3.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/complex-4.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/complex-5.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/compndlit-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/configure.in create mode 100644 gcc/testsuite/gcc.c-torture/execute/conversion.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/cvt-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/cvt-1.cexp create mode 100644 gcc/testsuite/gcc.c-torture/execute/dbra-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/divconst-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/divconst-2.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/divconst-3.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/divmod-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/enum-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/execute.exp create mode 100644 gcc/testsuite/gcc.c-torture/execute/func-ptr-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/gofast.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/ieee/920518-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/ieee/920810-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/ieee/930529-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/ieee/Makefile.in create mode 100644 gcc/testsuite/gcc.c-torture/execute/ieee/configure.in create mode 100644 gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/ieee/ieee.exp create mode 100644 gcc/testsuite/gcc.c-torture/execute/ieee/minuszero.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/ieee/rbug.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/ieee/rbug.cexp create mode 100644 gcc/testsuite/gcc.c-torture/execute/index-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/inst-check.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/int-compare.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/loop-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/loop-2.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/loop-2b.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/loop-2c.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/loop-2d.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/loop-2e.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/loop-2f.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/loop-3.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/loop-3b.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/loop-3c.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/memcpy-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/mod-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/nest-stdar-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/nestfunc-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/packed-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/pending-4.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/ptr-arith-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/regstack-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/scope-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/scope-2.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/strct-pack-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/strct-pack-2.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/strct-pack-3.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/strct-pack-4.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/strct-varg-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/struct-ini-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/struct-ini-2.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/struct-ini-3.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/struct-ini-4.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/struct-ret-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/struct-ret-2.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/tstdi-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/va-arg-1.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/va-arg-2.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/va-arg-3.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/va-arg-4.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/va-arg-5.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/va-arg-6.c create mode 100644 gcc/testsuite/gcc.c-torture/execute/widechar-1.c create mode 100644 gcc/testsuite/gcc.c-torture/noncompile/920507-1.c create mode 100644 gcc/testsuite/gcc.c-torture/noncompile/920616-2.c create mode 100644 gcc/testsuite/gcc.c-torture/noncompile/920721-2.c create mode 100644 gcc/testsuite/gcc.c-torture/noncompile/920824-1.c create mode 100644 gcc/testsuite/gcc.c-torture/noncompile/920923-1.c create mode 100644 gcc/testsuite/gcc.c-torture/noncompile/921102-1.c create mode 100644 gcc/testsuite/gcc.c-torture/noncompile/921116-1.c create mode 100644 gcc/testsuite/gcc.c-torture/noncompile/930301-1.c create mode 100644 gcc/testsuite/gcc.c-torture/noncompile/930622-1.c create mode 100644 gcc/testsuite/gcc.c-torture/noncompile/930622-2.c create mode 100644 gcc/testsuite/gcc.c-torture/noncompile/930714-1.c create mode 100644 gcc/testsuite/gcc.c-torture/noncompile/931203-1.c create mode 100644 gcc/testsuite/gcc.c-torture/noncompile/940112-1.c create mode 100644 gcc/testsuite/gcc.c-torture/noncompile/940227-1.c create mode 100644 gcc/testsuite/gcc.c-torture/noncompile/940510-1.c create mode 100644 gcc/testsuite/gcc.c-torture/noncompile/940712-1.c create mode 100644 gcc/testsuite/gcc.c-torture/noncompile/940712-1.h create mode 100644 gcc/testsuite/gcc.c-torture/noncompile/940712-1a.h create mode 100644 gcc/testsuite/gcc.c-torture/noncompile/940712-1b.h create mode 100644 gcc/testsuite/gcc.c-torture/noncompile/950825-1.c create mode 100644 gcc/testsuite/gcc.c-torture/noncompile/950921-1.c create mode 100644 gcc/testsuite/gcc.c-torture/noncompile/951025-1.c create mode 100644 gcc/testsuite/gcc.c-torture/noncompile/951123-1.c create mode 100644 gcc/testsuite/gcc.c-torture/noncompile/951227-1.c create mode 100644 gcc/testsuite/gcc.c-torture/noncompile/Makefile.in create mode 100644 gcc/testsuite/gcc.c-torture/noncompile/configure.in create mode 100644 gcc/testsuite/gcc.c-torture/noncompile/init-1.c create mode 100644 gcc/testsuite/gcc.c-torture/noncompile/init-2.c create mode 100644 gcc/testsuite/gcc.c-torture/noncompile/invalid_asm.c create mode 100644 gcc/testsuite/gcc.c-torture/noncompile/noncompile.exp create mode 100644 gcc/testsuite/gcc.c-torture/noncompile/va-arg-1.c create mode 100644 gcc/testsuite/gcc.c-torture/special/920413-1.c create mode 100644 gcc/testsuite/gcc.c-torture/special/920520-1.c create mode 100644 gcc/testsuite/gcc.c-torture/special/920521-1.c create mode 100644 gcc/testsuite/gcc.c-torture/special/920717-x.c create mode 100644 gcc/testsuite/gcc.c-torture/special/920717-y.c create mode 100644 gcc/testsuite/gcc.c-torture/special/920730-1.c create mode 100644 gcc/testsuite/gcc.c-torture/special/921210-1.c create mode 100644 gcc/testsuite/gcc.c-torture/special/930510-1.c create mode 100644 gcc/testsuite/gcc.c-torture/special/951130-1.c create mode 100644 gcc/testsuite/gcc.c-torture/special/960224-1.c create mode 100644 gcc/testsuite/gcc.c-torture/special/960224-2.c create mode 100644 gcc/testsuite/gcc.c-torture/special/Makefile.in create mode 100644 gcc/testsuite/gcc.c-torture/special/configure.in create mode 100644 gcc/testsuite/gcc.c-torture/special/special.exp create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/386.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/86.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/BUG1.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/BUG11.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/BUG12.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/BUG13.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/BUG16.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/BUG17.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/BUG18.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/BUG2.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/BUG21.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/BUG22.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/BUG23.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/BUG24.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/BUG25.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/BUG3.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/BUG4.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/BUG5.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/BUG6.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/DFcmp.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/HIcmp.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/HIset.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/Makefile.in create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/PYRBUG.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/QIcmp.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/QIset.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/SFset.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/SIcmp.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/SIset.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/UHIcmp.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/UQIcmp.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/USIcmp.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/a.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/a1.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/a3.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/aa.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/aaa.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/abs.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/ac.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/acc.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/add.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/add386.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/addcc.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/andm.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/andmem.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/andn.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/andok.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/andsi.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/andsparc.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/aos.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/arr.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/as.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/ase.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/b.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/b1.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/b2.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/b3.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/b88.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/bad.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/band.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/bb0.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/bb1.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/bbb.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/bc.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/bcopy.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/bf.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/bfins.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/bfx.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/bge.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/bit.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/bitf.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/bitw.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/blk.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/bt.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/bt386.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/bug.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/bugc.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/buns.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/bx.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/c.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/c1.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/c2.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/call.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/call386.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/callind.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/cc.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/charmtst.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/cmb.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/cmp.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/cmphi.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/cmpsi386.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/cmul.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/cn1.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/comb.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/configure.in create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/consec.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/const.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/conv.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/conv_tst.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/cp.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/csebug.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/cvt.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/d.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/dbl_parm.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/dblbug.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/ddd.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/dead.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/delay.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/di.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/dic.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/dilayout.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/dimove.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/dimul.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/div.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/divdf.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/dm.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/dshift.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/e.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/ex.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/ext.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/f1.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/f2.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/fdmul.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/flo.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/float.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/flt_const.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/fnul.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/foo.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/forgetcc.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/fq.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/g.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/gen_tst.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/glob.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/gronk.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/hi.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/hibug.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/i++.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/i.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/i386bug.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/ic.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/icmp.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/ifreg.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/imm.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/isinf.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/jmp.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/jumptab.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/l.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/layout.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/lbug.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/ll1.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/llbug.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/lll.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/load8.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/loadhicc.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/log2.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/logic.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/loop-1.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/loop386.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/lop.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/m1.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/m2.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/m5.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/m68.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/mbyte.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/mchar.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/mcmp.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/mdouble.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/memtst.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/miscomp.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/mm.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/mod.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/modcc.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/move.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/move_qhi.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/mregtst.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/msp.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/mtst.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/mu.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/mul.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/mword.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/mword1.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/n.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/n1.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/nand.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/neg.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/o.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/omit.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/opout.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/opt.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/or.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/or386.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/p.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/parms.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/pass.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/pmt.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/poor.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/pp.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/pret-arg.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/pyr.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/pyr2.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/q.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/r.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/r1.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/rel.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/rmsc.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/round.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/run.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/s.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/sar.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/sc.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/scal.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/scc.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/scond.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/selfrec.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/seq.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/set386.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/set88.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/sh.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/shand.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/shft.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/shift.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/shloop.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/shm.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/signext.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/signext2.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/sim.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/simple.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/sne.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/sound.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/sparcbug.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/speed.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/stor.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/store0.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/storecc.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/str.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/stru.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/structret.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/stuct.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/sub32.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/subcc.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/subcse.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/sym.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/symconst.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/t.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/test-flow.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/test-loop.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/test.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/time.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/tmp.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/trivial.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/trunc.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/u.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/udconvert.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/udivmod4.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/uns.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/uns_tst.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/unsorted.exp create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/uuarg.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/v.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/w.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/ww.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/x.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/xb.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/xbg.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/xc.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/xcsebug.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/xdi.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/xfoo.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/xi.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/xlop.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/xmtst.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/xneg.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/xopt.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/xor.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/xorn.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/xp.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/xpp.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/xs.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/xsh.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/xxs.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/xz.c create mode 100644 gcc/testsuite/gcc.c-torture/unsorted/xzz.c create mode 100644 gcc/testsuite/gcc.dg/README create mode 100644 gcc/testsuite/gcc.dg/bf-spl1.c create mode 100644 gcc/testsuite/gcc.dg/cpp-mi.c create mode 100644 gcc/testsuite/gcc.dg/cpp-mic.h create mode 100644 gcc/testsuite/gcc.dg/cpp-micc.h create mode 100644 gcc/testsuite/gcc.dg/dg.exp create mode 100644 gcc/testsuite/gcc.dg/dll-1.c create mode 100644 gcc/testsuite/gcc.dg/dll-2.c create mode 100644 gcc/testsuite/gcc.dg/dll-3.c create mode 100644 gcc/testsuite/gcc.dg/dll-4.c create mode 100644 gcc/testsuite/gcc.dg/splet-1.c create mode 100644 gcc/testsuite/gcc.dg/struct-ret-1.c create mode 100644 gcc/testsuite/gcc.failure/940409-1.c create mode 100644 gcc/testsuite/gcc.failure/940409-1.cexp create mode 100644 gcc/testsuite/gcc.failure/failure.exp create mode 100644 gcc/testsuite/gcc.misc-tests/Makefile.in create mode 100644 gcc/testsuite/gcc.misc-tests/acker1.c create mode 100644 gcc/testsuite/gcc.misc-tests/acker1.exp create mode 100644 gcc/testsuite/gcc.misc-tests/configure.in create mode 100644 gcc/testsuite/gcc.misc-tests/dg-1.c create mode 100644 gcc/testsuite/gcc.misc-tests/dg-10.c create mode 100644 gcc/testsuite/gcc.misc-tests/dg-11.c create mode 100644 gcc/testsuite/gcc.misc-tests/dg-12.c create mode 100644 gcc/testsuite/gcc.misc-tests/dg-2.c create mode 100644 gcc/testsuite/gcc.misc-tests/dg-3.c create mode 100644 gcc/testsuite/gcc.misc-tests/dg-4.c create mode 100644 gcc/testsuite/gcc.misc-tests/dg-5.c create mode 100644 gcc/testsuite/gcc.misc-tests/dg-6.c create mode 100644 gcc/testsuite/gcc.misc-tests/dg-7.c create mode 100644 gcc/testsuite/gcc.misc-tests/dg-8.c create mode 100644 gcc/testsuite/gcc.misc-tests/dg-9.c create mode 100644 gcc/testsuite/gcc.misc-tests/dg-test.exp create mode 100644 gcc/testsuite/gcc.misc-tests/dhry.c create mode 100644 gcc/testsuite/gcc.misc-tests/dhry.exp create mode 100644 gcc/testsuite/gcc.misc-tests/dhry.h create mode 100644 gcc/testsuite/gcc.misc-tests/gcov-1.c create mode 100644 gcc/testsuite/gcc.misc-tests/gcov-2.c create mode 100644 gcc/testsuite/gcc.misc-tests/gcov.exp create mode 100644 gcc/testsuite/gcc.misc-tests/m-un-1.c create mode 100644 gcc/testsuite/gcc.misc-tests/matrix1.c create mode 100644 gcc/testsuite/gcc.misc-tests/matrix1.exp create mode 100644 gcc/testsuite/gcc.misc-tests/mg.c create mode 100644 gcc/testsuite/gcc.misc-tests/mg.exp create mode 100644 gcc/testsuite/gcc.misc-tests/msgs.exp create mode 100644 gcc/testsuite/gcc.misc-tests/optbench.c create mode 100644 gcc/testsuite/gcc.misc-tests/optbench.exp create mode 100644 gcc/testsuite/gcc.misc-tests/sieve.c create mode 100644 gcc/testsuite/gcc.misc-tests/sieve.exp create mode 100644 gcc/testsuite/gcc.misc-tests/sort2.c create mode 100644 gcc/testsuite/gcc.misc-tests/sort2.exp create mode 100644 gcc/testsuite/lib/c-torture.exp create mode 100644 gcc/testsuite/lib/chill.exp create mode 100644 gcc/testsuite/lib/g++.exp create mode 100644 gcc/testsuite/lib/gcc-dg.exp create mode 100644 gcc/testsuite/lib/gcc.exp create mode 100644 gcc/testsuite/lib/mike-g++.exp create mode 100644 gcc/testsuite/lib/mike-gcc.exp create mode 100644 gcc/testsuite/lib/old-dejagnu.exp diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog new file mode 100644 index 000000000000..b30226a14e09 --- /dev/null +++ b/gcc/testsuite/ChangeLog @@ -0,0 +1,1928 @@ +Thu Jul 31 12:17:24 1997 Jeffrey A Law (law@cygnus.com) + + * gcc.c-torture/execute/920501-9.c: Fix to work on targets with + 32bit or larger longs. + + * gcc.c-torture/execute/961017-2.c: Fix to work on targets which + have either a 32bit long or 32bit int. + +Wed Jul 9 15:15:40 1997 Bob Manson <manson@charmed.cygnus.com> + + * gcc.prms/5403.c: Allow CRLFs to occur at the start of the output + too. + +Mon Jun 16 15:27:06 1997 Bob Manson <manson@charmed.cygnus.com> + + * lib/g++.exp(g++_init): Use g++_include_flags instead of making + up the includes ourselves. + +Wed Jun 11 17:33:21 1997 Bob Manson <manson@charmed.cygnus.com> + + * lib/plumhall.exp: Remove random include, and add a few + verbose messages for debugging. + +Fri Jun 6 14:23:24 1997 Bob Manson <manson@charmed.cygnus.com> + + * lib/g++.exp: Use g++_link_flags from libgloss.exp, instead + of trying to do it ourselves. + +Wed Jun 4 18:43:55 1997 Bob Manson <manson@charmed.cygnus.com> + + * gcc.prms/5403.c: Made regexp a bit less strict. + +Tue Jun 3 15:12:39 1997 Bob Manson <manson@charmed.cygnus.com> + + * lib/mike-gcc.exp: Don't use global exec_output anymore. Output + is returned from remote_load instead. + * lib/plumhall.exp: Ditto. + * lib/mike-g++.exp: Ditto. + * lib/old-dejagnu.exp: Ditto. + * lib/c-torture.exp: Ditto. + +Fri May 30 23:15:15 1997 Bob Manson <manson@charmed.cygnus.com> + + * lib/g++.exp: Use build_wrapper procedure. + * lib/gcc.exp: Ditto. + +Tue May 20 15:23:27 1997 Jeffrey A Law (law@cygnus.com) + + * gcc.c-torture/execute/*.c: Include stdlib.h instead of using + an old-style decl for malloc. Fixes tests to work when + sizeof (int) != sizeof (size_t). + +Thu May 15 14:10:39 1997 Mike Meissner <meissner@cygnus.com> + + * lib/gcc.exp (gcc_target_compile): If gcc,no_varargs, define + NO_VARARGS when compiling. + +Thu May 1 14:49:19 1997 Bob Manson <manson@charmed.cygnus.com> + + * lib/plumhall.exp(ph_includes): New procedure. + (ph_make): Use it. + (ph_compiler): Ditto. + + * lib/g++.exp: Rename test-glue.c to testglue.c. + * lib/gcc.exp: Ditto. + +Thu Apr 10 14:50:26 1997 Bob Manson <manson@charmed.cygnus.com> + + * lib/g++.exp(g++init): Don't try to be smart, always run g++_init + to completion when it's called. + +Thu Mar 20 09:50:32 1997 Doug Evans <dje@canuck.cygnus.com> + + * lib/plumhall.exp (ph_make): Comment out errorCode=NONE test + for object files. + (ph_summary): Mark skipped testcases as untested, not unresolved. + + * lib/plumhall.exp (ph_make): If unresolved because of bad + errorCode, record errorCode in log file. + (*): Replace send_log/verbose with verbose -log. + +Thu Mar 13 16:09:28 1997 Bob Manson <manson@charmed.cygnus.com> + + * lib/plumhall.exp: Use incr_count. + +Wed Mar 12 10:01:33 1997 Jeffrey A Law (law@cygnus.com) + + * gcc.c-torture: Update to c-torture-1.45. + +Sun Feb 23 18:12:04 1997 Bob Manson <manson@charmed.cygnus.com> + + * lib/gcc.exp(gcc_init): Add args parameter (which will contain + the name of the expect testcase file). + + * lib/g++.exp(g++_init): Ditto. + +Thu Feb 20 13:53:05 1997 Bob Manson <manson@charmed.cygnus.com> + + * lib/g++.exp(g++_exit): $gluefile lives on the build, not + the host. + + * lib/gcc.exp(gcc_exit): New procedure. + +Wed Feb 19 15:16:16 1997 Bob Manson <manson@charmed.cygnus.com> + + * g++.old-deja/g++.rfg/*: Added "Build don't link" and ERROR + specs where appropriate. + + * g++.old-deja/g++.arm/*: Added additional ERROR checks + because of new "candidates are" messages, and removed a few + + * Converted all non-old-style g++ testcases to old-style, and + moved into g++.old-deja. + +Fri Feb 14 11:46:46 1997 Bob Manson <manson@charmed.cygnus.com> + + * lib/old-dejagnu.exp(old-dejagnu): Add various "skip if" + options. + + * lib/gcc.exp(gcc_init): Don't set gluefile unless the compile + succeeded. + + * lib/g++.exp(g++_init): Don't unset gluefile unless it exists. + +Thu Feb 13 17:30:46 1997 Michael Meissner <meissner@cygnus.com> + + * lib/gcc.exp (gcc_target_compile): Add support for defining + NO_TRAMPOLINES and NO_LABEL_VALUES if the baseboard file indicates + the machine doesn't have those features. + +Tue Feb 11 12:57:11 1997 Bob Manson <manson@charmed.cygnus.com> + + * g++.law/operators4.exp: Don't use LIBS. + +Sat Feb 8 14:45:55 1997 Bob Manson <manson@charmed.cygnus.com> + + * g++.law/virtual1.exp: Don't use CXX_FLAGS. + + * lib/mike-g++.exp: Don't set the compiler to be tested here. + * lib/g++.exp: Set it here instead. Also, allow use of the + --tool_exec and --tool_opt options. Change CXX to + GXX_UNDER_TEST. + + * g++.old-deja/old-deja.exp: Change CXX to GXX_UNDER_TEST. + + * lib/gcc.exp: Allow use of --tool_exec and --tool_opt. + +Fri Feb 7 12:55:45 1997 Bob Manson <manson@charmed.cygnus.com> + + * lib/old-dejagnu.exp: Use prune_warnings instead of + prune_system_crud. + * lib/mike-g++.exp: Ditto. + * lib/gcc.exp: Ditto. + * lib/g++.exp: Ditto. + + * lib/g++.exp: Include both libstdc++ and libstdc++/stl. + +Fri Feb 7 10:41:53 1997 Jeffrey A Law (law@cygnus.com) + + * 941014-2.c: Include stdlib.h + * 960327-1.c: Include stdio.h + * dbra.c, index-1.c: Don't assume ints are 32bits. + +Tue Feb 4 12:51:09 1997 Bob Manson <manson@charmed.cygnus.com> + + * lib/gcc.exp: Add gcc,stack_size target feature. + + * lib/g++.exp(g++_target_compile): Add the include and link + paths here, not in two other places. And, it's $options, not + options. + + * lib/mike-g++.exp(postbase): Remove the code that determines + the correct include and link paths. + * g++.old-deja/old-deja.exp: Ditto. + +Mon Feb 3 19:00:07 1997 Bob Manson <manson@charmed.cygnus.com> + + * lib/g++.exp(g++_init): target_compile no longer returns the + filename of the result. + +Sun Feb 2 14:42:34 1997 Bob Manson <manson@charmed.cygnus.com> + + * gcc.misc-tests/gcov.exp: Add -nocomplain to the + call to glob. + + * gcc.c-torture/special/special.exp: Change call to + gcc_target_compile to include the object file. + +Sun Feb 2 17:11:50 1997 Ian Lance Taylor <ian@cygnus.com> + + * gcc.c-torture/special/special.exp: Correct misspelling in last + change. + +Sat Feb 1 12:34:23 1997 Bob Manson <manson@charmed.cygnus.com> + + * lib/plumhall.exp(ph_summary): Log the entire output of the + executable. Return -1 if there were any failures, 0 otherwise. + (ph_execute): Return -1 if there were any failures, 0 otherwise. + (ph_make): Clean up objects and executables that were built + if the tests succeeded. + +Thu Jan 30 13:45:56 1997 Bob Manson <manson@charmed.cygnus.com> + + * g++.old-deja/old-deja.exp: Add -L and -I flags so we include + libraries and includes in the build tree as appropriate. + +Wed Jan 29 17:19:34 1997 Bob Manson <manson@charmed.cygnus.com> + + * lib/c-torture.exp: Instead of looking for the global variable + NO_LONG_LONG, check to see if that's a feature of the target. + +Wed Jan 29 00:36:25 1997 Bob Manson <manson@charmed.cygnus.com> + + * config/default.exp: Minimize. Delete the remainer of the files in + config; this functionality is now in devo/dejagnu/config. + + g++.*/*: Pass any additional flags used to compile to postbase; + delete CXXFLAGS. + + gcc.c-torture/*: Remove calls to gcc_init and gcc_finish; this + is now done by runtest.exp. Use gcc_target_compile instead of + compile. + + lib/c-torture.exp: Use gcc_target_compile instead of compile. + Remove references to CFLAGS. Use remote_file instead of + calling rm -f. + (c-torture): Take a list of arguments to use to compile this + testcase. + + lib/g++.exp: Simplify. Use target_compile instead of compile. + lib/gcc-dg.exp: Ditto. + lib/gcc.exp: Ditto. + lib/mike-{gcc,g++}.exp: Ditto. + lib/old-dejagnu.exp: Ditto. + lib/plumhall.exp: Ditto. + +Wed Jan 8 14:43:07 1997 Jim Wilson <wilson@cygnus.com> + + * lib/plumhall.exp (ph_make): Use CFLAGS and ANSICFLAGS when linking. + (ph_linker): Likewise. + +Wed Nov 13 16:04:19 1996 Joern Rennecke <amylaar@cygnus.com> + + * gcc.c-torture/execute/{loop-2e.c,loop-2f.c}: Only use + MAP_ANON / MAP_ANONYMOUS if defined; + else try to map from /dev/zero . + +Tue Nov 12 23:30:12 1996 Jeffrey A Law (law@cygnus.com) + + * gcc.c-torture/execute/{loop-2e.c,loop-2f.c}: If MAP_ANON + isn't defined, then define it to MAP_ANONYMOUS. + +Tue Nov 12 11:57:49 1996 Jeffrey A Law (law@cygnus.com) + + * gcc.c-torture: Update to c-torture-1.42 release. + +Mon Nov 11 12:45:31 1996 Jeffrey A Law (law@cygnus.com) + + * gcc.c-torture: Update to c-torture-1.41 release. + +Sun Oct 27 18:56:18 1996 Jeffrey A Law (law@cygnus.com) + + * gcc.c-torture/execute/enum-1.c: New test. Will be in next + c-torture release. + +Thu Aug 15 11:09:36 1996 Brendan Kehoe <brendan@lisa.cygnus.com> + + * lib/gcc.exp (gcc_init): Always append the target_info to CFLAGS + and LDFLAGS. Fix second case to append the target_info ldflags + onto LDFLAGS, not CFLAGS. + * lib/g++.exp (g++_init): Add target_info stuff. + * lib/old-dejagnu.exp (old-dejagnu-init): Likewise. Add inclusion + of libgloss and newlib flags for !native. + + * config/proelf.exp: Load remote.exp and do `push_target hppro'. + (GDB): Fix relative path to go up another dir for finding gdb. + +Thu Aug 8 17:03:27 1996 Rob Savoye <rob@chinadoll.cygnus.com> + + * lib/gcc.exp(gcc_init): Set CFLAGS and LDFLAGS to their new + versions in the target_info array, if they don't exist. + +Fri Aug 2 15:39:03 1996 Brendan Kehoe <brendan@lisa.cygnus.com> + + * config/vx.exp (${tool}_load): Fix syntax of `$shell_id < 0'. + +Mon Jul 8 15:45:58 1996 Jim Wilson <wilson@cygnus.com> + + * lib/g++.exp: Change all uses of $base_dir/ to $base_dir/../. + * lib/gcc.exp, lib/old-dejagnu.exp: Likewise. + +Mon Jul 1 15:53:00 1996 Bob Manson <manson@charmed.cygnus.com> + + * lib/old-dejagnu.exp: Don't remove the output file before we've + actually tested it. Don't append pwd to the path of the executable + we're testing. + +Sun Jun 30 14:37:50 1996 Doug Evans <dje@canuck.cygnus.com> + + * lib/g++.exp (default_g++_start): Don't pass LDFLAGS, LIBS if -c. + +Wed Jun 26 14:15:55 1996 Bob Manson <manson@charmed.cygnus.com> + + * lib/old-dejagnu.exp (old-dejagnu): Add $tmpdir to specify a + temporary directory for compiler files, and set it to a default + value of /tmp. Set $output as the name of the output file from + compiling the testcase. Add a -o option to $cflags_var so the + compiler writes the final output file as $output. Set $executable + to $output. + + * lib/mike-g++.exp (postbase): Add $tmpdir to specify a temporary + directory for compiler files, and set it to /tmp if it doesn't + already have a value. Set $output_file to the name of the output + file from compiling the testcase. Add a -o option to CXXFLAGS so + the compiler writes the final output file as $output. Use $output + as the executable to be tested. + +Mon Jun 24 17:12:16 1996 Brendan Kehoe <brendan@lisa.cygnus.com> + + * lib/g++.exp: Also add -Wl,-rpath,... for linux. + +Sat Jun 8 15:12:24 1996 Jeffrey A Law (law@cygnus.com) + + * gcc.c-torture/execute/pending-1.c: New test. Still + pending in Tege's queue. + +Wed Apr 24 18:13:45 1996 Jim Wilson <wilson@chestnut.cygnus.com> + + * lib/plumhall.exp (ph_summary): Add arguments name and exec_status. + Add variables local_failcnt and local_unresolvedcnt. Call gcc_fail + if there were failures. Call unresolved if there were unresolved + testcases. Call gcc_fail if program did not run to completion. + (ph_make): Pass additional argument name to ph_execute. + (ph_execute): Add new argument. Pass additional arguments to + ph_summary. Call gcc_fail is there is no execution output. + +Wed Apr 24 13:39:23 1996 Jeffrey A Law (law@cygnus.com) + + * lib/plumhall.exp (proc_summary): Output relavent summary + lines into the log so specific failures in plumhall can be + investigated. + +Wed Apr 10 13:23:45 1996 Jeffrey A Law (law@cygnus.com) + + * lib/c-torture.exp: Provide a default value for $NO_LONG_LONG. + (c-torture-execute): Don't try to execute tests which use + "long long" types if $NO_LONG_LONG is nonzero. + +Mon Apr 8 08:52:29 1996 Doug Evans <dje@canuck.cygnus.com> + + * gcc.c-torture/execute/ieee/ieee.exp: Run c-torture-execute, + not c-torture. + + * gcc.ieee: Move from here. + * gcc.c-torture/execute/ieee: To here. + +Tue Mar 26 23:41:18 1996 Jeffrey A Law (law@cygnus.com) + + * gcc.c-torture: Update to c-torture-1.41 release. + +Fri Mar 22 15:49:24 1996 Jeffrey A Law (law@cygnus.com) + + * lib/c-torture.exp (c-torture-execute): Remove "$executable", + not "$output". + +Thu Mar 7 12:37:08 1996 Doug Evans <dje@charmed.cygnus.com> + + * lib/gcc.exp (default_gcc_start): Don't pass $LDFLAGS $LIBS if + -c present. + +Sat Mar 2 22:36:37 1996 Jeffrey A Law (law@cygnus.com) + + * config/proelf.exp: Handle connecting to a simulator. + +Wed Jan 31 00:58:15 1996 Jeffrey A Law (law@cygnus.com) + + * config/proelf.exp: New file. Enough framework that we can + run c-torture tests on the proelf targets (or any other target + that gdb can connect to for that matter). + +Mon Jan 29 08:57:46 1996 Doug Evans <dje@canuck.cygnus.com> + + * gcc.c-torture/special/special.exp: Delete libs arg to dg-runtest. + * gcc.ph/testing/limits/limits.exp: Likewise. Don't pass $CFLAGS. + + * lib/plumhall.exp (ph_execute): Always call ph_summary if + exec_output exists. + +Sun Jan 28 11:28:43 1996 Doug Evans <dje@charmed.cygnus.com> + + * config/sim.exp (SIM_TIME_LIMIT): New user settable variable. + (${tool}_load): Use 240 seconds if SIM_TIME_LIMIT not set. + + * config/*.exp: Update FSF address. Change result of ${tool}_load + to pass/fail/unresolved/unsupported/untested. Caller must now + call unresolved/unsupported/untested. + * lib/*.exp: Update FSF address. Update to handle new results of + ${tool}_load. + * lib/chill.exp (verbose): Delete. + +Sat Jan 27 12:28:07 1996 Doug Evans <dje@charmed.cygnus.com> + + * lib/gcc.exp (default_gcc_start): Change order of args to + $LDFLAGS $CFLAGS $LIBS. + * lib/gcc-dg.exp (gcc-dg-test): Arguments have changed, update. + Save/set/restore CFLAGS. Pass single arg to gcc_start. + * gcc.dg/dg.exp: Delete libs arg in call to dg-runtest. + (CC,CFLAGS,LIBS): Delete references. Don't pass $CFLAGS to dg-runtest. + * gcc.misc-tests/dg-test.exp: Likewise. + * gcc.misc-tests/msgs.exp: Likewise. + * gcc.prms/prms.exp: Likewise. + * gcc.misc-tests/gcov.exp: Delete libs arg in call to dg-runtest. + (CFLAGS,LIBS): Delete references. Don't pass $CFLAGS to dg-runtest. + + * lib/dg.exp: Deleted, moved to dejagnu/lib. + +Wed Jan 24 18:37:00 1996 Brendan Kehoe <brendan@lisa.cygnus.com> + + * g++.old-deja/old-deja.exp: Add passing of $mathlib to old-dejagnu. + + * g++.old-deja/old-deja.exp: Move setting of runshlib from here... + * lib/old-dejagnu.exp (old-dejagnu-init): ...to here. + + * lib/g++.exp (g++_init): Take out use of -rpath for the sun4, not + necessary. + +Sat Jan 20 17:22:08 1996 Brendan Kehoe <brendan@cygnus.com> + + * g++.old-deja/old-deja.exp: Move setting of runshlib out of the + global for loop; add use of $mathlib. + * lib/old-dejagnu.exp (old-dejagnu-init): Put the runshlib + settings here; set mathlib for anything but VxWorks. + +Mon Jan 22 16:31:57 1996 Jeffrey A Law (law@cygnus.com) + + * gcc.c-torture: Update to c-torture-1.40 release. + +Wed Jan 3 00:54:33 1996 Jeffrey A Law (law@cygnus.com) + + * gcc.ph/testing/limits/limits.exp: Load ${tool}-dg.exp, not + dg.exp. + +Sun Dec 3 16:17:42 1995 Jeffrey A. Law <law@sethra.cygnus.com> + + * lib/c-torture.exp (c-torture-execute): Declare "output" as + global. + +Fri Nov 17 20:01:19 1995 Doug Evans <dje@canuck.cygnus.com> + + * lib/g++.exp (LIBS): Define if not already. + * lib/gcc-dg.exp (gcc-dg-test): Set executable file as a.out. + (gcc-dg-prune): Call prune_gcc_output. + * lib/gcc.exp (prune_gcc_output): New proc. + * gcc.c-torture/special (921210-1.c): Call prune_system_crud and + prune_gcc_output. + +Thu Nov 16 09:15:40 1995 Doug Evans <dje@canuck.cygnus.com> + + * lib/c-torture.exp (c-torture-compile): Fix calls to `unsupported'. + (c-torture-execute): Likewise. Rename `name' to `testcase'. + +Wed Nov 15 23:04:36 1995 Jeffrey A Law (law@cygnus.com) + + * gcc.c-torture: Update to c-torture-1.39 release. + +Sat Nov 4 12:52:05 1995 Doug Evans <dje@canuck.cygnus.com> + + * lib/c-torture.exp (c-torture-execute): Don't return if one option + fails, try others as well. + +Thu Nov 2 09:28:35 1995 Doug Evans <dje@canuck.cygnus.com> + + * lib/c-torture.exp (c-torture-execute): This proc's result is `void'. + If compilation fails, mark execute tests as `untested'. + If test is marked as unsupported, don't mark compilation and + execute tests as failed. + +Wed Oct 25 20:57:55 1995 Brendan Kehoe <brendan@lisa.cygnus.com> + + * lib/g++.exp (g++_init): Don't link in libg++, and look to + libstdc++ for whether or not we want to be doing shared + libraries. Delete link_curses since we don't need it anymore. + * lib/mike-g++.exp (postbase): Don't link in libg++. + * g++.old-deja/old-deja.exp: Likewise. + +Mon Oct 23 13:05:11 1995 Brendan Kehoe <brendan@lisa.cygnus.com> + + * lib/g++.exp (CXX): Default to run `c++' instead of `g++'. + +Tue Oct 17 15:24:47 1995 Brendan Kehoe <brendan@lisa.cygnus.com> + + * lib/g++.exp (g++_init): Also check for libg++.sl for the hppa. + For that, add `-Wl,-a,shared_archive'. + * g++.old-deja/old-deja.exp: Likewise. + +Tue Oct 17 13:09:06 1995 Doug Evans <dje@canuck.cygnus.com> + + * lib/c-torture.exp (c-torture-execute): Ensure CFLAGS restored. + +Mon Oct 16 23:13:32 1995 Brendan Kehoe <brendan@cygnus.com> + + * lib/mike-g++.exp (postbase): Pay attention to the status of + g++_load. + +Mon Oct 16 19:28:32 1995 Brendan Kehoe <brendan@lisa.cygnus.com> + + * g++.old-deja/old-deja.exp: Add $LIBS at the end of the args. + +Mon Oct 16 13:48:58 1995 Doug Evans <dje@canuck.cygnus.com> + + * lib/gcc.exp (default_gcc_start): No longer need to log program + being executed or its output, execute_anywhere does that now. + * lib/g++.exp (default_g++_version): Call execute_anywhere. + (default_g++_start): Likewise. Delete calls to verbose/send_log. + +Thu Oct 12 10:34:58 1995 Brendan Kehoe <brendan@lisa.cygnus.com> + + * g++.old-deja/old-deja.exp: Updated the shared libg++ tests to be + the same as those in lib/g++.exp. + +Tue Oct 10 13:47:27 1995 Jeff Law (law@hurl.cygnus.com) + + * gcc.c-torture: Update to c-torture-1.38 release. + * gcc.ieee: Related changes. + +Fri Oct 6 12:39:17 1995 Rob Savoye <rob@darkstar.cygnus.com> + + * mike-gcc.exp, mike-g++.exp: Use "execute_anywhere" rather than + "exec". Minor reformatting changes. + + * config/rom68k.exp (${tool}_load): Make it work in a canadian + cross. This means all "exec" calls now work on a remote host as + well. + * lib/c-torture.exp (c-torture-compile): Make work for a canadian + cross. Filter out the extra "\r\n" stuff that expect puts in. + (c-torture-execute): Filter out the bogus warnings like + c-torture-compile does. Add support for canadian cross. + * lib/gcc.exp (default_gcc_version, default_gcc_start) + Use execute_anywhere rather than calling exec directly. Now it + works for canadian cross testing. + +Thu Oct 5 10:06:45 1995 Brendan Kehoe <brendan@rtl.cygnus.com> + + * lib/g++.exp: Add -nocomplain flag to glob. Use catch to put the + results into a variable, and check that rather than using file exists. + +Wed Oct 4 16:31:02 1995 Brendan Kehoe <brendan@lisa.cygnus.com> + + * lib/g++.exp: Use glob to see libg++.so.2.7.0, since sun4 doesn't + create a libg++.so. For sunos4.1.*, also add -ltermcap. + +Tue Sep 26 10:15:14 1995 Brendan Kehoe <brendan@lisa.cygnus.com> + + * g++.old-deja/old-deja.exp: Create and pass runshlib and + lib_curses if there's a shared libg++ in the build tree. + +Fri Sep 22 10:47:24 1995 Doug Evans <dje@canuck.cygnus.com> + + * lib/mike-{gcc,g++}.exp (postbase): Restore CFLAGS, CXX_FLAGS, LIBS + if not supported target. + +Fri Sep 22 09:22:07 1995 Brendan Kehoe <brendan@lisa.cygnus.com> + + * lib/g++.exp (g++_init): Move empty setting of runshlib and + link_curses up to always happen, not just for native builds. + +Thu Sep 21 10:23:32 1995 Jeff Law (law@snake.cs.utah.edu) + + * gcc.c-torture: Update to c-torture-1.36 release. + * gcc.failure: Related changes. + +Wed Sep 20 10:56:26 1995 Doug Evans <dje@canuck.cygnus.com> + + * lib/plumhall.exp (PHSRC, PHDST): Allow config files to override. + +Tue Sep 19 17:26:07 1995 Brendan Kehoe <brendan@lisa.cygnus.com> + + * lib/g++.exp (g++_init): Put the shared and math lib stuff in here. + * lib/mike-g++.exp (postbase): Not in here. Still reference + runshlib, link_curses, and mathlib for link and run. + + * lib/mike-g++.exp (postbase): If we've built a libg++.so, then + pass the runtime shared library options for Solaris, OSF/1, and + Irix5, and link with -lcurses to avoid unresolved references. + +Wed Sep 13 15:28:10 1995 Brendan Kehoe <brendan@lisa.cygnus.com> + + * lib/gcc.exp (gcc_init): Return if gcc_initialized is 1, so we + only run once. + +Wed Sep 13 10:51:52 1995 Doug Evans <dje@canuck.cygnus.com> + + * lib/c-torture.exp (c-torture-compile): Don't alter CFLAGS. + +Mon Sep 11 11:02:03 1995 Jeff Law (law@snake.cs.utah.edu) + + * gcc.c-torture: Update to c-torture-1.35 release. Note we + do not have a framework for the "compat" tests yet. + +Sat Sep 9 16:15:20 1995 Brendan Kehoe <brendan@lisa.cygnus.com> + + * lib/mike-g++.exp (postbase): New local variable `mathlib', + set to null if we're testing vxworks5.1. Use that instead of + `-lm' in the setting of LIBS for link and run. + +Fri Sep 8 13:53:38 1995 Brendan Kehoe <brendan@lisa.cygnus.com> + + * config/rom68k.exp (${tool}_load): Major changes to make it + work. Verified that it does in fact return the stuff in + exec_output properly. Catch any Emul or any TRAP other than 0. + +Thu Sep 7 23:04:06 1995 Brendan Kehoe <brendan@lisa.cygnus.com> + + * lib/mike-g++.exp (prebase): Call g++_init at the end to set + LDFLAGS properly for targets that need stuff from libgloss. + * lib/g++.exp (g++_init): Return if gpp_initialized is 1, so we + only run once. + (gpp_initialized): New variable. + +Wed Sep 6 21:56:13 1995 Rob Savoye <rob@darkstar.cygnus.com> + + * config/rom68k.exp: Load libgloss.exp. + * lib/gcc.exp (gcc_init): get proper flags for newlib and libgloss + so we can produce a fully linked binary. + * lib/g++.exp (g++_init): get proper flags for newlib and libgloss + so we can produce a fully linked binary. + +Sun Sep 3 13:25:26 1995 Doug Evans <dje@canuck.cygnus.com> + + * lib/plumhall.exp (ph_section): Watch for expected failures. + Add missing `else'. + + * lib/c-torture.exp (c-torture-execute): Look for .cexp files to + run the testcase. + (c-torture): Likewise. + +Mon Aug 28 11:23:38 1995 Doug Evans <dje@cygnus.com> + + * gcc.dg/dg.exp (scan-assembler, scan-assembler-not): New procs. + + * lib/mike-g++.exp (mike_cleanup): New proc. + (prebase): New globals compiler_result, not_compiler_result, + target_regexp. + (postbase): Likewise. Call mike_cleanup. Pass "--" to regexp to + allow leading "-" in pattern. Watch for unsupported tests. + If $compiler_result is set, pattern match assembler code, + and ditto for $not_compiler_result. + * lib/mike-gcc.exp: Likewise. + + * lib/plumhall.exp (ph_execute): Only call ph_summary if + execution "succeeded". + +Mon Aug 14 14:03:53 1995 Doug Evans <dje@canuck.cygnus.com> + + * config/win32.exp: New file. + * lib/c-torture.exp (c-torture-execute): Handle $exe_ext. + +Fri Aug 4 15:39:54 1995 Doug Evans <dje@canuck.cygnus.com> + + * lib/gcc-dg.exp (gcc-dg-prune): Mark testcases that fill ram as + unsupported. + * lib/mike-{gcc,g++}.exp (postbase): Likewise. + * lib/{c-torture.exp,old-dejagnu.exp}: Likewise. + * lib/{gcc,g++}.exp (${tool}_check_untested_p): New proc. + + * lib/mike-g++.exp (postbase): Delete alpha-*-* checking of + "... without exceptions was ...". That is now handled by + prune_system_crud. + * lib/old-dejagnu.exp (old-dejagnu): Likewise. + +Tue Aug 1 11:09:33 1995 Doug Evans <dje@canuck.cygnus.com> + + * gcc.misc-tests/{acker1.c,dhry.c,dhry.h,matrix1.c,optbench.c, + sieve.c,sort2.c}: New files. + * gcc.misc-tests/{acker1.exp,dhry.exp,matrix1.exp,optbench.exp, + sieve.exp,sort2.exp}: Drivers for them. + + * lib/mike-gcc.exp (program_output): New user settable variable. + (postbase): Call prune_system_crud. Also prune extraneous compiler + messages. + * lib/mike-g++.exp (program_output): New user settable variable. + + * gcc.misc-tests/mg.exp (compiler_output): Handle multiple lines. + + * config/sh.exp: Deleted (use sim.exp instead). + +Fri Jul 28 11:33:46 1995 Brendan Kehoe <brendan@lisa.cygnus.com> + + * config/vx.exp: Declare CHECKTASK as global. + * config/vxworks29k.exp: Reduce to only set CHECKTASK, and load vx.exp. + * lib/mike-g++.exp: Load [pwd]/a.out, not `./a.out'. + * lib/old-dejagnu.exp: Load [pwd]/$executable. + +Wed Jul 26 19:45:39 1995 Brendan Kehoe <brendan@lisa.cygnus.com> + + * config/vxworks29k.exp: New file, for the a29k-vxworks5.1 + target. Like vx.exp, only includes `vx29k.exp' instead of + `vxworks.exp'. + +Sun Jul 23 17:38:52 1995 Ian Lance Taylor <ian@cygnus.com> + + * config/sim.exp: Increase time limit from 120 seconds to 240. + +Thu Jul 6 11:07:38 1995 Jeffrey A. Law <law@rtl.cygnus.com> + + * gcc.c-torture/execute/950628-1.c: New test. + +Sat Jun 10 18:51:41 1995 Jeff Law (law@snake.cs.utah.edu) + + * gcc.c-torture: Update with changes/additions from + c-torture-1.34. + +Mon Jun 5 17:58:07 1995 Doug Evans <dje@canuck.cygnus.com> + + * gcc.prms/prms.exp: Pass LDFLAGS to dg-test. + +Sun Jun 4 05:13:57 1995 Jeff Law (law@snake.cs.utah.edu) + + * gcc.c-torture/compile/funcptr-1.c: Test case for 7107. + +Thu Jun 1 00:06:19 1995 Jeff Law (law@snake.cs.utah.edu) + + * gcc.c-torture/compile/950512-1.c: New test. + * gcc.c-torture/execute/strct-pack-4.c, strct-pack-5.c}: Likewise. + * gcc.dg/struct-ret-1.c: Likewise. + +Wed May 31 14:25:13 1995 Doug Evans <dje@canuck.cygnus.com> + + * gcc.c-torture/execute/{920410-1.c,921113-1.c,921208-2.c, + 930106-1.c,memcpy-1.c}: Use STACK_SIZE if defined. + +Tue May 30 11:19:54 1995 Doug Evans <dje@canuck.cygnus.com> + + * gcc.c-torture/special/920411-1.c: Deleted. + * gcc.c-torture/special/special.exp: Delete 920411-1.c. + +Mon May 22 16:55:11 1995 Doug Evans <dje@chestnut.cygnus.com> + + * config/sim.exp (${tool}_load): Hack in call to bash to get a + cpu limit. + +Fri May 12 18:57:54 1995 Torbjorn Granlund <tege@rtl.cygnus.com> + + * gcc.c-torture/execute/{950511-1.c,950512-1.c}: New tests. + +Thu May 4 14:23:54 1995 Torbjorn Granlund <tege@adder.cygnus.com> + + From kenner; + * gcc.c-torture/execute/va-arg-2.c (f[0-9], f1[0-5]): Verify format + is the proper length. + * va-arg-3.c: Likewise. + +Sun Apr 30 16:02:59 1995 Doug Evans <dje@canuck.cygnus.com> + + * lib/dg.exp: Moved to dejagnu/lib. Copy kept here (for awhile). + * lib/gcc-dg.exp: New file, gcc interface to dg.exp. + + * lib/gcc.exp (default_gcc_start): Delete old cruft. Delete result. + * lib/g++.exp (default_g++_start): Delete old cruft. + +Tue Apr 25 17:20:18 1995 Torbjorn Granlund <tege@cygnus.com> + + * gcc.c-torture/execute/memcpy-1.c: Decrease stack requirements from + (2 * (1 << 18)) to (2 * (1 << 17)). + + * gcc.c-torture/execute/arith-rand.c: Avoid -0x80000000/-1. + +Thu Apr 20 12:21:13 1995 J.T. Conklin <jtc@rtl.cygnus.com> + + * config/rom68k.exp: Renamed from config/idp.exp + +Tue Apr 18 13:33:26 1995 Torbjorn Granlund <tege@rtl.cygnus.com> + + * c-torture/compile/921109-2.c + +Tue Apr 18 10:45:12 1995 Mike Stump <mrs@cygnus.com> + + * lib/old-dejagnu.exp: We expect Execution test failure if we expected + excess errors. + +Sat Apr 15 11:16:58 1995 Doug Evans <dje@chestnut.cygnus.com> + + * lib/gcc.exp (default_gcc_start): Handle leading "-" in compiler + output. + * lib/g++.exp (default_g++_start): Likewise. + +Wed Mar 29 16:34:03 1995 Torbjorn Granlund <tege@adder.cygnus.com> + + * gcc.c-torture/compile/950329-1.c: New test. + +Tue Mar 28 16:10:33 1995 J.T. Conklin <jtc@rtl.cygnus.com> + + * config/bug.exp (${tool}_load): Updated to use new remote_open + and remote_close procs. + * config/idp.exp: New file. + +Wed Mar 22 15:01:58 1995 Torbjorn Granlund <tege@rtl.cygnus.com> + + * gcc.c-torture/execute/950322-1.c: New test. + +Tue Mar 21 21:24:49 1995 Doug Evans <dje@canuck.cygnus.com> + + * config/vx.exp (${tool}_load): Clean up testing of return code from + vxworks_ld and vxworks_spawn. + +Tue Mar 21 17:01:42 1995 Doug Evans <dje@deneb.cygnus.com> + + * lib/c-torture.exp (c-torture-execute): Pass same text to pass/fail. + +Mon Mar 13 14:49:42 1995 Mike Stump <mrs@cygnus.com> + + * lib/old-deja.exp: Add `excess errors test - ' error, now one + can mark excess errors on a machine by machine basis. Note, the + default is to not expect any excess errors, even when excess + errors test - is given, so you will want to put an XFAIL ... on + these lines. For example, // excess errors test - XFAIL hppa*-*-* + mips-*-* alpha-*-* m68k-*-* is how to expect excess errors on + those 4 machines, but no others. + +Fri Mar 10 12:33:04 1995 J.T. Conklin <jtc@rtl.cygnus.com> + + * gcc.c-torture/execute/execute.exp (c-torture-execute): from here. + * lib/c-torture.exp: to here. + +Fri Mar 10 10:38:15 1995 Torbjorn Granlund <tege@adder.cygnus.com> + + * gcc.c-torture/execute/950221-1.c: New test. + * gcc.c-torture/execute/struct-ret-1.c: New test. + * gcc.c-torture/compile/950221-1.c: New test. + + * gcc.c-torture/execute/941101-1.c (f): Fix typo, == was !=. + +Fri Mar 3 16:28:35 1995 Doug Evans <dje@canuck.cygnus.com> + + * gcc.c-torture/execute/arith-1.c (main): Return 0. + * gcc.c-torture/execute/arith-rand.c (main): Return 0. + +Wed Mar 1 02:08:29 1995 Gerald Baumgartner (gb@lorenzo.cs.purdue.edu) + + * g++.gb: New directory of tests, derived from my signature and + class scoping tests. + + * g++.gb/{sig01.C, sig02.C, sig03.C, sig04.C}: New tests. + * g++.gb/{sig05.C, sig06.C, sig07.C, sig08.C}: Likewise. + * g++.gb/{sig09.C, sig10.C, sig11.C, sig12.C}: Likewise. + * g++.gb/{sig13.C, sig14.C, sig15.C, sig16.C}: Likewise. + * g++.gb/{sig17.C, sig18.C, sig19.C, sig20.C}: Likewise. + * g++.gb/{sig21.C, sig22.C, sig23.C, sig24.C}: Likewise. + * g++.gb/sig25.C: Likewise. + + * g++.gb/{sig01.exp, sig02.exp, sig03.exp, sig04.exp}: Run them. + * g++.gb/{sig05.exp, sig06.exp, sig07.exp, sig08.exp}: Likewise. + * g++.gb/{sig09.exp, sig10.exp, sig11.exp, sig12.exp}: Likewise. + * g++.gb/{sig13.exp, sig14.exp, sig15.exp, sig16.exp}: Likewise. + * g++.gb/{sig17.exp, sig18.exp, sig19.exp, sig20.exp}: Likewise. + * g++.gb/{sig21.exp, sig22.exp, sig23.exp, sig24.exp}: Likewise. + * g++.gb/sig25.exp: Likewise. + + * g++.gb/{scope01.C, scope02.C, scope03.C, scope04.C}: New tests. + * g++.gb/{scope05.C, scope06.C, scope07.C, scope08.C}: Likewise. + * g++.gb/{scope09.C, scope10.C, scope11.C, scope12.C}: Likewise. + * g++.gb/scope13.C: Likewise, this test still fails. + + * g++.gb/{scope01.exp, scope02.exp, scope03.exp, scope04.exp}: Run 'em. + * g++.gb/{scope05.exp, scope06.exp, scope07.exp, scope08.exp}: Ditto. + * g++.gb/{scope09.exp, scope10.exp, scope11.exp, scope12.exp}: Ditto. + * g++.gb/scope13.exp: Ditto. + + * g++.gb/README: New file, explains what these tests are about. + +Tue Feb 28 10:37:52 1995 Doug Evans <dje@canuck.cygnus.com> + + * lib/dg.exp (dg-do): Support `preprocess'. + (dg-test): Likewise. + +Mon Feb 13 15:18:10 1995 J.T. Conklin <jtc@rtl.cygnus.com> + + * config/udi.exp: change "continue -expect" to "exp_continue". + +Sat Feb 11 00:25:20 1995 Torbjorn Granlund (tege@tiny.cygnus.com) + + * gcc.c-torture/execute/{921025-1.c, 930525-1.c}: + Delete redundant tests. + + * gcc.c-torture/execute/{941014-1.c, 941014-2.c}: New tests. + * gcc.c-torture/execute/{941015-1.c, 941021-1.c}: New tests. + * gcc.c-torture/execute/{941025-1.c, 941031-1.c}: New tests. + * gcc.c-torture/execute/{941101-1.c, 941110-1.c}: New tests. + * gcc.c-torture/execute/{941202-1.c, arith-1.c}: New tests. + * gcc.c-torture/execute/{arith-rand.c, complex-3.c}: New tests. + * gcc.c-torture/execute/{inst-check.c, loop-1.c}: New tests. + * gcc.c-torture/execute/{memcpy-1.c, va-arg-2.c}: New tests. + + * gcc.c-torture/execute/920302-1.c: Use void * instead of long for + storing label pointers. + * gcc.c-torture/execute/921019-1.c: Likewise. + * gcc.c-torture/execute/920501-8.c: Add prototype for sprintf. + * gcc.c-torture/execute/930513-1.c: Provide full declaration for + parameter fp. + * gcc.c-torture/execute/va-arg-1.c (main): Add L suffix to all + constants. + + * gcc.c-torture/compile/{920501-14.c, 931127-1.c}: + Delete obsolete tests. + + * gcc.c-torture/compile/{940409-1.c, 940718-1.c}: New tests. + * gcc.c-torture/compile/{941014-1.c, 941014-2.c}: New tests. + * gcc.c-torture/compile/{941014-3.c, 941014-4.c}: New tests. + * gcc.c-torture/compile/{941019-1.c, 941111-1.c}: New tests. + * gcc.c-torture/compile/{941113-1.c, 950122-1.c}: New tests. + * gcc.c-torture/compile/950124-1.c: New test. + + * gcc.c-torture/compile/920902-1.c: Delete 2:nd parameter. + +Wed Feb 8 15:30:17 1995 Jason Merrill <jason@phydeaux.cygnus.com> + + * lib/mike-g++.exp: Add -lm to LIBS. + +Tue Feb 7 17:09:50 1995 Doug Evans <dje@canuck.cygnus.com> + + * lib/c-torture.exp (c-torture): Allow relative pathname in $srcdir. + +Mon Jan 30 14:33:25 1995 Jason Merrill <jason@phydeaux.cygnus.com> + + * lib/mike-g++.exp: Add -lstdc++ to LIBS. + +Thu Jan 12 16:41:34 1995 Doug Evans <dje@canuck.cygnus.com> + + * gcc.misc-tests/dg-test.exp: Only run if $DG_TEST=yes. + +Mon Jan 2 11:50:10 1995 Jeff Law (law@snake.cs.utah.edu) + + * g++.law/{arg9.C, arg10.C, arg11.C, arm15.C, arm16.C}: New tests. + * g++.law/{bad-error3.C, bad-error4.C, bad-error5.C}: Likewise. + * g++.law/{bad-error6.C, bad-error7.C}: Likewise. + * g++.law/{bit-fields3.C, casts2.C, casts3.C}: Likewise. + * g++.law/{enum8.C, enum9.C, friend5.C}: Likewise. + * g++.law/{nest2.C, nest3.C, nest4.C, nest5.C}: Likewise. + * g++.law/{nest6.C, next7.C, operators30.C}: Likewise. + * g++.law/{operators31.C, operators32.C, + * g++.law/{operators33.C, operators34.C}: Likewise. + * g++.law/{pic1.C, refs2.C}: Likewise. + * g++.law/{refs3.C, refs4.C, static-mem3.C}: Likewise. + * g++.law/{static-mem4.C, static-mem5.C, typeck4.C}: Likewise. + * g++.law/{vbase1.C, visibility27.C, visibility28.C}: Likewise. + * g++.law/{vtable2.exp, vtable3.exp}: Likewise. + + * g++.law/{arg9.exp, arg10.exp, arg11.exp, arm15.exp}: Run them. + * g++.law/{arm16.exp, bad-error3.exp, bad-error4.exp: Likewise. + * g++.law/{bad-error5.exp, bad-error6.exp}: Likewise. + * g++.law/{bad-error7.exp, bit-fields3.exp}: Likewise. + * g++.law/{casts2.exp, casts3.exp, enum8.exp}: Likewise. + * g++.law/{enum9.exp, friend5.exp}: Likewise. + * g++.law/{nest3.exp, nest4.exp}: Likewise. + * g++.law/{nest5.exp, nest6.exp, nest7.exp}: Likewise. + * g++.law/{operators30.exp, operators31.exp}: Likewise. + * g++.law/{operators32.exp, operators33.exp}: Likewise. + * g++.law/{operators34.exp}: Likewise. + * g++.law/{pic1.exp, refs2.exp, refs3.exp refs4.exp}: Likewise. + * g++.law/{static-mem3.exp, static-mem4.exp}: Likewise. + * g++.law/{static-mem5.exp, typeck4.exp, vbase1.exp}: Likewise. + * g++.law/{visibility27.exp, visibility28.exp}: Likewise. + * g++.law/{vtable2.exp, vtable3.exp}: Likewise. + + * g++.law/{union4.exp, visibility17.exp}: Fix expected output. + No longer expected to fail. + * g++.law/missed-error3.C: Tweak for recent bool changes. + +Sun Dec 4 20:54:33 1994 Doug Evans <dje@canuck.cygnus.com> + + * config/emb-unix: Deleted. + * config/unix.exp (${tool}_load): Use new proc rsh_exec to perform + remote execution. Do final link on remote host if REMOTE_LINK is set. + +Thu Dec 1 08:43:05 1994 Doug Evans <dje@canuck.cygnus.com> + + * lib/dg.exp (dg-test): Fix typo in last patch. + +Wed Nov 30 13:25:32 1994 Doug Evans <dje@canuck.cygnus.com> + + * lib/dg.exp (dg-test): Fix pattern that searches for expected output + (handles multiple occurrences). + +Thu Nov 24 19:48:38 1994 Doug Evans <dje@canuck.cygnus.com> + + * gcc.c-torture/*/*.exp: Pass full pathname to c-torture. + * gcc.c-torture/execute/execute.exp (c-torture-execute): Remove + $srcdir from pathname in pass/fail messages (but ensure $subdir *is* + printed). + * lib/c-torture.exp (c-torture-compile): Likewise. + (c-torture): Prepend full path if missing. + * lib/gcc.exp (gcc_pass): Pass entire pathname of testcase. + (gcc_fail): Likewise. + * lib/dg.exp (dg-test): Don't delete $subdir from pathname in messages. + +Wed Nov 23 13:56:00 1994 J.T. Conklin <jtc@rtl.cygnus.com> + + * lib/netware.exp: Only attach to NetWare i386 systems. + +Wed Nov 16 11:27:00 1994 Doug Evans <dje@canuck.cygnus.com> + + * lib/dg.exp (dg-test): Don't print $subdir (or above) in pass/fail + messages. Add test name to "output pattern match" pass/fail message. + +Sat Nov 12 22:11:52 1994 Doug Evans <dje@canuck.cygnus.com> + + * gcc.dg: New testsuite. + * gcc.dg/dg.exp: New file. + + * gcc.misc-tests/{misc.exp,inst-check.c,test-ior.c,test-consts.c, + test-switch.c}: Deleted. + + * gcc.misc-tests/msgs.exp: New testcase driver. + +Wed Nov 9 14:23:09 1994 Doug Evans <dje@canuck.cygnus.com> + + * gcc.c-torture/execute/execute.exp (c-torture_execute): New proc. + Watch for illegal return values from ${tool}_load. + * config/unix.exp (${tool}_load): Fix pass/fail detection for + cross targets. Coerce return value >0 to 1. + +Tue Nov 8 14:10:33 1994 Doug Evans <dje@canuck.cygnus.com> + + * config/unix.exp (${tool}_load): Call program rsh, not proc. + + * config/emb-unix.exp: New file. + + * config/sim.exp: Error if variable $SIM not defined. + (${tool}_load): Mark test as "untested" if simulator missing. + + * config/unix.exp: Load remote.exp to get rcp_download. + * lib/c-torture.exp: Use different option lists for testcases with + and without loops. + * gcc.c-torture/execute/execute.exp: Likewise. + +Wed Nov 2 14:47:58 1994 Doug Evans <dje@canuck.cygnus.com> + + * config/*.exp: Clarify return code from ${tool}_load. + Call `unresolved' or `untested' instead of `warning' or `perror' + (sometimes you still want to call both though). + Add comment that `shell_id' is local to each file. + * config/udi.exp (timeout): Set to 30. + Don't print warning if connection fails, $connectmode has already + printed an error. + (${tool}_load): Move verbose messages to level 2. + Rework pattern for "Process started" message. + Pass `shell_id' to ${connectmode}_download. + Retry twice upon timeout. Make resetting of target more robust. + (${tool}_exit): Remove /tmp/soc_name. if connected ok (bug in mondfe). + Pass `shell_id' to exit_$connectmode. + Only call exit_$connectmode if connected. + * config/unix.exp (${tool}_load): Check return codes better. + * config/vrtx.exp (${tool}_load): Likewise. + * config/vx.exp (${tool}_load): Likewise. + Delete unneeded global's. + * lib/dg.exp (dg-test): Update to reflect clarified return codes + from ${tool}_load. + (dg-stat): Delete. + (dg-init): Delete recording of pass/fail counts. + * lib/old-dejagnu.exp (old-dejagnu): Likewise. + (old-dejagnu-init): Likewise. + (old-dejagnu-stat): Delete contents, empty proc now. + * lib/c-torture.exp (TORTURE_OPTIONS): New global. + (c-torture): Delete references to lcnt, lpass, lfail. + Get option list from TORTURE_OPTIONS. + Delete -funroll[-all]-loops if no loops. + * lib/g++.exp (g++_init): Delete references to lcnt, lpass, lfail. + (g++_stat): Delete contents (empty proc now). + * lib/gcc.exp (gcc_init): Delete references to pass/fail counts. + (gcc_finish): Likewise. + (gcc_stat): Deleted. + * lib/mike-gcc.exp (postbase): Delete references to lcnt, lpass, lfail. + * gcc.*/*.exp: Delete calls to gcc_stat, dg-stat. + * gcc.c-torture/execute/execute.exp: Likewise. + Split tests into two parts: compile, execute. + Get option list from TORTURE_OPTIONS. Delete -funroll[-all]-loops if + no loops. Update to reflect clarified return codes from ${tool}_load. + +Fri Oct 21 23:10:16 1994 Doug Evans <dje@canuck.cygnus.com> + + * lib/old-dejagnu.exp (process-option): Append ".*" to pattern + to grep for. + (old-dejagnu): Likewise (where necessary). + +Fri Oct 14 17:54:58 1994 Doug Evans <dje@canuck.cygnus.com> + + * gcc.misc-tests/gcov.exp: New file, for gcov testing. + + * lib/dg.exp (dg-process-target): Fix processing of selector. + Add comment regarding use of `error'. + + * lib/gcc.exp (prune_system_crud): Define if missing. + * lib/g++.exp (prune_system_crud): Likewise. + + * lib/{c-torture.exp,dg.exp,mike-g++.exp,old-dejagnu.exp}: + Call prune_system_crud. + * lib/dg.exp (dg-runtest): New proc. + Use perror instead of send_user for tcl errors in testcase. + Don't return any value, it's never used. + Don't clobber previous definition of `unknown'. + Print tcl errors in `dg-final'. + +Wed Oct 12 13:05:37 1994 Doug Evans <dje@canuck.cygnus.com> + + * lib/dg.exp (dg-process-target): Improve syntax error messages. + (dg-test): Don't print errorInfo, it contains stack backtrace. + +Mon Sep 26 12:18:53 1994 Doug Evans (dje@canuck.cygnus.com) + + * lib/g++.exp (runtest_file_p): Define if missing. + +Sat Sep 24 15:29:23 1994 Doug Evans (dje@cygnus.com) + + * lib/mike-g++.exp: Comment out loading of g++.exp. + * lib/g++.exp: Update copyright. Test for existence of $CXX at start. + (default_g++_version): Always print something. + (default_g++_start): Comment out call to `which'. + (g++_start, g++_load): Deleted (must be defined in config file). + * lib/gcc.exp: Test for existence of $CC at start. + Delete check for tmpdir (done in gcc_init). + (default_gcc_version): Always print something. + (default_gcc_start): Comment out call to `which'. + * config/*.exp: Major cleanup - make cross targets work at least a + little better for g++ (by not being "--tool gcc" specific). + Rename gcc_xxx to ${tool}_xxx. + * g++.old-deja/old-deja.exp: utils.exp is loaded by runtest.exp. + * lib/old-dejagnu.exp: ${tool}.exp is loaded by config file. + +Thu Sep 22 11:39:17 1994 Doug Evans (dje@canuck.cygnus.com) + + * lib/c-torture.exp (c-torture-compile): Rework compiler + message processing. + + * gcc.c-torture/compile/initbug1.{c,exp}: Deleted, not part of + c-torture. + +Wed Sep 21 09:49:43 1994 Doug Evans (dje@canuck.cygnus.com) + + * gcc.wendy/wendy.dis: Renamed from wendy.exp to disable the testsuite. + + * lib/dg.exp (dg-process-target): Support { target native }. + +Tue Sep 20 17:16:55 1994 Doug Evans (dje@canuck.cygnus.com) + + * lib/dg.exp (dg-test): Clean up some comments. Delete code that + looked for "... program xxx got fatal signal". + Correct regsub munging of `comp_output'. + Ignore compiler messages "path prefix not used" and "linker input + file unused". + +Wed Sep 14 11:44:40 1994 Doug Evans (dje@canuck.cygnus.com) + + * lib/gcc.exp (runtest_file_p): Define if missing. + * gcc.prms/template.c: Example to work from. + +Tue Sep 13 10:30:48 1994 Doug Evans (dje@canuck.cygnus.com) + + * lib/gcc.exp (gcc_finish): Delete code to update `testcnt'. + * lib/dg.exp (dg-test): Call unsupported testcases as such. + + * gcc.prms/{3324.c,3565.c}: Moved from compile/940713-[12].c. + * gcc.prms/1883.c: Moved from compile/940714-1.c. + * gcc.prms/{5012.c,4453.c,4723.c,2541.c}: Moved from + execute/{940712-1.c,940712-2.c,940713-1.c,940714-1,c}. + + * lib/dg.exp (user option docs): Clean up docs on target/xfail option. + (dg-process-target): No longer a varargs proc. + Return S/N for target, P/F for xfail. All callers changed. + (user option procs): More argument checking. + (dg-do): `dg-do-what' now contains 3 elements {what flag P/F}. + (dg-output): `dg-output-text' now contains 2 elements {P/F text}. + (dg-test): Skip test if not running on selected target in `dg-do'. + Update handling of `dg-do-what', `dg-output-text'. + Separate execution pass/fail from output pattern match pass/fail. + Delete BUILD/XBUILD support (duplicate of LOSE/XLOSE). + +Mon Sep 12 13:47:35 1994 Jim Wilson (wilson@sphagnum.cygnus.com) + + * gcc.c-torture/special/special.exp: Don't expect failure for mips + target for 920510-1.c. + +Mon Sep 12 12:44:39 1994 Doug Evans (dje@canuck.cygnus.com) + + * lib/gcc.exp (gcc_init): Move initialized message to verbose level 3. + Clean up comment regarding use of passcnt, etc. + (gcc_stat): Don't update `testcnt' here. + (gcc_finish): Do it here. + Might as well reset `but_id' here too. + * gcc.c-torture/code_quality/code_quality.exp: Call `runtest_file_p' + to determine if the file should be tested. + * gcc.c-torture/compile/compile.exp: Likewise. + * gcc.c-torture/execute/execute.exp: Likewise. + * gcc.c-torture/unsorted/unsorted.exp: Likewise. + * gcc.misc-tests/dg-test.exp: Likewise. + * gcc.prms/prms.exp: Likewise. + * gcc.wendy/wendy.exp: Likewise. + * g++.old-deja.exp: Likewise. + Move "Testing file" message to verbose level 1. + +Fri Sep 9 10:21:18 1994 Doug Evans (dje@canuck.cygnus.com) + + * gcc.wendy/t.c: Add DEJAGNU_CFLAGS:"-DNOPAUSE". + +Thu Sep 8 16:52:43 1994 Doug Evans (dje@canuck.cygnus.com) + + * lib/gcc.exp: Ensure CFLAGS, LIBS, and LDFLAGS are set. + (default_gcc_start): Accept optional second list element + of compiler flags. Print compiler output at verbosity level 2. + Remove setting of CFLAGS, LIBS, LDFLAGS from here. + (gcc_init): Delete globals lcnt, lpass, lfail, lxpass, lxfail. + Save current values of framework globals passcnt, failcnt, xpasscnt, + and xfailcnt in gcc_passcnt, gcc_failcnt, gcc_xpasscnt, and + gcc_xfailcnt. Set global `tmpdir' to /tmp if it doesn't exist. + (gcc_stat): Use framework globals passcnt, failcnt, xpasscnt, and + xfailcnt to compute stats. Update framework global `testcnt' from + pass/fail counts. + (gcc_finish): New proc. Clean up test environment. + (gcc_cpass, gcc_cfail): Rename to gcc_pass/gcc_fail. + (gcc_epass, gcc_efail): Delete. + * lib/dg.exp (dg-error, dg-warning, dg-bogus): Accept optional 5th + argument of line number. + (dg-init): If the tool has an init routine, call it. + (dg-test): Remove args `cflags_var' and `libs_var'. + Pass all compiler options to ${tool}_start. + Handle missing line number. + (dg-finish): New function. + * gcc.c-torture/code_quality/code_quality.exp: Add support for testing + particular files. Call gcc_finish at end. Move "skipping test" + message to verbosity level 3. + * gcc.c-torture/compile/compile.exp: Likewise. + * gcc.c-torture/unsorted/unsorted.exp: Likewise. + * gcc.c-torture/execute/execute.exp: Likewise. + Delete setting of prms_id, bug_id, lcnt, lfail, lpass. + Print testcase being tried at verbosity level 1. + * gcc.c-torture/special/special.exp: Unset xfail. + Delete setting of prms_id, bug_id, lcnt, lfail, lpass. + * gcc.c-torture/compile/initbug1.exp: Call gcc_finish. + * gcc.c-torture/noncompile/noncompile.exp: Likewise. + * gcc.failure/failure.exp: Likewise. + * gcc.ieee/ieee.exp: Likewise. + * gcc.misc-tests/dg-test.exp: Delete LDFLAGS. + Update call to dg-test. Call dg-finish at end. + * gcc.misc-tests/mg.exp: Call gcc_finish at end. Unset orig_flags. + Delete setting of prms_id, bug_id, lcnt, lfail, lpass. + * gcc.misc-tests/misc.exp: Call gcc_finish at end. + * gcc.prms/prms.exp: Delete loading of utils.exp (redundant). + Delete LDFLAGS. Update call to dg-test. Call dg-finish at end. + * gcc.wendy/wendy.exp: Add copyright. + Delete setting of tmpdir (done by gcc_init). + Call gcc_pass/gcc_fail instead of gcc_[ce]pass/fail. + Pass compiler flags to gcc_start. Call gcc_finish at end. + * lib/c-torture.exp: Call gcc_pass/gcc_fail instead of + gcc_[ce]pass/fail. + +Wed Sep 7 11:09:08 1994 Doug Evans (dje@canuck.cygnus.com) + + * lib/g++.exp (g++_start): Rename arg to `prog' to avoid varargs + confusion. + (g++_load): Likewise. + + * config/*.exp (gcc_load): Some were varargs fns and some were not. + Rename argument to `prog' to remove the confusion. + Varargs fns behave differently too! + (g++_load): Likewise. + + * lib/dg.exp (dg-stat): Correct calculation of npass, nfail. + + * config/unix.exp (gcc_load): Rename `args' to `prog' because that's + what it is. Delete (always) printing of status value for !native. + Simplify verbose code, and include status and exec_output. + (g++_load): Use gcc_load. + +Sun Sep 4 13:59:27 1994 Jim Wilson (wilson@sphagnum.cygnus.com) + + * gcc.c-torture/noncompile/920928-1.c: Delete obsolete file. + * gcc.c-torture/noncompile/noncompile.exp: Delete support for + 920928-1.c, 921017-1.c, 940712-1.c, 940714-1.c, 940714-2.c, + 940714-3.c as these testcases don't exist anymore. Make + va-arg-1.c expected to pass. + +Fri Aug 19 12:27:07 1994 Doug Evans (dje@canuck.cygnus.com) + + * gcc.misc-tests/misc.exp: Only run specific testcases. + * gcc.misc-tests/dg-test.exp: New file. Tests dg.exp. + * gcc.misc-tests/dg-[1-9].c: New files. + + * lib/dg.exp: New testsuite driver. + * gcc.prms/prms.exp: Use it. + + * README.gcc: New file. + + * lib/gcc.exp (gcc_init): Delete srcdir, no longer referenced. + Document and reset `lxpass' and `lxfail'. + Simplify "initialized" message. + (gcc_stat): Clean up comments a little. + +Tue Aug 16 11:16:46 1994 Doug Evans (dje@canuck.cygnus.com) + + * gcc.prms/prms.exp: New driver for gcc.prms testsuite directory. + +Mon Aug 15 21:20:36 1994 Doug Evans (dje@canuck.cygnus.com) + + * lib/old-dejagnu.exp (process-option): New proc. + (old-dejagnu-init, old-dejagnu-stat): Likewise. + (old-dejagnu): Simplify. + * g++.old-deja/old-deja.exp: Update to new version of old-dejagnu. + +Sun Aug 14 09:23:53 1994 Jeff Law (law@snake.cs.utah.edu) + + * lib/c-torture.exp (c-torture): Only call setup_xfail if $xfail + exists and is not an empty string. + + * gcc.c-torture/special/special.exp (920520-1.c, 930510-1): Set + $xfail rather than calling setup_xfail. Clear $xfail when test is + finished. + (920717-x.c): Add $srcdir/$subdir as "gcc_start" does not do it + automatically. + + * gcc.c-torture/noncompile/noncompile.exp (940712-1 test): No + longer expected to fail. + + * gcc.c-torture/execute/strct-pack-3.c: Add missing argument to + "f" function call. + + * gcc.misc-tests/mg.exp: Call gcc_stat when finished. + + * gcc.c-torture/execute/{920202-1.c, 931208-1.c, 931228-1.c, + 940115-1.c, 940122-1.c, bf-pack-1.c, bf64-1.c, comp-goto-1.c, + complex-2.c, packed-1.c, strct-pack-2.c strct-pack-3.c, + struct-ini-2.c, struct-ini-3.c, va-arg-1.c}: Import from + c-torture-1.29. + + * gcc.c-torture/execute/{nest-stdar-1.c, struct-ini-1.c, + strct-pack-1.c, strct-varg-1.c}: Renamed to match c-torture-1.29. + + * gcc.c-torture/execute/920612-2.c: Update to c-torture-1.29. + + * gcc.c-torture/noncompile/{931203-1.c, 940112-1.c, 940227-1.c, + 940510-1.c, init-1.c, init-2.c}: Import from c-torture-1.29 + + * gcc.c-torture/compile/{920928-6.c, 931203-1.c, 940611-1.c, + 940712-1.c, calls.c, combine-hang.c, goto-1.c, init-2.c, + labels-1.c, packed-1.c, zero-strct-1.c}: Import from c-torture-1.29. + +Tue Jul 12 12:49:44 1994 Jim Kingdon (kingdon@lioth.cygnus.com) + + * gcc.execute/{940712-1.c, 940712-2.c, 940713-1.c, 940714-1.c}, + gcc.noncompile/{940712-1.h, 940712-1a.h, 940712-1b.h, 940712-1.c, + 940714-1.c, 940714-2.c, 940714-3.c}, + gcc.compile/{940713-1.c, 940713-2.c, 940714-1.c}, + gcc.misc-tests/{mg.c,mg.exp}: + New tests. + * gcc.noncompile/noncompile.exp: Change accordingly. + +Thu Jul 7 14:20:33 1994 Doug Evans (dje@canuck.cygnus.com) + + * config/sim.exp, lib/c-torture.exp, lib/gcc.exp: + Undo previous clobberage. + +Mon Jul 4 17:00:59 1994 Jeff Law (law@snake.cs.utah.edu) + + * gcc.compile/{931102-1.c, 931102-2.c, 931031-1.c}: + * gcc.special/{930510-1.c, special.exp}: + * gcc.execute/{931031-1.c, 931110-1.c, 931110-2.c, 931102-1.c, + 931102-2.c, struct-pack-1.c, divmod-1.c, complex-1.c, + struct-varargs-1.c}: New tests from c-torture-1.26. + +Tue Jun 28 17:39:42 1994 J.T. Conklin (jtc@phishhead.cygnus.com) + + * gcc.wendy/wendy.exp: add --'s so that -1 isn't parsed as an + argument to switch. + +Sat May 21 10:39:38 1994 Bill Cox (bill@rtl.cygnus.com) + + * Revert the previous changes. Please see Rob's directory + (/lisa/test/rob/progressive/gcc/testsuite) for testing + fixes. + +Thu May 19 18:00:03 1994 Bill Cox (bill@rtl.cygnus.com) + + * config/sim.exp, config/udi.exp, config/unix.exp, config/vx.exp, + g++.brendan/alignof.exp, g++.brendan/arm3.exp, g++.brendan/code-gen5.exp, + g++.brendan/crash29.exp, g++.brendan/crash5.exp, g++.brendan/cvt3.exp, + g++.brendan/delete1.exp, g++.brendan/nest12.exp, g++.brendan/nest13.exp, + g++.brendan/overload3.exp, g++.brendan/redecl1.exp, g++.brendan/visibility2.exp, + g++.jason/cond.exp, g++.jason/hmc1.exp, g++.jason/report.exp, + g++.law/access1.exp, g++.law/access2.exp, g++.law/arg6.exp, + g++.law/arg7.exp, g++.law/arg8.exp, g++.law/arm1.exp, + g++.law/arm10.exp, g++.law/arm4.exp, g++.law/arm5.exp, + g++.law/ctors15.exp, g++.law/ctors19.exp, g++.law/cvt1.exp, + g++.law/cvt12.exp, g++.law/cvt13.exp, g++.law/cvt18.exp, + g++.law/cvt22.exp, g++.law/cvt3.exp, g++.law/cvt5.exp, + g++.law/cvt6.exp, g++.law/cvt8.exp, g++.law/dtors3.exp, + g++.law/except1.exp, g++.law/except3.exp, g++.law/except4.exp, + g++.law/except5.exp, g++.law/except6.exp, g++.law/init5.exp, + g++.law/init8.exp, g++.law/inline4.exp, g++.law/memoized1.exp, + g++.law/missing1.exp, g++.law/operators14.exp, g++.law/operators18.exp, + g++.law/operators9.exp, g++.law/scope2.exp, g++.law/temps2.exp, + g++.law/temps3.exp, g++.law/temps5.exp, g++.law/typeck2.exp, + g++.mike/misc4.exp, g++.mike/misc6.exp, g++.niklas/t118.exp, + g++.niklas/t128.exp, g++.niklas/t138.exp, g++.niklas/t139.exp, + g++.niklas/t140.exp, g++.niklas/t141.exp, gcc.code_quality/code_quality.exp, + gcc.compile/compile.exp, gcc.dje/dje.exp, gcc.execute/execute.exp, + gcc.failure/failure.exp, gcc.ieee/ieee.exp, gcc.noncompile/noncompile.exp, + gcc.special/special.exp, gcc.unsorted/unsorted.exp, lib/c-torture.exp, + lib/chill.exp, lib/g++.exp, lib/gcc.exp, lib/mike-g++.exp, lib/mike-gcc.exp, + lib/old-dejagnu.exp: Checkin Rob's 94Q1 testing changes. + +Tue May 17 14:55:09 1994 Bill Cox (bill@rtl.cygnus.com) + + * config/udi.exp, gcc.execute/execute.exp, gcc.wendy/wendy.exp, + lib/g++.exp, lib/old-dejagnu.exp: Replace error proc calls + with perror calls. + +Mon May 2 17:41:13 1994 Jason Merrill (jason@deneb.cygnus.com) + + * config/unix.exp (g++_load): Fix syntax. + +Thu Apr 14 12:22:10 1994 Jim Wilson (wilson@sphagnum.cygnus.com) + + * gcc.compile/initbug1.exp (CFLAGS): Add space at beginning. + * gcc.noncompile/921017-1.c: Deleted obsolete test. + * gcc.noncompile/noncompile.exp: Remove code for deleted test. + Don't expect va-arg-1.c to fail. Correct expected output for + 920928-1.c. + * gcc.wendy/d.c, msgs.c, prolog.c, subs.c, z.c: Deleted. + * gcc.wendy/hbm4.c: Correct typo. + * gcc.wendy/tad1.c, tad2.c: Correct expected output. + +Mon Mar 28 13:29:37 1994 Doug Evans (dje@canuck.cygnus.com) + + * lib/gcc.exp (gcc_[ce]{pass,fail}): Remove output/executable argument. + * gcc.wendy/wendy.exp (wendy_try): Remove `output' argument of + gcc_[ce]{pass,fail}. Explicitly remove executable if test passes. + * lib/c-torture.exp (c-torture-compile): Ditto. + + Reduce volume of output (remove all the -I's and such). + * lib/c-torture.exp (c-torture-compile): New argument OPTION. + Call gcc_cpass, gcc_cfail. + (c-torture): Pass testing option to c-torture-compile. + +Mon Mar 21 12:40:33 1994 Doug Evans (dje@cygnus.com) + + Bring patches over from progressive. + * config/default.exp: Exit remote shell cleanly. + (g++_exit, g++_start): Add default versions. + * config/sim.exp (gcc_load): Use perror, not error. + +Sun Mar 20 12:05:32 1994 Doug Evans (dje@canuck.cygnus.com) + + * lib/gcc.exp: Don't set CFLAGS if CC not set. It clobbers the value + set in site.exp. + +Mon Mar 14 19:30:28 1994 Doug Evans (dje@cygnus.com) + + * gcc.wendy/wendy.exp (wendy_first_line): New proc to fetch + DEJAGNU_OUTPUT and DEJAGNU_CFLAGS. + (wendy_try): New proc to run testcase. + (main loop): Call 'em. + * gcc.wendy/*.c: Clean up pass to correct expected output. + + * lib/gcc.exp: Minor cleanup work. + (gcc_cpass, gcc_cfail, gcc_epass, gcc_efail): New procs. + +Wed Mar 9 15:22:54 1994 Doug Evans (dje@canuck.cygnus.com) + + * config/sim.exp (gcc_load): Document return codes better. + Don't pass -v to simulator. + +Thu Feb 24 07:15:18 1994 Jeffrey A. Law (law@snake.cs.utah.edu) + + * gcc.special/920717-x.c: Fix typo. + * gcc.special/special.exp (920717-x.c): Use $srcdir/$subdir to + get at sources. + + * lib/mike-gcc.exp: Fix typo. + +Tue Feb 15 15:41:47 1994 Rob Savoye (rob@darkstar.cygnus.com) + + * lib/gcc.exp: Minor cleanup work. Find the proper gcc or g++ + binary to use, transform the name. + * config/*.exp: rename everything. Nuke any g++ specific files, + it's now a special case of gcc that requires no special support. + Add a default.exp for unsupported targets. + +Fri Feb 11 12:59:54 1994 Rob Savoye (rob@poseidon.cygnus.com) + + * g++.jason/report.exp, g++.old-deja/old-deja.exp, + lib/old-dejagnu.exp: Fix a few patterns to work with the new + version of Tcl. + +Wed Feb 9 21:35:47 1994 Rob Savoye (rob@darkstar.cygnus.com) + + * lib/c-torture.exp: Made "file prefix*never used a pass, rather + than a warning. + +Sun Feb 6 16:52:13 1994 Jeffrey A. Law (law@snake.cs.utah.edu) + + * lib/mike-gcc.exp: Add in recent changes from mike-g++.exp. + +Mon Jan 3 17:28:25 1994 Jim Wilson (wilson@sphagnum.cygnus.com) + + * gcc.execute/execute.exp: Combine opt_list and foption_list into + option_list. Compile every file with only 4/6 option choices + (same as C torture) instead of with 12/18 different option + choices. + * lib/c-torture.exp: Likewise. + + * lib/gcc.exp: Set LIBS, CFLAGS, and LDFLAGS to empty strings if + not already set. + +Thu Dec 30 17:17:07 1993 Mike Stump (mrs@rtl.cygnus.com) + + * lib/old-deja.exp: Add `excess errors test fails' error, now one + can put an XFAIL *-*-* on excess errors. + +Sun Dec 19 21:45:34 1993 Jeffrey A. Law (law@snake.cs.utah.edu + + * g++.law: Add more tests derived from g++-bugs snapshots. + + * g++.law/init11.{c,exp}: Delete test. Brendan sez it's + equivalent to g++.law/init9. + + * lib/mike-gcc.exp (postbase): Delete the .o file after we've + compiled it, and the a.out file after we've run it. + +Fri Dec 17 11:29:56 1993 Brendan Kehoe (brendan@lisa.cygnus.com) + + * lib/mike-g++.exp (postbase): Delete the .o file after we've + compiled it, and the a.out file after we've run it. + +Fri Dec 17 10:18:16 1993 Jeffrey A. Law (law@snake.cs.utah.edu) + + * g++.law/*.exp: Avoid losing arguments added via "append" commands. + +Wed Dec 15 20:36:40 1993 Rob Savoye (rob@darkstar.cygnus.com) + + * lib/gcc.exp, lib/g++.exp: Use catch rather than exec to get the + version number. + +Sun Dec 12 21:10:04 1993 Jeffrey A. Law (law@snake.cs.utah.edu) + + * g++.law: New directory of g++ tests derived from the g++-bugs + snapshots. + +Thu Dec 09 16:50:41 1993 Jeffrey Wheat (cassidy@cygnus.com) + + * gcc.compile: initbug1.c initbug1.exp testcase added + +Mon Dec 06 11:09:52 1993 Jeffrey Wheat (cassidy@cygnus.com) + + * gcc.dje/sizetype-1.exp, dje.exp: minor clean ups + * gcc.execute/execute.exp: minor cleanups. added gcc_stat calls. added + fixes submitted by Jeff Law (law@cs.utah.edu) + * gcc.noncompile/noncompile.exp, lib/mike-gcc.exp: new files from + Jeff Law (law@cs.utah.edu) + + +Tue Nov 30 16:34:07 1993 Mike Stump (mrs@cygnus.com) + + * config/unix-g++.exp: Follow the gcc way of doing things. + * g++.old-deja/old-deja.exp: Minor updates. + * lib/g++.exp: New file, follow the gcc way of doing things. + * lib/old-dejagnu.exp: Minor updates. + * lib/mike-g++.exp: Always unset errorInfo. + +Sat Nov 6 11:34:51 1993 Mike Stump (mrs@cygnus.com) + + * lib/gcc.exp: Fix some errors with the below change, CC and + CFLAGS should be global when setting, not local. + +Wed Nov 3 11:16:26 1993 Rob Savoye (rob@darkstar.cygnus.com) + + * lib/gcc.exp: Transform tool name. + +Wed Oct 27 23:57:29 1993 Jeffrey Wheat (cassidy@cygnus.com) + + * gcc.*/*.exp: Fixd some de-stablizing changes. Sorry. + +Wed Oct 27 14:45:50 1993 Jeffrey Wheat (cassidy@cygnus.com) + + * lib/gcc.exp: change gcc_done to gcc_stat + +Wed Oct 27 09:57:51 1993 Jeffrey Wheat (cassidy@cygnus.com) + + * Upgraded gcc testsuite to c-torture version 1.25 + +Sun Oct 24 10:58:03 1993 Jeffrey Wheat (cassidy@cygnus.com) + + * lib/gcc.exp: added reporting code. Changed verbose compile message. + * lib/c-torture: added hooks for new reporting code. + +Thu Oct 21 18:45:32 1993 Jeffrey Wheat (cassidy@cygnus.com) + + * config/sh-gcc.exp: check if sh-sim exists in the path + +Mon Oct 18 11:13:22 1993 Jeffrey Wheat (cassidy@cygnus.com) + + * gcc.code_quality/code_quality.exp: Initial changes for new logic. + * gcc.compile/compile.exp: Initial changes for new logic. + * gcc.dje/dje.exp, sizetype-1.exp: Initial changes for new logic. + * gcc.failure/failure.exp: Initial changes for new logic. + * gcc.ieee/ieee.exp: Initial changes for new logic. + * gcc.misc-tests/misc.exp: Initial changes for new logic. + * gcc.noncompile/non_compile.exp: Initial changes for new logic. + * gcc.unsorted/unsorted.exp: Initial changes for new logic. + * lib/c-torture.exp: Initial changes for new logic. + * lib/gcc.exp: Initial changes for new logic. + +Fri Oct 15 00:19:42 1993 Mike Stump (mrs@cygnus.com) + + * lib/mike-g++.exp, lib/old-dejagnu.exp: Make the message not + depend upon failure or success. Fully qualify names in failure + and success messages. Always remove a.out before starting + compile, just in case. Pay more attention to error text output by + the compiler. Handle testcases with no known past errors just + like all others, so that things are uniform. Other miscellaneous + improvements. + +Wed Oct 13 15:04:51 1993 Jeffrey Wheat (cassidy@cygnus.com) + + * gcc.cpp: new directory for cpp tests + +Mon Oct 4 09:03:41 1993 Jeffrey Wheat (cassidy@cygnus.com) + + * lib/chill.exp: Code reformatted, removed unused code. + * config/unix-chill.exp: Code reformatted, removed unused code. + * chill.execute/execute.exp: Code reformatted, removed unused code. + * chill.execute/oe/orient.exp: Code reformatted, removed unused code. + +Mon Oct 4 06:19:26 1993 Ian Lance Taylor (ian@cygnus.com) + + * config/mips-gcc.exp, config/mips-g++.exp: New files. Execution + routines not written. + +Mon Sep 27 21:07:44 1993 Rob Savoye (rob@darkstar.cygnus.com) + + * config/bug-gcc.exp: Use new procs from bug.exp. + +Tue Sep 21 18:21:12 1993 Rob Savoye (rob@darkstar.cygnus.com) + + * config/vx-gcc.exp: Use new vxworks_ld proc, so files get loaded + via ftp, rather than depending on NFS. + * config/vx-gcc.exp: Use new vxworks_spawn proc to execute test + case. + +Thu Sep 9 23:09:15 1993 Rob Savoye (rob@darkstar.cygnus.com) + + * config/bug-gcc.exp: Use new download proc. + +Tue Sep 14 19:23:58 1993 Jeffrey Wheat (cassidy at deneb.cygnus.com) + + * chill.execute/execute.exp: cleanups, handles errors better + * chill.compile/compile.exp: rewrite, based on execute.exp + * chill.noncompile/noncompile.exp: rewrite, based on execute.exp + * lib/chill.exp: major changes to diff proc and compile and link + procs. added chill_fail and chill_pass wrappers to pass and + fail. added more comments, and handle error codes better. + Added a hack to capture stderr from exec, so noncompile tests + can work. + +Sat Sep 11 15:30:10 1993 Jeffrey Wheat (cassidy@cygnus.com) + + * chill.execute/execute.exp: rewrite of testsuite driver + * lib/chill.exp: rewrite of testsuite driver + * config/unix-chill.exp: rewrite of testsuite driver + +Wed Aug 25 14:11:13 1993 Bill Cox (bill@rtl.cygnus.com) + + In chill.execute: + * iexpr.ch: Standardize uppercase. + * tuples.dat: Standardize uppercase. + * vary.ch: standardize. Correct varying string assignments. + * vary.dat: Add new output lines. + +Tue Aug 24 13:45:49 1993 Bill Cox (bill@rtl.cygnus.com) + + In chill.execute: + * chprintf.ch: Standardize use of uppercase. + * tuples.ch: Standardize and turn arr2 into a DCL, + rather than a SYN. + * pinits.ch: Standardize. + +Mon Aug 23 17:26:58 1993 Per Bothner (bothner@kalessin.cygnus.com) + + * rts.c: Get malloc() from <stdlib.h>, not <malloc.h>. + * Makefil: Renamed to Makefile.in. + * configure.in: New. + +Mon Aug 23 14:24:13 1993 Bill Cox (bill@rtl.cygnus.com) + + In chill.execute: + * .cvsignore: Add result/output files. + * Makefile: Fix up variables at start. Use MFLAGS + everywhere. Correct bool_loc, built_ins entries. + Add entry for vary1.ch. + * bitarray.ch: Standardize upper-case usage. + * bitexpr.ch: Standardize, add output of b1. + * params.ch: Use arrayt in along PROC parameters, to + avoid novelty problems. + * sets.ch: Tiny cleanup. + * vary1.ch: Re-indent. + +Tue Aug 17 15:42:07 1993 Bill Cox (bill@rtl.cygnus.com) + + * Add PR-related files to Makefiles, .cvsignore files, etc. + +Mon Aug 2 15:46:05 PDT 1993 Jeff Wheat (cassidy@cygnus.com) + + * gcc.unsorted: flow.c and loop.c - renamed to avoid conflicts + with compiler objects. New names are test-flow.c and test-loop.c + +Tue Jul 27 10:08:08 PDT 1993 Jeff Wheat (cassidy@cygnus.com) + + * Upgraded c-torture tests from 1.19 to 1.20 + + * new files: + * gcc.compile: 930609-1.c 930611-1.c 930618-1.c 930621-1.c + * gcc.compile: 930623-1.c 930623-2.c + * gcc.noncompile: 930622-1.c 930622-2.c + * gcc.failure: 920411-1.c 920627-2.c + * gcc.ieee: 920518-1.c 920810-1.c 930529-1.c + +Tue Jul 20 15:19:44 PDT 1993 Jeff Wheat (cassidy@cygnus.com) + + * chill.compile/compile.exp chill.execute/execute.exp lib/chill.exp + More changes to get testsuite working properly. Needs more work. + Added some support for POSIX IEEE Std 1003.3-1991 error messages. + +Mon Jul 19 18:40:31 PDT 1993 Jeff Wheat (cassidy@cygnus.com) + + * chill.compile/compile.exp chill.execute/execute.exp lib/chill.exp + More changes to get testsuite working properly. Needs more work. + +Tue Jul 13 18:38:56 PDT 1993 Jeff Wheat (cassidy@cygnus.com) + + * chill.compile/compile.exp: Added for Dejagnu support + * chill.execute/execute.exp: Added for Dejagnu support + * lib/chill.exp config/unix-chill.exp : Added for Dejagnu support + +Sat Jun 19 07:13:05 1993 Bill Cox (bill@rtl.cygnus.com) + + This should complete moving the CHILL test files. + * chill.noncompile(.cvsignore printf.grt + in-printf.grt chprintf.grt chprintf.ch): + Added test-support files. + (Makefile): Modified further. + * chill.compile (emptymod.ch gdbme.ch neg_range.ch + signal.ch): Added test files. + * chill.execute (.cvsignore printf.grt printr.c + in-printf.grt rts.c chprintf.grt rts.h): Added + test-support files. + (Makefile): More corrections. + +Fri Jun 18 23:40:54 1993 Bill Cox (bill@rtl.cygnus.com) + + * chill.compile, chill.execute, chill.nocompile: Add CHILL + test cases, ready for DejaGnu. + +Thu Jun 17 19:14:40 MDT 1993 Jeffrey Wheat (cassidy@cygnus.com) + + * Upgraded c-torture tests from 1.18 to 1.19 + + * gcc.compile: added test(s): + 930607-1.c + * gcc.execute: added test(s): + 930603-1.c 930603-2.c 930603-3.c 930608-1.c conversion.c inst-check.c + + * added new subdirectory for misc tests: gcc.misc-tests + * gcc.misc-test(s): added tests: + inst-check.c test-consts.c test-ior.c test-switch.c + +Wed Jun 9 16:53:26 1993 Brendan Kehoe (brendan@lisa.cygnus.com) + + * lib/mike-g++.exp: Load `./a.out', not `a.out'. + +Mon Jun 7 16:18:40 1993 Ian Lance Taylor (ian@cygnus.com) + + * g++.old-deja/old-deja.exp: Don't delete all the .o files. + +Thu Jun 3 13:13:36 MDT 1993 Jeffrey Wheat (cassidy@cygnus.com) + + * Upgraded c-torture tests from 1.17 to 1.18 + +Wed Jun 2 19:02:40 MDT 1993 Jeffrey Wheat (cassidy@cygnus.com) + + * Upgraded c-torture tests from 1.12 to 1.17 + +Fri Apr 30 09:38:41 1993 Mike Werner (mtw@deneb.cygnus.com) + + * lib/old-dejagnu.exp: + Fixed handling of XFAIL target triplets to correctly + recognize wildcard characters. Removed code that + appended a unique id tag to the end of the file name + printed out by the result of the testcases within a + given test file. + +Thu Apr 29 19:06:29 1993 Mike Werner (mtw@deneb.cygnus.com) + + * lib/old-dejagnu.exp: + Reworked expected failure handling to trigger off of XFAIL + keyword in keyphrase embeded in testcase source code. The + XFAIL keyword must be at the end of the keyphrase line. It + may optionally be followed by one or more target triplets. + It has just occured that the handling of wildcards in the + target triplet may not be correct. + +Fri Apr 23 13:16:20 1993 Mike Werner (mtw@deneb.cygnus.com) + + * g++.old-deja/tests: + Moved all subdirectories up one level into g++.old-deja . + + * lib/old-dejagnu.exp: + Fixed problem with CXXFLAGS not being properly reset, and being + corrupted with extraneous "-c" compiler option. This was + causing binaries to not be generated for test that needed them. + Modified strings passed to "pass" and "fail" so that individual + tests from the same test file would be distinguished by an + identifier appended to the test file name in the summary logs; + this corrected a problem with erroneous diff logs. Added code + to search testcases for expected fail and unexpected pass keywords. + +Tue Apr 20 18:27:58 1993 Rob Savoye (rob at darkstar.cygnus.com) + + * lib/c-torture.exp: Ignore "file path prefix*unused" message. + +Thu Apr 15 11:01:59 1993 Mike Werner (mtw@deneb.cygnus.com) + + * g++.old-deja/tests/g++.sun/g++.frag/1045608.C: + Removed extraneous text from end of "Special g++ Options" + keyphrase. + + * lib/old-dejagnu.exp: Added pattern matching to look for new + keywords, embedded in testcases comments, which will trigger + calls to xpass and xfail. + +Wed Apr 14 14:28:01 1993 Mike Werner (mtw@deneb.cygnus.com) + + * lib/old-dejagnu.exp: Cleaned up pattern matching for keyphrase + comments embedded in the testcases, especially the one looking for + special compiler options, as well as the pattern matching for the + compiler output again. + +Mon Apr 12 15:15:37 1993 Mike Werner (mtw@deneb.cygnus.com) + + * lib/old-dejagnu.exp: Do a proper check of the return value for + execute tests. Fixed several problems with the pattern matching + of the compiler output which gave erroneous test results. + Changed several of the test result messages to be more descriptive. + * config/unix-g++.exp: Proc g++_load now actually works and + executes the tests passed to it and returns a usable return + value. + +Sun Apr 11 17:22:37 1993 Rob Savoye (rob at darkstar.cygnus.com) + + * lib/gcc.exp: Exits gracefully if $CC is bogus. + +Fri Apr 9 09:41:59 1993 Mike Werner (mtw@deneb.cygnus.com) + + * lib/old-dejagnu.exp , g++.old-deja/old-deja.exp: + Modified both files to properly execute the old style + dejagnu tests. The previous versions of these files were + experimental and did not function anything near correctly. + +Mon Apr 5 21:08:24 1993 Rob Savoye (rob@cygnus.com) + + * Removed all Makefile.in and configure.in files. No configuration + needed now. + +Fri Apr 2 12:15:17 1993 Mike Werner (mtw@deneb.cygnus.com) + + * lib: relocated old-dejagnu.exp from devo/dejagnu/lib + +Sun Mar 28 11:17:48 1993 Ken Raeburn (raeburn@kr-pc.cygnus.com) + + * gcc.compile/configure.in, gcc.unsorted/configure.in, + gcc.special/configure.in, gcc.noncompile/configure.in, + gcc.execute/configure.in, gcc.code_quality/configure.in, + g++.other/configure.in, g++.old-deja/configure.in, + g++.niklas/configure.in, g++.mike/configure.in: Remove extra quote + in srcname setting. + +Thu Mar 25 20:07:55 1993 Rob Savoye (rob at darkstar.cygnus.com) + + * lib/udi.exp: Fixed mondfe and mondfe_download. + * config/udi-gcc.exp: Fixed misc bugs, works with expect 4.x. + * config/abug-gcc.exp: Fixed misc bugs, works with expect 4.x. + +Thu Mar 25 13:06:41 1993 Ian Lance Taylor (ian@cygnus.com) + + * config/udi-gdb.exp: Check $shell_id after connecting to target. + (gdb_exit): Don't remove *_soc files. + +Mon Mar 22 14:28:46 1993 Ian Lance Taylor (ian@cygnus.com) + + * lib/c-torture.exp: Don't look for main; instead always use -w + -c. This is how the c-torture tests work. Remove the object + file if the compilation succeeds. + * gcc.execute/execute.exp: Remove executable if test passes. + * gcc.noncompile/noncompile.exp: Every test is an expected + failure. + * gcc.special/special.exp: Added tests from c-torture 1.11, + corrected use of existing test. + * gcc.execute/920302-1.c, gcc.execute/920501-8.c, + gcc.execute/920625-1.c: Updated to c-torture 1.11. + * gcc.compile/921103-1.c, gcc.compile/921109-1.c, + gcc.compile/921109-2.c, gcc.compile/921109-3.c, + gcc.compile/921111-1.c, gcc.compile/921116-2.c, + gcc.compile/921118-1.c, gcc.compile/921126-1.c, + gcc.compile/921202-1.c, gcc.compile/921202-2.c, + gcc.compile/921203-1.c, gcc.compile/921203-2.c, + gcc.compile/921206-1.c, gcc.execute/921029-1.c, + gcc.execute/921104-1.c, gcc.execute/921110-1.c, + gcc.execute/921112-1.c, gcc.execute/921113-1.c, + gcc.execute/921117-1.c, gcc.execute/921123-1.c, + gcc.execute/921123-2.c, gcc.execute/921124-1.c, + gcc.execute/921202-1.c, gcc.execute/921202-2.c, + gcc.execute/921204-1.c, gcc.execute/921207-1.c, + gcc.execute/921208-1.c, gcc.execute/921208-2.c, + gcc.execute/921215-1.c, gcc.execute/921218-1.c, + gcc.execute/921218-2.c, gcc.noncompile/921102-1.c, + gcc.noncompile/921116-1.c, gcc.unsorted/x.c: Added from + c-torture 1.11. + * gcc.noncompile/921021-1.c, gcc.unsorted/x11bug.c: Removed to + correspond to c-torture 1.11. + + * New file. + diff --git a/gcc/testsuite/README.g++ b/gcc/testsuite/README.g++ new file mode 100644 index 000000000000..833d5ed603bd --- /dev/null +++ b/gcc/testsuite/README.g++ @@ -0,0 +1,64 @@ +This file needs a little updating, but is pretty close. Here are some +random last minute notes: + +make check and make check-g++ aren't in FSF's gcc yet, I am planning +on getting this work into the tree some time... + +> and the command + +> runtest --tool g++ --srcdir ./testsuite + +> doesn't work. I got it to work by explicitly setting CXX and CXXFLAGS +> on the command line, e.g. + +> runtest --tool g++ --srcdir ./testsuite CXX=g++ CXXFLAGS="" + +site.exp updated to have right CXXFLAGS and CXX, but not at the FSF yet. + + + This is a collection of tests for g++, the FSF's C++ compiler. The +driver that runs the testsuite is called DejaGnu. If you do not have +DejaGnu yet, you will need to get it (ftp://ftp.cygnus.com/pub/dejagnu). +You will need a snapshot of DejaGnu of 02/21/97 or later. The tests +were developed and/or collected by Cygnus Support. These tests are +included "as is". If any of the tests fail, don't report a bug. Bug +reports for DejaGnu can go to bug-dejagnu@prep.ai.mit.edu. Discussion +and comments about this testsuite can be sent to me, at the address +below. + + Since these are part of the development source tree at Cygnus, this +tar file is supposed to be untarred so that the testsuite directory is +in the gcc source tree. Most of the time DejaGnu is run by hand using +"runtest", but as we believe in solid testing, we've integrated it +into the Makefile as a target. We normally use the testsuite by doing +a "make all; make check-g++" at the top level and building and testing +our whole tree. If you have both the gcc testsuite and the g++ +testsuite, you can check both with the "make check" command. + + DejaGnu can be run either installed, or uninstalled. Usually it gets +installed so that anyone can just run the tests without having to +configure or build DejaGnu. + + To run the tests, first change to the gcc-2.7.1 directory, then type: + + runtest --tool g++ --srcdir ./testsuite + +Here's a brief explanation. + +runtest - Is the name used to invoke DejaGnu. If DejaGnu is not + install this will be the relative path name for runtest. + +--tool - This tells DejaGnu which tool you are testing. It is + mainly used to find the testsuite directories for a + particular tool when several testsuites are in the + same directory. (like the gcc and g++ testsuites) + +--srcdir - This points to the top level of the directory + containing the sources of the testsuite. This is + ./testsuite if you are in the directory that has the + testsuite directory. + + + Mike Stump + mrs@cygnus.com + FSF C++ developer diff --git a/gcc/testsuite/README.gcc b/gcc/testsuite/README.gcc new file mode 100644 index 000000000000..742850585956 --- /dev/null +++ b/gcc/testsuite/README.gcc @@ -0,0 +1,71 @@ +This file contains a list of notes for those writing testcases and those +writing expect scripts. At present, they're in random order. + +Verbosity Levels + +- each level adds verbosity so level 2 prints all level 1 and level 2 stuff. + +1) Print a one-liner indicating the testcase being run (and maybe special + compiler options). + +2) Print compiler and program invocation including arguments and their output. + Proc's gcc_load and gcc_start handle the latter two. + +3) Print detailed testcase analysis like "Looking for pattern ...", etc. + +4) Maximum verbosity. Print anything else of interest. + +send_log conventions + +Various messages are stored in gcc.log by the testing framework and we +try to augment them with some of our own. The format of the framework +messages are: + +PASS: blah blah ... +FAIL: blah blah ... + +so we use + +XXXX: blah blah ... + +Current messages are: + +EXEC: program being executed (so compiler path and args are recorded) +STAT: intermediate pass/fail statistics + +DO NOT PUT NON-PORTABLE TESTCASES IN gcc.c-torture. + +ANY TARGET SPECIFIC TESTCASE MUST HAVE APPROPRIATE CODE TO PREVENT IT FROM +CAUSING A `FAILURE' ON UNSUPPORTED PLATFORMS. + +Test scripts must ignore the compiler messages "path prefix never used" +and "linker input file unused". Don't let their appearance cause a testcase +to fail. See lib/dg.exp for the exact regsub to use. + +If you're unclear about which directory a testcase should be installed in, +ask gcc-local. + +Always use abort() for runtime failures, and exit(0) for success. +The testing harness is set up to watch for these and do something appropriate +(when necessary) for target boards. + +Have the text of a fail message be the same as that for pass. +IE: have + + if ...success... + pass "pr 1234" + else + fail "pr 1234" + +not + + if ...success... + pass "pr 1234 passed" + else + fail "pr 1234 failed" + + +This lets test-tool (which drives the nightly tests) do a better job +at tracking which tests have digressed or been fixed. + +Add more notes here. \ No newline at end of file diff --git a/gcc/testsuite/config/default.exp b/gcc/testsuite/config/default.exp new file mode 100644 index 000000000000..9ae55bc6a769 --- /dev/null +++ b/gcc/testsuite/config/default.exp @@ -0,0 +1,20 @@ +# Copyright (C) 1997 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# Please email any bugs, comments, and/or additions to this file to: +# bug-gcc@prep.ai.mit.edu + +load_lib "standard.exp" diff --git a/gcc/testsuite/g++.old-deja/Makefile.in b/gcc/testsuite/g++.old-deja/Makefile.in new file mode 100644 index 000000000000..e6209dbc6c2d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/Makefile.in @@ -0,0 +1,12 @@ +#### host, target, and site specific Makefile frags come in here. + +srcdir = . + +# Nothing to do... +all: + +clean: + -rm -f *.o *.diff *~ *.bad core *.x + +distclean: clean + -rm -f Makefile config.status diff --git a/gcc/testsuite/g++.old-deja/configure.in b/gcc/testsuite/g++.old-deja/configure.in new file mode 100644 index 000000000000..c6cacc6757d1 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/configure.in @@ -0,0 +1,15 @@ +# This file is a shell script fragment that supplies the information +# necessary to tailor a template configure script into the configure +# script appropriate for this directory. For more information, check +# any existing configure script. + +srctrigger=old-deja.exp +srcname="DejaGnu" + +# per-host: + +# per-target: + +target_makefile_frag=../config/mt-${target_alias} + +# post-target: diff --git a/gcc/testsuite/g++.old-deja/g++.benjamin/.cvsignore b/gcc/testsuite/g++.old-deja/g++.benjamin/.cvsignore new file mode 100644 index 000000000000..7abff1dbead4 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.benjamin/.cvsignore @@ -0,0 +1,2 @@ +Makefile +config.status diff --git a/gcc/testsuite/g++.old-deja/g++.benjamin/p12475.C b/gcc/testsuite/g++.old-deja/g++.benjamin/p12475.C new file mode 100644 index 000000000000..fecbd576b799 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.benjamin/p12475.C @@ -0,0 +1,5 @@ +// Build don't link: +// prms-id: 12475 + +enum huh { start =-2147483648, next }; + diff --git a/gcc/testsuite/g++.old-deja/g++.bob/array1.C b/gcc/testsuite/g++.old-deja/g++.bob/array1.C new file mode 100644 index 000000000000..2e86f6ff1058 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bob/array1.C @@ -0,0 +1,6 @@ +// Build don't link: +char *stuff() { + char array[10]; // WARNING - + + return array; +} diff --git a/gcc/testsuite/g++.old-deja/g++.bob/array2.C b/gcc/testsuite/g++.old-deja/g++.bob/array2.C new file mode 100644 index 000000000000..8ddeba8c83d9 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bob/array2.C @@ -0,0 +1,4 @@ +// Build don't link: +extern const int a[]; +extern const int a[]; +extern const int a[]; diff --git a/gcc/testsuite/g++.old-deja/g++.bob/case1.C b/gcc/testsuite/g++.old-deja/g++.bob/case1.C new file mode 100644 index 000000000000..a8e5f7b76216 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bob/case1.C @@ -0,0 +1,13 @@ +// prms-id: 9028 +class Foo; + +int main() +{ + int i=0; + switch (i) + { + case ((Foo *)0): // ERROR - + case ((Foo *)1): // ERROR - + break; + } +} diff --git a/gcc/testsuite/g++.old-deja/g++.bob/cond1.C b/gcc/testsuite/g++.old-deja/g++.bob/cond1.C new file mode 100644 index 000000000000..d6f1165061a2 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bob/cond1.C @@ -0,0 +1,31 @@ +// Build don't link: +// prms-id: 9866 +class TChar + { +public: + explicit inline TChar(unsigned int aChar); + inline operator unsigned int() const; +private: + unsigned int iChar; + }; +inline TChar::TChar(unsigned int aChar) + : iChar(aChar) + {} +inline TChar::operator unsigned int() const + {return(iChar);} + +class TDes8 + { +public: + inline const unsigned char &operator[](int anIndex) const; + const unsigned char &AtC(int anIndex) const; + }; + +inline const unsigned char &TDes8::operator[](int anIndex) const + {return(AtC(anIndex));} + + +void doExponent(TDes8 &aDigBuf) + { + 2 ? TChar(aDigBuf[2]) : '0'; + } diff --git a/gcc/testsuite/g++.old-deja/g++.bob/delete1.C b/gcc/testsuite/g++.old-deja/g++.bob/delete1.C new file mode 100644 index 000000000000..d4fc3210d678 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bob/delete1.C @@ -0,0 +1,22 @@ +// prms-id: 7330 +#include <stddef.h> +int size = 0; + +struct X { + int x; + void *operator new[](size_t sz) { + size = sz; + return 0; + } + void operator delete[] (void *vp) { ::delete[] vp; } +}; +int main() +{ + X (*px) [10]; + + px = new X[5][10]; + + delete [] px; + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.bob/extern_C.C b/gcc/testsuite/g++.old-deja/g++.bob/extern_C.C new file mode 100644 index 000000000000..6b91adc36e36 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bob/extern_C.C @@ -0,0 +1,9 @@ +// Build don't link: +extern "C" { + class A { + public: + void a(); + }; +}; + +void A::a() {} diff --git a/gcc/testsuite/g++.old-deja/g++.bob/friend1.C b/gcc/testsuite/g++.old-deja/g++.bob/friend1.C new file mode 100644 index 000000000000..1782f08913ab --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bob/friend1.C @@ -0,0 +1,4 @@ +class C { +public: + static friend int f(); // ERROR - +}; diff --git a/gcc/testsuite/g++.old-deja/g++.bob/incomplete-cast1.C b/gcc/testsuite/g++.old-deja/g++.bob/incomplete-cast1.C new file mode 100644 index 000000000000..fb08c63e9c37 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bob/incomplete-cast1.C @@ -0,0 +1,16 @@ +// prms-id: 5274 +class VHDLIdentifier; + +class VHDLPackageProtoRep { +public: + int thing(); +private: + virtual VHDLIdentifier &actual_name() ; +}; +extern void form(const char *format, ... ); +int +VHDLPackageProtoRep::thing() +{ + form("package `%s'", (char *)actual_name()); // ERROR - can't convert from incomplete type + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.bob/inherit1.C b/gcc/testsuite/g++.old-deja/g++.bob/inherit1.C new file mode 100644 index 000000000000..4e77de34884a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bob/inherit1.C @@ -0,0 +1,25 @@ +// Build don't link: +class A { +char str[10]; +public: + char* m1 () { return str;}; +}; + +class C : public A { +public: +}; + +class B : public A { +public: + char* m1 () { C::m1(); return ""; } // ERROR - +}; + +main () { +A a; +B b; +C c; + +a.m1(); +c.m1(); +b.m1(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.bob/inherit2.C b/gcc/testsuite/g++.old-deja/g++.bob/inherit2.C new file mode 100644 index 000000000000..52d35b0462c5 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bob/inherit2.C @@ -0,0 +1,22 @@ +// Build don't link: +class A { +public: + void z(); + A(void) {} +private: + A(const A &) { abort(); } // ERROR - + const A& operator =(const A &) { abort(); } +}; + +class B : public A { +public: + B(void) {} +}; + +void f(B b) { +}; + +void g() { + B h; + f(h); // ERROR - +} diff --git a/gcc/testsuite/g++.old-deja/g++.bob/nested1.C b/gcc/testsuite/g++.old-deja/g++.bob/nested1.C new file mode 100644 index 000000000000..b5b7a762e0fc --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bob/nested1.C @@ -0,0 +1,15 @@ +// Build don't link: + class A { + class B { + typedef long T; + int i; + }; + }; + class C { + class B { + typedef float T; + int i; + }; + }; + +C::B::T a; diff --git a/gcc/testsuite/g++.old-deja/g++.bob/packed1.C b/gcc/testsuite/g++.old-deja/g++.bob/packed1.C new file mode 100644 index 000000000000..27ae03e4a05e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bob/packed1.C @@ -0,0 +1,16 @@ +main() { + struct s + { + int a; + short b; + } __attribute__((packed)) t; + + if (sizeof (t) != (sizeof(int)+sizeof(short))) + { + return 1; + } + else + { + return 0; + } +} diff --git a/gcc/testsuite/g++.old-deja/g++.bob/protected1.C b/gcc/testsuite/g++.old-deja/g++.bob/protected1.C new file mode 100644 index 000000000000..e83f3e40b733 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bob/protected1.C @@ -0,0 +1,41 @@ +// Build don't link: +class A { +public: + int i; + A(int j) : i(j){} +}; + +class B : protected A { +public: + B(int j) : A(j){} + void f(){ + A k(*this); + } +}; + +class C : protected B { +public: + C(int j) : B(j){} + void f(); + + void g(){ + A k(i); + } +}; + + +class D : public C { +public: + D(int w) : C(i) {} + void j() { A k(*this); } + void h() { i=3; } +}; + +void C::f() { + A k(*this); +} + +B b(3); +main() { + A *z = &b; // ERROR - +} diff --git a/gcc/testsuite/g++.old-deja/g++.bob/static1.C b/gcc/testsuite/g++.old-deja/g++.bob/static1.C new file mode 100644 index 000000000000..a8e6b88bd93a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bob/static1.C @@ -0,0 +1,12 @@ +// Build don't link: +class A { + public: + static int a; +}; + +class B : public A { + public: + static int b; +}; + +int B::a; // ERROR - diff --git a/gcc/testsuite/g++.old-deja/g++.bob/template1.C b/gcc/testsuite/g++.old-deja/g++.bob/template1.C new file mode 100644 index 000000000000..4a22f086130d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bob/template1.C @@ -0,0 +1,27 @@ +// Build don't link: +// prms-id: 10038 +template < class Referencee > +class Referencer +{ +public: + Referencer (Referencee const * pReferencee); +}; + +template <class T> +class Array +{ +public: + int addElement (T const & e); + int addElement (); +}; + +class ScenarioGroup; + +class ScenarioSet : public Array< Referencer<ScenarioGroup> > +{ + typedef Array< Referencer<ScenarioGroup> > arrayBase; + void addElement(ScenarioGroup *group) + { + arrayBase::addElement(group); + } +}; diff --git a/gcc/testsuite/g++.old-deja/g++.bob/template2.C b/gcc/testsuite/g++.old-deja/g++.bob/template2.C new file mode 100644 index 000000000000..5663da84be26 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bob/template2.C @@ -0,0 +1,49 @@ +// Build don't link: +// prms-id: 10046 +template <class T> +class Array +{ +public: + T const & operator[] (int i) const; +}; + +class Referenceable {}; + +template < class Referencee > +class Referencer +{ +public: + operator Referencee *() const { return i_referencee; } + +protected: + Referencee* i_referencee; +}; + +class ScenarioGroup {}; + +class ScenarioSpace; + +class ScenarioSet : public Referenceable, + public Array< Referencer<ScenarioGroup> > +{ +public: + ScenarioSet& operator=(ScenarioSet const & s); +}; + +class ScenarioSpace : public Referenceable, + public Array< Referencer<ScenarioSet> > +{ +}; + +class ScenarioSetNameSelector +{ +public: + bool operator () (ScenarioSpace &space) + { + int idx; + i_set = space[idx]; + return false; + } +private: + ScenarioSet *i_set; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.bob/template3.C b/gcc/testsuite/g++.old-deja/g++.bob/template3.C new file mode 100644 index 000000000000..17378425a26e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bob/template3.C @@ -0,0 +1,48 @@ +// Build don't link: +// prms-id: 9979 + +template < class Referencee > +class Referencer +{ +public: + Referencer() {} +}; + +template <class T> +class List +{ +public: + List() {} +}; + +template<class T, class KEY> +class Dictionary +{ +public: + Dictionary() : i_buckets (new List<T>[1234]) {} + ~Dictionary() { delete [] i_buckets; } + + List<T> * i_buckets; +}; + +class Exchangeable {}; +class ExchangeableHandle {}; + +class ExchangeableList + : public Dictionary<Referencer<Exchangeable>, ExchangeableHandle> +{ +public: + ExchangeableList(int size=0); +}; + +class ObjectExchange +{ +public: + ObjectExchange() {}; + + ExchangeableList i_theWatchList; // Instruments being monitored +}; + +main() +{ +} diff --git a/gcc/testsuite/g++.old-deja/g++.bob/template4.C b/gcc/testsuite/g++.old-deja/g++.bob/template4.C new file mode 100644 index 000000000000..8d86fa37ab67 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bob/template4.C @@ -0,0 +1,20 @@ +// prms-id: 10166 + +template <class A> +class B { + public: + int f() { + for(int x=0;x<10;x++) { + continue; + return 1; + } + return 0; + } + private: + A w; +}; + +main() { + B<int> c; + return c.f(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/README b/gcc/testsuite/g++.old-deja/g++.brendan/README new file mode 100644 index 000000000000..81119572caaa --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/README @@ -0,0 +1,41 @@ +Note: nest4 misses a syntax error + +abstract - abstract functions +alignof - gcc alignof builtin +ambiguity - diagnosing ambiguities +arm - ARM cases +array-refs - arrays of references +bit-fields - bit fields +chainon - deaths cuz we call chainon() incorrectly +copy - copy constructors +crash - old compiler crashes/aborts +cvt - user-defined conversions +def-fns - default function generation (in add'n to copy) +enum-clash - int vs enum +enum - enumerated types +err-msg - error messages +friend - dealing with friend functions and classes +groff - crashes derived from groff code +init - initialization bugs +label - handling labels +line - line numbers in error messages +misc - miscellaneous tests that didn't fit another category +nest - nested types +new-array - doing new of an array +new - generic operator new bugs +operators - tests for various overloaded operators +parse - parser bugs +prepost - prefix/postfix operator ++/-- +ptolemy - bugs derived from ptolemy +recurse - infinite recursion in the compiler +redecl - handling redeclarations +scope - managing scopes +shadow - shadowing of params, etc +sizeof - ARM compliance w/ sizeof operator +sorry - old "sorry, not implemented" messages +static - handling static data +template - template bugs +union - handling unions +visibility - access control and visibility checking +warnings - warning messages + diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/abstract1.C b/gcc/testsuite/g++.old-deja/g++.brendan/abstract1.C new file mode 100644 index 000000000000..b9cd9c5733b0 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/abstract1.C @@ -0,0 +1,25 @@ +// Build don't link: +// GROUPS passed abstract-functions +class O +{ +public: + virtual int c()=0; +}; + +class I: public O +{ +}; + +class S: public virtual I +{ +public: + int c(); + virtual int v()=0; +}; + +class D: public S +{ + int v(); +}; + +D *p=new D(); diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/access1.C b/gcc/testsuite/g++.old-deja/g++.brendan/access1.C new file mode 100644 index 000000000000..0272c7ae1a90 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/access1.C @@ -0,0 +1,23 @@ +// Build don't link: +// GROUPS passed access-control +class Base +{ +protected: + virtual void DoSomething() = 0; +}; + +class Fibber : public Base +{ +public: + void DoBP() { + DoSomething(); + } +}; + +class Flat : public virtual Fibber +{ +public: + void DoIt() { + DoSomething(); + } +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/alignof.C b/gcc/testsuite/g++.old-deja/g++.brendan/alignof.C new file mode 100644 index 000000000000..1449aded8260 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/alignof.C @@ -0,0 +1,13 @@ +// Build don't link: +// GROUPS passed extensions +struct bar { int bit : 1; }; + +void foo (int *r, bar t) +{ + // doing alignof on a bit-field should be illegal + __alignof__ (t.bit);// ERROR - .* + + // both of these (a regular ref and an INDIRECT_REF) should work + __alignof__ (r); + __alignof__ (*r); +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/ambiguity1.C b/gcc/testsuite/g++.old-deja/g++.brendan/ambiguity1.C new file mode 100644 index 000000000000..c6d6fcbd4ad3 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/ambiguity1.C @@ -0,0 +1,17 @@ +// Build don't link: +// GROUPS passed ambiguity +struct A { + A (int); +}; + +struct B { + B (int); +}; + +void myfunc (const A& t0); // ERROR - +void myfunc (const B& t0); // ERROR - + +int main () +{ + myfunc(1); // ERROR - ambiguous call +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/anon-union1.C b/gcc/testsuite/g++.old-deja/g++.brendan/anon-union1.C new file mode 100644 index 000000000000..86b7ce3fabcd --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/anon-union1.C @@ -0,0 +1,7 @@ +// Build don't link: +// GROUPS passed anonymous-unions +static union { + char* uC; +private: + int uI;// ERROR - .*private member.* +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/arm1.C b/gcc/testsuite/g++.old-deja/g++.brendan/arm1.C new file mode 100644 index 000000000000..74091f8cce5a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/arm1.C @@ -0,0 +1,10 @@ +// Build don't link: +// Special g++ Options: -pedantic-errors +// GROUPS passed ARM-compliance +// ARM $5.7, it's illegal to do math on a `void*'. + +main() +{ + void *p; + ++p;// ERROR - .* +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/arm2.C b/gcc/testsuite/g++.old-deja/g++.brendan/arm2.C new file mode 100644 index 000000000000..62bdc3d2a392 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/arm2.C @@ -0,0 +1,19 @@ +// Build don't link: +// GROUPS passed ARM-compliance +// ARM 9.4 ``There cannot be a static and a nonstatic member function +// with the same name and the same argument types.'' +// +// The trick is to make sure it's caught with both orders (static, +// then normal, and vice-versa. + +class X { +public: + int foo(); + static int foo(); // error: redeclaration// ERROR - .* +}; + +class Y { +public: + static int foo(); + int foo(); // error: redeclaration// ERROR - .* +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/arm3.C b/gcc/testsuite/g++.old-deja/g++.brendan/arm3.C new file mode 100644 index 000000000000..c352bfa57f03 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/arm3.C @@ -0,0 +1,9 @@ +// Build don't link: +// GROUPS passed initialization +// ARM $11.4: A function first declared in a friend decl is equivalent +// to an extern decl, so the below is illegal. + +class X { + friend g(); // ERROR - previous declaration +}; +static g() { return 1; }// ERROR - previously declared diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/array-refs.C b/gcc/testsuite/g++.old-deja/g++.brendan/array-refs.C new file mode 100644 index 000000000000..0eaa45c7f1df --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/array-refs.C @@ -0,0 +1,6 @@ +// Build don't link: +// GROUPS passed arm +int a, b; + +// declaring an array of references should be illegal +int & v[ 2] = { a, b};// ERROR - .* diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/array1.C b/gcc/testsuite/g++.old-deja/g++.brendan/array1.C new file mode 100644 index 000000000000..64924639f6f4 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/array1.C @@ -0,0 +1,7 @@ +// Build don't link: +// Special g++ Options: -fconserve-space -fcommon +// GROUPS passed array-bindings +// excess errors test - XFAIL sparc64-*-* +extern "C" void printf (char *, ...); +char array[(unsigned) 0x90000000];// ERROR - overflow in array dimension.* , XFAIL sparc64-*-* alpha*-*-* +int main () { printf ("PASS\n"); return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/asm-extn1.C b/gcc/testsuite/g++.old-deja/g++.brendan/asm-extn1.C new file mode 100644 index 000000000000..a388a61d9447 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/asm-extn1.C @@ -0,0 +1,14 @@ +// Build don't link: +// Special g++ Options: -S +// GROUPS passed asm-extension +// excess errors test - XFAIL a29k-*-* +// This used to crash because c_expand_asm_keyword didn't know what to +// do with this. The parser rules were changed to accept an expr, instead +// of a stmt. + +extern void traptable(void); + +main() +{ + asm("wr %0,%%tbr" : : "r" (traptable)); +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/bit-fields1.C b/gcc/testsuite/g++.old-deja/g++.brendan/bit-fields1.C new file mode 100644 index 000000000000..76f4ac33ac23 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/bit-fields1.C @@ -0,0 +1,5 @@ +// Build don't link: +// GROUPS passed bit-fields +struct bar { + int : 2 = 1;// ERROR - .* +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/bit-fields2.C b/gcc/testsuite/g++.old-deja/g++.brendan/bit-fields2.C new file mode 100644 index 000000000000..dae2726b89c6 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/bit-fields2.C @@ -0,0 +1,13 @@ +// Build don't link: +// GROUPS passed bit-fields + struct { + char c; + int i:8; + } s; + + main() + { + int &ir = s.i; + int *ip = &s.i;// ERROR - .* , XFAIL *-*-* + ir = 10; + } diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/bool1.C b/gcc/testsuite/g++.old-deja/g++.brendan/bool1.C new file mode 100644 index 000000000000..bab925521ce5 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/bool1.C @@ -0,0 +1,11 @@ +// Build don't link: +// GROUPS passed boolean +main() +{ + typedef char Boolean; // Instrinsic.h + Boolean c = false; + bool b = true; + + if (!c != !b) + ; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/code-gen1.C b/gcc/testsuite/g++.old-deja/g++.brendan/code-gen1.C new file mode 100644 index 000000000000..84dd634d9cff --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/code-gen1.C @@ -0,0 +1,40 @@ +// GROUPS passed code-generation +// Check that sub-word sized structs/classes are passed correctly +// if the struct/class has a constructor (i.e. ANY constructor). + +extern "C" void printf (char *, ...); + +struct base { + unsigned int f1 : 8; + unsigned int f2 : 8; + + base (int ii) + { + } +}; + +base global_base (7); + +int test2 (base formal_base); + +int main () +{ + global_base.f1 = 0x55; + global_base.f2 = 0xee; + + if (test2 (global_base) == 0) + printf ("PASS\n"); + else + printf ("FAIL\n"); + + return 0; +} + +int test2 (base formal_base) +{ + if (formal_base.f1 != global_base.f1) + return -1; + if (formal_base.f2 != global_base.f2) + return -1; + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/code-gen2.C b/gcc/testsuite/g++.old-deja/g++.brendan/code-gen2.C new file mode 100644 index 000000000000..133755e894db --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/code-gen2.C @@ -0,0 +1,18 @@ +// GROUPS passed code-generation +// Check that declarations with initializations are executed +// correctly. + +extern "C" void printf (char *, ...); + +int main () +{ + char buff[40] ; + char *tmp = &buff[0]; // also fails for char *tmp = buff; + + if ((unsigned int) tmp != (unsigned int) &buff[0]) + printf ("FAIL\n"); + else + printf ("PASS\n"); + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/code-gen3.C b/gcc/testsuite/g++.old-deja/g++.brendan/code-gen3.C new file mode 100644 index 000000000000..6d73bd2336e4 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/code-gen3.C @@ -0,0 +1,34 @@ +// GROUPS passed code-generation +// Check that passing things which are not a multiple of +// 4 bytes in size doesn't mess up other subsequent parameters. + +extern "C" void printf (char *, ...); + +struct base { + int f1 : 8; + int f2 : 8; +}; + +base global_base; + +int val1; + +int test2 (struct base formal_base, int v1); + +int main () +{ + val1 = 0x5e5e; + return test2 (global_base, val1); +} + +int test2 (struct base formal_base, int v1) +{ + formal_base.f1 = formal_base.f2; // prevent warnings + + if (v1 != 0x5e5e) + printf ("FAIL\n"); + else + printf ("PASS\n"); + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/code-gen4.C b/gcc/testsuite/g++.old-deja/g++.brendan/code-gen4.C new file mode 100644 index 000000000000..e29b16a2b09f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/code-gen4.C @@ -0,0 +1,31 @@ +// Special g++ Options: -O +// GROUPS passed code-generation +// Options: -O +// +// Check that when an int value is assigned to a short int, the proper +// half of the int (i.e. the low order half) ends up in the short. +// +// This fails with 1.32.0 with -O and f1() is inline. +// +// Workaround - declare "f1_arg" as type "short int". + +extern "C" void printf (char *, ...); + +short int v2; + +long v1 = 0x11117777; + +inline void f1 (long f1_arg) +{ + v2 = f1_arg; +} + +int main () +{ + f1 (v1); + + if (v2 != 0x00007777) + printf ("FAIL\n"); + else + printf ("PASS\n"); +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/code-gen5.C b/gcc/testsuite/g++.old-deja/g++.brendan/code-gen5.C new file mode 100644 index 000000000000..0d59b5685afb --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/code-gen5.C @@ -0,0 +1,57 @@ +// Special g++ Options: -fthis-is-variable +// GROUPS passed code-generation +// Check that the "this" pointer is zero when a method is +// called for an object pointed to by a null pointer. + +// Normally, the "__builtin_new" operation which actually +// allocates objects in heap space is *not* called at the +// actual point of the "new" keyword. Rather, a check is +// made within each constructor and if the "this" pointer +// value passed in is zero, then the actual allocation of +// memory (via __builtin_new) is done at that point (i.e. +// at the very beginning of the constructor). + +// A special trick allows one to subvert this mechanism. +// Specifically, if a given constructor contains a statement +// like: "this = this", then no attempt will be made to +// implicitly call __builtin_new within that constructor. + +extern "C" void printf (char *, ...); + +struct base { + int member; + + base (); + void member_function (); +}; + +base *base_pointer_1 = 0; +base *base_pointer_2 = 0; + +int errors = 0; + +int main () +{ + //base_pointer_2 = new base(); + base_pointer_1->member_function (); + + if (errors) + printf ("FAIL\n"); + else + printf ("PASS\n"); + + return 0; +} + +base::base () +{ + this = this; + if ((int) this != 0) + errors++; +} + +void base::member_function () +{ + if ((int) this != 0) + errors++; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/code-gen6.C b/gcc/testsuite/g++.old-deja/g++.brendan/code-gen6.C new file mode 100644 index 000000000000..ea5d730949d7 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/code-gen6.C @@ -0,0 +1,54 @@ +// GROUPS passed code-generation +// Check that type float parameters can be correctly passed to +// methods. + +extern "C" void printf (char *, ...); + +class tres_floats { + float ff1; + float ff2; + float ff3; +public: + tres_floats (float f1, float f2, float f3); + float get_f1 (); + float get_f2 (); + float get_f3 (); +}; + +float v1 = 1.2345; +float v2 = 3.14159; +float v3 = 0.707; + +int main () +{ + tres_floats tf (v1, v2, v3); + + if ((tf.get_f1() != v1) || (tf.get_f2() != v2) || (tf.get_f3() != v3)) + printf ("FAIL\n"); + else + printf ("PASS\n"); + + return 0; +} + +tres_floats::tres_floats (float f1, float f2, float f3) +{ + ff1 = f1; + ff2 = f2; + ff3 = f3; +} + +float tres_floats::get_f1 () +{ + return ff1; +} + +float tres_floats::get_f2 () +{ + return ff2; +} + +float tres_floats::get_f3 () +{ + return ff3; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/copy1.C b/gcc/testsuite/g++.old-deja/g++.brendan/copy1.C new file mode 100644 index 000000000000..38242fbb8be8 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/copy1.C @@ -0,0 +1,21 @@ +// GROUPS passed copy-ctors +extern "C" void printf (char *, ...); +int count = 0; + +class C { +public: + C (int) { count++; } + operator int () { return 0; } +}; + + +main () +{ + C c1 (1); + C c2 (c1); + + if (count != 1) + printf ("FAIL\n"); + else + printf ("PASS\n"); +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/copy2.C b/gcc/testsuite/g++.old-deja/g++.brendan/copy2.C new file mode 100644 index 000000000000..9f93755dae48 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/copy2.C @@ -0,0 +1,79 @@ +// GROUPS passed copy-ctors +/* +The old g++ output is + +Item() +Compound() +Pre foo +foo +~Compound() +~Item() +Post foo +~Compound() +~Item() + +The output should be something like (produced from ATT 2.1) + +Item() +Compound() +Pre foo +Item(const Item& i) <------ missing above +foo +~Compound() +~Item() +Post foo +~Compound() +~Item() + +*/ + +extern "C" void printf (char *, ...); +extern "C" void exit (int); + +int count = 0; + +void +die (int x) +{ + if (x != ++count) + { + printf ("FAIL\n"); + exit (1); + } +} + + +class Item { + public: + Item() { die (1); } + Item(const Item& i) { die (4); } + ~Item() { count++; if (count != 7 && count != 10) die (-1); } +}; + + +class Compound { + Item i; + public: + Compound() { die (2); } + ~Compound() { count++; if (count != 6 && count != 9) die (-1); } +}; + + +void foo(Compound a) +{ + die (5); +} + + +main() +{ + Compound a; + + die (3); + foo(a); + + die (8); + + printf ("PASS\n"); +} + diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/copy3.C b/gcc/testsuite/g++.old-deja/g++.brendan/copy3.C new file mode 100644 index 000000000000..28b3306433b5 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/copy3.C @@ -0,0 +1,57 @@ +// GROUPS passed copy-ctors +/* + +If I compile it with cfront (AT&T C++ Translator 2.00.02 08/25/89) and run it +I get: + + A::A() + A::A(const A&) + B::Bar() + A::~A() + A::~A() + +If I compile it with g++ (gcc version 2.2.2) and run it I get: + + A::A() + B::Bar() + A::~A() + A::~A() + +*/ +extern "C" void printf (char *, ...); +extern "C" void exit (int); + +int count = 0; + +void +die (int x) +{ + if (x != ++count) + { + printf ("FAIL\n"); + exit (1); + } +} + + +class A { +public: + A() { die (1); } + A(const A&) { die (2); } + ~A() { count++; if (count != 4 && count != 5) die (-1); } +}; + +class B : public A { +public: + void Bar() { die (3); } +}; + +void Foo(B b) { b.Bar(); } + +main() +{ + B b; + Foo(b); + + printf ("PASS\n"); +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/copy4.C b/gcc/testsuite/g++.old-deja/g++.brendan/copy4.C new file mode 100644 index 000000000000..35b539321412 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/copy4.C @@ -0,0 +1,58 @@ +// GROUPS passed copy-ctors +// Using Cfront 3.0.1 the programm below prints +// +// A() +// A(const A& a) +// ~A() +// A(A& a) <---- !!! +// ~A() +// ~A() +// +// the g++ 2.2.2 (sparc-sun-sunos4.1) generated code prints +// +// A() +// A(const A& a) +// ~A() +// A(const A& a) <---- !!! +// ~A() +// ~A() + +extern "C" void printf (char *, ...); +extern "C" void exit (int); + +int count = 0; + +void +die (int x) +{ + if (x != ++count) + { + printf ("FAIL\n"); + exit (1); + } +} + +class A { +public: + A() { die (1); } + A(const A& a) { die (2); } + A(A& a) { die (4); } + ~A() { count++; if (count != 3 && count != 5 && count != 6) die (-1); } +}; + +void foo1(const A& a) { + A b = a; +} + +void foo2( A& a) { + A b = a; +} + +int main() { + A a; + + foo1(a); + foo2(a); + + printf ("PASS\n"); +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/copy5.C b/gcc/testsuite/g++.old-deja/g++.brendan/copy5.C new file mode 100644 index 000000000000..db63d75925bc --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/copy5.C @@ -0,0 +1,84 @@ +// GROUPS passed copy-ctors +/* +bad: +sibelius402> a.out +a=5 a.virtMember()=30 +BaseClass::Increm --> {i=5, virtMember()=30} +a=7 a.virtMember()=30 +b=7 b.virtMember()=30 +BaseClass::Increm --> {i=7, virtMember()=999} +b=9 b.virtMember()=30 +sibelius403> + + good: + +sibelius406> a.out +a=5 a.virtMember()=30 +BaseClass::Increm --> {i=5, virtMember()=30} +a=7 a.virtMember()=30 +b=7 b.virtMember()=30 +BaseClass::Increm --> {i=7, virtMember()=30} +b=9 b.virtMember()=30 +*/ + +extern "C" void printf (char *, ...); +extern "C" void exit (int); + +void die () { printf ("FAIL\n"); exit (1); } + +class BaseClass { + + friend int operator != (const BaseClass irv, int x); + + int i; + +public: + + BaseClass( const BaseClass& ir ) : i(ir.i) {}; + BaseClass() : i(5) {}; + + virtual int virtMember() { return( 999 ); }; + + void Increm( int r ); +}; + +void BaseClass::Increm( int r ) +{ + if ((i == 5 && virtMember () == 30) + || (i == 7 && virtMember () == 30)) + i += r; + else + die (); +}; + +class DerivedClass : public BaseClass { +public: + int virtMember() { return( 30 ); }; +}; + +int operator != (const BaseClass irv, int x) { return irv.i != x; } + +main () +{ + DerivedClass a; + + if (a != 5 || a.virtMember () != 30) + die (); + + a.Increm(2); + + if (a != 7 || a.virtMember () != 30) + die (); + + DerivedClass b = a; + + if (b != 7 || a.virtMember () != 30) + die (); + + b.Increm(2); + + if (b != 9 || a.virtMember () != 30) + die (); + + printf ("PASS\n"); +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/copy6.C b/gcc/testsuite/g++.old-deja/g++.brendan/copy6.C new file mode 100644 index 000000000000..d15a4beee158 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/copy6.C @@ -0,0 +1,55 @@ +// GROUPS passed copy-ctors +/* +g++ 2.3.3 will prefer using type conversions over the +implicitly generated copy constructor. This is wrong. +If you explicitly define a copy constructor, it will +use it. However, the implicit copy constructor MUST be +called whenever an explicit one would have been called +also. See below: g++ converts from and back into +unsigned, instead of using the implicit copy constructor: +here is the version: +Reading specs from /usr/lib/gcc-lib/i386-linux/2.3.3/specs +gcc version 2.3.3 + /usr/lib/gcc-lib/i386-linux/2.3.3/cpp -lang-c++ -v -undef -D__GNUC__=2 -D__GNUG__=2 -D__cplusplus -Dunix -Di386 -Dlinux -D__unix__ -D__i386__ -D__linux__ -D__unix -D__i386 -D__linux bug2.cc /usr/tmp/cca02008.i +GNU CPP version 2.3.3 (80386, BSD syntax) + /usr/lib/gcc-lib/i386-linux/2.3.3/cc1plus /usr/tmp/cca02008.i -quiet -dumpbase bug2.cc -version -o /usr/tmp/cca02008.s +GNU C++ version 2.3.3 (80386, BSD syntax) compiled by GNU C version 2.3.3. + as -o /usr/tmp/cca020081.o /usr/tmp/cca02008.s + ld /usr/lib/crt0.o -nojump -L/usr/lib/gcc-lib/i386-linux/2.3.3 /usr/tmp/cca020081.o -lg++ -lgcc -lc -lgcc + +Ok, and here is the output: +test k: constructing from scratch +test l=k: type conversion into unsigned +constructing from unsigned + +*/ + +extern "C" void printf (char *, ...); +extern "C" void exit (int); + +int count = 0; + +void die () { printf ("FAIL\n"); exit (1); } + +struct test { + test() { if (count != 0) die (); } + + test(unsigned) { + die (); + } + operator unsigned() { + die (); + return 0; + } +}; + +int +main() { + test k; + test l=k; + + printf ("PASS\n"); + + return 0; +} + diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/copy7.C b/gcc/testsuite/g++.old-deja/g++.brendan/copy7.C new file mode 100644 index 000000000000..c98d77f6d125 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/copy7.C @@ -0,0 +1,29 @@ +// GROUPS passed copy-ctors +extern "C" void printf (char *, ...); +extern "C" void exit (int); + +void die () { printf ("FAIL\n"); exit (1); } + +class B { +public: + B() {} + B(const B &) { printf ("PASS\n"); exit (0); }; +private: + int x; +}; + +class A : public B { +public: + A() {} + + A(const B &) { printf ("FAIL\n"); exit (1); } +}; + +main() +{ + A a; + A b(a); + + printf ("FAIL\n"); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/copy8.C b/gcc/testsuite/g++.old-deja/g++.brendan/copy8.C new file mode 100644 index 000000000000..fe248bae34d7 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/copy8.C @@ -0,0 +1,67 @@ +// GROUPS passed copy-ctors +/* +This report is for GCC 2.3.3 running on a Sun/4. The bug is that when +a class instance is passed-by-value, GCC does not correctly copy the value. +At the end of this report is an example program that demonstrates the bug. +It should print: + + construct A('x') + copy A('x') + destruct A('x') + destruct A('x') + +and in fact does for IBM's xlC C++. However, for GCC 2.3.3, it fails +to print the second line ["copy A('x')"], which indicates that it failed +to call the copy-constructor for class A when it should have. Below is a +typescript that lists the program, shows how I compiled it, and shows the +incorrect output. +*/ + +extern "C" void printf (char *, ...); +extern "C" void exit (int); + +int count = 0; + +void +die (int x) +{ + if (x != ++count) + { + printf ("FAIL\n"); + exit (1); + } +} + +class A { // Class with explicit & instrumented copy-constructor and destructor. +public: + const char * id; + A( const char * id1 ) : id(id1) { die (1); } + + // Copy constructor + A( const A& a ) : id(a.id) { die (2); } + + // Destructor + ~A() { count++; if (count != 3 && count != 4) die (-1); } +}; + +class X { // Class without explicit copy-constructor +private: + A a; +public: + X( const char * id ) : a(id) {} +}; + +void Func( X x ) { // Function with call-by-value argument +} + +int +main() { + X x("x"); // Construct instance of x. + + // The next line should call the copy-constructor for X since x is + // being passed by value. For GCC 2.3.3 on a Sun/4, it does not. + Func(x); + + printf ("PASS\n"); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/copy9.C b/gcc/testsuite/g++.old-deja/g++.brendan/copy9.C new file mode 100644 index 000000000000..9c5114a322fd --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/copy9.C @@ -0,0 +1,40 @@ +// GROUPS passed copy-ctors +#include <iostream.h> + +// token types: from state parser +const int T_EOF = 257; +const int T_ERROR = 258; +const int T_Float = 259; +const int T_Int = 260; +const int T_ID = 261; +const int T_STRING = 262; + +class Complex; +class State; + +// token, from state parser. +class ParseToken { +public: + int tok; + union { + char cval; + const char *sval; + int intval; + double doubleval; + Complex* Complexval; + const State* s; + }; + ParseToken () { tok = 0; intval = 0;} +}; + +main () { + ParseToken a; + a.tok = T_Float; + a.doubleval = 23.2; + ParseToken b(a); + + if (b.doubleval == 23.2) + cout << "PASS\n"; + else + cout << "FAIL\n"; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash1.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash1.C new file mode 100644 index 000000000000..66de235b4843 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash1.C @@ -0,0 +1,44 @@ +// Build don't link: +// GROUPS passed old-abort +class D_Interval; + +class Date +{ + public: + Date(const D_Interval*,const Date&); +private: + const D_Interval* interval; +}; + +class Time_Interval +{ + public: + Time_Interval(const Date& start,const Date& stop); + const Date& Start() const { return start; } + const Date& Stop() const { return stop; } + private: + Date start; + Date stop; +}; + +class Dated_Data +{ + public: + Dated_Data(const Time_Interval& dates); + virtual ~Dated_Data(); + Time_Interval Dates() const { return dates; } + private: + Time_Interval dates; +}; + +class Raw_Data : public Dated_Data +{ + public: + Raw_Data(const Dated_Data *source,const D_Interval& period); +}; + +Raw_Data::Raw_Data(const Dated_Data *source,const D_Interval& period) + : Dated_Data(Time_Interval(Date(&period,source->Dates().Start()), + Date(&period,source->Dates().Stop()))) +{ +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash10.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash10.C new file mode 100644 index 000000000000..6680718bad63 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash10.C @@ -0,0 +1,28 @@ +// Build don't link: +// GROUPS passed old-abort +class word +{ + unsigned char b1, b2; +public: + word (unsigned int i = 0) { b1 = i & 0xff; b2 = (i & 0xff00) >> 8; } + operator unsigned int () { return (b2 << 8) + b1; } +}; + +class just_another +{ + int foo; + char bar[23]; +}; + +int mumble(word w) +{ + just_another *jap; + unsigned bar; + + bar = w; + + jap = new just_another [w]; + + return 0; +} + diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash11.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash11.C new file mode 100644 index 000000000000..f03953ab20ee --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash11.C @@ -0,0 +1,23 @@ +// Build don't link: +// GROUPS passed old-abort +extern "C" void printf (char *, ...); + +class A { + int i; + int j; + public: + int h; + A() { i=10; j=20; } + virtual void f1() { printf("i=%d j=%d\n",i,j); } + friend virtual void f2() { printf("i=%d j=%d\n",i,j); }// ERROR - virtual.* +}; + +class B : public A { + public: + virtual void f1() { printf("i=%d j=%d\n",i,j); }// ERROR - member.*// ERROR - member.* + friend virtual void f2() { printf("i=%d j=%d\n",i,j); }// ERROR - virtual.*// ERROR - member.*// ERROR - member.* +}; + +main() { + A * a = new A; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash12.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash12.C new file mode 100644 index 000000000000..0671c7b8970b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash12.C @@ -0,0 +1,10 @@ +// Build don't link: +// GROUPS passed old-abort +class X +{ + int i; +public: + X(int j); +} + +X *x = new X[10]();// ERROR - .* diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash13.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash13.C new file mode 100644 index 000000000000..a292d67f2351 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash13.C @@ -0,0 +1,35 @@ +// Build don't link: +// GROUPS passed old-abort +class gen_op +{ +public: + gen_op ( ); + gen_op (const gen_op &Op1); + ~gen_op ( ); + void operator = (const gen_op &Op1); +}; + + + + +class spin_op +{ +public: + spin_op(); + spin_op(const spin_op& SOp); + ~spin_op(); + void operator= (const spin_op& SOp); + operator gen_op(); +}; + + +spin_op Fe(); + + +gen_op Spul_U_axis() +{ + gen_op U1; + U1 = Fe(); +}; // ERROR - reaches end of non-void function + +main () {}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash14.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash14.C new file mode 100644 index 000000000000..d7a0de482f94 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash14.C @@ -0,0 +1,23 @@ +// Build don't link: +// GROUPS passed old-abort +extern "C" void printf (char *, ...); + + +class cl +{ + int i; +public: + cl(int j = 0) {i = j;} + int get_i() {return i;} + }; + +main() +{ + cl ob[3] = {1, 2, 3}; + int i; + + for(i=0; i<3; i++) + printf("%d\n", ob[i].get_i()); + + return 0; + } diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash15.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash15.C new file mode 100644 index 000000000000..a4b1ffabee3e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash15.C @@ -0,0 +1,21 @@ +// Build don't link: +// GROUPS passed old-abort +#include <iostream.h> + +class A { + public: + virtual ~A() {cout << "executed ~A()\n";}; +}; + +class B : public A { + public: + virtual ~B() {cout << "executed ~B()\n";}; +}; + +main() { + cout << "starting\n"; + B b; + b.~A();// ERROR - destructor + cout << "done\n"; +}; + diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash16.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash16.C new file mode 100644 index 000000000000..5030b297ae0d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash16.C @@ -0,0 +1,12 @@ +// Build don't link: +// GROUPS passed old-abort +class Graph { +public: + unsigned char N; + Graph(void) {}; // ERROR - previously defined here +} + +Graph::Graph(void) +{ N = 10;// ERROR - return type.* +} + diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash17.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash17.C new file mode 100644 index 000000000000..7072eab2c889 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash17.C @@ -0,0 +1,35 @@ +// Build don't link: +// GROUPS passed old-abort +// +// This one creates +// +// gcc2: Internal compiler error: program cc1plus got fatal signal 11 +// +// when compiled with g++. +// The error goes away, if +// 1) int ClassInvariant() is not virtual or +// 2) GnObject has a virtual destructor or +// 3) GnWidget has no virtual destructor or +// 4) GnContracts has a virtual destructor +// + + +class GnContracts { + public: + virtual int ClassInvariant(); +// virtual ~GnContracts(); +}; + +class GnObject : public GnContracts { + public: +// virtual ~GnObject(); +}; + +class GnWidget : public GnObject { + public: + virtual ~GnWidget(); +}; + +class GnOptionGroup : public GnObject, public GnWidget { +};// ERROR - warning + diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash18.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash18.C new file mode 100644 index 000000000000..d4a4c60b7c8b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash18.C @@ -0,0 +1,17 @@ +// Build don't link: +// GROUPS passed old-abort +typedef int element; +class Pix { +public: + Pix(); + Pix(const Pix&); + + // Friend functions so that v == x works as does x == v works + friend int operator==(void *v, const Pix& x) + { return v == index; }// ERROR - .* + friend int operator==(void *v, const Pix& x) + { return v != index; }// ERROR - .* +private: +// friend class List<T>; + element *index; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash19.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash19.C new file mode 100644 index 000000000000..dd621b16dcd5 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash19.C @@ -0,0 +1,1704 @@ +// Special g++ Options: +// Build don't link: +// GROUPS passed old-abort +typedef unsigned long _G_clock_t; +typedef long _G_dev_t; +typedef long int _G_fpos_t; +typedef long _G_gid_t; +typedef unsigned long _G_ino_t; +typedef unsigned short _G_mode_t; +typedef short _G_nlink_t; +typedef long _G_off_t; +typedef long _G_pid_t; +typedef int _G_ptrdiff_t; +typedef int _G_sigset_t; +typedef unsigned int _G_size_t; +typedef long _G_time_t; +typedef long _G_uid_t; +typedef unsigned int _G_wchar_t; +typedef int _G_ssize_t; +typedef double * _G_va_list; +class ostream; class streambuf; class backupbuf; +extern "C" int __underflow(streambuf*); +extern "C" int __overflow(streambuf*, int); +typedef _G_off_t streamoff; +typedef _G_off_t streampos; +typedef unsigned long __fmtflags; +typedef unsigned char __iostate; +struct _ios_fields { + streambuf *_strbuf; + ostream* _tie; + int _width; + __fmtflags _flags; + _G_wchar_t _fill; + __iostate _state; + __iostate _exceptions; + int _precision; +}; +enum state_value { + _good = 0 , + _eof = 1 , + _fail = 2 , + _bad = 4 }; +enum open_mode { + input = 1 , + output = 2 , + atend = 4 , + append = 8 }; +class ios : public _ios_fields { + public: + typedef __fmtflags fmtflags; + typedef int iostate; + typedef int openmode; + enum io_state { + goodbit = 0 , + eofbit = 1 , + failbit = 2 , + badbit = 4 }; + enum open_mode { + in = 1 , + out = 2 , + ate = 4 , + app = 8 , + trunc = 16 , + nocreate = 32 , + noreplace = 64 , + bin = 128 }; + enum seek_dir { beg, cur, end}; + enum { skipws=01, left=02, right=04, internal=010, + dec=020, oct=040, hex=0100, + showbase=0200, showpoint=0400, uppercase=01000, showpos=02000, + scientific=04000, fixed=010000, unitbuf=020000, stdio=040000, + dont_close=0x80000000 + }; + enum { + basefield=dec+oct+hex, + floatfield = scientific+fixed, + adjustfield = left+right+internal + }; + ostream* tie() const { return _tie; } + ostream* tie(ostream* val) { ostream* save=_tie; _tie=val; return save; } + _G_wchar_t fill() const { return (_G_wchar_t)_fill; } + _G_wchar_t fill(_G_wchar_t newf) + {_G_wchar_t oldf = (_G_wchar_t)_fill; _fill = (char)newf; return oldf;} + fmtflags flags() const { return _flags; } + fmtflags flags(fmtflags new_val) { + fmtflags old_val = _flags; _flags = new_val; return old_val; } + int precision() const { return _precision; } + int precision(int newp) { + unsigned short oldp = _precision; _precision = (unsigned short)newp; + return oldp; } + fmtflags setf(fmtflags val) { + fmtflags oldbits = _flags; + _flags |= val; return oldbits; } + fmtflags setf(fmtflags val, fmtflags mask) { + fmtflags oldbits = _flags; + _flags = (_flags & ~mask) | (val & mask); return oldbits; } + fmtflags unsetf(fmtflags mask) { + fmtflags oldbits = _flags & mask; + _flags &= ~mask; return oldbits; } + int width() const { return _width; } + int width(int val) { int save = _width; _width = val; return save; } + void _throw_failure() { } + streambuf* rdbuf() const { return _strbuf; } + void clear(iostate state = 0) { + _state = _strbuf ? state : state|badbit; + if (_state & _exceptions) _throw_failure(); } + void set(iostate flag) { _state |= flag; + if (_state & _exceptions) _throw_failure(); } + int good() const { return _state == 0; } + int eof() const { return _state & ios::eofbit; } + int fail() const { return _state & (ios::badbit|ios::failbit); } + int bad() const { return _state & ios::badbit; } + iostate rdstate() const { return _state; } + operator void*() const { return fail() ? (void*)0 : (void*)(-1); } + int operator!() const { return fail(); } + iostate exception(iostate enable) { + iostate old = _exceptions; _exceptions = enable; + if (_state & _exceptions) _throw_failure(); + return old; } + static int sync_with_stdio(int on); + static void sync_with_stdio() { sync_with_stdio(1); } + void unset(state_value flag) { _state &= ~flag; } + void close(); + int is_open(); + int readable(); + int writable(); + protected: + ios(streambuf* sb = 0, ostream* tie = 0); + virtual ~ios(); + void init(streambuf* sb) { _state=0; _strbuf=sb; } +}; +typedef ios::seek_dir _seek_dir; +class streammarker { + friend class streambuf; + friend int __underflow(streambuf*); + struct streammarker *_next; + streambuf *_sbuf; + streampos _spos; + void set_streampos(streampos sp) { _spos = sp; } + void set_offset(int offset) { _pos = offset; _spos = (streampos)(-2); } + int _pos; + public: + streammarker(streambuf *sb); + ~streammarker(); + int saving() { return _spos == -2; } + int delta(streammarker&); + int delta(); +}; +struct __streambuf { + int _flags; + char* _gptr; + char* _egptr; + char* _eback; + char* _pbase; + char* _pptr; + char* _epptr; + char* _base; + char* _ebuf; + struct streambuf *_chain; + friend class streammarker; + char *_other_gbase; + char *_aux_limit; + char *_other_egptr; + streammarker *_markers; + unsigned short _cur_column; + char _unused; + char _shortbuf[1]; +}; +extern unsigned __adjust_column(unsigned start, const char *line, int count); +struct streambuf : private __streambuf { + friend class ios; + friend class istream; + friend class ostream; + friend class streammarker; + friend int __underflow(streambuf*); + protected: + static streambuf* _list_all; + streambuf*& xchain() { return _chain; } + void _un_link(); + void _link_in(); + char* gptr() const { return _gptr; } + char* pptr() const { return _pptr; } + char* egptr() const { return _egptr; } + char* epptr() const { return _epptr; } + char* pbase() const { return _pbase; } + char* eback() const { return _eback; } + char* base() const { return _base; } + char* ebuf() const { return _ebuf; } + int blen() const { return _ebuf - _base; } + void xput_char(char c) { *_pptr++ = c; } + int xflags() { return _flags; } + int xflags(int f) { int fl = _flags; _flags = f; return fl; } + void xsetflags(int f) { _flags |= f; } + void xsetflags(int f, int mask) { _flags = (_flags & ~mask) | (f & mask); } + void gbump(int n) { _gptr += n; } + void pbump(int n) { _pptr += n; } + void setb(char* b, char* eb, int a=0); + void setp(char* p, char* ep) { _pbase=_pptr=p; _epptr=ep; } + void setg(char* eb, char* g, char *eg) { _eback=eb; _gptr=g; _egptr=eg; } + char *shortbuf() { return _shortbuf; } + int in_backup() { return _flags & 0x100 ; } + char *Gbase() { return in_backup() ? _other_gbase : _eback; } + char *eGptr() { return in_backup() ? _other_egptr : _egptr; } + char *Bbase() { return in_backup() ? _eback : _other_gbase; } + char *Bptr() { return _aux_limit; } + char *eBptr() { return in_backup() ? _egptr : _other_egptr; } + char *Nbase() { return _other_gbase; } + char *eNptr() { return _other_egptr; } + int have_backup() { return _other_gbase != ((void*)0) ; } + int have_markers() { return _markers != ((void*)0) ; } + int _least_marker(); + void switch_to_main_get_area(); + void switch_to_backup_area(); + void free_backup_area(); + void unsave_markers(); + int put_mode() { return _flags & 0x800 ; } + int switch_to_get_mode(); + streambuf(int flags=0); + public: + static int flush_all(); + static void flush_all_linebuffered(); + virtual int underflow() = 0; + virtual int overflow(int c = (-1) ) = 0; + virtual int doallocate(); + virtual streampos seekoff(streamoff, _seek_dir, int mode=ios::in|ios::out); + virtual streampos seekpos(streampos pos, int mode = ios::in|ios::out); + int seekmark(streammarker& mark, int delta = 0); + int sputbackc(char c); + int sungetc(); + virtual ~streambuf(); + int unbuffered() { return _flags & 2 ? 1 : 0; } + int linebuffered() { return _flags & 0x200 ? 1 : 0; } + void unbuffered(int i) + { if (i) _flags |= 2 ; else _flags &= ~2 ; } + void linebuffered(int i) + { if (i) _flags |= 0x200 ; else _flags &= ~0x200 ; } + int allocate() { + if (base() || unbuffered()) return 0; + else return doallocate(); } + void allocbuf() { if (base() == ((void*)0) ) doallocbuf(); } + void doallocbuf(); + virtual int sync(); + virtual int pbackfail(int c); + virtual streambuf* setbuf(char* p, int len); + int in_avail() { return _egptr - _gptr; } + int out_waiting() { return _pptr - _pbase; } + virtual int xsputn(const char* s, int n); + int sputn(const char* s, int n) { return xsputn(s, n); } + int padn(char pad, int n); + virtual int xsgetn(char* s, int n); + int sgetn(char* s, int n) { return xsgetn(s, n); } + int ignore(int); + virtual int get_column(); + virtual int set_column(int); + long sgetline(char* buf, _G_size_t n, char delim, int putback_delim); + int sbumpc() { + if (_gptr >= _egptr && __underflow(this) == (-1) ) return (-1) ; + else return *(unsigned char*)_gptr++; } + int sgetc() { + if (_gptr >= _egptr && __underflow(this) == (-1) ) return (-1) ; + else return *(unsigned char*)_gptr; } + int snextc() { + if (_gptr >= _egptr && __underflow(this) == (-1) ) return (-1) ; + return _gptr++, sgetc(); } + int sputc(int c) { + if (_pptr >= _epptr) return __overflow(this, (unsigned char)c); + else return *_pptr++ = c, (unsigned char)c; } + void stossc() { if (_gptr < _egptr) _gptr++; } + int vscan(char const *fmt0, _G_va_list ap, ios* stream = ((void*)0) ); + int scan(char const *fmt0 ...); + int vform(char const *fmt0, _G_va_list ap); + int form(char const *fmt0 ...); +}; +class backupbuf : public streambuf { + friend class streammarker; + protected: + backupbuf(int flags=0) : streambuf(flags| 0x4000 ) { } + public: + virtual int pbackfail(int c); + virtual int underflow(); + virtual int overflow(int c = (-1) ); +}; +struct __file_fields { + short _fileno; + int _blksize; + _G_fpos_t _offset; +}; +class filebuf : public backupbuf { + protected: + struct __file_fields _fb; + void init(); + public: + static const int openprot; + filebuf(); + filebuf(int fd); + filebuf(int fd, char* p, int len); + ~filebuf(); + filebuf* attach(int fd); + filebuf* open(const char *filename, const char *mode); + filebuf* open(const char *filename, ios::openmode mode, int prot = 0664); + virtual int underflow(); + virtual int overflow(int c = (-1) ); + int is_open() const { return _fb._fileno >= 0; } + int fd() const { return is_open() ? _fb._fileno : (-1) ; } + filebuf* close(); + virtual int doallocate(); + virtual streampos seekoff(streamoff, _seek_dir, int mode=ios::in|ios::out); + virtual streambuf* setbuf(char* p, int len); + int xsputn(const char* s, int n); + int xsgetn(char* s, int n); + virtual int sync(); + protected: + int is_reading() { return eback() != egptr(); } + char* cur_ptr() { return is_reading() ? gptr() : pptr(); } + char* file_ptr() { return eGptr(); } + int do_write(const char *data, int to_do); + int do_flush() { return do_write(_pbase, _pptr-_pbase); }// ERROR - + virtual _G_ssize_t sys_read(char* buf, _G_size_t size); + virtual _G_fpos_t sys_seek(_G_fpos_t, _seek_dir); + virtual _G_ssize_t sys_write(const void*, long); + virtual int sys_stat(void*); + virtual int sys_close(); +}; +inline ios::ios(streambuf* sb , ostream* tie ) { + _state = sb ? ios::goodbit : ios::badbit; _exceptions=0; + _strbuf=sb; _tie = tie; _width=0; _fill=' '; + _flags=ios::skipws|ios::dec; _precision=6; } +inline ios::~ios() { + if (!(_flags & (unsigned int)ios::dont_close)) delete _strbuf; } +class istream; class ostream; +typedef ios& (*__manip)(ios&); +typedef istream& (*__imanip)(istream&); +typedef ostream& (*__omanip)(ostream&); +extern istream& ws(istream& ins); +extern ostream& flush(ostream& outs); +extern ostream& endl(ostream& outs); +extern ostream& ends(ostream& outs); +class ostream : virtual public ios +{ + void do_osfx(); + public: + ostream() { } + ostream(streambuf* sb, ostream* tied=((void*)0) ); + int opfx() { + if (!good()) return 0; else { if (_tie) _tie->flush(); return 1;} } + void osfx() { if (flags() & (ios::unitbuf|ios::stdio)) + do_osfx(); } + streambuf* ostreambuf() const { return _strbuf; } + ostream& flush(); + ostream& put(char c) { _strbuf->sputc(c); return *this; } + ostream& put(unsigned char c) { return put((char)c); } + ostream& write(const char *s, int n); + ostream& write(const unsigned char *s, int n) { return write((const char*)s, n);} + ostream& put(signed char c) { return put((char)c); } + ostream& write(const signed char *s, int n) { return write((const char*)s, n);} + ostream& write(const void *s, int n) { return write((const char*)s, n);} + ostream& seekp(streampos); + ostream& seekp(streamoff, _seek_dir); + streampos tellp(); + ostream& form(const char *format ...); + ostream& vform(const char *format, _G_va_list args); + ostream& operator<<(char c); + ostream& operator<<(unsigned char c) { return (*this) << (char)c; } + ostream& operator<<(signed char c) { return (*this) << (char)c; } + ostream& operator<<(const char *s); + ostream& operator<<(const unsigned char *s) + { return (*this) << (const char*)s; } + ostream& operator<<(const signed char *s) + { return (*this) << (const char*)s; } + ostream& operator<<(void *p); + ostream& operator<<(int n); + ostream& operator<<(unsigned int n); + ostream& operator<<(long n); + ostream& operator<<(unsigned long n); + ostream& operator<<(long long n); + ostream& operator<<(unsigned long long n); + ostream& operator<<(short n) {return operator<<((int)n);} + ostream& operator<<(unsigned short n) {return operator<<((unsigned int)n);} + ostream& operator<<(double n); + ostream& operator<<(float n) { return operator<<((double)n); } + ostream& operator<<(__omanip func) { return (*func)(*this); } + ostream& operator<<(__manip func) {(*func)(*this); return *this;} + ostream& operator<<(streambuf*); +}; +class istream : virtual public ios +{ + _G_ssize_t _gcount; + int _skip_ws(); + public: + istream() { _gcount = 0; } + istream(streambuf* sb, ostream*tied=((void*)0) ); + streambuf* istreambuf() const { return _strbuf; } + istream& get(char* ptr, int len, char delim = '\n'); + istream& get(unsigned char* ptr, int len, char delim = '\n') + { return get((char*)ptr, len, delim); } + istream& get(char& c); + istream& get(unsigned char& c) { return get((char&)c); } + istream& getline(char* ptr, int len, char delim = '\n'); + istream& getline(unsigned char* ptr, int len, char delim = '\n') + { return getline((char*)ptr, len, delim); } + istream& get(signed char& c) { return get((char&)c); } + istream& get(signed char* ptr, int len, char delim = '\n') + { return get((char*)ptr, len, delim); } + istream& getline(signed char* ptr, int len, char delim = '\n') + { return getline((char*)ptr, len, delim); } + istream& read(char *ptr, int n); + istream& read(unsigned char *ptr, int n) { return read((char*)ptr, n); } + istream& read(signed char *ptr, int n) { return read((char*)ptr, n); } + istream& read(void *ptr, int n) { return read((char*)ptr, n); } + istream& get(streambuf& sb, char delim = '\n'); + istream& gets(char **s, char delim = '\n'); + int ipfx(int need) { + if (!good()) { set(ios::failbit); return 0; } + if (_tie && (need == 0 || rdbuf()->in_avail() < need)) _tie->flush(); + if (!need && (flags() & ios::skipws)) return _skip_ws(); + return 1; + } + int ipfx0() { + if (!good()) { set(ios::failbit); return 0; } + if (_tie) _tie->flush(); + if (flags() & ios::skipws) return _skip_ws(); + return 1; + } + int ipfx1() { + if (!good()) { set(ios::failbit); return 0; } + if (_tie && rdbuf()->in_avail() == 0) _tie->flush(); + return 1; + } + int get() { if (!ipfx1()) return (-1) ; + int ch = _strbuf->sbumpc(); + if (ch == (-1) ) set(ios::eofbit); + return ch; } + int peek() { if (!ipfx1()) return (-1) ; + int ch = _strbuf->sgetc(); + if (ch == (-1) ) set(ios::eofbit); + return ch; } + _G_ssize_t gcount() { return _gcount; } + istream& ignore(int n=1, int delim = (-1) ); + istream& seekg(streampos); + istream& seekg(streamoff, _seek_dir); + streampos tellg(); + istream& putback(char ch) { + if (good() && _strbuf->sputbackc(ch) == (-1) ) clear(ios::badbit); + return *this;} + istream& unget() { + if (good() && _strbuf->sungetc() == (-1) ) clear(ios::badbit); + return *this;} + istream& scan(const char *format ...); + istream& vscan(const char *format, _G_va_list args); + istream& unget(char ch) { return putback(ch); } + int skip(int i); + istream& operator>>(char*); + istream& operator>>(unsigned char* p) { return operator>>((char*)p); } + istream& operator>>(signed char*p) { return operator>>((char*)p); } + istream& operator>>(char& c); + istream& operator>>(unsigned char& c) {return operator>>((char&)c);} + istream& operator>>(signed char& c) {return operator>>((char&)c);} + istream& operator>>(int&); + istream& operator>>(long&); + istream& operator>>(long long&); + istream& operator>>(short&); + istream& operator>>(unsigned int&); + istream& operator>>(unsigned long&); + istream& operator>>(unsigned long long&); + istream& operator>>(unsigned short&); + istream& operator>>(float&); + istream& operator>>(double&); + istream& operator>>( __manip func) {(*func)(*this); return *this;} + istream& operator>>(__imanip func) { return (*func)(*this); } + istream& operator>>(streambuf*); +}; +class iostream : public istream, public ostream +{ + _G_ssize_t _gcount; + public: + iostream() { _gcount = 0; } + iostream(streambuf* sb, ostream*tied=((void*)0) ); +}; +extern istream cin; +extern ostream cout, cerr, clog; +struct Iostream_init { } ; +inline ios& dec(ios& i) +{ i.setf(ios::dec, ios::dec|ios::hex|ios::oct); return i; } +inline ios& hex(ios& i) +{ i.setf(ios::hex, ios::dec|ios::hex|ios::oct); return i; } +inline ios& oct(ios& i) +{ i.setf(ios::oct, ios::dec|ios::hex|ios::oct); return i; } +extern char* form(const char*, ...); +extern char* dec(long, int=0); +extern char* dec(int, int=0); +extern char* dec(unsigned long, int=0); +extern char* dec(unsigned int, int=0); +extern char* hex(long, int=0); +extern char* hex(int, int=0); +extern char* hex(unsigned long, int=0); +extern char* hex(unsigned int, int=0); +extern char* oct(long, int=0); +extern char* oct(int, int=0); +extern char* oct(unsigned long, int=0); +extern char* oct(unsigned int, int=0); +inline istream& WS(istream& str) { return ws(str); } +typedef double *__gnuc_va_list; +extern "C" { + typedef struct { + int __cnt; + unsigned char *__ptr; + unsigned char *__base; + unsigned short __flag; + unsigned char __fileL; + unsigned char __fileH; + } FILE; + typedef struct { + int __cnt; + unsigned char *__ptr; + unsigned char *__base; + unsigned short __flag; + unsigned char __fileL; + unsigned char __fileH; + unsigned char *__bufendp; + unsigned char __smbuf[8 ]; + } _FILEX; + typedef unsigned int size_t; + typedef long int fpos_t; + typedef double *__va_list; + extern FILE __iob[]; + extern int remove(const char *); + extern int rename(const char *, const char *); + extern FILE *tmpfile(void); + extern char *tmpnam(char *); + extern int fclose(FILE *); + extern int fflush(FILE *); + extern FILE *fopen(const char *, const char *); + extern FILE *freopen(const char *, const char *, FILE *); + extern void setbuf(FILE *, char *); + extern int setvbuf(FILE *, char *, int, size_t); + extern int fprintf(FILE *, const char *, ...); + extern int fscanf(FILE *, const char *,...); + extern int printf(const char *,...); + extern int scanf(const char *,...); + extern int sprintf(char *, const char *,...); + extern int sscanf(const char *, const char *,...); + extern int vprintf(const char *, __va_list); + extern int vfprintf(FILE *, const char *, __va_list); + extern int vsprintf(char *, const char *, __va_list); + extern int fgetc(FILE *); + extern char *fgets(char *, int, FILE *); + extern int fputc(int, FILE *); + extern int fputs(const char *, FILE *); + extern int getc(FILE *); + extern int getchar(void); + extern char *gets(char *); + extern int putc(int, FILE *); + extern int putchar(int); + extern int puts(const char *); + extern int ungetc(int, FILE *); + extern int fgetpos(FILE *, fpos_t *); + extern int fseek(FILE *, long int, int); + extern int fsetpos(FILE *, const fpos_t *); + extern long int ftell(FILE *); + extern void rewind(FILE *); + extern void clearerr(FILE *); + extern int feof(FILE *); + extern int ferror(FILE *); + extern void perror(const char *); + extern size_t fread(void *, size_t, size_t, FILE *); + extern size_t fwrite(const void *, size_t, size_t, FILE *); + extern int __flsbuf(unsigned char, FILE *); + extern int __filbuf(FILE *); + extern int fileno(FILE *); + extern FILE *fdopen(int, const char *); + extern int getw(FILE *); + extern int putw(int, FILE *); + extern int pclose(FILE *); + extern FILE *popen(const char *, const char *); + extern char *tempnam(const char *, const char *); + extern char *ctermid(char *); + extern char *cuserid(char *); + extern int nl_fprintf(FILE *, const char * ,...); + extern int nl_fscanf(FILE *, const char * ,...); + extern int nl_printf(const char * ,...); + extern int nl_scanf(const char * ,...); + extern int nl_sprintf(char *, const char * ,...); + extern int nl_sscanf(const char *, const char * ,...); + extern unsigned char *__bufendtab[]; +} +extern "C" { + extern int __nl_char_size; + typedef struct { + int quot; + int rem; + } div_t; + typedef struct { + long int quot; + long int rem; + } ldiv_t; + typedef unsigned int wchar_t; + extern double atof(const char *); + extern int atoi(const char *); + extern long int atol(const char *); + extern double strtod(const char *, char **); + extern long int strtol(const char *, char **, int); + extern unsigned long int strtoul(const char *, char **, int); + extern int rand(void); + extern void srand(unsigned int); + extern int atexit(void (*) (void)); + extern void exit(int); + extern char *getenv(const char *); + extern int system(const char *); + inline int abs(int d) { return (d>0)?d:-d; } + extern div_t div(int, int); + extern ldiv_t ldiv(long int, long int); + extern long int labs(long int); + extern int mblen(const char *, size_t); + extern int mbtowc(wchar_t *, const char *, size_t); + extern int wctomb(char *, wchar_t); + extern size_t mbstowcs(wchar_t *, const char *, size_t); + extern size_t wcstombs(char *, const wchar_t *, size_t); + extern void free(void *); + extern void qsort(void *, size_t, size_t, int (*)(const void *, const void *)); + extern void abort(void); + extern void *bsearch(const void *, const void *, size_t, size_t, int (*) (const void *, const void *)); + extern void *calloc(size_t, size_t); + extern void *malloc(size_t); + extern void *realloc(void *, size_t); + extern void setkey(const char *); + extern void lcong48( unsigned short [] ); + extern double wcstod( const wchar_t *, wchar_t ** ); + extern long wcstol( const wchar_t *, wchar_t **, int ); + extern unsigned long wcstoul( const wchar_t *, wchar_t **, int ); + extern double drand48(void); + extern double erand48(unsigned short []); + extern long jrand48(unsigned short []); + extern long lrand48(void); + extern long mrand48(void); + extern long nrand48(unsigned short []); + extern void srand48(long); + extern unsigned short *seed48(unsigned short []); + extern int putenv(const char *); + extern int clearenv(void); + extern int getopt(int, char * const [], const char *); + extern char *getpass(const char *); + extern char *optarg; + extern int optind; + extern int opterr; + struct mallinfo { + int arena; + int ordblks; + int smblks; + int hblks; + int hblkhd; + int usmblks; + int fsmblks; + int uordblks; + int fordblks; + int keepcost; + }; + typedef struct { + unsigned int word1, word2, word3, word4; + } long_double; +extern "C" { + typedef long gid_t; + typedef long uid_t; + struct passwd { + char *pw_name; + char *pw_passwd; + uid_t pw_uid; + gid_t pw_gid; + char *pw_age; + char *pw_comment; + char *pw_gecos; + char *pw_dir; + char *pw_shell; + long pw_audid; + int pw_audflg; + }; + extern struct passwd *getpwuid(uid_t); + extern struct passwd *getpwnam(const char *); + struct s_passwd { + char *pw_name; + char *pw_passwd; + char *pw_age; + long pw_audid; + int pw_audflg; + }; + struct comment { + char *c_dept; + char *c_name; + char *c_acct; + char *c_bin; + }; + extern void setpwent(void); + extern void endpwent(void); + extern struct passwd *getpwent(void); + extern struct passwd *fgetpwent(FILE *); + extern struct s_passwd *getspwent(void); + extern struct s_passwd *getspwuid(int); + extern struct s_passwd *getspwaid(int); + extern struct s_passwd *getspwnam(char *); + extern struct s_passwd *fgetspwent(FILE *); +} +extern int errno; + extern "C" { + extern int errno; + } +extern "C" { + extern void perror(const char*); + extern int sys_nerr; + extern char *sys_errlist[]; + extern char *strerror (int); +} + extern const char *fcvt(double, size_t, int *, int *); + extern char *gcvt(double, size_t, char *); + extern char *ecvt(double, size_t, int *, int *); + extern char *nl_gcvt(double, size_t, char *, int); + extern char *_ldecvt(long_double, size_t, int *, int *); + extern char *_ldfcvt(long_double, size_t, int *, int *); + extern char *_ldgcvt(long_double, size_t, char *); + extern int getpw(int, char *); + extern long a64l(const char *); + extern char *l64a(long); + extern void l3tol(long *, const char *, int); + extern void ltol3(char *, const long *, int); + extern char *getmsg(int, int, int, char *, int); + extern double nl_atof(const char *, int); + extern double nl_strtod(const char *, char **, int); + extern char *ltostr(long, int); + extern char *ultostr(unsigned long, int); + extern char *ltoa(long); + extern char *ultoa(unsigned long); + extern void memorymap(int); + extern struct mallinfo mallinfo(void); + extern int mallopt(int, int); +} +typedef void * POINTER; +typedef FILE * FILE_PTR; +typedef void (*DISPLAYER) (POINTER obj, FILE_PTR fp, FILE_PTR errorFile) ; +typedef void (*DESTROYER) (POINTER obj, FILE_PTR errorFile) ; +typedef void (*RCOUNT_INC) (POINTER obj, FILE_PTR errorFile) ; +typedef int (*COMPARE) (POINTER obj1, POINTER obj2) ; +typedef unsigned long (*HASH_ADDR) (POINTER obj, FILE_PTR errorFile) ; +typedef unsigned long (*HASH_SKIP) (POINTER obj, FILE_PTR errorFile) ; +typedef POINTER + (*ACCESS_FCT) (POINTER target, POINTER sample, FILE_PTR errorFile) ; +typedef POINTER DATA_PTR; + typedef long dev_t; + typedef unsigned long ino_t; + typedef unsigned short mode_t; + typedef short nlink_t; + typedef long off_t; + typedef long pid_t; + typedef long time_t; + typedef int ssize_t; + typedef unsigned short __site_t; + typedef unsigned short __cnode_t; + typedef unsigned long clock_t; + typedef long key_t; + typedef unsigned short __ushort; + typedef long __daddr_t; + typedef char *__caddr_t; + typedef long __swblk_t; + typedef unsigned char u_char; + typedef unsigned short u_short; + typedef unsigned int u_int; + typedef unsigned long u_long; + typedef unsigned int uint; + typedef unsigned short ushort; + typedef __swblk_t swblk_t; + typedef __daddr_t daddr_t; + typedef __site_t site_t; + typedef __cnode_t cnode_t; + typedef __caddr_t caddr_t; + typedef long paddr_t; + typedef short cnt_t; + typedef unsigned int space_t; + typedef unsigned int prot_t; + typedef unsigned long cdno_t; + typedef unsigned short use_t; + typedef struct _physadr { int r[1]; } *physadr; + typedef struct _quad { long val[2]; } quad; + typedef short cpu_t; + typedef struct label_t { + int lbl_rp; + int lbl_sp; + int lbl_s[17]; + int lbl_ss[1]; + double lbl_sf[4]; + } label_t; + typedef char *dm_message; + typedef long aid_t; + typedef pid_t sid_t; + typedef long fd_mask; + typedef struct fd_set { + fd_mask fds_bits[ ((( 2048 )+(( (sizeof(fd_mask) * 8) )-1))/( (sizeof(fd_mask) * 8) )) ]; + } fd_set; +POINTER malloc (size_t size ) ; +POINTER calloc (size_t n , size_t size ) ; +void free (POINTER c ) ; +void mem_report (void ) ; +typedef int BOOLEAN; +typedef enum +{ + eNoErrors = -1, + eUnknownProcessingError = 0, + eAlgorithmFailure = 100, + eAlreadyLocked = 200, + eAttCount = 300, + eAttRedefinition = 400, + eBasicMatrixError = 500, + eBadAddress = 600, + eBadAttribute = 700, + eBadFileNumber = 800, + eBadMode = 900, + eBadVersion = 1000, + eColumnError = 1100, + eConstraintError = 1200, + eLBConstraintError = 1300, + eUBConstraintError = 1400, + eDatabaseError = 1500, + eDataExists = 1600, + eDataNotFound = 1700, + eDictError = 1800, + eDiffAtt = 1900, + eDomain = 2000, + eDuplicateAtt = 2100, + eDuplicateKey = 2200, + eElementMismatch = 2300, + eEmptyAtt = 2400, + eEmptyDict = 2450, + eEmptyLink = 2500, + eEmptyQueue = 2600, + eEmptyStack = 2700, + eEntityExists = 2800, + eEntityNotFound = 2900, + eEtaComputeError = 3000, + eEtaFileError = 3100, + eEtaInverseConsistency = 3200, + eFileExists = 3300, + eFileNotFound = 3400, + eFunctionMismatch = 3500, + eFunctionNotAvailable = 3600, + eFunctionNotFound = 3700, + eFunctionTypeConflict = 3800, + eGraphError = 3900, + eIllegalBMatrixOp = 4000, + eIllegalData = 4100, + eIllegalDeletion = 4200, + eIllegalDictOp = 4300, + eIllegalEtaFileOp = 4400, + eIllegalFunctionRequest = 4500, + eIllegalFunctionType = 4600, + eIllegalGraphOp = 4700, + eIllegalGraphType = 4800, + eIllegalIndex = 4900, + eIllegalInsertion = 5000, + eIllegalListOp = 5100, + eIllegalLPTokenOp = 5200, + eIllegalLPTokenType = 5300, + eIllegalMatrixOp = 5400, + eIllegalMatrixSize = 5500, + eIllegalMatrixState = 5600, + eIllegalMatrixType = 5700, + eIllegalNBMatrixOp = 5800, + eIllegalOperation = 5900, + eIllegalOption = 6000, + eIllegalOverload = 6100, + eIllegalSeek = 6200, + eIllegalType = 6300, + eIllegalVectorOp = 6400, + eIllegalVectorType = 6500, + eIllFormedADT = 6600, + eInconsistentData = 6700, + eInternalError = 6800, + eInUse = 6900, + eInvalidArgument = 7000, + eInvalidAtt = 7100, + eInvalidData = 7200, + eInvalidIndex = 7300, + eInvalidMatrixOp = 7400, + eInvalidOperation = 7500, + eInvalidOption = 7600, + eInvalidParam = 7700, + eInvalidVectorOp = 7800, + eKeyNotFound = 7900, + eLinkNotEmpty = 8000, + eListError = 8100, + eLockAccess = 8200, + eLockExists = 8300, + eLockNotFound = 8400, + eLockReadOnly = 8500, + eLockTrunc = 8600, + eLPTokenError = 8700, + eLPTokenMisuse = 8800, + eMatrixError = 8900, + eMatrixMismatch = 9000, + eMatrixMultiplicationError = 9100, + eMissingData = 9200, + eMysteryError = 9300, + eNameTooLong = 9400, + eNeverLocked = 9500, + eNoAccess = 9600, + eNoLockReq = 9800, + eNoMoreAtt = 9900, + eNoMoreElements = 10000, + eNonBasicMatrixError = 10100, + eNonInvertibleMatrix = 10200, + eNonsenseData = 10300, + eNoSuchKey = 10400, + eNotEnoughSpace = 10500, + eNotFetched = 10600, + eNotLocked = 10700, + eNotSupported = 10800, + eNullPointer = 10900, + eNullInternalPointer = 11000, + eNullCompare = 11050, + eNullData = 11070, + eNullDestroyer = 11100, + eNullDisplayer = 11200, + eNullFunction = 11300, + eRemove = 11400, + eRoundoff = 11500, + eQueueNotEmpty = 11600, + eSparseGraphError = 11700, + eStackError = 11800, + eStackNotEmpty = 11900, + eTLRSProceduralError = 12000, + eTooManyAtt = 12100, + eTooManyLocks = 12200, + eTypeConflict = 12300, + eUnexpectedType = 12400, + eUnixError = 12500, + eVectorMismatch = 12600, + eProcessingError = 15000, + eActionKludge = 15100, + eNotImplemented = 15200, + eNotStable = 15300, + eNotReleased = 15400, + eBeingWorkedOn = 15500 +} eErrorState; +extern "C" { +extern eErrorState spider_errno; +extern char err_string[]; +POINTER mallocate (size_t n ) ; +size_t pagesize (void ) ; +POINTER page_mallocate (void ) ; +POINTER make_memory_token (int size , int page_cnt, const char *name) ; +POINTER mem_malloc (POINTER mptr ) ; +void mem_free (POINTER mptr , POINTER obj ) ; +const char *get_double_string (char *buffer , double num ) ; +int spider_strcat (const char *proc , char *str1 , const char *str2 , int maxlen ) ; +void init_errors (void ) ; +void append_abort (const char *proc ) ; +void append_message (const char *proc , const char *msg ) ; +void set_errno (eErrorState err ) ; +void spider_perror (const char *proc , FILE_PTR errorFile ) ; +void append_not_implemented (const char *proc , int *target_errno ) ; +const char *GetBooleanString (BOOLEAN bool ) ;// ERROR - use of bool as identifier +double truncate_value (double x , double epsilon ) ; +double log2 (double x ) ; +int ceil_log2 (double x ) ; +int floor_log2 (double x ) ; +} +extern "C" { +extern char char80[], char128[], char160[], char512[]; +extern char char1000[], char2000[]; +extern char char320[]; +BOOLEAN Get_EM_StderrFlag (void ) ; +void Set_EM_StderrFlag (BOOLEAN printToStderr ) ; +void CheckReleaseState (eErrorState releaseState , const char *procName, FILE_PTR errorFile ) ; +void PrintErrorString (const char *errorString , FILE_PTR errorFile ) ; +const char *get_error_header (eErrorState errorState ) ; +void print_error_header (eErrorState errorState , FILE_PTR errorFile ) ; +void PrintErrorMessage (eErrorState errorState , const char *message , FILE_PTR errorFile ) ; +} +extern "C" { +extern short show_increment_rcount; +extern int errno; +extern int bmk_errno; +extern int ck_errno; +extern int db_errno; +extern int dict_errno; +extern int glh_errno; +extern int graph_errno; +extern int hash_errno; +extern int link_errno; +extern int lp_errno; +extern int matrix_errno; +extern int nbmk_errno; +extern int network_errno; +extern int queue_errno; +extern int set_kernel_errno; +extern int stack_errno; +} +extern "C" { +const char *spider_version_string (void ) ; +int spider_version (void ) ; +const char *spider_errstring (void ) ; +void append_perror (const char *s ) ; +void unix_perror (const char *s ) ; +} +typedef struct node a_dict_node, * DICT_NODE; +struct node { + POINTER info; + DICT_NODE left; + DICT_NODE right; + DICT_NODE prev; + DICT_NODE next; +}; +typedef struct tree a_dict, * DICT; +struct tree { + int size; + COMPARE comp; + DICT_NODE header; + DICT_NODE last_accessed; + DICT_NODE list_head; + DICT_NODE list_tail; +}; +typedef enum { PREORDER = -1, INORDER, POSTORDER } traversal_t; +extern "C" { +void dict_set_nopages (int desired_nopages ) ; +void dict_err (void ) ; +const char *traversal_string (traversal_t tr ) ; +DICT make_dictionary (COMPARE cmp ) ; +int dict_insert (POINTER item , DICT dict ) ; +int dict_delete (POINTER item , DICT dict ) ; +POINTER dict_access (POINTER item , DICT dict ) ; +POINTER dict_low (DICT dict ) ; +POINTER dict_nlow (DICT dict ) ; +POINTER dict_big (DICT dict ) ; +POINTER dict_nbig (DICT dict ) ; +POINTER dict_first (DICT dict ) ; +POINTER dict_next (DICT dict ) ; +POINTER dict_last (DICT dict ) ; +POINTER dict_prev (DICT dict ) ; +int clear_dictionary (DICT dict , DESTROYER destroy , FILE *errorFile ) ; +int dict_size (const a_dict *dict ) ; +POINTER dict_elem (int index , DICT dict ) ; +int dict_compare (DICT d1 , DICT d2 ) ; +DICT dict_copy (DICT di , COMPARE cmp ) ; +int dict_change_compare (DICT di , COMPARE cmp ) ; +int dict_height (DICT di ) ; +void dict_print_stats (FILE *fp , DICT di ) ; +void dict_print (FILE *fp , DICT di , traversal_t tr , DISPLAYER display ) ; +const char *dict_version (void ) ; +void init_dict_errors (void ) ; +const char *dict_errstring (void ) ; +void dict_append_perror (const char *s ) ; +void dict_perror (const char *s ) ; +extern int dict_errno; +} +typedef struct q_item { + struct q_item *next; + POINTER data; +} a_q_item, *Q_ITEM; +typedef struct { + int rcount; + Q_ITEM first; + Q_ITEM last; + int count; +} a_queue, *QUEUE; +extern "C" { +void queue_err (void) ; +void queue_set_nopages (int desired_nopages) ; +QUEUE make_queue (void ) ; +POINTER queue_look (const a_queue * Q ) ; +POINTER queue_last (const a_queue * Q ) ; +POINTER queue_remove (QUEUE Q ) ; +int queue_append (QUEUE Q , POINTER data ) ; +int queue_size (const a_queue * Q ) ; +void queue_destroy (POINTER ptr , FILE_PTR errorFile ) ; +void IncrementQRCount (POINTER ptr , FILE_PTR errorFile ) ; +const char *queue_version (void ) ; +void init_queue_errors (void ) ; +const char *queue_errstring (void ) ; +void queue_append_perror (const char *s ) ; +void queue_perror (const char *s ) ; +extern int queue_errno; +} +typedef struct s_item { + struct s_item *next; + POINTER data; +} a_s_item, *S_ITEM; +typedef struct stack { + int rcount; + S_ITEM top; + int count; +} a_stack, *STACK; +extern "C" { +void stack_err (void) ; +void stack_set_nopages (int desired_nopages) ; +STACK make_stack (void ) ; +POINTER stack_look (const a_stack * S ) ; +POINTER stack_pop (STACK S ) ; +int stack_push (STACK S , POINTER data ) ; +int stack_size (const a_stack * S ) ; +void stack_destroy (POINTER ptr , FILE_PTR errorFile ) ; +void IncrementSRCount (POINTER ptr , FILE_PTR errorFile ) ; +const char *stack_version (void ) ; +void init_stack_errors (void ) ; +const char *stack_errstring (void ) ; +void stack_append_perror (const char *s ) ; +void stack_perror (const char *s ) ; +extern int stack_errno; +} +typedef const char *(*STRINGER)(const void *ptr); +int default_compare(const void *p1, const void *p2); +void default_displayer(const void *ptr, FILE *fp, FILE *errorFile); +const char *default_stringer(const void *ptr); +const char *object_stringer(const void *ptr); +class object { + static long current_id; + static long next_id(); +protected: + void display2(ostream &fp = cout) const; + long id; +public: + object() { id = next_id(); } + object(const object &obj) { id = next_id(); } + virtual ~object() + { + if (799 >= 999 ) cout << "~object() executing..." << '\n'; ; + } + object & operator = (const object & obj) + { + return( *this ); + } + virtual int compare(const void *p2) const; + virtual void display(ostream & fp = cout) const + { + display2(fp); + } + operator char *() const; +}; +ostream & operator << (ostream & fp, object & obj); +int operator < (object & obj1, object & obj2); +int operator <= (object & obj1, object & obj2); +int operator > (object & obj1, object & obj2); +int operator >= (object & obj1, object & obj2); +int operator == (object & obj1, object & obj2); +int operator != (object & obj1, object & obj2); +void null_destroy(void *p, FILE *errorFile); +void object_destroy(void *p, FILE *errorFile); +int object_compare(const void *p1, const void *p2); +void object_display(const void *p, FILE *fp, FILE *errorFile); +class dict : public object { + class internal { + public: + DICT di; + int errno; + COMPARE compare_f; + DISPLAYER display_f; + DESTROYER destroy_f; + STRINGER string_f; + int count; + void append_error(int expr, const char *proc) + { + if (expr) dict_append_perror(proc); + errno = dict_errno; + } + void obj_error(int expr, const char *proc, const void *obj) + { + if (expr) { + dict_append_perror((*string_f)(obj)); + dict_append_perror(proc); + } + errno = dict_errno; + } + internal(COMPARE cmp, DESTROYER destroyer, + DISPLAYER displayer, STRINGER str_f) + {// ERROR - candidate for bad call + if (799 >= 800 ) cout << "Creating new dictionary..." << '\n'; ; + if (cmp == ((void*)0) ) cmp = &default_compare; + if (displayer == ((void*)0) ) displayer = &default_displayer; + if (str_f == ((void*)0) ) str_f = &default_stringer; + compare_f = cmp; + display_f = displayer; + destroy_f = destroyer; + string_f = str_f; + di = make_dictionary(compare_f); + append_error(di == ((void*)0) , "dict internal"); + if (di == ((void*)0) ) { + dict_perror("build dictionary"); + exit(errno); + } + count = 1; + } + ~internal() + { + if (799 >= 800 ) cout << "dict ~internal executing" << '\n'; ; + int err = clear_dictionary(di, destroy_f, (&__iob[2]) ); + append_error(err, "clear dictionary"); + if (err) dict_perror("dict ~internal"); + free((void *)di); + } + };// ERROR - candidate list for bad call + internal *rep; +protected: + int & errno() { return( rep->errno ); } + COMPARE compare_f() { return( rep->compare_f ); } + DISPLAYER display_f() { return( rep->display_f ); } + DESTROYER destroy_f() { return( rep->destroy_f ); } + STRINGER string_f() { return( rep->string_f ); } + void append_error(int expr, const char *proc) + { + rep->append_error(expr, proc); + } + void obj_error(int expr, const char *proc, const void *obj) + { + rep->obj_error(expr, proc, obj); + } +public: + static int err; + static int val; + static void *p; + dict() + { + if (799 >= 800 ) cout << "Default constructor executing..." << '\n'; ; + rep = new internal( &default_compare, &null_destroy, + &default_displayer, &default_stringer);// ERROR - no matching fn call + } + dict(COMPARE cmp, + DESTROYER destroyer = ((void*)0) , + DISPLAYER displayer = &default_displayer, + STRINGER str_f = &default_stringer) + {// ERROR - invalid type for default argument -- not expecting const + rep = new internal(cmp, destroyer, displayer, str_f); + } + dict(const dict &di2) + { + rep = di2.rep; + rep->count ++; + if (799 >= 800 ) cout << "Incrementing count to " << rep->count << '\n'; ; + } + dict & operator = (const dict &di2) + { + di2.rep->count ++; + if (799 >= 800 ) cout << "Incrementing di2 count to " << di2.rep->count << '\n'; ; + if (799 >= 800 ) cout << "Decrementing lvalue count to " << rep->count-1 << '\n'; ; + if (--rep->count <= 0) { + delete rep; + } + rep = di2.rep; + return( *this ); + } + ~dict() + { + if (799 >= 800 ) cout << "~dict executing..." << '\n'; ; + if (799 >= 800 ) cout << "Decrementing dict::internal count to " << rep->count-1 << '\n'; ; + if (--rep->count <= 0) delete rep; + } + int insert(POINTER item) + { + err = dict_insert(item, rep->di); + obj_error(err, "insert", item); + return errno(); + } + int remove(POINTER item) + { + err = dict_delete(item, rep->di); + obj_error(err, "remove", item); + return errno(); + } + POINTER access(POINTER item) + { + p = dict_access(item, rep->di); + obj_error(p == ((void*)0) , "access", item); + return(p); + } + POINTER low() + { + p = dict_low(rep->di); + append_error(p == ((void*)0) , "low"); + return(p); + } + POINTER nlow() + { + p = dict_nlow(rep->di); + append_error(p == ((void*)0) , "nlow"); + return(p); + } + POINTER big() + { + p = dict_big(rep->di); + append_error(p == ((void*)0) , "big"); + return(p); + } + POINTER nbig() + { + p = dict_nbig(rep->di); + append_error(p == ((void*)0) , "nbig"); + return(p); + } + POINTER first() + { + p = dict_first(rep->di); + append_error(p == ((void*)0) , "first"); + return(p); + } + POINTER last() + { + p = dict_last(rep->di); + append_error(p == ((void*)0) , "last"); + return(p); + } + POINTER next() + { + p = dict_next(rep->di); + append_error(p == ((void*)0) , "next"); + return(p); + } + POINTER prev() + { + p = dict_prev(rep->di); + append_error(p == ((void*)0) , "prev"); + return(p); + } + int clear(DESTROYER destroy, FILE *fp = (&__iob[2]) ) + { + err = clear_dictionary(rep->di, destroy, fp); + append_error(err, "clear"); + return errno(); + } + int clear(FILE *fp = (&__iob[2]) ) + { + err = clear_dictionary(rep->di, rep->destroy_f, fp); + append_error(err, "clear"); + return errno(); + } + int size() + { + val = dict_size(rep->di); + append_error(val < 0, "size"); + return(val); + } + POINTER elem(int index) + { + p = dict_elem(index, rep->di); + append_error(p == ((void*)0) , "elem"); + return(p); + } + int compare(dict &di2) + { + val = dict_compare(rep->di, di2.rep->di); + return(val); + } + int height() + { + val = dict_height(rep->di); + append_error(val < 0, "height"); + return(val); + } + const char * version() + { + return( dict_version() ); + } + void display(FILE *fp = (&__iob[1]) ) + { + dict_print_stats(fp, rep->di); + } + void print(FILE *fp = (&__iob[1]) , traversal_t tr = INORDER) + { + fprintf(fp, "====== DICTIONARY (count=%d) ======\n", + rep->count); + dict_print(fp, rep->di, tr, rep->display_f); + } + void print(traversal_t tr, FILE *fp = (&__iob[1]) ) + { + fprintf(fp, "====== DICTIONARY (count=%d) ======\n", + rep->count); + dict_print(fp, rep->di, tr, rep->display_f); + } + void error(const char *s = "class dict") + { + dict_errno = errno(); + dict_perror(s); + errno() = 0; + } + void error_append(const char *s = "class dict") + { + dict_append_perror(s); + } + const char * errstring() + { + return( dict_errstring() ); + } +}; +ostream & operator << (ostream & fp, traversal_t tr); +class queue : public object { + class internal { + public: + QUEUE Q; + QUEUE Q2; + int errno; + DISPLAYER display_f; + DESTROYER destroy_f; + STRINGER string_f; + int count; + swap() + { + QUEUE tmp = Q; + Q = Q2; + Q2 = tmp; + } + void append_error(int expr, const char *proc) + { + if (expr) queue_append_perror(proc); + errno = queue_errno; + } + void obj_error(int expr, const char *proc, const void *obj) + { + if (expr) { + queue_append_perror((*string_f)(obj)); + queue_append_perror(proc); + } + errno = queue_errno; + } + internal(DESTROYER destroyer, + DISPLAYER displayer, STRINGER str_f) + {// ERROR - candidate for bad call + if (799 >= 800 ) cout << "Creating new queue..." << '\n'; ; + if (displayer == ((void*)0) ) displayer = &default_displayer; + if (str_f == ((void*)0) ) str_f = &default_stringer; + display_f = displayer; + destroy_f = destroyer; + string_f = str_f; + Q = make_queue(); + append_error(Q == ((void*)0) , "queue internal"); + errno = queue_errno; + if (Q == ((void*)0) ) { + queue_perror("build queue"); + exit(errno); + } + Q2 = make_queue(); + append_error(Q2 == ((void*)0) , "queue internal"); + if (Q2 == ((void*)0) ) { + queue_perror("build second queue"); + exit(errno); + } + count = 1; + } + ~internal() + { + if (799 >= 800 ) cout << "queue ~internal executing" << '\n'; ; + while ((p = queue_remove(Q)) != ((void*)0) ) { + if (destroy_f != ((void*)0) ) { + (*destroy_f)((POINTER)&p, (&__iob[2]) ); + } + } + queue_errno = 0; + queue_destroy((POINTER)&Q, (&__iob[2]) ); + if (queue_errno) { + append_error(queue_errno, + "queue_destroy(Q)"); + queue_perror("queue ~internal"); + } + queue_errno = 0; + queue_destroy((POINTER)&Q2, (&__iob[2]) ); + if (queue_errno) { + append_error(queue_errno, + "queue_destroy(Q2)"); + queue_perror("queue ~internal"); + } + } + };// ERROR - list of candidates for bad call + internal *rep; +protected: + int & errno() { return( rep->errno ); } + DISPLAYER display_f() { return( rep->display_f ); } + DESTROYER destroy_f() { return( rep->destroy_f ); } + STRINGER string_f() { return( rep->string_f ); } + void append_error(int expr, const char *proc) + { + rep->append_error(expr, proc); + } + void obj_error(int expr, const char *proc, const void *obj) + { + rep->obj_error(expr, proc, obj); + } +public: + static int err; + static int val; + static void *p; + queue() + { + if (799 >= 800 ) cout << "Default constructor executing..." << '\n'; ; + rep = new internal( &null_destroy, + &default_displayer, &default_stringer);// ERROR - no matching fn for call + } + queue(DESTROYER destroyer = ((void*)0) , + DISPLAYER displayer = &default_displayer, + STRINGER str_f = &default_stringer) + {// ERROR - invalid type for default argument -- not expecting const + rep = new internal(destroyer, displayer, str_f); + } + queue(const queue &Q2) + { + rep = Q2.rep; + rep->count ++; + if (799 >= 800 ) cout << "Incrementing count to " << rep->count << '\n'; ; + } + queue & operator = (const queue &Q2) + { + Q2.rep->count ++; + if (799 >= 800 ) cout << "Incrementing Q2 count to " << Q2.rep->count << '\n'; ; + if (799 >= 800 ) cout << "Decrementing lvalue count to " << rep->count-1 << '\n'; ; + if (--rep->count <= 0) { + delete rep; + } + rep = Q2.rep; + return( *this ); + } + ~queue() + { + if (799 >= 800 ) cout << "~queue executing..." << '\n'; ; + if (799 >= 800 ) cout << "Decrementing queue::internal count to " << rep->count-1 << '\n'; ; + if (--rep->count <= 0) delete rep; + } + void error(const char *s = "class queue") + { + queue_errno = errno(); + queue_perror(s); + errno() = 0; + } + void error_append(const char *s = "class queue") + { + queue_append_perror(s); + } + const char * errstring() + { + return( queue_errstring() ); + } + int append(POINTER item) + { + err = queue_append(rep->Q, (POINTER)item); + obj_error(err, "append", item); + return errno(); + } + POINTER remove() + { + p = queue_remove(rep->Q); + append_error(p == ((void*)0) , "remove"); + return(p); + } + POINTER look(POINTER item) + { + p = queue_look(rep->Q); + append_error(p == ((void*)0) , "look"); + return(p); + } + POINTER last(POINTER item) + { + p = queue_last(rep->Q); + append_error(p == ((void*)0) , "last"); + return(p); + } + int size() + { + val = queue_size(rep->Q); + append_error(val < 0, "size"); + return(val); + } + const char * version() + { + return( queue_version() ); + } + void display(FILE *fp = (&__iob[1]) ) + { + int i = 1; + POINTER ptr; + fprintf(fp, "====== QUEUE DISPLAY (size %d) ======\n", + size()); + while (ptr = remove()) { + err = queue_append(rep->Q2, ptr); + if (err) { + obj_error(err, "append", ptr); + error("queue_append(rep->Q2)"); + } + fprintf(fp, "[%d] ", i++); + (*rep->display_f)(ptr, fp, (&__iob[2]) ); + } + rep->swap(); + } +}; +long object::current_id = 0; +long object::next_id() +{ + return( ++current_id ); +} +void object::display2(ostream & fp) const +{ + fp << "object #" << id; +} +ostream & operator << (ostream & fp, object & obj) +{ + obj.display(fp); + return(fp); +} +int object::compare(const void *p2) const +{ + const object & z2 = *(const object *) p2; + if (799 >= 1000 ) cout << "*** object::compare " << *this << " with " << z2 << '\n'; ; + return( id - z2.id ); +} +int operator < (object & obj1, object & obj2) +{ + if (obj1.compare( &obj2 ) < 0) return(1); + else return(0); +} +int operator <= (object & obj1, object & obj2) +{ + if (obj1.compare( &obj2 ) <= 0) return(1); + else return(0); +} +int operator > (object & obj1, object & obj2) +{ + if (obj1.compare( &obj2 ) > 0) return(1); + else return(0); +} +int operator >= (object & obj1, object & obj2) +{ + if (obj1.compare( &obj2 ) >= 0) return(1); + else return(0); +} +int operator == (object & obj1, object & obj2) +{ + if (obj1.compare( &obj2 ) == 0) return(1); + else return(0); +} +int operator != (object & obj1, object & obj2) +{ + if (obj1.compare( &obj2 ) != 0) return(1); + else return(0); +} +void null_destroy(void *p, FILE *errorFile) +{ +} +int object_compare(const void *p1, const void *p2) +{ + const object *obj1 = (const object *) p1; + if (799 >= 1000 ) cout << "*** Comparing " << *obj1 << " to address " << long(p2) << '\n'; ; + return( obj1->compare(p2) ); +} +void object_display(const void *p, FILE *fp, FILE *errorFile) +{ + cout << *(object *)p << '\n'; +} +void object_destroy(void *p, FILE *errorFile) +{ + object **pObj = (object **)p; + object *obj = *pObj; + if (obj == ((void*)0) ) { + if (799 >= 10 ) cout << "+ object_destroy: NIL object passed in" << '\n'; ; + return; + } + if (799 >= 998 ) cout << "+ object_destroy: delete obj:" << '\n'; ; + if (799 >= 998 ) cout << *obj << '\n'; ; + if (799 >= 998 ) cout << "====================================================" << '\n'; ; + delete obj; + *pObj = ((void*)0) ; +} +int default_compare(const void *p1, const void *p2) +{ + long L1 = long(p1); + long L2 = long(p2); + if (799 >= 1000 ) cout << "+ default_compare " << long(p1) << ',' << long(p2) << '\n'; ; + if (L1 < L2) return(-1); + else if (L1 > L2) return(1); + else return(0); +} +const char * default_stringer(const void *ptr) +{ + static char buf[100]; + sprintf(buf, "ADDRESS %lu", (unsigned long)ptr); + return(buf); +} +void default_displayer(const void *ptr, FILE *fp, FILE *errorFile) +{ + fprintf(fp, "%s\n", default_stringer(ptr)); +} +object::operator char *() const +{ + const int max = 10; + const int maxChar = 16; + static char buf[max][maxChar]; + static int index = 0; + char *s = buf[index++ % max]; + sprintf(s, "object #%d", id); + return(s); +} +const char * object_stringer(const void *ptr) +{ + object & obj = *(object *)ptr; + return((char *)obj); +} +int dict::err; +int dict::val; +POINTER dict::p; +ostream & operator << (ostream & fp, traversal_t tr) +{ + fp << traversal_string(tr); + return(fp); +} +int queue::err; +int queue::val; +POINTER queue::p; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash2.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash2.C new file mode 100644 index 000000000000..ad6e04029cc0 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash2.C @@ -0,0 +1,10 @@ +// Build don't link: +// GROUPS passed old-abort +// The compiler used to crash on this example. + +class x { +public: + x(); + static const x y[23]; +}; +const x x::y[23]; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash20.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash20.C new file mode 100644 index 000000000000..060be1c39f4d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash20.C @@ -0,0 +1,13 @@ +// Build don't link: +// GROUPS passed old-abort +#include <Complex.h> + +Complex ComputeVVself() +{ +Complex temp1; +Complex self[3][3]; + + self[1][2] = 100.0; + return self[1][2]; + +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash22.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash22.C new file mode 100644 index 000000000000..f7db97d43e91 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash22.C @@ -0,0 +1,11 @@ +// Build don't link: +// GROUPS passed old-abort +struct A { + void a1(); + void a2(); +}; + +struct B { + void A::a1(); // this used to die in chainon(), now grokdeclarator should// ERROR - cannot declare.* + void A::a2(); // should be fixed by the 930629 change.// ERROR - cannot declare.* +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash23.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash23.C new file mode 100644 index 000000000000..03ffee666a3f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash23.C @@ -0,0 +1,15 @@ +// Build don't link: +// GROUPS passed old-abort +// This used to die in chainon; it shouldn't any more. + +class A +{ +public: + class B { + public: + void f (); + void g (int); + }; + void B::f () {}// ERROR - .* + void B::g (int val) {}// ERROR - .* +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash24.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash24.C new file mode 100644 index 000000000000..af1c3010229f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash24.C @@ -0,0 +1,19 @@ +// Build don't link: +// Special g++ Options: -O +// GROUPS passed old-abort +// gcc puts the array into a register, and then the store_bit_field () code +// in expmed.c gets confused when it tries to store zero past the end of the +// register (because the index is past the array bounds). It ends up calling +// store_split_bit_field, which then aborts, because we don't have a split bit +// field. +// +// Seems easiest to detect this case in the front end, i.e. access outside the +// array bounds, and then force the array to be allocated on the stack instead +// of a register. + +main() +{ + char i[1]; + + i[1] = 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash25.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash25.C new file mode 100644 index 000000000000..625eaf847077 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash25.C @@ -0,0 +1,18 @@ +// Build don't link: +// GROUPS passed old-abort +class memo{ +public: + static int rep; +}; + +class port_head : public memo { +public: + static int rep; + unsigned cap(); +}; + +class buff_head : private port_head { +public: + static int rep; + port_head::cap; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash26.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash26.C new file mode 100644 index 000000000000..9b6643debe48 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash26.C @@ -0,0 +1,11 @@ +// Build don't link: +// GROUPS passed old-abort +struct B { + B(); +}; + +class C : virtual public B +{ + public: + C() { } +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash27.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash27.C new file mode 100644 index 000000000000..62acbe03e199 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash27.C @@ -0,0 +1,20 @@ +// Build don't link: +// GROUPS passed old-abort +class First { +public: + First(const First& a); +}; + +class Second { + int i; + First f; +public: + ~Second() {} + Second func(); +}; + +void foo() +{ + extern Second x; + x = x.func(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash28.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash28.C new file mode 100644 index 000000000000..08adee9308a5 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash28.C @@ -0,0 +1,12 @@ +// Build don't link: +// GROUPS passed old-abort + class abc + { + public: + void F() { return; } + + private: + typedef int myint; + typedef struct { int b; } mystruct; + typedef union { int c; } myunion; + }; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash29.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash29.C new file mode 100644 index 000000000000..855dd990be19 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash29.C @@ -0,0 +1,18 @@ +// Build don't link: +// GROUPS passed old-abort + +union Value +{ + Value(){} +}; + +struct GlobalAddress +{ + GlobalAddress(Value *nvar){}// ERROR - .* +};// ERROR - candidates .* + +main() +{ + new GlobalAddress(Value()); // internal error occured here// ERROR - no matching function .* + //new GlobalAddress(new Value()); // This line is correct code +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash3.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash3.C new file mode 100644 index 000000000000..b3b8354b5436 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash3.C @@ -0,0 +1,14 @@ +// Build don't link: +// GROUPS passed old-abort +int strcmp(); + +extern "C" { + // dies in common_type, cuz the TREE_TYPE of t2 is 0, so it can't get its + // TYPE_MAIN_VARIANT value. + // <void_type 184510 void permanent VOID + // size <integer_cst 1844e0 type <integer_type 182548 int> constant permanent 0 + // align 1 symtab 0 + // pointer_to_this <pointer_type 1845e0> + +int strcmp(const char*, const char*); +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash30.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash30.C new file mode 100644 index 000000000000..ac73525536e3 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash30.C @@ -0,0 +1,9 @@ +// Build don't link: +// GROUPS passed old-abort +#include <String.h> + +main(void) { + + String a[] = {"Hello"}; + +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash31.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash31.C new file mode 100644 index 000000000000..d5b7e541e8a4 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash31.C @@ -0,0 +1,16 @@ +// Build don't link: +// GROUPS passed old-abort +struct mbuf { + struct mbuf *next; +}; + +void* malloc(int); +struct mbuf * +mbuf_allocate(int size) +{ + struct mbuf *bp; + + bp = (struct mbuf *) malloc( 10 /*(unsigned) (size + sizeof(struct mbuf))*/); + return bp; + +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash32.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash32.C new file mode 100644 index 000000000000..ebca5a4f6fab --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash32.C @@ -0,0 +1,5 @@ +// Build don't link: +// Special g++ Options: -fshort-enums +// GROUPS passed old-abort +enum Bool { FALSE, TRUE }; +Bool foo () { return TRUE; } diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash33.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash33.C new file mode 100644 index 000000000000..061f5a917943 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash33.C @@ -0,0 +1,6 @@ +// Build don't link: +// GROUPS passed old-abort +extern void foo(void *); +main() { + foo((struct bar *)0); +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash34.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash34.C new file mode 100644 index 000000000000..a147b6219df6 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash34.C @@ -0,0 +1,3 @@ +// Build don't link: +// GROUPS passed old-abort +operator int () {}// ERROR - .*// ERROR - .* diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash35.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash35.C new file mode 100644 index 000000000000..e32b7c13b590 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash35.C @@ -0,0 +1,20 @@ +// Build don't link: +// GROUPS passed old-abort +const unsigned int ENET_INTERRUPT_MID = 5; + +extern "C" void ENET_RxP(); + +class EnetReceiver + { + public: + friend void ENET_RxP(); + void receiveMessage(); + int *messagePointer; + }; + +void EnetReceiver::receiveMessage() + { + if (*((unsigned int*) messagePointer) == ENET_INTERRUPT_MID) + { + } + } diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash36.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash36.C new file mode 100644 index 000000000000..10534535405f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash36.C @@ -0,0 +1,7 @@ +// Build don't link: +// GROUPS passed old-abort +struct wait { int w_status; }; +int wait(); +extern "C" int wait(int*); + + diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash37.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash37.C new file mode 100644 index 000000000000..18eb64a76831 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash37.C @@ -0,0 +1,16 @@ +// Build don't link: +// GROUPS passed old-abort +typedef int _sigset_t; +extern "C" { + extern int sigaction(int signo, const struct sigaction *action_spec_p, struct sigaction *old_action_p); +} +extern "C" { + extern void foo(); +}; +class SS { + friend void foo(); +protected: + void goo(); +}; +inline void +SS::goo() { } diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash38.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash38.C new file mode 100644 index 000000000000..d124c21e4a96 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash38.C @@ -0,0 +1,42 @@ +// Build don't link: +// GROUPS passed old-abort +/* + I received the following message when using g++ (version 2.3.3): + + main.cc: In method 'Implicit<implicit<INTEGER,2>,3>::Implicit()': + main.cc: Internal compiler error 241. + main.cc: Please report this to 'bug-g++@prep.ai.mit.edu' + */ + +#include <stream.h> + +class INTEGER { +int x; +public: + typedef int BASE; + INTEGER(int y) : x(y) {} + INTEGER() {} + void encode() { cout << "Integer encoder";} + int operator=(int y) { x=y; return x; } + operator int() {return x; } +}; + +template< class T, int n> class Implicit : public T { + public: + typedef typename T::BASE BASE; + Implicit(BASE value ): T(value) {}; + Implicit() : T() {}; + int myTag() { return n; } + void encode() { T::encode(); } + BASE operator=(BASE t) { return T::operator=(t); } +}; + +main() +{ + Implicit<Implicit<INTEGER, 2> , 3> y; + + y = 10; +}; + + + diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash39.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash39.C new file mode 100644 index 000000000000..f267abd61476 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash39.C @@ -0,0 +1,8 @@ +// Build don't link: +// Special g++ Options: -w +// GROUPS passed old-abort +#include <GetOpt.h> +#include <String.h> +class foo {public: foo () {}}; +class bar {public: bar (foo& dflt);}; +class baz: public bar {public: baz (): bar (foo ()) {}}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash4.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash4.C new file mode 100644 index 000000000000..1f8a3ffc5324 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash4.C @@ -0,0 +1,6 @@ +// Build don't link: +// GROUPS passed old-abort +typedef struct Thing { + Thing(); + int x; +} Thing; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash40.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash40.C new file mode 100644 index 000000000000..dcebfbebade8 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash40.C @@ -0,0 +1,17 @@ +// Build don't link: +// GROUPS passed old-abort +class foo { + +public: + + virtual foo &operator <<(foo &(foo::*)(foo &)); +}; + + +foo &foo::operator<<(foo &(foo::*manip)(foo &)) +{ + + (this->*manip)(*this); + + return *this; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash41.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash41.C new file mode 100644 index 000000000000..5d533b866e28 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash41.C @@ -0,0 +1,11 @@ +// Build don't link: +// GROUPS passed old-abort +typedef void (**ppfn)(void); + +int main() { + ppfn fn; + + fn = new (void(*)(void)); + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash42.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash42.C new file mode 100644 index 000000000000..1b92f5d858d8 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash42.C @@ -0,0 +1,6 @@ +// GROUPS passed old-abort +// Build don't link: +int fn();// ERROR - ambiguates.* +int x; +int& fn() {// ERROR - new decl.* +return x;} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash43.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash43.C new file mode 100644 index 000000000000..5fe54231c89c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash43.C @@ -0,0 +1,25 @@ +// Build don't link: +// Special g++ Options: -g -fno-strict-prototype +// GROUPS passed old-abort +// excess errors test - XFAIL sparc64-*-elf +extern "C" { typedef int jmp_buf[12]; } + +enum Error { NO_ERROR }; +class ErrorHandler +{ + ErrorHandler *previous; + static ErrorHandler *error_stack; + jmp_buf error_buffer; +protected: + static void pop() + { + error_stack = error_stack->previous; + } +public: + jmp_buf *push() + { + previous = error_stack; + error_stack = this; + return &error_buffer; + } +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash44.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash44.C new file mode 100644 index 000000000000..dd3561909137 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash44.C @@ -0,0 +1,26 @@ +// Build don't link: +// GROUPS passed old-abort +template <class T> class bug { + +public: + void Foo(const int = 0); + void NotRedeclared(const int); + +private: + T TheItem; +}; + +template <class T> void bug<T>::NotRedeclared(const int) +{ +} + +template <class T> void bug<T>::Foo(const int) +{ +} + +main() +{ + bug<char> InstantiatedBug; + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash45.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash45.C new file mode 100644 index 000000000000..269a51908b25 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash45.C @@ -0,0 +1,3 @@ +// Build don't link: +// GROUPS passed old-abort +void foo() { static const char *const v[] = { 0 }; } diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash46.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash46.C new file mode 100644 index 000000000000..64d8d59ce218 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash46.C @@ -0,0 +1,26 @@ +// Build don't link: +// GROUPS passed old-abort +class Rational { +public: + Rational(int v): value(v) + { } + + int value; +}; +typedef Rational __Rational; + +extern int operator>(const Rational&, const Rational&); + +class V { +public: + class Rational { + public: + static int x(const __Rational& value); + }; +}; + +int +V::Rational::x(const __Rational& value) +{ + return value > 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash47.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash47.C new file mode 100644 index 000000000000..daf2bd8b74bd --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash47.C @@ -0,0 +1,93 @@ +// Build don't link: +// GROUPS passed old-abort +const int TRUE = 1; +const int FALSE = 0; + +class Rep { +protected: + Rep(): count(0) + { } + Rep(const Rep& other): count(0) + { } + + Rep& operator=(const Rep& other) + { /* DO NOT copy over other.count */ + return *this; } + +public: // TODO - for now + // Because it is to hard to restrict these operations to the descendants + // of Rep<REP> that we haven't named yet. So we just make them public. + void inc() + { count++; } + void dec() + { if (0 == --count) delete this; } +private: + unsigned count; +}; + +template<class REP> +class Ref { +public: + Ref(): rep(0) + { } + Ref(const Ref<REP>& other): rep(other.rep) + { if (rep) rep->inc(); } + ~Ref() + { if (rep) rep->dec(); + rep = 0; } + + Ref<REP>& operator=(const Ref<REP>& other) + { if (rep != other.rep) { + if (rep) rep->dec(); + rep = other.rep; + if (rep) rep->inc(); } + return *this; } + + bool null() const + { return 0 == rep ? TRUE: FALSE; } + bool valid() const + { return 0 != rep ? TRUE: FALSE; } + + REP* operator->() const // should be a valid() reference + { return rep; } + operator REP*() const; // should be a valid() reference + +protected: + REP *rep; + + Ref(REP *r): rep(r) + { if (rep) rep->inc(); } + + Ref<REP>& operator=(REP *r) + { if (rep != r) { + if (rep) rep->dec(); + rep = r; + if (rep) rep->inc(); } + return *this; } +}; + +template<class REP> +Ref<REP>::operator REP*() const // should be a valid() reference +{ return rep; } + +template<class REP> +inline int +operator==(const Ref<REP>& a, const Ref<REP>& b) +{ return (REP *) a == (REP *) b; } + +template<class REP> +inline int +operator!=(const Ref<REP>& a, const Ref<REP>& b) +{ return (REP *) a != (REP *) b; } + +class XRep: public Rep { +public: + int i; +}; + +main() +{ + Ref<XRep> y; + + return y != y; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash48.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash48.C new file mode 100644 index 000000000000..20882a80a533 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash48.C @@ -0,0 +1,21 @@ +// Build don't link: +// GROUPS passed old-abort +class internal { + int field; + int anotherfield; +}; // ERROR - candidates are + +class bug { + internal* numbers; + bug(int size); +}; // ERROR - several errors + +bug::bug(int size) +{ // ERROR - candidates + numbers = new internal(size * size);// ERROR - no match.* +} + +main() +{ + bug test;// ERROR - no match +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash49.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash49.C new file mode 100644 index 000000000000..5a8e11f4a42c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash49.C @@ -0,0 +1,12 @@ +// Build don't link: +// GROUPS passed old-abort +#include<iostream.h> + +const /* int */ keys = 10; +const /* int */ key[keys] = {6, key[1], 2, keys, 1, 7, 6, key[2], key[8]}; + +void main() +{ // ERROR - return type for main + for(int i = 0; i < keys;) cout << key[i++] << " "; + endl(cout); +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash5.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash5.C new file mode 100644 index 000000000000..d884189f6b84 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash5.C @@ -0,0 +1,106 @@ +// Build don't link: +// GROUPS passed old-abort +// Should have been fixed by: +// +// Sun Jun 13 12:55:22 1993 Brendan Kehoe (brendan@lisa.cygnus.com) +// +// * cp-cvt.c (build_default_binary_type_conversion): Look deeper into +// what ARG1 and ARG2 are if they're POINTER_TYPEs. + +volatile void exit(int); + +class CountableSet +{ + public: + virtual ~CountableSet() { } +}; + +template<class T> +class FixedSet : virtual public CountableSet +{ + public: + virtual int Get(int, T&) = 0; + virtual ~FixedSet() { } +}; + +class ShrinkableSet +{ + public: + virtual int Remove(int) = 0; +}; + +template<class T> +class PVSet : virtual public FixedSet<T>, virtual public ShrinkableSet +{ + public: + virtual void Append(const T&) = 0; + virtual void operator+=(const T& a) { Append(a); } + virtual ~PVSet() { } +}; + +template<class T> +class MutSet : virtual public FixedSet<T>, virtual public FixedSet<T *> +{ + protected: + typedef T *Tp; + + public: + void Append(const Tp& tp) { Append(*tp); } + + T& Access(int p) + { + Tp tp; + Get(p, tp); + return *tp; + } + virtual ~MutSet() { } +}; + +template <class T> +class SimpleSet : virtual public MutSet<T> +{ + protected: + T *array; + int size; + + virtual void Allocate(int s) + { + array = new T[s]; + } + public: + SimpleSet() + { + size = 0; + array = ((void*)0) ; // ERROR - implicit conversion + } + int Get(int p, T& t) + { + t = array[p-1]; + return 1; + } + int Get(int p, T *& t) + { + t = &array[p-1]; + return 1; + } + inline void Append(const T& a) + { + array[size-1] = a; + } + inline int Remove(int n) { return 0; } +}; + +class Dummy +{ + public: + Dummy() {} +}; + +main() +{ + SimpleSet<Dummy *> bs1; + int i, j; + Dummy foo; + + bs1+=&foo;// ERROR - no .* +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash50.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash50.C new file mode 100644 index 000000000000..58695a2a330d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash50.C @@ -0,0 +1,29 @@ +// Build don't link: +// GROUPS passed old-abort +class B + { +public: + int i; + }; +int operator & (const B &s) { return ( s.i );}; + + + + + +class C + { +public: + C &operator = (const C &x) + { + return *this; + }; + }; + +C &(C::*DD)(const C &x) = &C::operator=; + +main() +{ + ⅅ + +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash51.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash51.C new file mode 100644 index 000000000000..3586eb425f78 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash51.C @@ -0,0 +1,24 @@ +// Build don't link: +// GROUPS passed old-abort +class obj; + +typedef obj *obj_t; + +class obj { +public: + obj( const obj& o ); +}; + +extern obj nowhere; + +class set: public obj { + unsigned bit_vector; +public: + set( const obj& o ); + set& operator|=( const int q ); +}; + +enum pin_enum { E_F, O_C, O_D, O_S, P_D, P_U, R, T, A, C }; + +set t_q = ( ( ( ( ( ( set( nowhere ) |= E_F ) |= O_C ) |= O_D ) |= O_S ) + |= P_U ) |= P_D ) |= T; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash52.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash52.C new file mode 100644 index 000000000000..d10afdcc43d7 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash52.C @@ -0,0 +1,13 @@ +// Build don't link: +// GROUPS passed old-abort +#include <iostream.h> + +class A { +public: + friend A f(A &a);// ERROR - ambiguates.* +}; + +A &f(A &a) {// ERROR - new decl.* + cout << "Blah\n"; +} // ERROR - non-void function + diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash53.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash53.C new file mode 100644 index 000000000000..163f8e6ced76 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash53.C @@ -0,0 +1,24 @@ +// Build don't link: +// GROUPS passed old-abort +class A +{ + public: + class B + { + public: + virtual ~B(); + }; +}; + +template<int I> +class C +{ + public: + class B + : public A::B + { + }; // bug2.cc:18: Internal compiler error 233. + // bug2.cc:18: Please submit a full bug report to `bug-g++@prep.ai.mit.edu'. +}; + +C<0> c; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash54.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash54.C new file mode 100644 index 000000000000..0b85fa1cc001 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash54.C @@ -0,0 +1,9 @@ +// Build don't link: +// GROUPS passed old-abort +main() +{ + int a[100], **p; + + p = &a[50];// ERROR - assignment to.* + +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash55.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash55.C new file mode 100644 index 000000000000..47a74249ef61 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash55.C @@ -0,0 +1,12 @@ +// Build don't link: +// GROUPS passed old-abort + extern f(int);// ERROR - ambiguates.* + + int& f(int x) + {// ERROR - new declaration.* + int local;// ERROR - warning + + local = x+2; + + return local; + } diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash56.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash56.C new file mode 100644 index 000000000000..7b470678a78f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash56.C @@ -0,0 +1,383 @@ +// Build don't link: +// GROUPS passed old-abort +const bool FALSE = 0; +const bool TRUE = 1; +class ListDProto { +public: + ListDProto(); + ListDProto(const ListDProto&); + virtual ~ListDProto(); + void operator=(const ListDProto&); + unsigned length() const; + bool empty() const; + void clear(); + void remove_head(); + void remove_tail(); + class link; + class Vix { + public: + Vix(); + friend int operator==(void *v, const Vix& x) + { return v == x.item; }// ERROR - list of candidates + friend int operator==(const Vix& x, void *v) + { return v == x.item; }// ERROR - candidate for call + friend int operator!=(void *v, const Vix& x) + { return v != x.item; } + friend int operator!=(const Vix& x, void *v) + { return v != x.item; } + friend int operator==(const Vix& x1, const Vix& x2) + { return x1.owner == x2.owner && x1.item == x2.item; }// ERROR - candidate for call + friend int operator!=(const Vix& x1, const Vix& x2) + { return x1.owner != x2.owner || x1.item != x2.item; } + bool first; + bool last; + protected: + friend class ListDProto; + Vix(const ListDProto *o, link *i); + const ListDProto *owner; + private: + link *item; + }; + enum Action { NORMAL, REMOVE_CURRENT }; + Vix first() const; + void first(Vix& x) const; + void next(Vix& x) const;// ERROR - candidate for call + void next(Vix& x, Action a = NORMAL);// ERROR - list of candidates + Vix last() const; + void last(Vix& x) const; + void prev(Vix& x) const; + void prev(Vix& x, Action a = NORMAL); +protected: + struct link { + link *next; + link *prev; + link(link *n = 0, link *p = 0); + virtual ~link(); + private: + link(const link&); + void operator=(const link&); + }; + unsigned count; + link *list_head; + link *list_tail; + virtual link *copy_item(link *old_item) const = 0; + void prepend(link *item); + void append(link *item); + void prepend(const ListDProto& proto); + void append(const ListDProto& proto); + void remove(link *item); + link *ref(const Vix&) const; +}; +template<class T> +class ListD: public ListDProto { +public: + void prepend(const T& item); + void append(const T& item); + const T& head() const; + T& head(); + void head(T& fill) const; + void remove_head() + { ListDProto::remove_head(); } + void remove_head(T& fill); + const T& tail() const; + T& tail(); + void tail(T& fill) const; + void remove_tail() + { ListDProto::remove_tail(); } + void remove_tail(T& fill); + class Vix: public ListDProto::Vix { + public: + Vix(): ListDProto::Vix() + { } + protected: + friend class ListD<T>; + Vix(const ListDProto::Vix& x): ListDProto::Vix(x) + { } + }; + Vix first() const + { return ListDProto::first(); }; + void first(Vix& x) const + { ListDProto::first(x); }; + void next(Vix& x, ListDProto::Action a = NORMAL) const + { ListDProto::next(x, a); }// ERROR - .*// ERROR - .* + Vix last() const + { return ListDProto::last(); } + void last(Vix& x) const + { return ListDProto::last(x); } + void prev(Vix& x, ListDProto::Action a = NORMAL) const + { return ListDProto::prev(x, a); } +protected: + struct link_item: public ListDProto::link { + T item; + link_item(const T& i): link(0, 0), item(i) + { } + private: + link_item(const link_item&); + void operator=(const link_item&); + }; +public: + T& operator()(const Vix& x) + { link_item *li = (link_item *) ref(x); + return li->item; } + const T& operator()(const Vix& x) const + { link_item *li = (link_item *) ref(x); + return li->item; } +private: + ListDProto::link *copy_item(ListDProto::link *old_item) const; +}; +template<class T> +class SetLD: private ListD<T> { +public: + SetLD(); + SetLD(const ListD<T>&); + void add(const T& item); + void add(const ListD<T>& other); + void add(const SetLD<T>& other); + void remove(const T& item); + bool contains(const T& item) const; + ListD<T>::length; + ListD<T>::empty; + ListD<T>::clear; + typedef ListD<T>::Vix Vix; + ListD<T>::first; + ListD<T>::next; + ListD<T>::operator(); +}; +extern "C" { +extern void __eprintf (const char *, const char *, unsigned, const char *); +} +extern "C" { +extern void __eprintf (const char *, const char *, unsigned, const char *); +} +template<class T> +void +ListD<T>::prepend(const T& item) +{ + link *newl = new link_item(item); + ListDProto::prepend(newl); +} +template<class T> +void +ListD<T>::append(const T& item) +{ + link *newl = new link_item(item); + ListDProto::append(newl); +} +template<class T> +const T& +ListD<T>::head() const +{ + ((void) (( 0 != list_head ) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "/home/wbaker/work/include/templates/ListD.body.h" , 50 , "0 != list_head" ), 0) )) ; + link_item *h = (link_item *) list_head; + return h->item; +} +template<class T> +T& +ListD<T>::head() +{ + ((void) (( 0 != list_head ) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "/home/wbaker/work/include/templates/ListD.body.h" , 59 , "0 != list_head" ), 0) )) ; + link_item *h = (link_item *) list_head; + return h->item; +} +template<class T> +void +ListD<T>::head(T& fill) const +{ + ((void) (( 0 != list_head ) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "/home/wbaker/work/include/templates/ListD.body.h" , 68 , "0 != list_head" ), 0) )) ; + link_item *h = (link_item *) list_head; + fill = h->item; +} +template<class T> +void +ListD<T>::remove_head(T& fill) +{ + head(fill); + remove_head(); +} +template<class T> +const T& +ListD<T>::tail() const +{ + ((void) (( 0 != list_tail ) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "/home/wbaker/work/include/templates/ListD.body.h" , 85 , "0 != list_tail" ), 0) )) ; + link_item *h = (link_item *) list_tail; + return h->item; +} +template<class T> +T& +ListD<T>::tail() +{ + ((void) (( 0 != list_tail ) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "/home/wbaker/work/include/templates/ListD.body.h" , 94 , "0 != list_tail" ), 0) )) ; + link_item *h = (link_item *) list_tail; + return h->item; +} +template<class T> +void +ListD<T>::tail(T& fill) const +{ + ((void) (( 0 != list_tail ) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "/home/wbaker/work/include/templates/ListD.body.h" , 103 , "0 != list_tail" ), 0) )) ; + link_item *h = (link_item *) list_tail; + fill = h->item; +} +template<class T> +void +ListD<T>::remove_tail(T& fill) +{ + ((void) (( 0 != list_tail ) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "/home/wbaker/work/include/templates/ListD.body.h" , 112 , "0 != list_tail" ), 0) )) ; + link_item *h = (link_item *) list_tail; + fill = h->item; +} +template<class T> +ListDProto::link * +ListD<T>::copy_item(ListDProto::link *old) const +{ + link_item *old_item = (link_item *) old; + link_item *new_item = new link_item(old_item->item); + return new_item; +} +template<class T> +SetLD<T>::SetLD(): +ListD<T>() +{ } +template<class T> +SetLD<T>::SetLD(const ListD<T>& other): +ListD<T>(other) +{ } +template<class T> +void +SetLD<T>::add(const T& item) +{ + if ( ! contains(item) ) + append(item); +} +template<class T> +void +SetLD<T>::add(const ListD<T>& other) +{ + ListD<T>::Vix x; + for (first(x); 0 != x; next(x)) + add(other(x)); +} +template<class T> +void +SetLD<T>::add(const SetLD<T>& other) +{ + const ListD<T>& lother = other; + add(lother); +} +template<class T> +void +SetLD<T>::remove(const T& item) +{ + Action a = NORMAL; + Vix x; + for (first(x); 0 != x && REMOVE_CURRENT != a; next(x, a)) + a = operator()(x) == item ? REMOVE_CURRENT: NORMAL;// ERROR - .* +} +template<class T> +bool +SetLD<T>::contains(const T& item) const +{ + Vix x; + for (first(x); 0 != x; next(x)) { + if (operator()(x) == item)// ERROR - .* + return TRUE; + } + return FALSE; +} +template<class T> +int +operator==(const SetLD<T>& a, const SetLD<T>& b) +{ + if (a.length() != b.length()) + return FALSE; + SetLD<T>::Vix x; + for (a.first(x); 0 != x; a.next(x)) { + if ( ! b.contains(a(x)) ) + return FALSE; + } + for (b.first(x); 0 != x; b.next(x)) { + if ( ! a.contains(b(x)) ) + return FALSE; + } + return TRUE; +} +template<class T> +int +operator!=(const SetLD<T>& a, const SetLD<T>& b) +{ return ! (a == b); } +template<class T> +int +operator<=(const SetLD<T>& a, const SetLD<T>& b) +{ + if (a.length() > b.length()) + return FALSE; + SetLD<T>::Vix x; + for (x=a.first(); 0 != x; a.next(x)) { + if ( ! b.contains(a(x)) ) + return FALSE; + } + return TRUE; +} +template<class T> +int +operator<(const SetLD<T>& a, const SetLD<T>& b) +{ + if (a.length() >= b.length()) + return FALSE; + return a <= b; +} +template<class T> +int +operator>(const SetLD<T>& a, const SetLD<T>& b) +{ return ! (a <= b); } +template<class T> +int +operator>=(const SetLD<T>& a, const SetLD<T>& b) +{ return ! (a < b); } +class String { }; +class IcaseString: public String { }; +class SetLD< IcaseString >: public SetLD< String > { public: SetLD (): SetLD< String >() { }; SetLD (const ListD< IcaseString >& other): SetLD< String >() { ListD< IcaseString >::Vix x; for (other.first(x); 0 != x; other.next(x)) add(other(x)); }; SetLD (const SetLD & other): SetLD< String >(other) { }; const IcaseString & operator()(const Vix& x) const { return ( IcaseString &) SetLD< String >::operator()(x); } }; typedef SetLD< String > SetLD_String_IcaseString_old_tmp99; typedef SetLD< IcaseString > SetLD_String_IcaseString_new_tmp99; +inline int operator== (const SetLD_String_IcaseString_new_tmp99& a, const SetLD_String_IcaseString_new_tmp99& b) +{// ERROR - candidate for call +const SetLD_String_IcaseString_old_tmp99& oa = a; +const SetLD_String_IcaseString_old_tmp99& ob = b; +return operator== (oa, ob); } +inline int operator!= (const SetLD_String_IcaseString_new_tmp99& a, const SetLD_String_IcaseString_new_tmp99& b) +{ +const SetLD_String_IcaseString_old_tmp99& oa = a; +const SetLD_String_IcaseString_old_tmp99& ob = b; +return operator!= (oa, ob); } +inline int operator< (const SetLD_String_IcaseString_new_tmp99& a, const SetLD_String_IcaseString_new_tmp99& b) +{ +const SetLD_String_IcaseString_old_tmp99& oa = a; +const SetLD_String_IcaseString_old_tmp99& ob = b; +return operator< (oa, ob); } +inline int operator<= (const SetLD_String_IcaseString_new_tmp99& a, const SetLD_String_IcaseString_new_tmp99& b) +{ +const SetLD_String_IcaseString_old_tmp99& oa = a; +const SetLD_String_IcaseString_old_tmp99& ob = b; +return operator<= (oa, ob); } +inline int operator> (const SetLD_String_IcaseString_new_tmp99& a, const SetLD_String_IcaseString_new_tmp99& b) +{ +const SetLD_String_IcaseString_old_tmp99& oa = a; +const SetLD_String_IcaseString_old_tmp99& ob = b; +return operator> (oa, ob); } +inline int operator>= (const SetLD_String_IcaseString_new_tmp99& a, const SetLD_String_IcaseString_new_tmp99& b) +{ +const SetLD_String_IcaseString_old_tmp99& oa = a; +const SetLD_String_IcaseString_old_tmp99& ob = b; +return operator>= (oa, ob); } ; +typedef SetLD<IcaseString> SLDiS; +static void +nop(int i) +{ + SetLD<IcaseString> x, y; + nop(x == y); + nop(x != y); +nop(x < y); +nop(x <= y); +nop(x > y); +nop(x >= y); +} + +template class SetLD<String>; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash57.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash57.C new file mode 100644 index 000000000000..48014c56892f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash57.C @@ -0,0 +1,13 @@ +// Build don't link: +// GROUPS passed old-abort +class foo { +private: + char buffer[1024]; +public: + foo(); +}; + +main() +{ + static foo& a = *(new foo); +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash58.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash58.C new file mode 100644 index 000000000000..922290f000cc --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash58.C @@ -0,0 +1,10 @@ +// Build don't link: +// GROUPS passed old-abort +class X { +public: +void doit(); +}; + +X::::doit()// ERROR - (syntax|parse) error.* +{ +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash59.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash59.C new file mode 100644 index 000000000000..ab6e5599d6a8 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash59.C @@ -0,0 +1,1374 @@ +// Build don't link: +// Special g++ Options: -w +// GROUPS passed old-abort +typedef char * __gnuc_va_list; +void va_end (__gnuc_va_list); +enum __va_type_classes { + __no_type_class = -1, + __void_type_class, + __integer_type_class, + __char_type_class, + __enumeral_type_class, + __boolean_type_class, + __pointer_type_class, + __reference_type_class, + __offset_type_class, + __real_type_class, + __complex_type_class, + __function_type_class, + __method_type_class, + __record_type_class, + __union_type_class, + __array_type_class, + __string_type_class, + __set_type_class, + __file_type_class, + __lang_type_class +}; +typedef __gnuc_va_list va_list; +typedef int jmp_buf[9 ]; +typedef int sigjmp_buf[9 +1]; +int setjmp (jmp_buf) ; +int _setjmp (jmp_buf) ; +int sigsetjmp (sigjmp_buf, int) ; +void longjmp (jmp_buf, int) ; +void _longjmp (jmp_buf, int) ; +void siglongjmp (sigjmp_buf, int) ; +const int BOR_C_DIR = 0; +const int BOR_C_REV = 1; +const int BOR_C = 0x1; +const int BOR_BD_DIR = (0<<1); +const int BOR_BD_REV = (1<<1); +const int BOR_BD = 0x2; +const int SERVICE_DATA = (1<<( 0 )) ; +const int SERVICE_CLASS1 = (1<<( 1 )) ; +const int SERVICE_CLASS2 = (1<<( 2 )) ; +const int SERVICE_CLASS20 = (1<<( 3 )) ; +const int SERVICE_VOICE = (1<<( 8 )) ; +const int SERVICE_ALL = (1<<( 9 )) -1; +const int VR_NORMAL = 0; +const int VR_FINE = 1; +const int VR_ALL = (1<<( VR_FINE+1 )) -1; +const int BR_2400 = 0; +const int BR_4800 = 1; +const int BR_7200 = 2; +const int BR_9600 = 3; +const int BR_12000 = 4; +const int BR_14400 = 5; +const int BR_ALL = (1<<( BR_14400+1 )) -1; +const int WD_1728 = 0; +const int WD_2048 = 1; +const int WD_2432 = 2; +const int WD_1216 = 3; +const int WD_864 = 4; +const int WD_ALL = (1<<( WD_864+1 )) -1; +const int LN_A4 = 0; +const int LN_B4 = 1; +const int LN_INF = 2; +const int LN_ALL = (1<<( LN_INF+1 )) -1; +const int DF_1DMR = 0; +const int DF_2DMR = 1; +const int DF_2DMRUNCOMP = 2; +const int DF_2DMMR = 3; +const int DF_ALL = (1<<( DF_2DMMR+1 )) -1; +const int EC_DISABLE = 0; +const int EC_ENABLE = 1; +const int EC_ALL = 0x3; +const int BF_DISABLE = 0; +const int BF_ENABLE = 1; +const int BF_ALL = 0x3; +const int ST_0MS = 0; +const int ST_5MS = 1; +const int ST_10MS2 = 2; +const int ST_10MS = 3; +const int ST_20MS2 = 4; +const int ST_20MS = 5; +const int ST_40MS2 = 6; +const int ST_40MS = 7; +const int ST_ALL = (1<<( ST_40MS+1 )) -1; +const int PPM_MPS = 0; +const int PPM_EOM = 1; +const int PPM_EOP = 2; +const int PPM_PRI_MPS = 4; +const int PPM_PRI_EOM = 5; +const int PPM_PRI_EOP = 6; +const int PPR_MCF = 1; +const int PPR_RTN = 2; +const int PPR_RTP = 3; +const int PPR_PIN = 4; +const int PPR_PIP = 5; +const int DLE = 16; +const int SUB = 26; +const int ETX = 3; +const int DC1 = 17; +const int DC2 = 18; +const int CAN = 24; +typedef int sigset_t; +typedef unsigned int speed_t; +typedef unsigned long tcflag_t; +typedef unsigned char cc_t; +typedef int pid_t; +typedef unsigned short mode_t; +typedef short nlink_t; +typedef long clock_t; +typedef long time_t; +typedef __SIZE_TYPE__ size_t; +typedef int ptrdiff_t; +typedef __wchar_t wchar_t; +extern unsigned int _mb_cur_max; +extern void abort( ); +extern int abs (int) ; +extern double atof (const char *) ; +extern int atoi (const char *) ; +extern long int atol (const char *) ; +extern char * bsearch (const void *, const void *, long unsigned int , long unsigned int , int (*) (const void *, const void *)) ; +extern void * calloc (long unsigned int , long unsigned int ) ; +extern void exit (int) ; +extern void free (void *) ; +extern char * getenv (const char *) ; +extern void * malloc (long unsigned int ) ; +extern int qsort (void *, long unsigned int , long unsigned int , int (*) (const void *, const void *)) ; +extern int rand( ); +extern void * realloc (void *, long unsigned int ) ; +extern int srand (unsigned int) ; +extern int mbtowc (__wchar_t *, const char *, long unsigned int ) ; +extern int wctomb (char *, __wchar_t ) ; +extern size_t mbstowcs (__wchar_t *, const char *, long unsigned int ) ; +extern size_t wcstombs (char *, const __wchar_t *, long unsigned int ) ; +extern int atexit (void (*) (void)); +extern long int labs (long int); +extern int putenv (char *); +extern double strtod (const char *, char **); +extern long int strtol (const char *, char **, int); +extern long unsigned int strtoul (const char *, char **, int); +extern int system (const char *); +extern char * strcat (char *, const char *) ; +extern char * strchr (const char *, int) ; +extern int strcmp (const char *, const char *) ; +extern char * strcpy (char *, const char *) ; +extern size_t strcspn (const char *, const char *) ; +extern char * strdup (const char *) ; +extern size_t strlen (const char *) ; +extern char * strncat (char *, const char *, long unsigned int ) ; +extern int strncmp (const char *, const char *, long unsigned int ) ; +extern char * strncpy (char *, const char *, long unsigned int ) ; +extern char * strpbrk (const char *, const char *) ; +extern char * strrchr (const char *, int) ; +extern size_t strspn (const char *, const char *) ; +extern char * strstr (const char *, const char *) ; +extern char * strtok (char *, const char *) ; +extern void * memchr (const void *, int, long unsigned int ); +extern int memcmp (const void *, const void *, long unsigned int ); +extern void * memcpy (void *, const void *, long unsigned int ); +extern void * memmove (void *, const void *, long unsigned int ); +extern void * memset (void *, int, long unsigned int ); +extern int strcoll (const char *, const char *); +extern char * strerror (int); +extern long unsigned int strxfrm (char *, const char *, long unsigned int ); +extern "C" { +extern void __eprintf (const char *, const char *, unsigned, const char *); +} +extern struct _iobuf { + int _cnt; + unsigned char *_ptr; + unsigned char *_base; + int _bufsiz; + short _flag; + char _file; +} _iob[]; +extern struct _iobuf *fopen (const char *, const char *) ; +extern struct _iobuf *fdopen (int, const char *) ; +extern struct _iobuf *freopen (const char *, const char *, struct _iobuf *) ; +extern struct _iobuf *popen (const char *, const char *) ; +extern struct _iobuf *tmpfile(); +extern long ftell (struct _iobuf *) ; +extern char *fgets (char *, int, struct _iobuf *) ; +extern char *gets (char *) ; +extern char *sprintf (char *, const char *, ...) ; +extern char *ctermid (char *) ; +extern char *cuserid (char *) ; +extern char *tempnam (const char *, const char *) ; +extern char *tmpnam (char *) ; +extern int fclose (struct _iobuf *); +extern int fflush (struct _iobuf *); +extern int fgetc (struct _iobuf *); +extern int fgetpos (struct _iobuf *, long *); +extern int fprintf (struct _iobuf *, const char *, ...); +extern int fputc (int, struct _iobuf *); +extern int fputs (const char *, struct _iobuf *); +extern long unsigned int fread (void *, long unsigned int , long unsigned int , struct _iobuf *); +extern int fscanf (struct _iobuf *, const char *, ...); +extern int fseek (struct _iobuf *, long int, int); +extern int fsetpos (struct _iobuf *, const long *); +extern long unsigned int fwrite (const void *, long unsigned int , long unsigned int , struct _iobuf *); +extern int pclose (struct _iobuf *); +extern void perror (const char *); +extern int printf (const char *, ...); +extern int puts (const char *); +extern int remove (const char *); +extern int rename (const char *, const char *); +extern void rewind (struct _iobuf *); +extern int scanf (const char *, ...); +extern void setbuf (struct _iobuf *, char *); +extern int setvbuf (struct _iobuf *, char *, int, long unsigned int ); +extern int sscanf (const char *, const char *, ...); +extern int vprintf (const char *, __gnuc_va_list); +extern int vsprintf (char *, const char *, __gnuc_va_list); +extern int vfprintf (struct _iobuf *, const char *, __gnuc_va_list); +extern int ungetc (int, struct _iobuf *); +extern int _flsbuf (unsigned int, struct _iobuf *); +extern int _filbuf (struct _iobuf *); +typedef long _G_clock_t; +typedef short _G_dev_t; +typedef long _G_fpos_t; +typedef unsigned short _G_gid_t; +typedef unsigned long _G_ino_t; +typedef unsigned short _G_mode_t; +typedef short _G_nlink_t; +typedef long _G_off_t; +typedef int _G_pid_t; +typedef int _G_ptrdiff_t; +typedef int _G_sigset_t; +typedef long unsigned int _G_size_t; +typedef long _G_time_t; +typedef unsigned short _G_uid_t; +typedef __wchar_t _G_wchar_t; +typedef int _G_ssize_t; +typedef int _G_wint_t; +typedef char * _G_va_list; +typedef signed char _G_int8_t; +typedef unsigned char _G_uint8_t; +typedef short _G_int16_t; +typedef unsigned short _G_uint16_t; +typedef long _G_int32_t; +typedef unsigned long _G_uint32_t; +const size_t NPOS = (size_t)(-1); +typedef void fvoid_t(); +typedef _G_wint_t wint_t; +enum capacity { default_size, reserve }; +extern "C" fvoid_t *set_new_handler(fvoid_t *); +extern fvoid_t *__new_handler; +extern "C" void __default_new_handler(); +inline void *operator new(size_t, void *place) { return place; } +inline void *operator new[](size_t, void *place) { return place; } +typedef unsigned char u_char; +typedef unsigned short u_short; +typedef unsigned int u_int; +typedef unsigned long u_long; +typedef unsigned short ushort; +typedef unsigned int uint; +typedef struct _physadr_t { int r[1]; } *physadr_t; +typedef struct label_t { + int val[2]; +} label_t; +typedef struct _quad_t { long val[2]; } quad_t; +typedef long daddr_t; +typedef char * caddr_t; +typedef unsigned long ino_t; +typedef short dev_t; +typedef long off_t; +typedef unsigned short uid_t; +typedef unsigned short gid_t; +typedef long key_t; +typedef char * addr_t; +typedef long fd_mask; +typedef struct fd_set { + fd_mask fds_bits[((( 256 )+(( (sizeof (fd_mask) * 8 ) )-1))/( (sizeof (fd_mask) * 8 ) )) ]; +} fd_set; +extern "C" { +extern int mkstemp(char *); +extern int strncasecmp(const char*, const char*, size_t); +extern int strcasecmp(const char*, const char*); +extern long random(void); +extern int seteuid(uid_t); +extern int setegid(gid_t); +extern int ftruncate(int, off_t); +extern int getdtablesize(void); +struct fd_set; +struct timeval; +extern int select(int,struct fd_set*,struct fd_set*,struct fd_set*,struct timeval*); +extern int ioctl(int, int, ...); +extern int fchown(int, uid_t, gid_t); +extern int gethostname(char*, int); +extern char* optarg; +extern int opterr; +extern int optind; +extern char* mktemp(char*); +extern void syslog(int, const char*, ...); +extern void vsyslog(int, const char*, va_list); +extern void closelog(void); +extern void openlog(const char*, int, int); +extern int fchmod(int, mode_t); +struct timezone; +struct timeval; +extern int gettimeofday(struct timeval*, struct timezone*); +extern void endpwent(void); +extern int getpeername(int,void*,int*); +extern int getsockname(int,void*,int*); +extern int socket(int, int, int); +extern int connect(int, const void*, int); +extern int flock(int, int); +} +typedef unsigned char fxBool; +inline int fxmin(int a, int b) { return (a < b) ? a : b; } +inline u_long fxmin(u_long a, u_long b) { return (a < b) ? a : b; } +inline u_int fxmin(u_int a, u_int b) { return (a < b) ? a : b; } +inline int fxmax(int a, int b) { return (a > b) ? a : b; } +inline u_long fxmax(u_long a, u_long b) { return (a > b) ? a : b; } +inline u_int fxmax(u_int a, u_int b) { return (a > b) ? a : b; } +extern "C" void _fxassert(const char*, const char*, int); +class fxObj { +public: + fxObj(); + virtual ~fxObj(); + void inc(); + void dec(); + u_long getReferenceCount(); + virtual const char* className() const; + int compare(const fxObj *) const; + virtual void subClassMustDefine(const char* method) const; +protected: + u_long referenceCount; +}; +inline fxObj::fxObj() { referenceCount = 0; } +inline void fxObj::inc() { ++referenceCount; } +inline void fxObj::dec() { + if ( referenceCount>0 ); else _fxassert( "Bogus object reference count" ,"../util/Obj.h",54); ; + if (0 >= --referenceCount) delete this; +} +inline u_long fxObj::getReferenceCount() { return referenceCount; } +class fxStr; +class fxTempStr { +public: + fxTempStr(fxTempStr const &other); + ~fxTempStr(); + friend fxTempStr operator|(fxStr const&, fxStr const&); + friend fxTempStr operator|(fxStr const&, char const*); + friend fxTempStr operator|(char const*, fxStr const&); + friend fxTempStr& operator|(const fxTempStr&, fxStr const& b); + friend fxTempStr& operator|(const fxTempStr&, char const* b); + operator char*() const; + operator int() const; + operator float() const; + operator double() const; + u_int length() const; +protected: + char indata[100]; + char* data; + u_int slength; + friend class fxStr; + fxTempStr(char const *, u_int, char const *, u_int); + fxTempStr& concat(char const* b, u_int bl); +}; +inline fxTempStr::operator char*() const { return data; } +inline fxTempStr::operator int() const { return atoi(data); } +inline fxTempStr::operator float() const { return float(atof(data)); } +inline fxTempStr::operator double() const { return double(atof(data)); } +inline u_int fxTempStr::length() const { return slength - 1; } +class fxStr { + friend class fxTempStr; +public: + fxStr(u_int l=0); + fxStr(char const *s); + fxStr(char const *s, u_int len); + fxStr(fxStr const&); + fxStr(int, char const* format); + fxStr(long, char const* format); + fxStr(float, char const* format); + fxStr(double, char const* format); + fxStr(const fxTempStr&); + ~fxStr(); + u_long hash() const; + operator char*() const + { return data; } + operator int() const + { return atoi(data); } + operator float() const + { return float(atof(data)); } + operator double() const + { return double(atof(data)); } + u_int length() const { return slength-1; } + char& operator[](u_int i) const + { if ( i<slength-1 ); else _fxassert( "Invalid Str[] index" ,"../util/Str.h",109); ; + return data[i]; } + void operator=(const fxTempStr& s); + void operator=(fxStr const& s); + void operator=(char const *s); + friend fxBool operator==(fxStr const&, fxStr const&); + friend fxBool operator==(fxStr const&, char const*); + friend fxBool operator==(fxStr const&, char *); + friend fxBool operator==(char const*, fxStr const&); + friend fxBool operator!=(fxStr const&, fxStr const&); + friend fxBool operator!=(fxStr const&, char const*); + friend fxBool operator!=(char const*, fxStr const&); + friend fxBool operator>=(fxStr const&, fxStr const&); + friend fxBool operator>=(fxStr const&, char const*); + friend fxBool operator>=(char const*, fxStr const&); + friend fxBool operator<=(fxStr const&, fxStr const&); + friend fxBool operator<=(fxStr const&, char const*); + friend fxBool operator<=(char const*, fxStr const&); + friend fxBool operator>(fxStr const&, fxStr const&); + friend fxBool operator>(fxStr const&, char const*); + friend fxBool operator>(char const*, fxStr const&); + friend fxBool operator<(fxStr const&, fxStr const&); + friend fxBool operator<(fxStr const&, char const*); + friend fxBool operator<(char const*, fxStr const&); + int compare(fxStr const *a) const { return ::compare(*this, *a); } + friend int compare(fxStr const&, fxStr const&); + friend int compare(fxStr const&, char const*); + friend int compare(char const*, fxStr const&); + friend fxTempStr& operator|(const fxTempStr&, fxStr const&); + friend fxTempStr& operator|(const fxTempStr&, char const*); + friend fxTempStr operator|(fxStr const&, fxStr const&); + friend fxTempStr operator|(fxStr const&, char const*); + friend fxTempStr operator|(char const*, fxStr const&); + fxStr copy() const; + fxStr extract(u_int start,u_int len) const; + fxStr cut(u_int start,u_int len); + fxStr head(u_int) const; + fxStr tail(u_int) const; + void lowercase(u_int posn=0, u_int len=0); + void raisecase(u_int posn=0, u_int len=0); + void remove(u_int posn,u_int len=1); + void resize(u_int len, fxBool reallocate = ((fxBool)0) ); + void setMaxLength(u_int maxlen); + void append(char a); + void append(char const *s, u_int len=0); + void append(const fxTempStr& s) + { append((char*)s, s.slength-1); } + void append(fxStr const& s) + { append((char*)s, s.slength-1); } + void insert(char a, u_int posn=0); + void insert(char const *, u_int posn=0, u_int len=0); + void insert(const fxTempStr& s, u_int posn=0) + { insert((char*)s, posn, s.slength-1); } + void insert(fxStr const& s, u_int posn=0) + { insert((char*)s, posn, s.slength-1); } + u_int next(u_int posn, char delimiter) const; + u_int next(u_int posn, char const *delimiters, u_int len=0) const; + u_int next(u_int posn, fxStr const& delimiters) const + { return next(posn, (char*)delimiters, delimiters.slength-1); } + u_int nextR(u_int posn, char delimiter) const; + u_int nextR(u_int posn, char const*, u_int len=0) const; + u_int nextR(u_int posn, fxStr const& delimiters) const + { return nextR(posn, (char*)delimiters, delimiters.slength-1); } + u_int skip(u_int posn, char a) const; + u_int skip(u_int posn, char const *, u_int len=0) const; + u_int skip(u_int posn, fxStr const& delimiters) const + { return skip(posn, (char*)delimiters, delimiters.slength-1); } + u_int skipR(u_int posn, char a) const; + u_int skipR(u_int posn, char const *, u_int len=0) const; + u_int skipR(u_int posn, fxStr const& delimiters) const + { return skipR(posn, (char*)delimiters, delimiters.slength-1); } + fxStr token(u_int & posn, char delimiter) const; + fxStr token(u_int & posn, char const * delimiters, + u_int delimiters_len = 0) const; + fxStr token(u_int & posn, fxStr const & delimiters) const + { return token(posn, delimiters.data, delimiters.slength-1); } + fxStr tokenR(u_int & posn, char delimiter) const; + fxStr tokenR(u_int & posn, char const * delimiters, + u_int delimiters_len = 0) const; + fxStr tokenR(u_int & posn, fxStr const & delimiters) const + { return tokenR(posn, delimiters.data, delimiters.slength-1); } +protected: + u_int slength; + char * data; + static char emptyString; + void fxStr::resizeInternal(u_int); + int findEndBuffer(const char *, u_int buflen) const; + int findBuffer(const char *buf, u_int buflen) const; + void bracketBuffer(const char *, u_int buflen, int &, int &) const; +}; +struct Class2Params { + u_int vr; + u_int br; + u_int wd; + u_int ln; + u_int df; + u_int ec; + u_int bf; + u_int st; + static u_int vrDISTab[2]; + static u_int dfDISTab[4]; + static u_int wdDISTab[8]; + static u_int lnDISTab[3]; + static u_int stDISTab[8]; + static u_int stDCSTab[8]; + static u_int brDISTab[8]; + static u_int brDCSTab[8]; + static u_int DISvrTab[2]; + static u_int DISdfTab[2]; + static u_int DISwdTab[4]; + static u_int DISlnTab[4]; + static u_int DISstTab[8]; + static u_int DISbrTab[16]; + static u_int DCSbrTab[16]; + static const char* bitRateNames[8]; + static const char* dataFormatNames[4]; + static const char* vresNames[2]; + static const char* pageWidthNames[8]; + static const char* pageLengthNames[4]; + static const char* scanlineTimeNames[8]; + Class2Params(); + int operator==(const Class2Params&) const; + int operator!=(const Class2Params&) const; + fxStr cmd() const; + void setFromDIS(u_int dis, u_int xinfo = 0); + void setFromDCS(u_int dcs, u_int xinfo = 0); + u_int getDCS() const; + fxBool is2D() const; + u_int pageWidth() const; + u_int transferSize(u_int ms) const; + u_int minScanlineSize() const; + fxStr encode() const; + void decode(const fxStr&); +}; +typedef struct { + unsigned short tiff_magic; + unsigned short tiff_version; + unsigned long tiff_diroff; +} TIFFHeader; +typedef struct { + unsigned short tdir_tag; + unsigned short tdir_type; + unsigned long tdir_count; + unsigned long tdir_offset; +} TIFFDirEntry; +typedef enum { + TIFF_NOTYPE = 0, + TIFF_BYTE = 1, + TIFF_ASCII = 2, + TIFF_SHORT = 3, + TIFF_LONG = 4, + TIFF_RATIONAL = 5, + TIFF_SBYTE = 6, + TIFF_UNDEFINED = 7, + TIFF_SSHORT = 8, + TIFF_SLONG = 9, + TIFF_SRATIONAL = 10, + TIFF_FLOAT = 11, + TIFF_DOUBLE = 12 +} TIFFDataType; +typedef struct tiff TIFF; +extern int fclose (struct _iobuf *); +extern int fflush (struct _iobuf *); +extern int fgetc (struct _iobuf *); +extern int fgetpos (struct _iobuf *, long *); +extern int fprintf (struct _iobuf *, const char *, ...); +extern int fputc (int, struct _iobuf *); +extern int fputs (const char *, struct _iobuf *); +extern long unsigned int fread (void *, long unsigned int , long unsigned int , struct _iobuf *); +extern int fscanf (struct _iobuf *, const char *, ...); +extern int fseek (struct _iobuf *, long int, int); +extern int fsetpos (struct _iobuf *, const long *); +extern long unsigned int fwrite (const void *, long unsigned int , long unsigned int , struct _iobuf *); +extern int pclose (struct _iobuf *); +extern void perror (const char *); +extern int printf (const char *, ...); +extern int puts (const char *); +extern int remove (const char *); +extern int rename (const char *, const char *); +extern void rewind (struct _iobuf *); +extern int scanf (const char *, ...); +extern void setbuf (struct _iobuf *, char *); +extern int setvbuf (struct _iobuf *, char *, int, long unsigned int ); +extern int sscanf (const char *, const char *, ...); +extern int vprintf (const char *, __gnuc_va_list); +extern int vsprintf (char *, const char *, __gnuc_va_list); +extern int vfprintf (struct _iobuf *, const char *, __gnuc_va_list); +extern int ungetc (int, struct _iobuf *); +extern int _flsbuf (unsigned int, struct _iobuf *); +extern int _filbuf (struct _iobuf *); +typedef void (*TIFFErrorHandler)(const char* module, const char* fmt, va_list); +typedef int (*TIFFReadWriteProc)(void*, char*, unsigned long); +typedef long (*TIFFSeekProc)(void*, long, int); +typedef int (*TIFFCloseProc)(void*); +typedef long (*TIFFSizeProc)(void*); +typedef int (*TIFFMapFileProc)(void*, char**, long*); +typedef void (*TIFFUnmapFileProc)(void*, char*, long); +extern "C" { +extern const char* TIFFGetVersion(); +extern void TIFFClose(TIFF*); +extern int TIFFFlush(TIFF*); +extern int TIFFFlushData(TIFF*); +extern int TIFFGetField(TIFF*, unsigned int, ...); +extern int TIFFVGetField(TIFF*, unsigned int, va_list); +extern int TIFFGetFieldDefaulted(TIFF*, unsigned int, ...); +extern int TIFFVGetFieldDefaulted(TIFF*, unsigned int, va_list); +extern int TIFFReadDirectory(TIFF*); +extern unsigned long TIFFScanlineSize(TIFF*); +extern unsigned long TIFFStripSize(TIFF*); +extern unsigned long TIFFVStripSize(TIFF*, unsigned long); +extern unsigned long TIFFTileRowSize(TIFF*); +extern unsigned long TIFFTileSize(TIFF*); +extern unsigned long TIFFVTileSize(TIFF*, unsigned long); +extern int TIFFFileno(TIFF*); +extern int TIFFGetMode(TIFF*); +extern int TIFFIsTiled(TIFF*); +extern long TIFFCurrentRow(TIFF*); +extern int TIFFCurrentDirectory(TIFF*); +extern int TIFFCurrentStrip(TIFF*); +extern int TIFFCurrentTile(TIFF*); +extern int TIFFReadBufferSetup(TIFF*, char*, unsigned long); +extern int TIFFLastDirectory(TIFF*); +extern int TIFFSetDirectory(TIFF*, int); +extern int TIFFSetField(TIFF*, unsigned int, ...); +extern int TIFFVSetField(TIFF*, unsigned int, va_list); +extern int TIFFWriteDirectory(TIFF *); +extern void TIFFPrintDirectory(TIFF*, struct _iobuf *, long = 0); +extern int TIFFReadScanline(TIFF*, unsigned char*, unsigned, unsigned = 0); +extern int TIFFWriteScanline(TIFF*, unsigned char*, unsigned, unsigned = 0); +extern int TIFFReadRGBAImage(TIFF*, + unsigned long, unsigned long, unsigned long*, int stop = 0); +extern TIFF* TIFFOpen(const char*, const char*); +extern TIFF* TIFFFdOpen(int, const char*, const char*); +extern TIFF* TIFFClientOpen(const char* name, const char* mode, + void* clientdata, + TIFFReadWriteProc readproc, TIFFReadWriteProc writeproc, + TIFFSeekProc seekproc, TIFFCloseProc closeproc, + TIFFSizeProc sizeproc, + TIFFMapFileProc mapproc, TIFFUnmapFileProc unmapproc); +extern const char* TIFFFileName(TIFF*); +extern void TIFFError(const char*, const char*, ...); +extern void TIFFWarning(const char*, const char*, ...); +extern TIFFErrorHandler TIFFSetErrorHandler(TIFFErrorHandler handler); +extern TIFFErrorHandler TIFFSetWarningHandler(TIFFErrorHandler handler); +extern unsigned int TIFFComputeTile(TIFF*, + unsigned long, unsigned long, unsigned long, unsigned int); +extern int TIFFCheckTile(TIFF*, + unsigned long, unsigned long, unsigned long, unsigned); +extern unsigned int TIFFNumberOfTiles(TIFF*); +extern int TIFFReadTile(TIFF*, + unsigned char*, + unsigned long, unsigned long, unsigned long, + unsigned int); +extern int TIFFWriteTile(TIFF*, + unsigned char*, + unsigned long, unsigned long, unsigned long, + unsigned int); +extern unsigned int TIFFComputeStrip(TIFF*, unsigned long, unsigned int); +extern unsigned int TIFFNumberOfStrips(TIFF*); +extern int TIFFReadEncodedStrip(TIFF*, unsigned, unsigned char*, unsigned long); +extern int TIFFReadRawStrip(TIFF*, unsigned, unsigned char*, unsigned long); +extern int TIFFReadEncodedTile(TIFF*, unsigned, unsigned char*, unsigned long); +extern int TIFFReadRawTile(TIFF*, unsigned, unsigned char*, unsigned long); +extern int TIFFWriteEncodedStrip(TIFF*, unsigned, unsigned char*, unsigned long); +extern int TIFFWriteRawStrip(TIFF*, unsigned, unsigned char*, unsigned long); +extern int TIFFWriteEncodedTile(TIFF*, unsigned, unsigned char*, unsigned long); +extern int TIFFWriteRawTile(TIFF*, unsigned, unsigned char*, unsigned long); +extern void TIFFSetWriteOffset(TIFF*, unsigned long); +extern void TIFFSwabShort(unsigned short *); +extern void TIFFSwabLong(unsigned long *); +extern void TIFFSwabArrayOfShort(unsigned short *, unsigned long); +extern void TIFFSwabArrayOfLong(unsigned long *, unsigned long); +extern void TIFFReverseBits(unsigned char *, unsigned long); +extern const unsigned char* TIFFGetBitRevTable(int); +} +struct G3Base { + short data; + short bit; + fxBool is2D; + enum { G3_1D, G3_2D } tag; + const u_char* bitmap; + static const u_char zeroruns[256]; + static const u_char oneruns[256]; + static int findspan(const u_char**, int, int, const u_char*); + static int finddiff(const u_char*, int, int); + static void fillspan(u_char* cp, int x, int count); + void setup(const u_char*, fxBool is2d); +}; +class fxStackBuffer; +class G3Decoder : private G3Base { +private: + short bytePending; + short prevByte; + u_char* refline; + fxStackBuffer* recvBuf; + fxBool decode1DRow(u_char*, u_int); + fxBool decode2DRow(u_char*, u_int); + int nextBit(); + void ungetBit(); + int nextByte(); + int decodeWhiteRun(); + int decodeBlackRun(); + int decodeUncompCode(); + void skipToEOL(int len); +protected: + G3Decoder(); + void raiseEOF(); + void raiseRTC(); + void setPendingByte(u_char); + virtual int decodeNextByte() = 0; + void setRefLine(u_char*); + u_char* getRefLine(); + virtual void invalidCode(const char* type, int x); + virtual void prematureEOL(const char* type, int x); + virtual void badPixelCount(const char* type, int x); + virtual void badDecodingState(const char* type, int x); +public: + sigjmp_buf jmpEOF; + sigjmp_buf jmpRTC; + virtual ~G3Decoder(); + void setupDecoder(u_int, fxBool is2D); + void decode(void* raster, u_int w, u_int h); + void skip(u_int h); + void skipLeader(); + fxBool decodeRow(void* scanline, u_int w); + void skipRow(); + fxBool isLastRow1D(); + fxBool isNextRow1D(); + fxBool isByteAligned(); + void setRecvBuf(fxStackBuffer&); + fxStackBuffer* getRecvBuf(); + void flushRecvBuf(); +}; +inline void G3Decoder::setRecvBuf(fxStackBuffer& b){ recvBuf = &b; } +inline fxStackBuffer* G3Decoder::getRecvBuf() { return recvBuf; } +inline void G3Decoder::setRefLine(u_char* b) { refline = b; } +inline u_char* G3Decoder::getRefLine() { return refline; } +inline fxBool G3Decoder::isLastRow1D() { return tag == G3_1D; } +enum FaxSendStatus { + send_retry, + send_failed, + send_done, + send_reformat, +}; +class FaxServer; +class FaxMachineInfo; +class ModemConfig; +class fxStackBuffer; +class FaxFont; +class FaxRequest; +typedef unsigned int CallStatus; +typedef unsigned int CallType; +typedef unsigned int AnswerType; +typedef unsigned int SpeakerVolume; +typedef unsigned int ATResponse; +typedef unsigned int BaudRate; +typedef unsigned int FlowControl; +typedef unsigned int SetAction; +typedef struct { + const char* msg; + u_short len; + ATResponse expect; + CallStatus status; + CallType type; +} AnswerMsg; +class FaxModem : public G3Decoder { +public: + static FaxModem* deduceModem(FaxServer&, const ModemConfig& config); + enum { + OK = 0, + BUSY = 1, + NOCARRIER = 2, + NOANSWER = 3, + NODIALTONE = 4, + ERROR = 5, + FAILURE = 6, + NOFCON = 7, + DATACONN = 8, + }; + enum { + CALLTYPE_ERROR = 0, + CALLTYPE_DATA = 1, + CALLTYPE_FAX = 2, + CALLTYPE_VOICE = 3, + CALLTYPE_UNKNOWN = 4, + }; + enum { + OFF = 0, + QUIET = 1, + LOW = 2, + MEDIUM = 3, + HIGH = 4, + }; + enum { + BR0 = 0, + BR300 = 1, + BR1200 = 2, + BR2400 = 3, + BR4800 = 4, + BR9600 = 5, + BR19200 = 6, + BR38400 = 7, + BR57600 = 8, + BR76800 = 9, + }; + enum { + FLOW_NONE = 0, + FLOW_XONXOFF = 1, + FLOW_RTSCTS = 2 + }; + enum { + ACT_NOW = 0, + ACT_DRAIN = 1, + ACT_FLUSH = 2, + }; + enum { + ANSTYPE_ANY = 0, + ANSTYPE_DATA = 1, + ANSTYPE_FAX = 2, + ANSTYPE_VOICE = 3, + }; + enum { + AT_NOTHING = 0, + AT_OK = 1, + AT_CONNECT = 2, + AT_NOANSWER = 3, + AT_NOCARRIER = 4, + AT_NODIALTONE = 5, + AT_BUSY = 6, + AT_OFFHOOK = 7, + AT_RING = 8, + AT_ERROR = 9, + AT_EMPTYLINE = 10, + AT_TIMEOUT = 11, + AT_OTHER = 12, + }; +private: + FaxServer& server; + fxStr resetCmds; + long dataTimeout; + BaudRate rate; + FlowControl iFlow; + FlowControl oFlow; + u_int pageNumber; + FaxFont* tagLineFont; + u_int tagLineSlop; + fxStr tagLine; + u_int tagLineFields; + void setupTagLine(const FaxRequest&); + u_int cblc; + fxBool lastRowBad; + u_long recvEOLCount; + u_long recvBadLineCount; + u_long recvConsecutiveBadLineCount; + u_int recvCC; + fxStackBuffer* recvBuf; + u_long savedWriteOff; + void recvRow(TIFF* tif, fxStackBuffer& row, u_char* buf); + void invalidCode(const char* type, int x); + void prematureEOL(const char* type, int x); + void badPixelCount(const char* type, int x); + void badDecodingState(const char* type, int x); +protected: + const ModemConfig& conf; + FlowControl flowControl; + u_int modemServices; + fxStr modemMfr; + fxStr modemModel; + fxStr modemRevision; + Class2Params modemParams; + char rbuf[1024]; + ATResponse lastResponse; + fxStr mfrQueryCmd; + fxStr modelQueryCmd; + fxStr revQueryCmd; + static const char* serviceNames[9]; + static const u_char digitMap[12*2+1]; + static const char* callStatus[9]; + FaxModem(FaxServer&, const ModemConfig&); + virtual fxBool selectBaudRate(BaudRate max, FlowControl i, FlowControl o); + virtual fxBool setupModem() = 0; + virtual fxBool setupManufacturer(fxStr& mfr); + virtual fxBool setupModel(fxStr& model); + virtual fxBool setupRevision(fxStr& rev); + fxBool doQuery(const fxStr& queryCmd, fxStr& result, long ms = 30*1000); + virtual const AnswerMsg* findAnswer(const char* s); + virtual CallType answerResponse(fxStr& emsg); + virtual CallStatus dialResponse(fxStr& emsg) = 0; + void setDataTimeout(long secs, u_int br); + long getDataTimeout() const; + void pause(u_int ms); + void countPage(); + void modemTrace(const char* fmt, ...); + void modemSupports(const char* fmt, ...); + void modemCapability(const char* fmt, ...); + void protoTrace(const char* fmt, ...); + void recvTrace(const char* fmt, ...); + void copyQualityTrace(const char* fmt, ...); + void serverTrace(const char* fmt, ...); + void traceBits(u_int bits, const char* bitNames[]); + void traceModemParams(); + void tracePPR(const char* dir, u_int ppr); + void tracePPM(const char* dir, u_int ppm); + void trimModemLine(char buf[], int& cc); + int getModemLine(char buf[], u_int bufSize, long ms = 0); + void beginTimedTransfer(); + void endTimedTransfer(); + fxBool wasTimeout(); + void setTimeout(fxBool); + void flushModemInput(); + fxBool putModem(void* data, int n, long ms = 0); + fxBool putModemData(void* data, int n); + fxBool putModemDLEData(const u_char* data, u_int, + const u_char* brev, long ms); + fxBool putModemLine(const char* cp); + int getModemChar(long ms = 0); + int getModemDataChar(); + void startTimeout(long ms); + void stopTimeout(const char* whichdir); + static const char* ATresponses[13]; + virtual ATResponse atResponse(char* buf, long ms = 30*1000); + virtual fxBool waitFor(ATResponse wanted, long ms = 30*1000); + fxBool atCmd(const fxStr& cmd, ATResponse = AT_OK, long ms = 30*1000); + fxBool atQuery(const char* what, u_int& v, long ms = 30*1000); + fxBool atQuery(const char* what, fxStr& v, long ms = 30*1000); + u_int fromHex(const char*, int = -1); + fxStr toHex(int, int ndigits); + fxBool parseRange(const char*, u_int&); + fxBool vparseRange(const char*, int nargs ...); + fxBool vatFaxCmd(ATResponse resp, const char* cmd ... ); + fxBool sendBreak(fxBool pause); + fxBool setBaudRate(BaudRate rate); + fxBool setBaudRate(BaudRate rate, FlowControl i, FlowControl o); + fxBool setXONXOFF(FlowControl i, FlowControl o, SetAction); + fxBool setDTR(fxBool on); + fxBool setInputBuffering(fxBool on); + fxBool modemStopOutput(); + FlowControl getInputFlow(); + FlowControl getOutputFlow(); + fxBool getProtocolTracing(); + fxBool getHDLCTracing(); + FaxSendStatus sendSetupParams(TIFF*, Class2Params&, + FaxMachineInfo&, fxStr&); + fxBool recvCheckTSI(const fxStr&); + void recvCSI(fxStr&); + void recvDCS(Class2Params&); + void recvNSF(u_int nsf); + void recvSetupPage(TIFF* tif, long group3opts, int fillOrder); + void recvResetPage(TIFF* tif); + fxBool abortRequested(); + fxBool decodePPM(const fxStr& pph, u_int& ppm, fxStr& emsg); + fxBool recvPageDLEData(TIFF* tif, fxBool checkQuality, + const Class2Params& params, fxStr& emsg); + virtual void abortPageRecv() = 0; + virtual int decodeNextByte(); + fxBool checkQuality(); + fxBool isQualityOK(const Class2Params&); + u_long getRecvEOLCount() const; + u_long getRecvBadLineCount() const; + u_long getRecvConsecutiveBadLineCount() const; + fxBool setupTagLineSlop(const Class2Params&); + u_int getTagLineSlop() const; + u_char* imageTagLine(u_char* buf, u_int fillorder, const Class2Params&); +public: + virtual ~FaxModem(); + virtual fxBool dataService(); + virtual fxBool voiceService(); + virtual fxBool sync(long ms = 0); + virtual fxBool reset(long ms = 5*1000); + virtual void hangup(); + virtual void setSpeakerVolume(SpeakerVolume); + virtual void setLID(const fxStr& number) = 0; + const fxStr& getModel() const; + const fxStr& getManufacturer() const; + const fxStr& getRevision() const; + virtual fxBool supports2D() const; + virtual fxBool supportsEOLPadding() const; + virtual fxBool supportsVRes(float res) const; + virtual fxBool supportsPageWidth(u_int w) const; + virtual fxBool supportsPageLength(u_int l) const; + virtual fxBool supportsPolling() const; + virtual int selectSignallingRate(int br) const; + u_int getBestSignallingRate() const; + u_int getBestScanlineTime() const; + virtual int selectScanlineTime(int st) const; + u_int getBestVRes() const; + u_int getBestDataFormat() const; + u_int getBestPageWidth() const; + u_int getBestPageLength() const; + u_int modemDIS() const; + virtual CallStatus dial(const char* number, + const Class2Params& dis, fxStr& emsg); + virtual void sendBegin(const FaxRequest&); + virtual fxBool getPrologue(Class2Params&, + u_int& nsf, fxStr& csi, fxBool& hasDoc) = 0; + virtual void sendSetupPhaseB(); + virtual FaxSendStatus sendPhaseB(TIFF*, Class2Params&, FaxMachineInfo&, + fxStr& pph, fxStr& emsg) = 0; + virtual void sendEnd(); + virtual void sendAbort() = 0; + virtual fxBool waitForRings(u_int rings); + virtual CallType answerCall(AnswerType, fxStr& emsg); + virtual fxBool recvBegin(fxStr& emsg) = 0; + virtual fxBool recvPage(TIFF*, int& ppm, fxStr& em) = 0; + virtual fxBool recvEnd(fxStr& emsg) = 0; + virtual void recvAbort() = 0; + virtual fxBool requestToPoll() = 0; + virtual fxBool pollBegin(const fxStr& pollID, fxStr& emsg) = 0; +}; +inline long FaxModem::getDataTimeout() const { return dataTimeout; } +inline const fxStr& FaxModem::getModel() const { return modemModel; } +inline const fxStr& FaxModem::getManufacturer() const { return modemMfr; } +inline const fxStr& FaxModem::getRevision() const { return modemRevision; } +inline FlowControl FaxModem::getInputFlow() { return iFlow; } +inline FlowControl FaxModem::getOutputFlow() { return oFlow; } +inline u_int FaxModem::getTagLineSlop() const { return tagLineSlop; } +struct ModemConfig { + fxStr type; + fxStr resetCmds; + fxStr dialCmd; + fxStr answerAnyCmd; + fxStr answerDataCmd; + fxStr answerFaxCmd; + fxStr answerVoiceCmd; + fxStr flowControlCmd; + fxStr setupDTRCmd; + fxStr setupDCDCmd; + fxStr setupAACmd; + fxStr noAutoAnswerCmd; + fxStr setVolumeCmd[5]; + fxStr echoOffCmd; + fxStr verboseResultsCmd; + fxStr resultCodesCmd; + fxStr onHookCmd; + fxStr softResetCmd; + fxStr waitTimeCmd; + fxStr pauseTimeCmd; + fxStr mfrQueryCmd; + fxStr modelQueryCmd; + fxStr revQueryCmd; + fxStr answerAnyBeginCmd; + fxStr answerDataBeginCmd; + fxStr answerFaxBeginCmd; + fxStr answerVoiceBeginCmd; + fxStr sendBeginCmd; + u_int t1Timer; + u_int t2Timer; + u_int t4Timer; + u_int dialResponseTimeout; + u_int answerResponseTimeout; + u_int pageStartTimeout; + u_int pageDoneTimeout; + fxStr class1Cmd; + u_int class1TCFResponseDelay; + u_int class1SendPPMDelay; + u_int class1SendTCFDelay; + u_int class1TrainingRecovery; + u_int class1RecvAbortOK; + u_int class1FrameOverhead; + u_int class1RecvIdentTimer; + u_int class1TCFMaxNonZero; + u_int class1TCFMinRun; + fxStr class2Cmd; + fxStr class2DCCQueryCmd; + fxStr class2CQQueryCmd; + fxStr class2BORCmd; + fxStr class2RELCmd; + fxStr class2CQCmd; + fxStr class2AbortCmd; + fxStr class2TBCCmd; + fxStr class2CRCmd; + fxStr class2PHCTOCmd; + fxStr class2BUGCmd; + fxStr class2LIDCmd; + fxStr class2DCCCmd; + fxStr class2DISCmd; + fxStr class2DDISCmd; + fxStr class2CIGCmd; + fxStr class2SPLCmd; + fxStr class2PTSCmd; + fxStr class2RecvDataTrigger; + fxBool class2XmitWaitForXON; + fxStr class2PIECmd; + fxStr class2NRCmd; + FlowControl flowControl; + BaudRate maxRate; + u_int recvFillOrder; + u_int sendFillOrder; + u_int frameFillOrder; + u_int resetDelay; + u_int baudRateDelay; + u_int maxPacketSize; + u_int interPacketDelay; + u_int percentGoodLines; + u_int maxConsecutiveBadLines; + fxBool waitForConnect; + fxStr tagLineFmt; + fxStr tagLineFontFile; + ModemConfig(); + ~ModemConfig(); + fxBool parseItem(const char* tag, const char* value); + void setVolumeCmds(const fxStr& value); + fxStr parseATCmd(const char*); +}; +ModemConfig::ModemConfig() + : type("unknown") + , dialCmd("DT%s") + , noAutoAnswerCmd("S0=0") + , echoOffCmd("E0") + , verboseResultsCmd("V1") + , resultCodesCmd("Q0") + , onHookCmd("H0") + , softResetCmd("Z") + , waitTimeCmd("S7=30") + , pauseTimeCmd("S8=2") + , class1Cmd("+FCLASS=1") + , class2CQQueryCmd("+FCQ=?") + , tagLineFmt("From %%n|%c|Page %%p of %%t") +{ + class2XmitWaitForXON = ((fxBool)1) ; + setVolumeCmds("M0 L0M1 L1M1 L2M1 L3M1"); + answerAnyCmd = "A"; + flowControl = FaxModem::FLOW_NONE; + maxRate = FaxModem::BR19200; + sendFillOrder = 2 ; + recvFillOrder = 2 ; + frameFillOrder = 2 ; + resetDelay = 2600; + baudRateDelay = 0; + t1Timer = ((35+5)*1000) ; + t2Timer = ((6+1)*1000) ; + t4Timer = 3100 ; + dialResponseTimeout = 3*60*1000; + answerResponseTimeout = 3*60*1000; + pageStartTimeout = 3*60*1000; + pageDoneTimeout = 3*60*1000; + class1TCFResponseDelay = 75; + class1SendPPMDelay = 75; + class1SendTCFDelay = 75; + class1TrainingRecovery = 1500; + class1RecvAbortOK = 200; + class1FrameOverhead = 4; + class1RecvIdentTimer = t1Timer; + class1TCFMinRun = (2*1500 )/3; + class1TCFMaxNonZero = 10; + maxPacketSize = 16*1024; + interPacketDelay = 0; + waitForConnect = ((fxBool)0) ; + percentGoodLines = 95; + maxConsecutiveBadLines = 5; +} +ModemConfig::~ModemConfig() +{ +} +static fxBool getBoolean(const char* cp) + { return ((strcasecmp( cp , "on" )==0) || (strcasecmp( cp , "yes" )==0) ); } +static BaudRate +findRate(const char* cp) +{ + static const struct { + const char* name; + BaudRate br; + } rates[] = { + { "300", FaxModem::BR300 }, + { "1200", FaxModem::BR1200 }, + { "2400", FaxModem::BR2400 }, + { "4800", FaxModem::BR4800 }, + { "9600", FaxModem::BR9600 }, + { "19200", FaxModem::BR19200 }, + { "38400", FaxModem::BR38400 }, + { "57600", FaxModem::BR57600 }, + { "76800", FaxModem::BR76800 }, + }; + for (int i = (sizeof ( rates ) / sizeof ( rates [0])) -1; i >= 0; i--) + if ((strcasecmp( cp , rates[i].name )==0) ) + return (rates[i].br); + return (FaxModem::BR0); +} +static BaudRate +getRate(const char* cp) +{ + BaudRate br = findRate(cp); + if (br == FaxModem::BR0) { + syslog(3 , "Unknown baud rate \"%s\", using 19200", cp); + br = FaxModem::BR19200; + } + return (br); +} +static u_int +getFill(const char* cp) +{ + if ((strcasecmp( cp , "LSB2MSB" )==0) ) + return (2 ); + else if ((strcasecmp( cp , "MSB2LSB" )==0) ) + return (1 ); + else { + syslog(3 , "Unknown fill order \"%s\"", cp); + return ((u_int) -1); + } +} +static FlowControl +getFlow(const char* cp) +{ + if ((strcasecmp( cp , "xonxoff" )==0) ) + return (FaxModem::FLOW_XONXOFF); + else if ((strcasecmp( cp , "rtscts" )==0) ) + return (FaxModem::FLOW_RTSCTS); + else if ((strcasecmp( cp , "none" )==0) ) + return (FaxModem::FLOW_NONE); + else { + syslog(3 , "Unknown flow control \"%s\", using xonxoff", cp); + return (FaxModem::FLOW_XONXOFF); + } +} +void +ModemConfig::setVolumeCmds(const fxStr& tag) +{ + u_int l = 0; + for (int i = FaxModem::OFF; i <= FaxModem::HIGH; i++) { + fxStr tmp = tag.token(l, " \t"); + setVolumeCmd[i] = parseATCmd(tmp); + } +} +fxStr +ModemConfig::parseATCmd(const char* cp) +{ + fxStr cmd(cp); + u_int pos = 0; + while ((pos = cmd.next(pos, '<')) != cmd.length()) { + u_int epos = pos+1; + fxStr esc = cmd.token(epos, '>'); + esc.lowercase(); + char ecode; + if (esc == "xon") + ecode = (0x80|0xf) ; + else if (esc == "rts") + ecode = (0x80|0xe) ; + else if (esc == "none") + ecode = (0x80|0xd) ; + else if (esc == "") + ecode = '<'; + else { + BaudRate br = findRate(esc); + if (br == FaxModem::BR0) { + syslog(3 , "Unknown AT escape code \"%s\"", (char*) esc); + pos = epos; + continue; + } + ecode = 0x80| ((int)( br )) ; + } + cmd.remove(pos, epos-pos); + cmd.insert(ecode, pos); + } + return (cmd); +} +static const struct { + const char* name; + fxStr ModemConfig::* p; +} atcmds[] = { + { "ModemAnswerCmd", &ModemConfig::answerAnyCmd }, + { "ModemAnswerAnyCmd", &ModemConfig::answerAnyCmd }, + { "ModemAnswerFaxCmd", &ModemConfig::answerFaxCmd }, + { "ModemAnswerDataCmd", &ModemConfig::answerDataCmd }, + { "ModemAnswerVoiceCmd", &ModemConfig::answerVoiceCmd }, + { "ModemAnswerFaxBeginCmd", &ModemConfig::answerFaxBeginCmd }, + { "ModemAnswerDataBeginCmd", &ModemConfig::answerDataBeginCmd }, + { "ModemAnswerVoiceBeginCmd", &ModemConfig::answerVoiceBeginCmd }, + { "ModemResetCmds", &ModemConfig::resetCmds }, + { "ModemResetCmd", &ModemConfig::resetCmds }, + { "ModemDialCmd", &ModemConfig::dialCmd }, + { "ModemFlowControlCmd", &ModemConfig::flowControlCmd }, + { "ModemSetupAACmd", &ModemConfig::setupAACmd }, + { "ModemSetupDTRCmd", &ModemConfig::setupDTRCmd }, + { "ModemSetupDCDCmd", &ModemConfig::setupDCDCmd }, + { "ModemNoAutoAnswerCmd", &ModemConfig::noAutoAnswerCmd }, + { "ModemEchoOffCmd", &ModemConfig::echoOffCmd }, + { "ModemVerboseResultsCmd", &ModemConfig::verboseResultsCmd }, + { "ModemResultCodesCmd", &ModemConfig::resultCodesCmd }, + { "ModemOnHookCmd", &ModemConfig::onHookCmd }, + { "ModemSoftResetCmd", &ModemConfig::softResetCmd }, + { "ModemWaitTimeCmd", &ModemConfig::waitTimeCmd }, + { "ModemCommaPauseTimeCmd", &ModemConfig::pauseTimeCmd }, + { "ModemMfrQueryCmd", &ModemConfig::mfrQueryCmd }, + { "ModemModelQueryCmd", &ModemConfig::modelQueryCmd }, + { "ModemRevQueryCmd", &ModemConfig::revQueryCmd }, + { "ModemSendBeginCmd", &ModemConfig::sendBeginCmd }, + { "Class1Cmd", &ModemConfig::class1Cmd }, + { "Class2Cmd", &ModemConfig::class2Cmd }, + { "Class2BORCmd", &ModemConfig::class2BORCmd }, + { "Class2RELCmd", &ModemConfig::class2RELCmd }, + { "Class2CQCmd", &ModemConfig::class2CQCmd }, + { "Class2AbortCmd", &ModemConfig::class2AbortCmd }, + { "Class2CQQueryCmd", &ModemConfig::class2CQQueryCmd }, + { "Class2DCCQueryCmd", &ModemConfig::class2DCCQueryCmd }, + { "Class2TBCCmd", &ModemConfig::class2TBCCmd }, + { "Class2CRCmd", &ModemConfig::class2CRCmd }, + { "Class2PHCTOCmd", &ModemConfig::class2PHCTOCmd }, + { "Class2BUGCmd", &ModemConfig::class2BUGCmd }, + { "Class2LIDCmd", &ModemConfig::class2LIDCmd }, + { "Class2DCCCmd", &ModemConfig::class2DCCCmd }, + { "Class2DISCmd", &ModemConfig::class2DISCmd }, + { "Class2DDISCmd", &ModemConfig::class2DDISCmd }, + { "Class2CIGCmd", &ModemConfig::class2CIGCmd }, + { "Class2PTSCmd", &ModemConfig::class2PTSCmd }, + { "Class2SPLCmd", &ModemConfig::class2SPLCmd }, + { "Class2PIECmd", &ModemConfig::class2PIECmd }, + { "Class2NRCmd", &ModemConfig::class2NRCmd }, + { "TagLineFont", &ModemConfig::tagLineFontFile }, + { "TagLineFormat", &ModemConfig::tagLineFmt }, +}; +static const struct { + const char* name; + u_int ModemConfig::* p; +} fillorders[] = { + { "ModemRecvFillOrder", &ModemConfig::recvFillOrder }, + { "ModemSendFillOrder", &ModemConfig::sendFillOrder }, + { "ModemFrameFillOrder", &ModemConfig::frameFillOrder }, +}; +static const struct { + const char* name; + u_int ModemConfig::* p; +} numbers[] = { + { "ModemResetDelay", &ModemConfig::resetDelay }, + { "ModemBaudRateDelay", &ModemConfig::baudRateDelay }, + { "ModemMaxPacketSize", &ModemConfig::maxPacketSize }, + { "ModemInterPacketDelay", &ModemConfig::interPacketDelay }, + { "FaxT1Timer", &ModemConfig::t1Timer }, + { "FaxT2Timer", &ModemConfig::t2Timer }, + { "FaxT4Timer", &ModemConfig::t4Timer }, + { "ModemDialResponseTimeout", &ModemConfig::dialResponseTimeout }, + { "ModemAnswerResponseTimeout", &ModemConfig::answerResponseTimeout }, + { "ModemPageStartTimeout", &ModemConfig::pageStartTimeout }, + { "ModemPageDoneTimeout", &ModemConfig::pageDoneTimeout }, + { "Class1TCFResponseDelay", &ModemConfig::class1TCFResponseDelay }, + { "Class1SendPPMDelay", &ModemConfig::class1SendPPMDelay }, + { "Class1SendTCFDelay", &ModemConfig::class1SendTCFDelay }, + { "Class1TrainingRecovery", &ModemConfig::class1TrainingRecovery }, + { "Class1RecvAbortOK", &ModemConfig::class1RecvAbortOK }, + { "Class1FrameOverhead", &ModemConfig::class1FrameOverhead }, + { "Class1RecvIdentTimer", &ModemConfig::class1RecvIdentTimer }, + { "Class1TCFMaxNonZero", &ModemConfig::class1TCFMaxNonZero }, + { "Class1TCFMinRun", &ModemConfig::class1TCFMinRun }, + { "PercentGoodLines", &ModemConfig::percentGoodLines }, + { "MaxConsecutiveBadLines", &ModemConfig::maxConsecutiveBadLines }, +}; +fxBool +ModemConfig::parseItem(const char* tag, const char* value) +{ + int i; + for (i = (sizeof ( atcmds ) / sizeof ( atcmds [0])) -1; i >= 0; i--) + if ((strcasecmp( tag , atcmds[i].name )==0) ) { + (*this).*atcmds[i].p = parseATCmd(value); + return (((fxBool)1) ); + } + for (i = (sizeof ( fillorders ) / sizeof ( fillorders [0])) -1; i >= 0 ; i--) + if ((strcasecmp( tag , fillorders[i].name )==0) ) { + (*this).*fillorders[i].p = getFill(value); + return (((fxBool)1) ); + } + for (i = (sizeof ( numbers ) / sizeof ( numbers [0])) -1; i >= 0 ; i--) + if ((strcasecmp( tag , numbers[i].name )==0) ) { + (*this).*numbers[i].p = atoi(value); + return (((fxBool)1) ); + } + fxBool recognized = ((fxBool)1) ; + if ((strcasecmp( tag , "ModemType" )==0) ) + type = value; + else if ((strcasecmp( tag , "ModemSetVolumeCmd" )==0) ) + setVolumeCmds(value); + else if ((strcasecmp( tag , "ModemFlowControl" )==0) ) + flowControl = getFlow(value); + else if ((strcasecmp( tag , "ModemMaxRate" )==0) || (strcasecmp( tag , "ModemRate" )==0) ) + maxRate = getRate(value); + else if ((strcasecmp( tag , "ModemWaitForConnect" )==0) ) + waitForConnect = getBoolean(value); + else if ((strcasecmp( tag , "Class2RecvDataTrigger" )==0) ) + class2RecvDataTrigger = value; + else if ((strcasecmp( tag , "Class2XmitWaitForXON" )==0) ) + class2XmitWaitForXON = getBoolean(value); + else + recognized = ((fxBool)0) ; + return (recognized); +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash6.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash6.C new file mode 100644 index 000000000000..a6527a5cbd4f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash6.C @@ -0,0 +1,16 @@ +// Build don't link: +// GROUPS passed old-abort +// Should be fixed by: +// Sun Jun 13 12:55:22 1993 Brendan Kehoe (brendan@lisa.cygnus.com) +// +// * cp-decl.c (start_function): Avoid a null-reference on CTYPE. + +template<int> +class Program { +} ; + +class Program<0> { +public: + inline friend float EvalNextArg() + { return 1.0 ; } +} ; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash60.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash60.C new file mode 100644 index 000000000000..b2af4310d1ba --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash60.C @@ -0,0 +1,12 @@ +// Build don't link: +// GROUPS passed old-abort +class X +{ +public: + X (); + int f[4]; +}; + +// Note that we mistakenly initialize the array data member as if it +// was scalar +X::X () : f (0) {}// ERROR - .* diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash61.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash61.C new file mode 100644 index 000000000000..4d3bbc4c6939 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash61.C @@ -0,0 +1,5 @@ +// Build don't link: +// GROUPS passed old-abort + template <class TP> class sapp { }; + class foo {}; + extern foo& __iomanip_setw (foo&, TP);// ERROR - type spec.* diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash62.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash62.C new file mode 100644 index 000000000000..77b9fc847635 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash62.C @@ -0,0 +1,32 @@ +// Build don't link: +// GROUPS passed old-abort +#include <iostream.h> + + void + fubar(ostream* out, const char* string) + { + (*out) << string << endl; + return; + } + + int + main() + { + // Declare a ref and a pointer to the same ostream. + // + ostream* out = &cerr; + ostream& die = cerr; + + // Valid call to fubar. + // + fubar(out, "First line."); + + // Invalid call to fubar. (1st arg is an ostream&. fubar expects + // ostream*.)This should be a syntax error, but g++ does not catch it. + // Call to this function results in a bus error in fubar when the 1st + // arg is dereferenced. + // + fubar(die, "Second line.");// ERROR - cannot convert .die.* + + return 1; + } diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash63.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash63.C new file mode 100644 index 000000000000..84f8fc576248 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash63.C @@ -0,0 +1,15 @@ +// Build don't link: +// GROUPS passed old-abort +class String + { + public: + String (const char *str); + }; + +class UnitList + { + public: + UnitList (...); + }; + +UnitList unit_list (String("keV")); diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash64.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash64.C new file mode 100644 index 000000000000..310241850f7b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash64.C @@ -0,0 +1,19 @@ +// Build don't link: +// GROUPS passed old-abort +typedef long unsigned int size_t; +typedef void (*RF_Ptr)(void *); + +struct _im_pers_mem_spec { + inline _im_pers_mem_spec(void ); + inline _im_pers_mem_spec(auto int of, auto int n); +}; + +struct _type_desc { + _type_desc(char *, int , RF_Ptr , int , int ,...); +}; + +struct metatype { int base_list; }; + +static _type_desc _type_metatype("metatype", sizeof(metatype), + (RF_Ptr)0, 0, 1, 1, + _im_pers_mem_spec( ((size_t)&((( metatype *)0)-> base_list )) , 1)); diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash65.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash65.C new file mode 100644 index 000000000000..132651e90a0c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash65.C @@ -0,0 +1,14 @@ +// Build don't link: +// GROUPS passed old-abort +class X { +public: + virtual const char* XY(const void* val) const = 0; +}; + + +class Y : public X { +public: + using X::xy;// ERROR - no memb.* + + using X::z;// ERROR - no memb.* +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash66.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash66.C new file mode 100644 index 000000000000..878957b84e6a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash66.C @@ -0,0 +1,137 @@ +// Build don't link: +// Special g++ Options: -O +// GROUPS passed old-abort +typedef unsigned char uchar; +typedef unsigned short ushort; +typedef unsigned long ulong; +extern int swap_endian; +inline ushort +swapshort(ushort value) +{ + value &= 0xffff; + return ((value << 8) | (value >> 8)); +} +struct eshort +{ + ushort data; + operator ushort() { return swap_endian ? swapshort(data) : data;} + eshort(ushort t) { data = swap_endian ? swapshort(t) : t;} + eshort() {} +}; +inline ulong +swaplong(ulong value) +{ + ulong v = (value << 16) | (value >> 16); + return ((v >> 8) & 0x00ff00ff) | ((v << 8) & 0xff00ff00); +}; +struct elong +{ + ulong data; + operator ulong() { return swap_endian ? swaplong(data) : data;} + elong(ulong t) { data = swap_endian ? swaplong(t) : t; } + elong() {} +}; +struct digiheader +{ + uchar type[2]; + eshort soft_version; + eshort lo_boot_rev; + eshort hi_boot_rev; + eshort load_segment; + eshort length; + eshort exec_start; + eshort image_offset; + elong startup_code[2]; + elong checksum; +}; +extern void uncompress(uchar* buf, ulong len); +extern ulong compress(char* filename, uchar* buffer, ulong); +struct filehdr +{ + eshort f_magic; + eshort f_nscns; + elong f_timdat; + elong f_symptr; + elong f_nsyms; + eshort f_opthdr; + eshort f_flags; +}; +struct aouthdr +{ + eshort magic; + eshort vstamp; + elong tsize; + elong dsize; + elong bsize; + elong entry; + elong text_start; + elong data_start; + elong bss_start; + elong gprmask; + elong cprmask[4]; + elong gp_value; +}; +struct scnhdr +{ + char s_name[8]; + elong s_paddr; + elong s_vaddr; + elong s_size; + elong s_scnptr; + elong s_relptr; + elong s_lnnoptr; + eshort s_nreloc; + eshort s_nlnno; + elong s_flags; +}; +int file_little_endian; +int host_little_endian; +int swap_endian; +int docheck; +int expand; +ulong memsize; +ulong compression_quality; +char *compressfile; +int debug_level; +extern "C" int getopt (int, char**, char*); +int +main(int argc, char** argv) +{ + uchar checksum; + uchar docrc; + ulong len; + ulong maxlen; + int i; + int c; + int magic; + int tsize; + int dsize; + int quality; + char dummy; + uchar* code; + uchar* buf; + char* ap; + digiheader *dh; + compression_quality = 10000; + docheck = 0; + while ((c = getopt(argc, argv, "Ccdf:k:q:x:")) != -1) + { + switch (c) + { + default: + goto usage; + } + } + if ((expand && (docheck || compressfile || quality)) || + (quality && !compressfile)) + { + usage: + return(2); + } + if (compressfile) + { + dh->image_offset = len; + + len += compress(compressfile, code + len, maxlen - len); + } +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash67.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash67.C new file mode 100644 index 000000000000..f63ba5ddf3fe --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash67.C @@ -0,0 +1,3 @@ +// Build don't link: +// GROUPS passed old-abort +#pragma comment(exestr, "@(#) errno.h 10.2 92/03/26 ") diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash68.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash68.C new file mode 100644 index 000000000000..b209bd891c0a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash68.C @@ -0,0 +1,28 @@ +// Build don't link: +// Special g++ Options: -w -O +// GROUPS passed old-abort +class RWDlist +{ +public: + RWDlist& operator=(const RWDlist&); +}; +class DataItemRWGDlist : public RWDlist {}; + +class Base {}; +class DataItemList : public Base +{ + private: + DataItemRWGDlist m_diList; +}; + +class StatementGroup +{ + public: + DataItemList dataItemList; + StatementGroup(const StatementGroup&); +}; + +StatementGroup::StatementGroup(const StatementGroup& sg) +{ + dataItemList = sg.dataItemList; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash7.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash7.C new file mode 100644 index 000000000000..c55cab978487 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash7.C @@ -0,0 +1,47 @@ +// Build don't link: +// GROUPS passed templates +template<class T> +class Vector +{ + int sz; + T *v; +public: + Vector (int s) : sz (s) { v = new T[sz]; } + ~Vector () { delete[] v; } + T &operator[] (int i) { return v[i]; } + int size () { return sz; } +}; + +template<class T>// ERROR - previous definition of T +struct Comparator +{ + typedef T T;// ERROR - use of template type T in typedef to T + static lessthan (T &a, T &b) { return a < b; } +}; + +template<class Comp> +struct Sort +{ + static void sort (Vector<Comp::T> &);// ERROR - use of bad T +}; + +template<class Comp> +void Sort<Comp>::sort (Vector<Comp::T> &v)// ERROR - use of bad T +{ + int n = v.size (); + + for (int i = 0; i < n - 1; i++) + for (int j = n - 1; i < j; j--) + if (Comp::lessthan (v[j], v[j - 1])) + { + typename Comp::T temp = v[j]; + v[j] = v[j - 1]; + v[j - 1] = temp; + } +} + +void +f (Vector<int> &vi) +{ + Sort<Comparator<int> >::sort (vi); +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash8.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash8.C new file mode 100644 index 000000000000..701452ab6c29 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash8.C @@ -0,0 +1,12 @@ +// Build don't link: +// GROUPS passed old-abort +template<int a, int b> +class Elvis +{// ERROR - in template.* +} ; + +template<int a> +class Elvis<0>// ERROR - .* +{ + int geta() { return a ; } +} ; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/crash9.C b/gcc/testsuite/g++.old-deja/g++.brendan/crash9.C new file mode 100644 index 000000000000..a4155ef6bb5f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/crash9.C @@ -0,0 +1,24 @@ +// Build don't link: +// GROUPS passed old-abort +class A {}; + +class SimQuery +{ +public: + SimQuery(); + ~SimQuery(); + int SetMeshFile(char name[]); +protected: + A& scaling; + A* mesh; +}; + +SimQuery::SimQuery():scaling(A) {}// ERROR - .* + +SimQuery::~SimQuery() {}// ERROR - + +int SimQuery::SetMeshFile(char name[]) +{// ERROR - + mesh = new C;// ERROR - .* + return 0; // needed to avoid warning of reaching end of non-void fn +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/ctors1.C b/gcc/testsuite/g++.old-deja/g++.brendan/ctors1.C new file mode 100644 index 000000000000..eaf487159d83 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/ctors1.C @@ -0,0 +1,27 @@ +// GROUPS passed constructors +// Check that global level object constructors get called. + +extern "C" void printf (char *, ...); + +struct base { + int f1; + int f2; + base (int arg1, int arg2); +}; + + +base global_base(0x55, 0xff); + +int main () +{ + if ((global_base.f1 != 0x55) || (global_base.f2 != 0xff)) + printf ("FAIL\n"); + else + printf ("PASS\n"); +} + +base::base(int arg1, int arg2) +{ + f1 = arg1; + f2 = arg2; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/ctors2.C b/gcc/testsuite/g++.old-deja/g++.brendan/ctors2.C new file mode 100644 index 000000000000..2f83ce1cdb8f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/ctors2.C @@ -0,0 +1,28 @@ +// GROUPS passed constructors +// Check that sub-words sized class members are correctly set +// by constructors. + +extern "C" void printf (char *, ...); + +struct base { + int f1 : 8; + int f2 : 8; + base (int arg1, int arg2); +}; + + +base global_base(0x55, 0x7e); + +int main () +{ + if ((global_base.f1 != 0x55) || (global_base.f2 != 0x7e)) + printf ("FAIL\n"); + else + printf ("PASS\n"); +} + +base::base(int arg1, int arg2) +{ + f1 = arg1; + f2 = arg2; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/ctors3.C b/gcc/testsuite/g++.old-deja/g++.brendan/ctors3.C new file mode 100644 index 000000000000..755d547b0228 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/ctors3.C @@ -0,0 +1,17 @@ +// Build don't link: +// GROUPS passed constructors +class A; + +class B { +public: + B(); +static A sa; +}; + +class A { +public: + A(int i); +}; + +A B::sa(1); + diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/cvt1.C b/gcc/testsuite/g++.old-deja/g++.brendan/cvt1.C new file mode 100644 index 000000000000..57f3b426108a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/cvt1.C @@ -0,0 +1,44 @@ +// Build don't link: +// GROUPS passed conversions +#include <iostream.h> + +class Thing +{ +public: + typedef enum { GOOD_THING, BAD_THING, } ThingType ; // ERROR - comma + Thing (ThingType type) : thingType (type) { } + ~Thing () { } +private: + ThingType thingType ; +} ; + +class Group +{ +public: + typedef enum { THIS_GROUP, THAT_GROUP, } GroupType ; // ERROR - comma + Group (GroupType type) : groupType (type), groupCount (0) { } + ~Group () { } + void append (Thing* const &entry) { groupCount ++ ; } + operator GroupType () const { return groupType ; } + operator int () const { return groupCount ; } // remove this and problem gone + +private: + int groupCount ; + GroupType groupType ; +} ; + +inline Group& operator += (Group& g, Thing* const t) +{ + g.append (t) ; + return g ; // complaint is here +} + +int +main (int argc, char** argv) +{ + Group g (Group::THIS_GROUP) ; + + g += new Thing (Thing::GOOD_THING) ; + cout << "Group type is " << (Group::GroupType) g << endl ; + return 0 ; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/cvt2.C b/gcc/testsuite/g++.old-deja/g++.brendan/cvt2.C new file mode 100644 index 000000000000..76ae1561f3a0 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/cvt2.C @@ -0,0 +1,9 @@ +// Build don't link: +// GROUPS passed conversions +void f(const short & s) { } + + int +main() { + f(0); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/cvt3.C b/gcc/testsuite/g++.old-deja/g++.brendan/cvt3.C new file mode 100644 index 000000000000..6ab8465c6dfb --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/cvt3.C @@ -0,0 +1,48 @@ +// Build don't link: +// GROUPS passed conversions +class GttObject {}; +class GctObject: virtual public GttObject {}; +class NDAMObject: virtual public GttObject, virtual public GctObject {}; +class GctHashObject: virtual public GctObject {}; + +class GctRef: virtual public GctHashObject +{ public: operator void*() const; }; + +class NDAMAssemblerObject: virtual public NDAMObject {}; +class GctReferenceObject: virtual public GctHashObject {}; +class NDAMValue: virtual public NDAMAssemblerObject, public GctReferenceObject {}; + +class nnyacc; +class NDAMValueRef : virtual public NDAMObject, public GctRef +{ + NDAMValue *operator->() const; + operator NDAMValue *() const; +friend class nnyacc; +}; + +typedef void* Pix; +class NDAMValueRefSLList +{ +public: + NDAMValueRefSLList(); + NDAMValueRefSLList(const NDAMValueRefSLList& a); + ~NDAMValueRefSLList(); + NDAMValueRef& operator () (Pix p) const; +}; + +struct bar +{ + NDAMValueRefSLList *valueList; +}; + +class nnyacc +{ +public: + static void assign(void*& lval, void*& rval); // ERROR - candidates +}; + +void +foo (bar yylval, bar *yyvsp) +{ + nnyacc::assign(yylval.valueList, yyvsp[0].valueList);// ERROR - +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/cvt4.C b/gcc/testsuite/g++.old-deja/g++.brendan/cvt4.C new file mode 100644 index 000000000000..3d9f475b6791 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/cvt4.C @@ -0,0 +1,27 @@ +// Build don't link: +// GROUPS passed conversions +class A {}; + +template <class TP> +class B +{ + A &(*_f) (A &, TP); + TP _a; +public: + B (A &(*f) (A &, TP), TP a) : _f (f), _a (a) {} + friend A &operator<< (A &o, const B<TP> &m) + { (*m._f) (o, m._a); return o; } +}; + +A &setw (A &, int); +B<int> setw (int n) +{ + return B<int> (setw, n); +} + +A x; + +void f () +{ + x << setw (2); +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/cvt5.C b/gcc/testsuite/g++.old-deja/g++.brendan/cvt5.C new file mode 100644 index 000000000000..5eeea6e63934 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/cvt5.C @@ -0,0 +1,27 @@ +// GROUPS passed conversions +// Build don't link: +typedef unsigned long Array[3]; + +void sample(const unsigned long (&an_array)[3]); + +class Sample + { + public: + void simple(const Array &an_array); + static void sample(const Array &an_array); + }; + +class A + { + public: + Array array; + }; + + Sample s; + + void simple(const A &a) + { + s.simple(a.array); + sample(a.array); + Sample::sample(a.array); + } diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/def-fns1.C b/gcc/testsuite/g++.old-deja/g++.brendan/def-fns1.C new file mode 100644 index 000000000000..af9752693c76 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/def-fns1.C @@ -0,0 +1,22 @@ +// Build don't link: +// GROUPS passed default-functions +class dictionary { +public: + dictionary (int); +}; + +class symbol { +public: + symbol (); +}; + +// a default ctor should not be generated for hyphenation_language, +// since a ctor has already been declared; if one is generated, there +// will be an error about not enough args to the ctor for dictionary, +// since dictionary only defines a ctor taking an int (it ALSO should +// not get a default ctor) +struct hyphenation_language { + symbol name; + dictionary exceptions; + hyphenation_language(symbol nm) : name(nm), exceptions(501) {} +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/delete1.C b/gcc/testsuite/g++.old-deja/g++.brendan/delete1.C new file mode 100644 index 000000000000..816c3009d2ec --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/delete1.C @@ -0,0 +1,15 @@ +// Build don't link: +// Special g++ Options: -pedantic-errors +// GROUPS passed operator-delete +/* ARM $5.3.4 */ +void f(char *p, char *q[], const char *r, const char *s[]) +{ + delete 0; /* illegal: non-pointer */// ERROR - .*expected pointer.* + delete (char*)0; /* no effect */ + delete p; + delete[] q; + delete[4] q; /* ANSI forbids size arg */// ERROR - anachronistic .* + delete r; /* no longer illegal: const */ + delete[] s; + delete[4] s; /* ANSI forbids size arg */// ERROR - anachronistic.* +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/delete2.C b/gcc/testsuite/g++.old-deja/g++.brendan/delete2.C new file mode 100644 index 000000000000..f2bacde1185e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/delete2.C @@ -0,0 +1,25 @@ +// GROUPS passed operator-delete +// Check that using the delete operator with a null pointer +// is allowed (as called for by The Book, pg. 259) + +extern "C" void printf (char *, ...); + +struct base { + int member; +}; + +base* bp; + +void test () +{ + delete bp; +} + +int main () +{ + bp = (base *) 0; + test (); + + printf ("PASS\n"); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/dtors1.C b/gcc/testsuite/g++.old-deja/g++.brendan/dtors1.C new file mode 100644 index 000000000000..dbbfa80f9f4d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/dtors1.C @@ -0,0 +1,56 @@ +// GROUPS passed destructors +// Check that when an object of a derived class is (implicitly) +// destructed (on exit from the block in which it is declared) +// that the destructor for the base class also gets executed. +// +// (also check that this execution doesn't seg-fault) + +extern "C" void printf (char *, ...); + +int derived_destructed; +int base_destructed; + +struct base { + int base_data_member; + + base() + { + base_data_member = 0x5e5e; + } + ~base() + { + base_destructed = 0x781f; + } +}; + +struct derived : public base { + int derived_data_member; + + derived() + { + derived_data_member = 0xe5e5; + } + ~derived() + { + derived_destructed = 0xf178; + } +}; + + +void test2 (); + +int main () +{ + test2 (); + if ((base_destructed != 0x781f) || (derived_destructed != 0xf178)) + printf ("FAIL\n"); + else + printf ("PASS\n"); +} + +void test2 () +{ + derived derived_object; + + derived_object.derived_data_member = 99; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/dtors2.C b/gcc/testsuite/g++.old-deja/g++.brendan/dtors2.C new file mode 100644 index 000000000000..511ab7f231c1 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/dtors2.C @@ -0,0 +1,74 @@ +// GROUPS passed destructors +// Check that virtual destructors work correctly. Specifically, +// check that when you destruct an object of a derived class for +// which the base class had an explicitly declared virtual destructor +// no infinite recursion occurs. +// +// Bug description: +// The generated g++ code apparently calls the base class destructor via +// the virtual table, rather than directly. This, of course, results in the +// infinite recursion. + +extern "C" void printf (char *, ...); + +int errors = 0; + +struct base { + int member; + base(); + virtual ~base(); +}; + +base::base() +{ +} + +base::~base() +{ +} + +struct derived : public base +{ + int member; + derived(); + ~derived(); +}; + +derived::derived() : base() +{ +} + +int derived_destructor_calls = 0; + +extern void exit (int); + +derived::~derived() +{ + if (++derived_destructor_calls > 2) + errors++; +} + +void test (); + +int main () +{ + test (); + + if (errors) + printf ("FAIL\n"); + else + printf ("PASS\n"); + + return 0; +} + +base* bp; + +void test() +{ + derived a; + + a.member = 99; + bp = new derived; + delete bp; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/dtors3.C b/gcc/testsuite/g++.old-deja/g++.brendan/dtors3.C new file mode 100644 index 000000000000..a1ca853cf917 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/dtors3.C @@ -0,0 +1,66 @@ +// GROUPS passed destructors +// Check that member and base classes get properly destructed +// when an object of a derived class is destructed via a pointer +// to it which only has a "compile-time" type of "pointer-to-base". +// +// Note that in order for this test to work properly, the destructor +// for the base class should be explicitly declared to be virtual. + +extern "C" void printf (char *, ...); + +int member_destructor_calls = 0; +int middle_destructor_calls = 0; + +struct member_type { + int data_member; + member_type () {} + ~member_type (); +}; + +struct base { + int data_member; + base () {} + virtual ~base (); +}; + +struct middle : public base { + member_type member1; + member_type member2; + middle () {} + ~middle (); // should be implicitly virtual +}; + +struct derived : public middle { + member_type member1; + member_type member2; + //~derived () {} +}; + +int main () +{ + base* bp = new derived; + delete bp; + derived *dp = new derived; + delete dp; + + if ((member_destructor_calls != 8) || (middle_destructor_calls != 2)) + printf ("FAIL\n"); + else + printf ("PASS\n"); + + return 0; +} + +member_type::~member_type () +{ + member_destructor_calls++; +} + +base::~base () +{ +} + +middle::~middle () +{ + middle_destructor_calls++; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/enum-clash.C b/gcc/testsuite/g++.old-deja/g++.brendan/enum-clash.C new file mode 100644 index 000000000000..68639a1e1434 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/enum-clash.C @@ -0,0 +1,6 @@ +// Build don't link: +// Special g++ Options: -pedantic-errors +// GROUPS passed arm +enum color {red, yellow, green=20, blue}; +color c = 1; // this should be an error// ERROR - .* +int i = yellow; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/enum1.C b/gcc/testsuite/g++.old-deja/g++.brendan/enum1.C new file mode 100644 index 000000000000..7ec648f4cd95 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/enum1.C @@ -0,0 +1,14 @@ +// Build don't link: +// GROUPS passed enums +class foo { +public: + enum bar { baz = 1, bat = 7 }; +}; + +class derv : public foo { }; + +main() +{ + foo::bar x = foo::baz; + derv::bar y = derv::bat; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/enum10.C b/gcc/testsuite/g++.old-deja/g++.brendan/enum10.C new file mode 100644 index 000000000000..5c955d3587f0 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/enum10.C @@ -0,0 +1,21 @@ +// Build don't link: +// GROUPS passed enums +class Type +{ + public: + + enum name + { + A + }; +}; + +class A +{ +}; + +class B: public A +{ + public: + B(); +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/enum11.C b/gcc/testsuite/g++.old-deja/g++.brendan/enum11.C new file mode 100644 index 000000000000..7705aa36bd6a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/enum11.C @@ -0,0 +1,16 @@ +// Build don't link: +// GROUPS passed enums +class X +{ + enum + { + oneMask = 0x0000FFFF, + twoMask = 0x000F0000, + thiMask = 0xFFF00000, + }; // ERROR - comma + unsigned int foo; + +public: + X (int) : foo (oneMask | twoMask ) {} // No warning + X () : foo (oneMask | twoMask | thiMask) {} // Warning +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/enum12.C b/gcc/testsuite/g++.old-deja/g++.brendan/enum12.C new file mode 100644 index 000000000000..7d4eb7d0c420 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/enum12.C @@ -0,0 +1,12 @@ +// Build don't link: +// GROUPS passed enums +enum Bool { False, True }; + +enum Bool object; + +struct S +{ + Bool field:1; + + void copy_enum_bit_field () const { object = field; } +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/enum13.C b/gcc/testsuite/g++.old-deja/g++.brendan/enum13.C new file mode 100644 index 000000000000..ea6dfa71f236 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/enum13.C @@ -0,0 +1,15 @@ +// Build don't link: +// GROUPS passed enums +enum COLOR { red, green, blue }; + +struct S { + COLOR color:2; +}; + +COLOR color; +S object; + +void fubar () +{ + color = object.color; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/enum14.C b/gcc/testsuite/g++.old-deja/g++.brendan/enum14.C new file mode 100644 index 000000000000..192a2b4c468e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/enum14.C @@ -0,0 +1,4 @@ +// Build don't link: +// Special g++ Options: -fshort-enums +// GROUPS passed enums + enum E { A = 0x80000000 }; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/enum2.C b/gcc/testsuite/g++.old-deja/g++.brendan/enum2.C new file mode 100644 index 000000000000..58da846f8886 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/enum2.C @@ -0,0 +1,19 @@ +// Build don't link: +// GROUPS passed enums +class foo { +public: + enum bar { baz = 1, bat = 7 }; +}; + +class foo2 { +public: + enum bar2 { baz2 = 1, bat2 = 7 }; +}; + +class derv : public foo, public foo2 { }; + +main() +{ + foo::bar x = foo::baz; + derv::bar2 y = derv::bat2; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/enum3.C b/gcc/testsuite/g++.old-deja/g++.brendan/enum3.C new file mode 100644 index 000000000000..38b7d3cdae82 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/enum3.C @@ -0,0 +1,15 @@ +// Build don't link: +// GROUPS passed enums +enum foo +{ + x = 0 +}; + +enum bar +{ + // this used to say `x' wasn't a constant, because build_enumerator + // was getting the value of x wrapped around a NOP_EXPR. It now + // strips them off before working on it, so we shouldn't get any + // errors for this. + y = (x + 0x0000) +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/enum4.C b/gcc/testsuite/g++.old-deja/g++.brendan/enum4.C new file mode 100644 index 000000000000..826ccd3b9f00 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/enum4.C @@ -0,0 +1,10 @@ +// Build don't link: +// GROUPS passed enums +class X { +public: + enum { a }; +}; + +enum { b = 1 }; +enum ok { y = b }; +enum notok { z = X::a }; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/enum5.C b/gcc/testsuite/g++.old-deja/g++.brendan/enum5.C new file mode 100644 index 000000000000..2fa1ea3c9c27 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/enum5.C @@ -0,0 +1,10 @@ +// Build don't link: +// Special g++ Options: -pedantic-errors +// GROUPS passed enums +enum Thing { FIRST, SECOND } ; + +main() +{ + Thing x = FIRST ; + x = 27 ; // this line should be a type error.// ERROR - .* +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/enum6.C b/gcc/testsuite/g++.old-deja/g++.brendan/enum6.C new file mode 100644 index 000000000000..de821487b0b4 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/enum6.C @@ -0,0 +1,16 @@ +// Build don't link: +// GROUPS passed enums +class X { + private: + enum E1 {a1, b1}; + public: + enum E2 {a2, b2}; + }; + +void h(X* p) { + X::E2 e2; + int x2 = X::a2; + + X::E1 e1; + int x1 = X::a1; // Should be rejected, and is.// ERROR - .* + } diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/enum7.C b/gcc/testsuite/g++.old-deja/g++.brendan/enum7.C new file mode 100644 index 000000000000..5a397d7f361a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/enum7.C @@ -0,0 +1,7 @@ +// Build don't link: +// GROUPS passed enums +enum color { red, green, blue, orange, brown }; + +struct s { + enum color field:2; // ERROR - too small +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/enum8.C b/gcc/testsuite/g++.old-deja/g++.brendan/enum8.C new file mode 100644 index 000000000000..d9380ad09ef3 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/enum8.C @@ -0,0 +1,25 @@ +// Build don't link: +// GROUPS passed enums +class foo1 +{ + public: + enum foo1_enum + { + ENUM1, + ENUM2, + }; // ERROR - comma +}; + + +class foo2 +{ + private: + enum foo1::foo1_enum Enum; +}; + + +class foo3 +{ + private: + foo1::foo1_enum Enum; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/enum9.C b/gcc/testsuite/g++.old-deja/g++.brendan/enum9.C new file mode 100644 index 000000000000..f04deb13a838 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/enum9.C @@ -0,0 +1,15 @@ +// Build don't link: +// GROUPS passed enums +enum fig { + figgy, + pudding, +}; // ERROR - comma + +class X { +public: + static fig (*open)(void *thing, const char *filename); + static fig (*parse)(void *thing); +}; + +enum fig (*X::open)(void *thing, const char *filename) = 0; +fig (*X::parse)(void *thing) = 0; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/err-msg1.C b/gcc/testsuite/g++.old-deja/g++.brendan/err-msg1.C new file mode 100644 index 000000000000..9450d7671c69 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/err-msg1.C @@ -0,0 +1,6 @@ +// Build don't link: +// GROUPS passed error-messages +class A { }; + +int i = A::_ter;// ERROR - ._ter.* +int j = A::term;// ERROR - .term.* diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/err-msg10.C b/gcc/testsuite/g++.old-deja/g++.brendan/err-msg10.C new file mode 100644 index 000000000000..24ddcaa16616 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/err-msg10.C @@ -0,0 +1,6 @@ +// Build don't link: +// GROUPS passed error-messages +class foo { +public: + virtual static int f () = 0;// ERROR - member `f' cannot be declared both virtual and static.* +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/err-msg11.C b/gcc/testsuite/g++.old-deja/g++.brendan/err-msg11.C new file mode 100644 index 000000000000..de5ed8a13168 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/err-msg11.C @@ -0,0 +1,3 @@ +// Build don't link: +// GROUPS passed error-messages +void foo (mutable int x);// ERROR - non-member `x' cannot be declared `mutable'.* diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/err-msg12.C b/gcc/testsuite/g++.old-deja/g++.brendan/err-msg12.C new file mode 100644 index 000000000000..0b59ba0c8daa --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/err-msg12.C @@ -0,0 +1,6 @@ +// Build don't link: +// GROUPS passed error-messages +class foo { +public: + friend mutable int x ();// ERROR - non-object member `x' cannot be declared `mutable' +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/err-msg2.C b/gcc/testsuite/g++.old-deja/g++.brendan/err-msg2.C new file mode 100644 index 000000000000..0bfb4c224143 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/err-msg2.C @@ -0,0 +1,4 @@ +// Build don't link: +// GROUPS passed error-messages +typedef void (*pfv)(double, double); +extern "C" typedef void (*pfv)(double, double);// ERROR - multiple.* diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/err-msg3.C b/gcc/testsuite/g++.old-deja/g++.brendan/err-msg3.C new file mode 100644 index 000000000000..1d115e6c46af --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/err-msg3.C @@ -0,0 +1,20 @@ +// Build don't link: +// GROUPS passed error-messages +#include <fstream.h> +#include <iomanip.h> + +// This error should not appear: +// bug.C: In method `test::test(const class test &)': +// bug.C:8: field `' not in immediate context + +class test{ +public: + int flags; + test() {}; + }; + +int main() + +{ +return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/err-msg4.C b/gcc/testsuite/g++.old-deja/g++.brendan/err-msg4.C new file mode 100644 index 000000000000..72f6150a8820 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/err-msg4.C @@ -0,0 +1,10 @@ +// Build don't link: +// GROUPS passed error-messages +class X { +public: + static int x;// ERROR - previous.* + static int y;// ERROR - previous.* +}; + +unsigned X::x;// ERROR - conflict.* +unsigned X::y;// ERROR - conflict.* diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/err-msg5.C b/gcc/testsuite/g++.old-deja/g++.brendan/err-msg5.C new file mode 100644 index 000000000000..37b956c568f3 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/err-msg5.C @@ -0,0 +1,4 @@ +// Build don't link: +// GROUPS passed error-messages +class foo {}; +~foo () {}// ERROR - destructors must be member functions.* diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/err-msg6.C b/gcc/testsuite/g++.old-deja/g++.brendan/err-msg6.C new file mode 100644 index 000000000000..ce60f0d45677 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/err-msg6.C @@ -0,0 +1,7 @@ +// Build don't link: +// GROUPS passed error-messages +class foo { +public: + ~bar () {}// ERROR - destructor `bar' must match class name `foo'.* +}; + diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/err-msg7.C b/gcc/testsuite/g++.old-deja/g++.brendan/err-msg7.C new file mode 100644 index 000000000000..5971806fa461 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/err-msg7.C @@ -0,0 +1,6 @@ +// Build don't link: +// GROUPS passed error-messages +class foo { +public: + volatile int () {}// ERROR - +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/err-msg8.C b/gcc/testsuite/g++.old-deja/g++.brendan/err-msg8.C new file mode 100644 index 000000000000..a2ad4df947dc --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/err-msg8.C @@ -0,0 +1,3 @@ +// Build don't link: +// GROUPS passed error-messages +operator int ;// ERROR - declaration of `operator int' as non-function.* diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/err-msg9.C b/gcc/testsuite/g++.old-deja/g++.brendan/err-msg9.C new file mode 100644 index 000000000000..0714de696ccb --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/err-msg9.C @@ -0,0 +1,6 @@ +// Build don't link: +// GROUPS passed error-messages +class foo { +public: + int ~foo ();// ERROR - return type specification for destructor invalid.* +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/friend1.C b/gcc/testsuite/g++.old-deja/g++.brendan/friend1.C new file mode 100644 index 000000000000..8d942c7e2edb --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/friend1.C @@ -0,0 +1,19 @@ +// Build don't link: +// GROUPS passed friends +class A +{ +private: + A () {} + +friend struct B; +}; + +class B +{ +public: + A a; +}; + +B b; + +main () {} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/friend2.C b/gcc/testsuite/g++.old-deja/g++.brendan/friend2.C new file mode 100644 index 000000000000..5b1333f7b800 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/friend2.C @@ -0,0 +1,15 @@ +// Build don't link: +// GROUPS passed friends +class X { + int a; +friend void friend_set (X*, int); +}; + +void friend_set (X *p, int i) { p->a = i; } + +void f() +{ + X obj; + friend_set (&obj, 10); +} + diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/friend3.C b/gcc/testsuite/g++.old-deja/g++.brendan/friend3.C new file mode 100644 index 000000000000..1fa48a8c5279 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/friend3.C @@ -0,0 +1,28 @@ +// Build don't link: +// GROUPS passed friends +class B { + + friend class A; + + enum { + bEnum = 1, + }; // ERROR - comma + + int bArray[ bEnum ]; + +public: + void bFunction(int arg[ bEnum ]); +}; + + +class A { + int aMember; + +public: + void aFunction(int a[B::bEnum]) + { + B b; + b.bArray[ B::bEnum ] = aMember; + } +}; + diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/friend4.C b/gcc/testsuite/g++.old-deja/g++.brendan/friend4.C new file mode 100644 index 000000000000..f19d81a9d0a8 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/friend4.C @@ -0,0 +1,6 @@ +// Build don't link: +// GROUPS passed friends +// do_friend should complain that foo was declared as a friend of +// A before A was defined +struct A; +struct B { friend A::foo (); };// ERROR - .* diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/groff1.C b/gcc/testsuite/g++.old-deja/g++.brendan/groff1.C new file mode 100644 index 000000000000..79c5b51371d4 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/groff1.C @@ -0,0 +1,33 @@ +// GROUPS passed groff +/* This should compile properly with the new overloading scheme. */ + +extern "C" void printf (char *, ...); +extern "C" void exit (int); + +int win = 0; + +class symbol +{ +public: + symbol(const char *p, int how = 0) {} + symbol() {} +}; + +class dictionary +{ +public: + void *lookup(symbol s, void *v=0) { win = 1; } + void *lookup(const char *) {} +}; + +main() +{ + char buf[2048]; + dictionary exceptions; + unsigned char *tem = new unsigned char[19 + 1]; + + exceptions.lookup (symbol (buf), tem); + + printf (win ? "PASS\n" : "FAIL\n"); + exit (! win); +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/init1.C b/gcc/testsuite/g++.old-deja/g++.brendan/init1.C new file mode 100644 index 000000000000..4396906ed320 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/init1.C @@ -0,0 +1,11 @@ +// Build don't link: +// GROUPS passed initialization + class Thing{ + private: + int x,y; + public: + Thing (int v, int q) { x = v; q = y; } + void doit(int); + }; + + Thing t(18,19); diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/init10.C b/gcc/testsuite/g++.old-deja/g++.brendan/init10.C new file mode 100644 index 000000000000..45b29853afd6 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/init10.C @@ -0,0 +1,3 @@ +// Build don't link: +// GROUPS passed initialization +struct { int :0; } a; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/init11.C b/gcc/testsuite/g++.old-deja/g++.brendan/init11.C new file mode 100644 index 000000000000..69fd77c7c71c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/init11.C @@ -0,0 +1,9 @@ +// Build don't link: +// GROUPS passed initialization +struct String { + char * string; + String(const char* st); +}; + +extern char array []; +static String sub = array; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/init12.C b/gcc/testsuite/g++.old-deja/g++.brendan/init12.C new file mode 100644 index 000000000000..f3c03e0690ec --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/init12.C @@ -0,0 +1,9 @@ +// Build don't link: +// GROUPS passed array-bindings +char * bob(); + +main() +{ + char a[1][2]; + a[0] = bob();// ERROR - .* +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/init13.C b/gcc/testsuite/g++.old-deja/g++.brendan/init13.C new file mode 100644 index 000000000000..41f0fcf68bfc --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/init13.C @@ -0,0 +1,7 @@ +// Build don't link: +// GROUPS passed initialization +struct A { + operator int (); +}; + +int i = A(); diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/init2.C b/gcc/testsuite/g++.old-deja/g++.brendan/init2.C new file mode 100644 index 000000000000..a9ec6f3bea67 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/init2.C @@ -0,0 +1,5 @@ +// Build don't link: +// GROUPS passed initialization +// this should give an error in require_instantiated_type about not +// being allowed to have an initializer list in an argument list. +int f(int a = {1});// ERROR - .* diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/init3.C b/gcc/testsuite/g++.old-deja/g++.brendan/init3.C new file mode 100644 index 000000000000..91b2f7cbeb6d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/init3.C @@ -0,0 +1,38 @@ +// GROUPS passed initialization +// p2766: Make sure that members are initialized in order of declaration +// in the class, not in order of specification in the mem-initializer list. + +extern "C" void printf (char *, ...); +extern "C" void exit (int); + +int count = 0; + +void die () { printf ("FAIL\n"); exit (1); } + +class bar1 { +public: + bar1 (int) { if (count != 0) die (); count = 1; } +}; + +class bar2 +{ +public: + bar2 (int) { if (count != 1) die (); count = 2; } +}; + +class foo +{ +public: + bar1 a; + bar2 b; + foo (int, int); +}; + +// bar1 should get built before bar2 +foo::foo (int x, int y) : b(x), a(y) {} + +main() +{ + foo f (1, 2); + printf ("PASS\n"); +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/init4.C b/gcc/testsuite/g++.old-deja/g++.brendan/init4.C new file mode 100644 index 000000000000..c1d359281e6c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/init4.C @@ -0,0 +1,5 @@ +// Build don't link: +// GROUPS passed initialization +struct CharList { int i; }; + +const CharList& terminals = { 1 };// ERROR - .* diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/init5.C b/gcc/testsuite/g++.old-deja/g++.brendan/init5.C new file mode 100644 index 000000000000..112dcacbb947 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/init5.C @@ -0,0 +1,6 @@ +// Build don't link: +// GROUPS passed initialization +int main( int argc, char**argv, char** envp ){ + char* domain = argv[1]; + domain = domain? (char*)"component" : domain; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/init6.C b/gcc/testsuite/g++.old-deja/g++.brendan/init6.C new file mode 100644 index 000000000000..e49758adf1a6 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/init6.C @@ -0,0 +1,15 @@ +// Build don't link: +// GROUPS passed initialization +class Tag { +public: + Tag(int i):value(i){} + int value; +}; + +extern const Tag myTag; +extern const Tag myTag=9; + +// The compiler should not issue an error on this line; expand_static_init +// should be checking that there's no initializer for this line, and thus +// doesn't need to produce an error. +extern const Tag myTag; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/init7.C b/gcc/testsuite/g++.old-deja/g++.brendan/init7.C new file mode 100644 index 000000000000..033da8f9fe8e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/init7.C @@ -0,0 +1,16 @@ +// Build don't link: +// GROUPS passed initialization +struct myChoiceList +{ + int bla; + int blubb; + int brummbrumm; +}; + +extern const myChoiceList foo; + +extern const myChoiceList foo = {1,1,1}; + +// finish_decl should have an exclusion so an error is not produced +// for this line. +extern const myChoiceList foo; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/init8.C b/gcc/testsuite/g++.old-deja/g++.brendan/init8.C new file mode 100644 index 000000000000..4818a41ab727 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/init8.C @@ -0,0 +1,16 @@ +// Build don't link: +// GROUPS passed initialization +class A +{ +public: + A(const A & a) : i_member(a.i_member) + { + } + A(const int & i) : i_member(i) + { + } + union + { + int i_member; + }; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/init9.C b/gcc/testsuite/g++.old-deja/g++.brendan/init9.C new file mode 100644 index 000000000000..bad6416ef23c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/init9.C @@ -0,0 +1,11 @@ +// Build don't link: +// GROUPS passed initialization +int FALSE = 0; +class X { +public: + static int FALSE; +}; + +// The compiler should NOT complain about redeclaration of the global +// `FALSE' with this declaration...grokvardecl shouldn't be doing that. +int X::FALSE = 0; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/label1.C b/gcc/testsuite/g++.old-deja/g++.brendan/label1.C new file mode 100644 index 000000000000..ff0b87c3097a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/label1.C @@ -0,0 +1,4 @@ +// Build don't link: +// GROUPS passed labels +// it should only give 1 error, about using an undefined label +int main(void) { goto dummy; }// ERROR - .* diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/label2.C b/gcc/testsuite/g++.old-deja/g++.brendan/label2.C new file mode 100644 index 000000000000..bce21125d55f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/label2.C @@ -0,0 +1,11 @@ +// Build don't link: +// GROUPS passed labels +class X { +public: + X(); +}; +void foo () +{ +X: ::abort(); + goto X; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/line1.C b/gcc/testsuite/g++.old-deja/g++.brendan/line1.C new file mode 100644 index 000000000000..d76832e76c4a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/line1.C @@ -0,0 +1,4 @@ +// Build don't link: +// GROUPS passed error-messages +typedef struct s S;// ERROR - previous.* +struct S { int member:1; }; // the lineno for this should be 2, not 0// ERROR - conflicting types.* diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/misc1.C b/gcc/testsuite/g++.old-deja/g++.brendan/misc1.C new file mode 100644 index 000000000000..666ec256fb23 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/misc1.C @@ -0,0 +1,6 @@ +// Build don't link: +// GROUPS passed miscellaneous-bugs +int main( int argc, char**argv, char** envp ){ + char* domain = argv[1]; + domain = domain? (char*)"component" : domain; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/misc10.C b/gcc/testsuite/g++.old-deja/g++.brendan/misc10.C new file mode 100644 index 000000000000..4d96926ccf83 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/misc10.C @@ -0,0 +1,6 @@ +// Build don't link: +// GROUPS passed miscellaneous +// The compiler shouldn't give a `invalid operands to binary +' for this +// case. +enum flag { OFF, ON }; +enum BOOL { FALSE = (enum flag) 0, TRUE }; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/misc11.C b/gcc/testsuite/g++.old-deja/g++.brendan/misc11.C new file mode 100644 index 000000000000..043f6a5493ee --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/misc11.C @@ -0,0 +1,20 @@ +// Build don't link: +// GROUPS passed miscellaneous +// This should not complain about A::f being abstract. +struct A +{ + virtual int f() = 0; +}; + +struct B : virtual A +{ + virtual int f() { return 1; } + virtual int g() = 0; +}; + +struct C: B +{ + int g() { return 2; } +}; + +C c; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/misc12.C b/gcc/testsuite/g++.old-deja/g++.brendan/misc12.C new file mode 100644 index 000000000000..73db9bfccd4e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/misc12.C @@ -0,0 +1,16 @@ +// GROUPS passed miscellaneous +extern "C" void exit (int); +extern "C" int printf (char *, ...); + +/* Make sure cp-lex.c handles these properly--if this links, that means + it emitted the strings instead of __FUNCTION__.0, etc. */ + +int +main() +{ + char *a = __FUNCTION__; + char *b = __PRETTY_FUNCTION__; + + printf ("PASS\n"); + exit (0); +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/misc13.C b/gcc/testsuite/g++.old-deja/g++.brendan/misc13.C new file mode 100644 index 000000000000..57292a292cbc --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/misc13.C @@ -0,0 +1,9 @@ +// Build don't link: +// GROUPS passed miscellaneous-bugs +// This should only give warnings from duplicate_decls; it should not get +// errors from push_overloaded_decl as well. + +extern "C" +{ + long unsigned int strlen(char*);// ERROR - warning// ERROR - warning.* +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/misc14.C b/gcc/testsuite/g++.old-deja/g++.brendan/misc14.C new file mode 100644 index 000000000000..7d57e30147d4 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/misc14.C @@ -0,0 +1,12 @@ +// Build don't link: +// GROUPS passed miscellaneous-bugs +class X { +public: + enum e { + New,// ERROR - conflicts with other.* + }; // ERROR - comma + + static int New(int);// ERROR - declaration.* +}; + +main() {} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/misc15.C b/gcc/testsuite/g++.old-deja/g++.brendan/misc15.C new file mode 100644 index 000000000000..e4dd53e0994d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/misc15.C @@ -0,0 +1,13 @@ +// Build don't link: +// GROUPS passed miscellaneous-bugs +// we shouldn't get any warnings or errors for this code +struct A { + int aa; +}; +struct B : public A { +}; +struct C : public A { +}; +struct D : public C, public B { + void fun() { C::aa = 10; } +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/misc16.C b/gcc/testsuite/g++.old-deja/g++.brendan/misc16.C new file mode 100644 index 000000000000..15e3946a0d3d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/misc16.C @@ -0,0 +1,19 @@ +// Build don't link: +// GROUPS passed miscellaneous-bugs +// Using a typedef causes a compiler error +typedef unsigned int Uint32; + +// Using a define so that there isn't a typedef works OK. +//#define Uint32 unsigned int + +Uint32 func0(Uint32, Uint32) +{ + return 0; +} + +Uint32 func1(Uint32, Uint32) +{ + return 1; +} + +Uint32 (*mf[])(Uint32, Uint32) = {func0, func1}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/misc17.C b/gcc/testsuite/g++.old-deja/g++.brendan/misc17.C new file mode 100644 index 000000000000..987618f97893 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/misc17.C @@ -0,0 +1,36 @@ +// Build don't link: +// GROUPS passed miscellaneous-bugs +typedef int va_list; +class ostream; +class String { +public: +operator const char *() const; +}; +class FwtErrorManager { +public: + FwtErrorManager(ostream& err, const char *program); +public: + void form(const char *format, ...); +protected: + const String _program; +private: + FwtErrorManager(const FwtErrorManager&); + void operator=(const FwtErrorManager&); +}; +class FwtProgram: public FwtErrorManager { +public: + FwtProgram(); +}; +class FwtArgOptions { }; +class FwtStdProgram: public FwtProgram, public FwtArgOptions { +public: + FwtStdProgram(); + void usage_if_not_complete(); +}; +void +FwtStdProgram::usage_if_not_complete() +{ + FwtStdProgram& thisp = *this; + thisp.form("%s: error, there were unrecognized options", + (char *) FwtErrorManager::_program);// ERROR - .* +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/misc2.C b/gcc/testsuite/g++.old-deja/g++.brendan/misc2.C new file mode 100644 index 000000000000..d9aa99bbf784 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/misc2.C @@ -0,0 +1,11 @@ +// Build don't link: +// GROUPS passed miscellaneous-bugs +// Should be fixed by: +// Sun Jun 13 12:55:22 1993 Brendan Kehoe (brendan@lisa.cygnus.com) +// +// * cp-decl.c (grokvardecl): Don't complain about duplicate +// definitions of `extern "C"' declarations (parallelize it with how +// regular `extern' decls are handled). + +extern "C" double _MaXdOuB, _MiNdOuB; +extern "C" double _MaXdOuB, _MiNdOuB; // no error should be emitted for this diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/misc3.C b/gcc/testsuite/g++.old-deja/g++.brendan/misc3.C new file mode 100644 index 000000000000..d632cb733f9d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/misc3.C @@ -0,0 +1,12 @@ +// Build don't link: +// GROUPS passed miscellaneous-bugs +// The compiler should not error about taking the addr of main in this example. +class fred { +private: + void main () { + } +public: + fred ( ) { + &fred::main; + } +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/misc4.C b/gcc/testsuite/g++.old-deja/g++.brendan/misc4.C new file mode 100644 index 000000000000..93aea92d31fa --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/misc4.C @@ -0,0 +1,10 @@ +// Build don't link: +// GROUPS passed miscellaneous +// This should not emit an error about A::~A() being redefined; we +// should check that it is a pure virtual. +class A { +public: + virtual ~A() = 0; +}; + +A::~A() {} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/misc5.C b/gcc/testsuite/g++.old-deja/g++.brendan/misc5.C new file mode 100644 index 000000000000..05eeed61e1e9 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/misc5.C @@ -0,0 +1,7 @@ +// Build don't link: +// GROUPS passed miscellaneous +class A { + static A aa[2]; +}; + +A A::aa[2]; // should be completely legal diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/misc6.C b/gcc/testsuite/g++.old-deja/g++.brendan/misc6.C new file mode 100644 index 000000000000..b05c1f1da54b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/misc6.C @@ -0,0 +1,9 @@ +// Build don't link: +// GROUPS passed miscellaneous +// test that use of `inline' is forbidden when it should be +inline int i;// ERROR - .* +struct c { inline int i; };// ERROR - .* +int foo (inline int i);// ERROR - .* +inline class c; // ERROR - inline +inline typedef int t; // ERROR - inline +class d { inline friend class c; }; // ERROR - inline diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/misc7.C b/gcc/testsuite/g++.old-deja/g++.brendan/misc7.C new file mode 100644 index 000000000000..078dbc9c858b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/misc7.C @@ -0,0 +1,15 @@ +// GROUPS passed miscellaneous +extern "C" void printf (char *, ...); + +main() +{ + int i = 0; + // Make sure build_unary_op correctly computes this. + int *pi = &(++i); + *pi = 4; + + if (i != 4) + printf ("FAIL\n"); + else + printf ("PASS\n"); +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/misc8.C b/gcc/testsuite/g++.old-deja/g++.brendan/misc8.C new file mode 100644 index 000000000000..7efad41d896e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/misc8.C @@ -0,0 +1,18 @@ +// Build don't link: +// GROUPS passed miscellaneous +// used to say invalid lvalue in `&\' +class foo { + int a; + public: + foo(int a); +}; + +foo::foo(int a) +{ + foo::a=a; +} + +main() +{ +foo obj(4); +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/misc9.C b/gcc/testsuite/g++.old-deja/g++.brendan/misc9.C new file mode 100644 index 000000000000..88071c6e04ac --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/misc9.C @@ -0,0 +1,28 @@ +// Build don't link: +// GROUPS passed miscellaneous +//The program listed below produces the following error during compilation: +// % g++ bug17.cc +// bug17.cc: In method `class Y& Y::operator = (const class Y&)': +// bug17.cc:18: invalid use of non-lvalue array + +class X { +public: + X& operator=(const X&) { return *this; } +}; + +struct S { + char c[10]; + X x; +}; + +class Y { + S s; +public: + const S& f() const { return s; } + + Y& operator=(const Y& _Y) { + s = _Y.s; // this line compiles + s = _Y.f(); // this line does not compile + return *this; + } +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/mutable1.C b/gcc/testsuite/g++.old-deja/g++.brendan/mutable1.C new file mode 100644 index 000000000000..79157b7607c9 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/mutable1.C @@ -0,0 +1,6 @@ +// Build don't link: +// GROUPS passed mutable +class foo; +class bar { + mutable foo const *foobar; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/nest1.C b/gcc/testsuite/g++.old-deja/g++.brendan/nest1.C new file mode 100644 index 000000000000..32aab3ee9c27 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/nest1.C @@ -0,0 +1,15 @@ +// Build don't link: +// GROUPS passed nested-classes +int x; +class enclose { +public: + int x; + + class inner { + public: + void f (int i) { + x = i;// ERROR - .* + } + }; +}; + diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/nest10.C b/gcc/testsuite/g++.old-deja/g++.brendan/nest10.C new file mode 100644 index 000000000000..751440d1947d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/nest10.C @@ -0,0 +1,30 @@ +// Build don't link: +// GROUPS passed nested-classes +class A + { + public: + class B + { + public: + int f (); + void g (int); + private: + int b; + }; + }; + +int A::B::f () + { + int val=b; + return val; + } + +void A::B::g (int val) + { + b = val; + } + + +main () + { + } diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/nest11.C b/gcc/testsuite/g++.old-deja/g++.brendan/nest11.C new file mode 100644 index 000000000000..4a57b3838584 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/nest11.C @@ -0,0 +1,19 @@ +// Build don't link: +// GROUPS passed nested-classes +class A { + int x; + + struct B { + int x; + }; + struct C { + int bug (A::B &y); + }; +}; + +int +A::C::bug (A::B &y) +{ + return y.x; +} + diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/nest12.C b/gcc/testsuite/g++.old-deja/g++.brendan/nest12.C new file mode 100644 index 000000000000..19286db1dc03 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/nest12.C @@ -0,0 +1,21 @@ +// Build don't link: +// GROUPS passed nested-classes +struct enclose { + class nested; + nested *nptr; + class nested { + int x; + }; + void f(); +}; + +void enclose::f() +{ + nptr = new enclose::nested; +} + +void g() +{ + enclose obj; + obj.nptr = new enclose::nested; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/nest13.C b/gcc/testsuite/g++.old-deja/g++.brendan/nest13.C new file mode 100644 index 000000000000..354e7bc35bed --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/nest13.C @@ -0,0 +1,20 @@ +// Build don't link: +// GROUPS passed nested-classes +// The bug here is that wer'e getting a message about inner not +// being a basetype itself. I think it's because it's being +// compared as the "inner" we knew about when it was forward-declared, +// versus the "inner" we know about when it *has* been defined. + +class temp +{ +public: + struct inner; + inner *trump() + { + return (tt); + } + struct inner + { + int ll; + }*tt; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/nest15.C b/gcc/testsuite/g++.old-deja/g++.brendan/nest15.C new file mode 100644 index 000000000000..4a696af4dc2b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/nest15.C @@ -0,0 +1,37 @@ +// Build don't link: +// GROUPS passed nested-classes +class BDDHeap { +public: + BDDHeap(); + BDDHeap(const BDDHeap&); + + class Page { + public: + int i; + }; + struct Pointer { + Page *page; + unsigned index; + + Pointer(); + Pointer(const BDDHeap& heap); + }; + + struct Half { + struct { + Page *top; + Page **tail; + } inuse; + + Half(); + }; + + Half half[2]; + unsigned halfspace; +}; + +inline +BDDHeap::Pointer::Pointer(const BDDHeap& heap): +page(heap.half[heap.halfspace].inuse.top), +index(0) +{ } diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/nest16.C b/gcc/testsuite/g++.old-deja/g++.brendan/nest16.C new file mode 100644 index 000000000000..920ea0b5de55 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/nest16.C @@ -0,0 +1,41 @@ +// Build don't link: +// GROUPS passed nested-classes +class BDDHeap { +public: + BDDHeap(); + BDDHeap(const BDDHeap&); + + class Page { + public: + int i; + }; + struct Pointer { + Page *page; + unsigned index; + + Pointer(); + Pointer(const BDDHeap& heap); + }; + + struct Half { + struct { + Page *top; + Page **tail; + } inuse; + + Half(); + }; + + Half half[2]; + unsigned halfspace; +}; + +inline +BDDHeap::Pointer::Pointer(const BDDHeap& heap): +page(0), +index(0) +{ + Page *x = heap.half[heap.halfspace].inuse.top; + page = x; +} + diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/nest17.C b/gcc/testsuite/g++.old-deja/g++.brendan/nest17.C new file mode 100644 index 000000000000..f61c49ee9f52 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/nest17.C @@ -0,0 +1,12 @@ +// Build don't link: +// GROUPS passed nested-classes +class T { +public: + typedef int I; + class Y {int y;}; + typedef Y Z; +}; + +T::I i; +T::Y y; +T::Z z; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/nest18.C b/gcc/testsuite/g++.old-deja/g++.brendan/nest18.C new file mode 100644 index 000000000000..e41def435f9b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/nest18.C @@ -0,0 +1,31 @@ +// Build don't link: +// GROUPS passed nested-classes +// This is the first line of file ||t2.C||. + +// This code demonstrates what appears to be a bug with nested types. +// In C++, nested typedefs are not supposed to be visible outside +// their class scopes but they apparently are in gcc 2.4.5. This code +// compiles fine in AT&T cfront 3.0.1, but will not compile with gcc. + +// If this class does not precede String, then the code will compile. + +class Another { +public: + typedef int Length; +}; + +// If String does not define typedef int Length, then the code will +// compile. + +class String { +public: + typedef int Length; // remove this and it will compile fine + + int foo(Length length) const; +}; + +int String::foo(Length length) const { + return length; +} + +// File ||t2.C|| ends here. diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/nest19.C b/gcc/testsuite/g++.old-deja/g++.brendan/nest19.C new file mode 100644 index 000000000000..efa7ac5ee485 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/nest19.C @@ -0,0 +1,40 @@ +// Build don't link: +// GROUPS passed nested-classes +// This is the first line of file ||t3.C||. + +// This code demonstrates a variation of the same problem with nested +// types. In C++, nested typedefs are not supposed to be visible +// outside their class scopes but they apparently are in gcc 2.4.5. +// This code compiles fine in AT&T cfront 3.0.1, but gcc rejects it +// with the messages given below. + +// If this class does not precede Expr, then the code will compile. + +class Another { +public: + typedef int Boolean; + enum { FALSE, TRUE }; +}; + +// If Expr does not define typedef int Boolean, then the code will +// compile. + +class Expr { +public: + typedef int Boolean; + enum { FALSE, TRUE }; + void foo(); + void call_something_with(Boolean); +}; + +// t3.C: In method `void Expr::foo ()': +// t3.C:36: uninitialized const `Boolean' +// t3.C:36: parse error before `=' +// t3.C:37: `argument' undeclared (first use this function) +// t3.C:37: (Each undeclared identifier is reported only once +// t3.C:37: for each function it appears in.) + +void Expr::foo() { + const Boolean argument = TRUE; + call_something_with(argument); +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/nest2.C b/gcc/testsuite/g++.old-deja/g++.brendan/nest2.C new file mode 100644 index 000000000000..4b55245e5f86 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/nest2.C @@ -0,0 +1,18 @@ +// Build don't link: +// GROUPS passed nested-classes +class A { +protected: + class B { + public: + ~B(); + private: + float _datum; + }; +private: + B *_b; +}; + +A::B::~B() +{ + _datum = 8.0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/nest20.C b/gcc/testsuite/g++.old-deja/g++.brendan/nest20.C new file mode 100644 index 000000000000..297b08af825c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/nest20.C @@ -0,0 +1,30 @@ +// Build don't link: +// GROUPS passed nested-classes +// This is the first line of file ||t5.C||. + +// This code initializing an unnamed union inside a class appears to +// be legal C++ input and compiles fine with AT&T cfront 3.0.1, but +// gcc 2.4.5 complains about multiple initializations of the same +// member. + +class Expr { +public: + enum Type { undefined, slong, ulong, ldouble }; + Expr(); + Expr(Type type, const Expr* initializer); +private: + Type type_; + union { + long slong_; + unsigned long ulong_; + long double ldouble_; + }; +}; + +// Construct an undefined expression. + +Expr::Expr() + : + type_(undefined), + slong_(-1) +{} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/nest21.C b/gcc/testsuite/g++.old-deja/g++.brendan/nest21.C new file mode 100644 index 000000000000..c4eb0ee78ab2 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/nest21.C @@ -0,0 +1,95 @@ +// GROUPS passed nested-classes +#include <iostream.h> +#include <stdio.h> + +static char output[1024]; + +class BDDRetrace { +public: + class Dump { + public: + virtual Dump& operator<<(char c) = 0; + virtual Dump& operator<<(int i) = 0; + virtual Dump& operator<<(double r) = 0; + }; + + class Dump1: public Dump { + public: + Dump& operator<<(char c); + Dump& operator<<(int i); + Dump& operator<<(double r); + }; +}; + +class Dump2: public BDDRetrace::Dump { +public: + BDDRetrace::Dump& operator<<(char c); + BDDRetrace::Dump& operator<<(int i); + BDDRetrace::Dump& operator<<(double r); +}; + +BDDRetrace::Dump& +BDDRetrace::Dump1::operator<<(char c) +{ char tempout[1024]; + sprintf (tempout, "%s%s%c", output, "1-", c); + strcpy (output, tempout); + return *this; +} + +BDDRetrace::Dump& +BDDRetrace::Dump1::operator<<(int i) +{ char tempout[1024]; + sprintf (tempout, "%s%s%d", output, "1-", i); + strcpy (output, tempout); + return *this; } + +BDDRetrace::Dump& +BDDRetrace::Dump1::operator<<(double r) +{ char tempout[1024]; + sprintf (tempout, "%s%s%1.0f", output, "1-", r); + strcpy (output, tempout); + return *this; } + +BDDRetrace::Dump& +Dump2::operator<<(char c) +{ char tempout[1024]; + sprintf (tempout, "%s%s%c", output, "2-", c); + strcpy (output, tempout); + return *this; } + +BDDRetrace::Dump& +Dump2::operator<<(int i) +{ char tempout[1024]; + sprintf (tempout, "%s%s%d", output, "2-", i); + strcpy (output, tempout); + return *this; } + +BDDRetrace::Dump& +Dump2::operator<<(double r) +{ char tempout[1024]; + sprintf (tempout, "%s%s%1.0f", output, "2-", r); + strcpy (output, tempout); + return *this; } + +main() +{ + BDDRetrace::Dump1 d1; + Dump2 d2; + + sprintf (output, " "); + + d1 << 'a'; + d1 << 1; + d1 << 1.0; + + d2 << 'a'; + d2 << 1; + d2 << 1.0; + + if (strcmp (output, " 1-a1-11-12-a2-12-1") == 0) + printf ("PASS\n"); + else + printf ("FAIL\n"); + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/nest22.C b/gcc/testsuite/g++.old-deja/g++.brendan/nest22.C new file mode 100644 index 000000000000..cd26c34d5824 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/nest22.C @@ -0,0 +1,7 @@ +// Build don't link: +// GROUPS passed nested-classes +class foo { +public: + typedef int bar; + foo::bar fb; // this line causes a syntax error! +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/nest23.C b/gcc/testsuite/g++.old-deja/g++.brendan/nest23.C new file mode 100644 index 000000000000..e18398bf3fb6 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/nest23.C @@ -0,0 +1,15 @@ +// Build don't link: +// GROUPS passed nested-classes +class CS { +public: + class PS { + }; +}; + +class NCS: public CS { +public: + class S: public PS { + }; +}; + +int i; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/nest24.C b/gcc/testsuite/g++.old-deja/g++.brendan/nest24.C new file mode 100644 index 000000000000..4fcc02c63d61 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/nest24.C @@ -0,0 +1,14 @@ +// Build don't link: +// GROUPS passed nested-classes +struct A { + A (){} +}; + +void foo () +{ + struct B {}; + + struct S : B { + A a; + }; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/nest3.C b/gcc/testsuite/g++.old-deja/g++.brendan/nest3.C new file mode 100644 index 000000000000..16e7df88b456 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/nest3.C @@ -0,0 +1,12 @@ +// Build don't link: +// GROUPS passed nested-classes +class X { +public: + struct M2 { int m; }; + M2 g(int); +}; + + +X::M2 X::g(int i) { X::M2 m2; return m2; } + +main() { } diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/nest4.C b/gcc/testsuite/g++.old-deja/g++.brendan/nest4.C new file mode 100644 index 000000000000..34631f4f0cd3 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/nest4.C @@ -0,0 +1,9 @@ +// Build don't link: +// Special g++ Options: -pedantic-errors +// GROUPS passed nested-classes +class vec { + class blah { }; + + ::vec::blah satan( 0);// ERROR - .* + blah herman( 0);// ERROR - .* +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/new-array.C b/gcc/testsuite/g++.old-deja/g++.brendan/new-array.C new file mode 100644 index 000000000000..5341010822c5 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/new-array.C @@ -0,0 +1,18 @@ +// Build don't link: +// GROUPS passed operator-new +typedef struct { + int a; +} AStruct; + +void MakeBug() { + AStruct *job; + + // This used to crash, it should now give error(s). + job = new AStruct[];// ERROR - .* + + job = new AStruct; +} + +main () { + MakeBug(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/new1.C b/gcc/testsuite/g++.old-deja/g++.brendan/new1.C new file mode 100644 index 000000000000..09326d2ce58e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/new1.C @@ -0,0 +1,5 @@ +// Build don't link: +// GROUPS passed operator-new +typedef __SIZE_TYPE__ size_t; +struct x { int a; void * operator new (size_t, void *); }; +struct x * f(void *p) { return new (p) x; } diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/new2.C b/gcc/testsuite/g++.old-deja/g++.brendan/new2.C new file mode 100644 index 000000000000..64b3d51e08ae --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/new2.C @@ -0,0 +1,67 @@ +// GROUPS passed operator-new +// Check that if there is a user defined class-specific operator +// new for a given class, that operator is invoked when a new +// object of the class is requested, regardless of whether or not +// there is also a constructor for the given class, and regardless +// of whether or not the constructor for the given class is defined +// before or after the new operator is even declared. + +extern "C" void printf (char *, ...); + +typedef __SIZE_TYPE__ size_t; + +struct base { + int i; + + base () + { + i = 7; + } + + void * operator new (size_t size); + void operator delete (void*); +}; + +class derived : public base { + int j; +}; + +int new_call_count = 0; +int expected_size = 0; +int errors = 0; + +int main () +{ + base* base_ptr; + derived* derived_ptr; + + expected_size = 4; + base_ptr = new base; + expected_size = 8; + derived_ptr = new derived (); + + if ((new_call_count != 2) || (errors != 0)) + printf ("FAIL\n"); + else + printf ("PASS\n"); + + return 0; +} + +char allocation_space[1000]; +char* allocation_ptr = allocation_space; + +void base::operator delete (void* p) +{ +} + +void *base::operator new (size_t size) +{ + char* return_value = allocation_ptr; + + new_call_count++; + if (size != expected_size) + errors++; + allocation_ptr = allocation_ptr + size; + return (void*) return_value; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/new3.C b/gcc/testsuite/g++.old-deja/g++.brendan/new3.C new file mode 100644 index 000000000000..9e7eb8a855fd --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/new3.C @@ -0,0 +1,35 @@ +// GROUPS passed operator-new +#include <stdio.h> +#include <stdlib.h> + +int pass = 0; + +void *operator new(size_t sz){ + + void *p; + + pass = 1; + p = malloc(sz); + return p; +} + +class A { +public: + A() {} + ~A() {} + + int a; + int b; +}; + + +int main() +{ + A *bb = new A[10]; + delete [] bb; + + if (pass) + printf ("PASS\n"); + else + printf ("FAIL\n"); +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/ns1.C b/gcc/testsuite/g++.old-deja/g++.brendan/ns1.C new file mode 100644 index 000000000000..113f46bfdda1 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/ns1.C @@ -0,0 +1,18 @@ +// Build don't link: +// GROUPS passed old-abort +struct B +{ + void f(char); // ERROR - Cannot reduce access + void g(char); +}; + +class C +{ + int g(); +};// ERROR - warning + +class D2 : public B +{ + using B::f; // ok: B is a base of D + using C::g; // error: C isn't a base of D2 +}; // ERROR - type C is not a base type for type D2 diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/operators1.C b/gcc/testsuite/g++.old-deja/g++.brendan/operators1.C new file mode 100644 index 000000000000..6146eb401a02 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/operators1.C @@ -0,0 +1,14 @@ +// Build don't link: +// GROUPS passed operators +struct A { + int x; +}; + +int operator()(A x,float y) { // MUST be a member function// ERROR - .* + return 1; +} + +main() { + A x; + x(1.0); // ERROR - no match for call +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/operators2.C b/gcc/testsuite/g++.old-deja/g++.brendan/operators2.C new file mode 100644 index 000000000000..ece06ef3d06f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/operators2.C @@ -0,0 +1,4 @@ +// Build don't link: +// GROUPS passed operators +class X { }; +void operator[](X& a, X& b) {} // MUST be a member function// ERROR - .* diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/operators3.C b/gcc/testsuite/g++.old-deja/g++.brendan/operators3.C new file mode 100644 index 000000000000..e068de3aa52b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/operators3.C @@ -0,0 +1,4 @@ +// Build don't link: +// GROUPS passed operators +class X { }; +void operator->(X& a, X& b) {} // MUST be a member function// ERROR - .* diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/operators4.C b/gcc/testsuite/g++.old-deja/g++.brendan/operators4.C new file mode 100644 index 000000000000..b56d26c073df --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/operators4.C @@ -0,0 +1,121 @@ +// GROUPS passed operators +// Check that the & operator, when applied to a global function +// or member function returns a proper value as long as the context +// in which the result of & is used requires a pointer to a specific +// unambigous (function-pointer) type. +// +// This test fails (in test5()) when compiled with g++ 1.34.1. + +extern "C" void printf (char *, ...); + +int function (char c); +int function (float f); + +class base { + int filler; +public: + int method (char); + int method (float); +}; + +void* vp; + +typedef int (*ptr_to_func_of_char)(char); +typedef int (*ptr_to_func_of_float)(float); +typedef int (base::*ptr_to_method_of_char)(char); +typedef int (base::*ptr_to_method_of_float)(float); + +int test2 (void*); +int test3 (void*); +int test4 (void*); +int test5 (void*); + +base* base_ptr; + +int fail () +{ + printf ("FAIL\n"); + return 1; +} + +int main () +{ + base_ptr = new base; + + ptr_to_func_of_char p0 = &function; + vp = (void*) p0; + if (test2 (vp)) + return fail (); + ptr_to_func_of_float p1 = &function; + vp = (void*) p1; + if (test3 (vp)) + return fail (); + ptr_to_method_of_char p2 = &base::method; + vp = (void*) p2; // ERROR - + if (test4 (vp)) + return fail (); + ptr_to_method_of_float p3 = &base::method; + vp = (void*) p3; // ERROR - + if (test5 (vp)) + return fail (); + + printf ("PASS\n"); + return 0; +} + +int test2 (void* vp) +{ + char ch = 'x'; + + return (((ptr_to_func_of_char)vp)(ch) != 9901); +} + +int test3 (void* vp) +{ + float flt = 9.9; + + return (((ptr_to_func_of_float)vp)(flt) != 9902); +} + +int test4 (void* vp) +{ + char ch = 'x'; + ptr_to_method_of_char p = (ptr_to_method_of_char) vp; // ERROR - bad type conversion + + return ((base_ptr->*p)(ch) != 9904); +} + +int test5 (void* vp) +{ + float flt = 9.9; + ptr_to_method_of_float p = (ptr_to_method_of_float) vp; // ERROR - bad type conversion + + if ((base_ptr->*p)(flt) != 9905) { + return 1; + } else + return 0; +} + +int function (char c) +{ + c = c; + return 9901; +} + +int function (float f) +{ + f = f; + return 9902; +} + +int base::method (char c) +{ + c = c; + return 9904; +} + +int base::method (float f) +{ + f = f; + return 9905; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/operators5.C b/gcc/testsuite/g++.old-deja/g++.brendan/operators5.C new file mode 100644 index 000000000000..84c09a2a4b27 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/operators5.C @@ -0,0 +1,52 @@ +// GROUPS passed operators +// Check that operators may be (directly) recursive. + +extern "C" void printf (char *, ...); + +struct base { + int i; +}; + +base base_variable; + +base operator+ (const base& left, const base& right) +{ + base ret_val; + + ret_val.i = left.i + right.i; + return ret_val; +} + +base operator- (const base& left, int right) +{ + base ret_val; + + ret_val.i = left.i - right; + return ret_val; +} + +// Define the unary ! operator for class base to be the fibonachi +// operator. + +base operator! (const base& right) +{ + if (right.i < 2) + return right; + else + return ((!(right-1)) + (!(right-2))); +} + +int main () +{ + base k; + + k.i = 15; + k = !k; // fib it! + + if (k.i != 610) + printf ("FAIL\n"); + else + printf ("PASS\n"); + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/operators6.C b/gcc/testsuite/g++.old-deja/g++.brendan/operators6.C new file mode 100644 index 000000000000..c0c23188a8e9 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/operators6.C @@ -0,0 +1,11 @@ +// Build don't link: +// GROUPS passed operators +class a { +public: + a* operator->() { return this; } + void p(); +}; + +void a::p() { + operator->(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/operators7.C b/gcc/testsuite/g++.old-deja/g++.brendan/operators7.C new file mode 100644 index 000000000000..7a952211c9bb --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/operators7.C @@ -0,0 +1,13 @@ +// Build don't link: +// GROUPS passed operators +class A { + char *p; +public: + operator const char *() const { return p; } +}; + +int foo(const A &a) +{ + return (a != 0); +} + diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/operators8.C b/gcc/testsuite/g++.old-deja/g++.brendan/operators8.C new file mode 100644 index 000000000000..390f749bc5ec --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/operators8.C @@ -0,0 +1,11 @@ +// Build don't link: +// GROUPS passed operators +struct A { + char *p; + operator char *(); +}; + +char foo(A a) +{ + return a[0]; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/overload1.C b/gcc/testsuite/g++.old-deja/g++.brendan/overload1.C new file mode 100644 index 000000000000..5658fdd8f9bf --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/overload1.C @@ -0,0 +1,21 @@ +// Build don't link: +// GROUPS passed overloading +class Foo +{ +public: + int f (void); +}; + +class Bar : public Foo +{ +public: + int f (int); // ERROR - candidates are +}; + +main () +{ + Bar b; + + b.f ();// ERROR - + b.f (10); +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/overload10.C b/gcc/testsuite/g++.old-deja/g++.brendan/overload10.C new file mode 100644 index 000000000000..e28d6ea805dc --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/overload10.C @@ -0,0 +1,25 @@ +// Build don't link: +// GROUPS passed overloading +class Bed { + public: + static void bed_func( + int (*f)(int &, int, int)); +}; +class g_func { +public: + static int save_status; + + // in compute_harshness, we should be using comptypes, not ==, to + // check if this is equivalent to the previous decl; the only + // difference is the default arg + static int rpt_func(int &status, int expand, + int restore_cursor=1 ); +}; + +int main (int argc, + char **argv, + char **envp) +{ + Bed::bed_func(g_func::rpt_func); + return(1); +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/overload11.C b/gcc/testsuite/g++.old-deja/g++.brendan/overload11.C new file mode 100644 index 000000000000..cbced94cbcf5 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/overload11.C @@ -0,0 +1,11 @@ +// Build don't link: +// GROUPS passed overloading +class foo_int +{ +public: + int & i; + + foo_int (int &j) : i(j) {}; + void inc () { i++; } + +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/overload2.C b/gcc/testsuite/g++.old-deja/g++.brendan/overload2.C new file mode 100644 index 000000000000..75068da88bbf --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/overload2.C @@ -0,0 +1,43 @@ +// GROUPS passed overloading +// Check that calls to the correct overloaded virtual +// functions are generated even where the type of the formal +// arguments for the overloadings are similar or related. + +extern "C" void printf (char *, ...); + +int proper_method_called = 0; + +struct base { + int member; + virtual void method (char) + { + } + virtual void method (char *) + { + } +}; + +struct derived : public base { + int member; + virtual void method (char) + { + } + virtual void method (char *) + { + proper_method_called++; + } +}; + +char *message; + +int main () +{ + derived derived_object; + + derived_object.method (message); + + if (proper_method_called != 1) + printf ("FAIL\n"); + else + printf ("PASS\n"); +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/overload3.C b/gcc/testsuite/g++.old-deja/g++.brendan/overload3.C new file mode 100644 index 000000000000..baa90fb282d5 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/overload3.C @@ -0,0 +1,27 @@ +// Build don't link: +// GROUPS passed overloading +typedef int rutBoolean; + +class rutBigIntRep +{ +public: + friend rutBoolean operator>(const rutBigIntRep& a, const rutBigIntRep& b); + operator rutBoolean() const; +protected: + enum Kluge {kluge}; + rutBigIntRep(Kluge) {} + rutBigIntRep(); + rutBigIntRep(const rutBigIntRep& value); + rutBigIntRep& operator=(const rutBigIntRep& value); +}; + +rutBoolean operator>(const rutBigIntRep& a, const rutBigIntRep& b) { + // This should not result in a warning. It used to warn about the + // conversion from int to enum while exploring the possibility of + // converting `a' via `operator rutBoolean', then using the + // rutBigIntRep(Kluge) constructor. It later realizes it shouldn't + // do this, but the call to build_type_conversion was ending up with + // a warning in convert. + rutBigIntRep diff(a); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/overload4.C b/gcc/testsuite/g++.old-deja/g++.brendan/overload4.C new file mode 100644 index 000000000000..21c3dc8db5a5 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/overload4.C @@ -0,0 +1,23 @@ +// Build don't link: +// GROUPS passed overloading + typedef void * (*NewObject) (void); + + class B + { + public: + static void WantsNew (NewObject creator); // ERROR - candidates are + }; + + class A + { + public: + static A * NewOne (void); + + static void InitClass (void) + { + B::WantsNew ( (NewObject) A::NewOne ); + // This used to die in convert_harshness_{ansi,old} cuz it + // didn't know what to do about a void type. + B::WantsNew ( A::NewOne );// ERROR - + } + }; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/overload5.C b/gcc/testsuite/g++.old-deja/g++.brendan/overload5.C new file mode 100644 index 000000000000..d71f0c01d2ed --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/overload5.C @@ -0,0 +1,23 @@ +// Build don't link: +// GROUPS passed overloading +class Foo +{ +public: + int operator << (const signed char&); + int operator << (const unsigned char&); + int operator << (const short&); + int operator << (const unsigned short&); + int operator << (const long&); + int operator << (const unsigned long&); +}; + +int main () +{ + Foo fd; + + // We fixed convert_harshness_ansi so it considers the call to + // <<(const signed char&) to be a trivial conversion. It used + // to always make it a standard conversion, which made it conflict + // with <<(const unsigned char &), which is really a std conv. + fd << (signed char) 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/overload6.C b/gcc/testsuite/g++.old-deja/g++.brendan/overload6.C new file mode 100644 index 000000000000..84903c19d740 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/overload6.C @@ -0,0 +1,24 @@ +// Build don't link: +// GROUPS passed overloading +struct temp_string { + temp_string (const unsigned char); +}; + +class String { + public: + String& operator = (temp_string); + String& operator = (const String&); +}; +class S { + public: + operator temp_string & () const; +}; + +S lbuf; + +static void e_r () +{ + String a; + a = lbuf; + return; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/overload7.C b/gcc/testsuite/g++.old-deja/g++.brendan/overload7.C new file mode 100644 index 000000000000..0c39e0d8c21c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/overload7.C @@ -0,0 +1,41 @@ +// GROUPS passed overloading +extern "C" void printf (char *, ...); + +struct NoName { + + int first; + int second; +}; + +class Casted { + + public: + + NoName x; + double y; + + Casted ( int _x , double _y ): y(_y) + { + x.first = _x; + x.second = _x*2; + } + + operator NoName() const { return x; } + operator double() const { return y; } +}; + +main() +{ + Casted c(10,12.34); + + NoName x; + double y; + + x = c; + y = c; + + if (x.first == 10 && x.second == 20 && y == 12.34) + printf ("PASS\n"); + else + printf ("FAIL\n"); +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/overload8.C b/gcc/testsuite/g++.old-deja/g++.brendan/overload8.C new file mode 100644 index 000000000000..6057ebe70866 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/overload8.C @@ -0,0 +1,9 @@ +// Build don't link: +// GROUPS passed overloading +typedef struct{double re,im;} complex; +class Complex{public:double re,im; + inline void operator=(Complex&X){re=X.re; im=X.im;};}; +void zxcvbnm(int n,...){n=1;} +main(){complex c; Complex C; +zxcvbnm(1,c); +zxcvbnm(1,C);} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/overload9.C b/gcc/testsuite/g++.old-deja/g++.brendan/overload9.C new file mode 100644 index 000000000000..2d5dfa3553d4 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/overload9.C @@ -0,0 +1,20 @@ +// Build don't link: +// GROUPS passed overloading +class CLogger +{ +public: + void operator() (int,const char *) {}; // ERROR - candidates + void operator() (int,const char *, ...) {}; // ERROR - candidates +} Log; + +class CGLogger : public CLogger +{ +} GLog; + +main() +{ + Log(1,"Test");// ERROR - call of.* + Log(1,"Test %d",3); + GLog(1,"Test");// ERROR - call of.* + GLog(1,"Test %d",3); +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/parse1.C b/gcc/testsuite/g++.old-deja/g++.brendan/parse1.C new file mode 100644 index 000000000000..76bfb0ea3783 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/parse1.C @@ -0,0 +1,17 @@ +// Build don't link: +// GROUPS passed parsing +class Try { +private: + char s; +public: + // an escaped double-quote should not call consume_string inside + // reinit_parse_for_block + void mf() { s='\"'; } +}; + +main() +{ + Try x; + x.mf(); +} + diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/parse2.C b/gcc/testsuite/g++.old-deja/g++.brendan/parse2.C new file mode 100644 index 000000000000..cd588e15d86d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/parse2.C @@ -0,0 +1,10 @@ +// Build don't link: +// GROUPS passed parsing +class BitString { +public: + int i; +}; + + +typedef BitString BS; +typedef ::BitString cBS; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/prepost1.C b/gcc/testsuite/g++.old-deja/g++.brendan/prepost1.C new file mode 100644 index 000000000000..ba1a2084efe1 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/prepost1.C @@ -0,0 +1,15 @@ +// Build don't link: +// GROUPS passed prefix-postfix +class foo { +public: + operator ++ (); // ERROR - no type or storage class +}; + +main() +{ + foo x; + + // This should fall back to calling operator++(), and be an error with + // the -pedantic flag. + x++;// ERROR - +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/prepost2.C b/gcc/testsuite/g++.old-deja/g++.brendan/prepost2.C new file mode 100644 index 000000000000..1e34433e180d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/prepost2.C @@ -0,0 +1,10 @@ +// Build don't link: +// GROUPS passed initialization +class foo { +public: + operator ++ (); // ERROR - no type or storage class + operator ++ (int); // ERROR - no type or storage class + operator ++ (char); // illegal// ERROR - .* + operator ++ (short); // illegal// ERROR - .* + operator ++ (long); // illegal// ERROR - .* +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/prepost3.C b/gcc/testsuite/g++.old-deja/g++.brendan/prepost3.C new file mode 100644 index 000000000000..4244e4ff59e2 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/prepost3.C @@ -0,0 +1,7 @@ +// Build don't link: +// GROUPS passed prefix-postfix +class Y { +public: + friend Y operator++ (Y&); + friend Y operator++ (Y&, char); // illegal// ERROR - .* +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/prepost4.C b/gcc/testsuite/g++.old-deja/g++.brendan/prepost4.C new file mode 100644 index 000000000000..ac31f9129525 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/prepost4.C @@ -0,0 +1,10 @@ +// Build don't link: +// GROUPS passed prefix-postfix +class Y { +public: + friend Y operator++ (Y&); + + // This is legal---it's a good test to make sure that grokfndecl's + // checking of the arguments is sane. + friend Y operator++ (Y&, int); +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/ptolemy1.C b/gcc/testsuite/g++.old-deja/g++.brendan/ptolemy1.C new file mode 100644 index 000000000000..3e3b2dfe1b56 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/ptolemy1.C @@ -0,0 +1,23 @@ +// Build don't link: +// GROUPS passed ptolemy-bugs +class Tcl_Interp; + +class PTcl { +public: + PTcl(Tcl_Interp* interp = 0); + ~PTcl(); + int alias(int argc,char** argv); +}; + +typedef int (PTcl::*InterpFuncP)(int,char**); + +struct InterpTableEntry { + char* name; + InterpFuncP func; +}; + + +static InterpTableEntry funcTable[] = { + { "alias" , &PTcl::alias } , + 0, 0 +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/ptolemy2.C b/gcc/testsuite/g++.old-deja/g++.brendan/ptolemy2.C new file mode 100644 index 000000000000..ca9c21c2814e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/ptolemy2.C @@ -0,0 +1,69 @@ +// GROUPS passed ptolemy-bugs +#include <iostream.h> + +class PTcl { +public: + int dispatcher(int which,int argc,char** argv); + // fns in the table + int one(int argc, char** argv); + int two(int argc, char** argv); + int three(int argc, char** argv); +}; + +// An InterpFuncP is a pointer to an PTcl function that takes an argc-argv +// argument list and returns TCL_OK or TCL_ERROR. + +typedef int (PTcl::*InterpFuncP)(int,char**); + +struct InterpTableEntry { + char* name; + InterpFuncP func; +}; + +// Here is the function table and dispatcher function. +// These macros define entries for the table + +#define quote(x) #x +#define ENTRY(verb) { quote(verb), &PTcl::verb } + +static InterpTableEntry funcTable[] = { + ENTRY(one), + ENTRY(two), + ENTRY(three), + {0, 0} +}; + +int PTcl::dispatcher(int which, int argc, char** argv) { + return (this->*(funcTable[which].func))(argc, argv); +} + +void printargs(char** argv) { +// while (*argv) { +// cout << " " << *argv++; +// } +// cout << "\n"; +} + +int PTcl::one(int, char** argv) { + cout << "FAIL\n"; + printargs(argv); + return 0; +} + +int PTcl::two(int, char** argv) { + cout << "PASS\n"; + printargs(argv); + return 0; +} + +int PTcl::three(int, char** argv) { + cout << "FAIL\n"; + printargs(argv); + return 0; +} + +main (int argc, char** argv) { + PTcl obj; + obj.dispatcher(1,argc,argv); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/ptrmem1.C b/gcc/testsuite/g++.old-deja/g++.brendan/ptrmem1.C new file mode 100644 index 000000000000..49c9f75aa1f4 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/ptrmem1.C @@ -0,0 +1,21 @@ +// Build don't link: +// GROUPS passed pointers-to-members +class my_class +{ +public: + typedef void func_type (int num); + my_class (int num, func_type* proc); + void dispatch (void); +private: + int _num; + func_type *_proc; +}; + +my_class::my_class (int num, func_type* proc) : _num(num), _proc(proc) +{ +} + +void my_class::dispatch (void) +{ + _proc(_num); +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/ptrmem2.C b/gcc/testsuite/g++.old-deja/g++.brendan/ptrmem2.C new file mode 100644 index 000000000000..2af19e04d846 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/ptrmem2.C @@ -0,0 +1,26 @@ +// Build don't link: +// GROUPS passed pointers-to-members +struct C { + struct N { + int g1(int); + int g2(int); + }; + + typedef int (N::*pmfn)(int); + + int f1(int); + int f2(int); +}; + +int (C::*f)(int) = &C::f1; + +/* + The compiler should not crash on the line below; this change fixes it: + * cp-tree.c (list_hash_lookup_or_cons): Make sure the type doesn't + have TYPE_PTRMEMFUNC_P set before we try to build its + CLASSTYPE_ID_AS_LIST. +*/ + +C::pmfn h = &C::N::g1; + +int (C::N::*g)(int) = &C::N::g2; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/ptrmem3.C b/gcc/testsuite/g++.old-deja/g++.brendan/ptrmem3.C new file mode 100644 index 000000000000..0f6bf0bd90f1 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/ptrmem3.C @@ -0,0 +1,32 @@ +// Build don't link: +// GROUPS passed pointers-to-members +template<class T> class TemplA { + T t; +}; + + +template<class T> class TemplB { +public: + typedef void (T::*TClassMethod)(); + +private: +/* + This line should not crash cuz of the get_decl_list change in this: + * cp-tree.c (list_hash_lookup_or_cons): Make sure the type doesn't + have TYPE_PTRMEMFUNC_P set before we try to build its + CLASSTYPE_ID_AS_LIST. + (get_decl_list): Likewise, when trying to read it. +*/ + TemplA<TClassMethod> Tmethod; +}; + + +class C { + int a; +}; + +int main(int, char**) { + + TemplB<C> test; +} + diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/ptrmem4.C b/gcc/testsuite/g++.old-deja/g++.brendan/ptrmem4.C new file mode 100644 index 000000000000..a4f792e5c074 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/ptrmem4.C @@ -0,0 +1,16 @@ +// Build don't link: +// GROUPS passed pointers-to-members +class X { + private: + int i; + public: + X(int k) { i=k; } + int operator=(X &a) { return i = a.i; } + int operator=(int ii) { return i = ii; } +}; +int main(void) +{ + int (X::*op1_ptr)(X&); + op1_ptr = &X::operator=; // g++ gives error + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/recurse.C b/gcc/testsuite/g++.old-deja/g++.brendan/recurse.C new file mode 100644 index 000000000000..93baa4490b4f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/recurse.C @@ -0,0 +1,80 @@ +// Build don't link: +// GROUPS passed recursive-aborts +// types +typedef unsigned int DBflag; // for storing user flag value +typedef unsigned long DBoffset; // 32-bit unsigned integer +typedef DBoffset DBsize; // type for storing sizes of objects +typedef unsigned char DBbyte; // 8-bit unsigned char + +class DBlink +{ +protected: + DBbyte link[4]; // hold link in portable MSB first format +public: + DBlink(DBoffset = 0, DBflag = 0); + DBlink &operator=(const DBlink &); + DBlink &operator=(DBoffset); + operator DBoffset(); + operator const DBbyte *() { return link; } + void set_flag() { link[0] |= 0x80; } + void reset_flag() { link[0] &= 0x7f; } + int test_flag() const { return (link[0] & 0x80) != 0; } +}; + +typedef DBlink DBsizerec; // hold data record size in portable format + +// constants +const DBoffset DB_NULL = 0; + +class DBlinkrec +{ +protected: + // offsets are stored with MSB in link[0] + DBlink l; // offset into link file of right child - MSB = red bit + DBlink r; // offset into link file of left child - MSB = delete + DBlink d; // offset into parallel data file - MSB = user flag +public: + DBlinkrec():l(DB_NULL), r(DB_NULL), d(DB_NULL) {} + void make_red() // set link to red + { l.set_flag(); } + void make_black() // set link to black + { l.reset_flag(); } + int is_red() const // indicates whether this is a red link + { return l.test_flag(); } + void set_discard() // set discard flag + { r.set_flag(); } + void reset_discard() // reset discard flag + { r.reset_flag(); } + int is_discarded() const // check discard flag + { return r.test_flag(); } + void set_flag() // set user flag + { d.set_flag(); } + void reset_flag() // reset user flag + { d.reset_flag(); } + int is_flag() const // check user flag + { return d.test_flag(); } + + friend class DataBase; +}; + +class DBpathrec : public DBlinkrec +{ + DBoffset offset; // offset of link record in LNK file +public: + DBpathrec():offset(DB_NULL) { } + DBpathrec(DBoffset off, const DBlinkrec &lr):offset(off), DBlinkrec(lr) {} + operator DBoffset() { return offset; } + DBpathrec &operator=(DBoffset off) { offset = off; return *this; } + DBpathrec &operator=(const DBpathrec &pr) + { offset = pr.offset; (DBlinkrec)*this = (DBlinkrec)pr; return *this; } + + friend class DataBase; +}; + +main() +{ + DBpathrec a(), b(); + + a = b;// ERROR - non-lvalue in assignment.* +} + diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/redecl1.C b/gcc/testsuite/g++.old-deja/g++.brendan/redecl1.C new file mode 100644 index 000000000000..39a432cac5f4 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/redecl1.C @@ -0,0 +1,5 @@ +// Build don't link: +// GROUPS passed redeclaration +inline int min(int x, int y) {return x < y ? x : y;} /* 235 */// ERROR - .* +int min(int a, int b); +inline int min(int a, int b) {return (a < b)?a:b;}// ERROR - .* diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/redecl2.C b/gcc/testsuite/g++.old-deja/g++.brendan/redecl2.C new file mode 100644 index 000000000000..58942197ddf3 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/redecl2.C @@ -0,0 +1,51 @@ +// GROUPS passed redeclaration +// Check that if multiple declarations of the same single +// function are present in different places in the same file, +// and if these declarations differ (as allowed) in the number +// of argument defaults provided, that correct values are +// passed at all call points anyway. + +extern "C" void printf (char *, ...); + +void receiver (int ii, int jj); + +void sender_1 () +{ + receiver (3,7); +} + +void receiver (int ii, int jj = 9); + +void sender_2 () +{ + receiver (5); +} + +int ii_sum = 0; +int jj_sum = 0; + +void sender_3 (); + +int main () +{ + sender_1 (); + sender_2 (); + sender_3 (); + if (ii_sum != 13 || jj_sum != 25) + printf ("FAIL\n"); + else + printf ("PASS\n"); + + return 0; +} + +void receiver (int ii, int jj) +{ + ii_sum += ii; + jj_sum += jj; +} + +void sender_3 () +{ + receiver (5); +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/redecl3.C b/gcc/testsuite/g++.old-deja/g++.brendan/redecl3.C new file mode 100644 index 000000000000..5987e0e31727 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/redecl3.C @@ -0,0 +1,17 @@ +// Build don't link: +// GROUPS passed redeclaration +class foo +{ +public: + int bar(int a); +}; + + +void bar(int &a); + +int foo::bar(int a) { + int a = 0; // Should this be an error ?// ERROR - declaration.* + + bar(a); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/reference1.C b/gcc/testsuite/g++.old-deja/g++.brendan/reference1.C new file mode 100644 index 000000000000..2a0c2939e4f1 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/reference1.C @@ -0,0 +1,53 @@ +// Special g++ Options: -w +// GROUPS passed references +// Check that if a reference is initialized to refer to a value +// which is returned from a function call, the actual call to +// the function is only invoked for the original initialization +// of the reference, and not for each subsequent use of the +// reference. +// +// This test fails with G++ 1.35.0- (pre-release). +// Reported 4/4/89 by Kim Smith + +extern "C" void printf (char *, ...); + +struct base { + int data_member; + + base () {} + void function_member (); +}; + +base base_object; + +base base_returning_function (); + +int call_count = 0; + +int main () +{ + base& base_ref = base_returning_function (); + + base_ref.function_member (); + base_ref.function_member (); + base_ref.data_member = 99; + + if (call_count == 1) + printf ("PASS\n"); + else + printf ("FAIL\n"); + + return 0; +} + +base base_returning_function () +{ + base local_base_object; + + call_count++; + return local_base_object; +} + +void base::function_member () +{ +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/rtti1.C b/gcc/testsuite/g++.old-deja/g++.brendan/rtti1.C new file mode 100644 index 000000000000..6dcdff34e363 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/rtti1.C @@ -0,0 +1,8 @@ +// Build don't link: +// GROUPS passed RTTI +#include <typeinfo> + +struct B { virtual ~B(){} }; +struct D0 : public virtual B { virtual ~D0(){} }; +struct D1 : public virtual D0 { virtual ~D1(){} }; +struct C : public virtual B, public D1 { virtual ~C() { } }; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/scope1.C b/gcc/testsuite/g++.old-deja/g++.brendan/scope1.C new file mode 100644 index 000000000000..babbb0183963 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/scope1.C @@ -0,0 +1,8 @@ +// Build don't link: +// GROUPS passed scoping +int f (int i) { + if (i) + for (int j = i; j; j--) + ; + return j; // error: j should only be in scope inside the body of `for'// ERROR - .* +} // ERROR - non-void diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/scope2.C b/gcc/testsuite/g++.old-deja/g++.brendan/scope2.C new file mode 100644 index 000000000000..7085716be73a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/scope2.C @@ -0,0 +1,29 @@ +// Build don't link: +// GROUPS passed scoping +class A +{ + public: + A() {} + ~A() {} + virtual void f() {} +}; + +class B : public A +{ + public: + B() {} + ~B() {} + virtual void f() {} +}; + + +B GLOBAL_B; + +B& foo() {return GLOBAL_B;} + +main() +{ + // build_scoped_method_call and build_scoped_ref should know how + // to deal with a reference for this + foo().A::f(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/scope3.C b/gcc/testsuite/g++.old-deja/g++.brendan/scope3.C new file mode 100644 index 000000000000..cf784303171b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/scope3.C @@ -0,0 +1,25 @@ +// Build don't link: +// GROUPS passed scoping +// This is fixed when NEW_CLASS_SCOPING is on. + +template<class T> +class ArrayG { +public: + ArrayG(); +protected: + const unsigned INITIAL; + T* array; +}; + +template<class T> +ArrayG<T>::ArrayG(): +array(new T[INITIAL]) +{ } + +struct X { + struct Correspondence { + int i; + }; + + void fill(ArrayG<Correspondence>& a); +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/scope4.C b/gcc/testsuite/g++.old-deja/g++.brendan/scope4.C new file mode 100644 index 000000000000..43f90164cb63 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/scope4.C @@ -0,0 +1,32 @@ +// Build don't link: +// excess errors test - XFAIL *-*-* +// GROUPS passed scoping +class BitString { +public: + int i; + int length() const; +}; + +typedef BitString BS; + +class V { +public: + class BitString { + public: + static int x(const ::BitString& value); + static int y(const class ::BitString& value); // should be parsed ok + static int z(const BS& value); + }; +}; + +int +V::BitString::x(const ::BitString& value) +{ return value.length(); } + +int +V::BitString::y(const class ::BitString& value) // should be parsed ok +{ return value.length(); } + +int +V::BitString::z(const BS& value) +{ return value.length(); } diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/scope5.C b/gcc/testsuite/g++.old-deja/g++.brendan/scope5.C new file mode 100644 index 000000000000..753236948a35 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/scope5.C @@ -0,0 +1,21 @@ +// Build don't link: +// GROUPS passed scoping +class Integer { +public: + int i; +}; + +class Type { + enum Class { ENUM, INTEGER }; + + class Description { + public: + + }; + + class Integer: public Description { + public: + ::Integer low; + ::Integer high; + }; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/shadow1.C b/gcc/testsuite/g++.old-deja/g++.brendan/shadow1.C new file mode 100644 index 000000000000..6a1d9d1f8e33 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/shadow1.C @@ -0,0 +1,8 @@ +// Build don't link: +// GROUPS passed errors +void f( int a) { + int a; // this should be an error now// ERROR - .* + { + int a; + } +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/sizeof1.C b/gcc/testsuite/g++.old-deja/g++.brendan/sizeof1.C new file mode 100644 index 000000000000..c8242eb55390 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/sizeof1.C @@ -0,0 +1,15 @@ +// Build don't link: +// Special g++ Options: -pedantic-errors +// GROUPS passed sizeof +// ARM $5.3.2 + +void f() { } + +int +main() +{ + // sizeof may not be applied to a function + int i = sizeof( f);// ERROR - .* + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/sizeof2.C b/gcc/testsuite/g++.old-deja/g++.brendan/sizeof2.C new file mode 100644 index 000000000000..ddac679d880c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/sizeof2.C @@ -0,0 +1,18 @@ +// Build don't link: +// Special g++ Options: -pedantic-errors +// GROUPS passed sizeof +// ARM $5.3.2 + +void f() { } + +struct foo { int bit : 1; }; + +int +main() +{ + // sizeof may not be applied to a bit-field + foo f; + int i = sizeof (f.bit);// ERROR - .* + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/sizeof3.C b/gcc/testsuite/g++.old-deja/g++.brendan/sizeof3.C new file mode 100644 index 000000000000..e6972ca397ea --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/sizeof3.C @@ -0,0 +1,15 @@ +// Build don't link: +// Special g++ Options: -pedantic-errors +// GROUPS passed sizeof +// ARM $5.3.2 + +class bar; + +int +main() +{ + // sizeof may not be applied to an undefined class + int k = sizeof (bar);// ERROR - .* + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/sizeof4.C b/gcc/testsuite/g++.old-deja/g++.brendan/sizeof4.C new file mode 100644 index 000000000000..62d76c05bdd8 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/sizeof4.C @@ -0,0 +1,13 @@ +// Build don't link: +// Special g++ Options: -pedantic-errors +// GROUPS passed sizeof +// ARM $5.3.2 + +int +main() +{ + // sizeof may not be applied to the type void + int l = sizeof (void);// ERROR - .* + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/sizeof5.C b/gcc/testsuite/g++.old-deja/g++.brendan/sizeof5.C new file mode 100644 index 000000000000..0ef9d9c5ed10 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/sizeof5.C @@ -0,0 +1,17 @@ +// GROUPS passed sizeof +// ARM $5.3.2 + +extern "C" void printf (char *, ...); + +class foo {}; + +int +main () +{ + // The size of any class or class object is larger than zero. + int i = sizeof (foo); + if (i > 0) + printf ("PASS\n"); + else + printf ("FAIL\n"); +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/sorry1.C b/gcc/testsuite/g++.old-deja/g++.brendan/sorry1.C new file mode 100644 index 000000000000..caa9276f8a8d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/sorry1.C @@ -0,0 +1,36 @@ +// Build don't link: +// GROUPS passed old-sorry +class a { +public: + int* foo(); +}; + +a aa; +a* ap; + +class b { +public: + int ok(int* p =aa.foo()); + + // dump_init should know what to do with this NON_LVALUE_EXPR + int f(int* p =ap->foo()); +}; + + int +b::ok(int *p) +{ + return 0; +} + + int +b::f(int *p) +{ + return 0; +} + void +bar() +{ + b b; + b.ok(); + b.f(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/static1.C b/gcc/testsuite/g++.old-deja/g++.brendan/static1.C new file mode 100644 index 000000000000..b30c796eb193 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/static1.C @@ -0,0 +1,4 @@ +// Build don't link: +// GROUPS passed static +class A { public: int a; };// ERROR - .* +void foo7 () { A::a = 3; }// ERROR - .* diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/static2.C b/gcc/testsuite/g++.old-deja/g++.brendan/static2.C new file mode 100644 index 000000000000..1e050e2cf6fd --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/static2.C @@ -0,0 +1,19 @@ +// Build don't link: +// GROUPS passed static +class A +{ + public: + void member(void) + { + } + + static void staticMember() + { + member (); // illegal, no object for calling non-static method// ERROR - .* + } +}; + +main() +{ + A::staticMember(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/static3.C b/gcc/testsuite/g++.old-deja/g++.brendan/static3.C new file mode 100644 index 000000000000..5c52f0e217dd --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/static3.C @@ -0,0 +1,15 @@ +// Build don't link: +// GROUPS passed static +class foo{ +public: + static void bar( int i ){ value = i; } + static int value;// ERROR - .* +}; + +const int foo::value = 0; // should be an error.// ERROR - .* + +int main(){ + foo::bar( 1 ); + return 0; +} + diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/synth1.C b/gcc/testsuite/g++.old-deja/g++.brendan/synth1.C new file mode 100644 index 000000000000..5356796094a2 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/synth1.C @@ -0,0 +1,33 @@ +// Build don't link: +// Special g++ Options: -pedantic-errors -g -Wall +// GROUPS passed synthetics +// excess errors test - XFAIL sparc64-*-elf +// Check to make sure that g++ doesn't get freaked out about the use +// of generated methods that it supposedly "can't see". + +class Char { +public: + Char(); + Char(char v); + + // synthetic copy-constructor and operator= +private: + char value; +}; + +class XChar: public Char { +public: + XChar(); + XChar(char v, int serial); + + void operator=(const XChar& other); +private: + int serial; +}; + +void +XChar::operator=(const XChar& other) +{ + Char::operator=(other); + // serial stays the same +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/template1.C b/gcc/testsuite/g++.old-deja/g++.brendan/template1.C new file mode 100644 index 000000000000..e6609fd323b4 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/template1.C @@ -0,0 +1,17 @@ +// Build don't link: +// GROUPS passed templates +// g++-2.2.1: member functions returning a template type + + +template <class T> struct list { }; + +struct A +{ + list<int> L; + + list<int> get_list(); + +}; + + +list<int> A::get_list() { return L; } diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/template11.C b/gcc/testsuite/g++.old-deja/g++.brendan/template11.C new file mode 100644 index 000000000000..55fa2b20025d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/template11.C @@ -0,0 +1,47 @@ +// Build don't link: +// GROUPS passed templates +template <class Called> +class aCallback +{ +public: + aCallback(Called& obj, int (Called::*met)()); + + int callback(); + +protected: + +private: + // the object to call + Called& object; + + // the method to apply + int (Called::*method)(); + +}; + +template <class Called> +aCallback<Called>::aCallback(Called& obj, + int (Called::*met)()) : +object(obj), +method(met) +{}; + +template <class Called> +int aCallback<Called>::callback() +{ + return (object.*method)(); +} + +struct myStruct +{ + int action() {return 24;}; +}; + +main() +{ + myStruct toto; + + aCallback<myStruct> cb(toto, &myStruct::action); + + return cb.callback(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/template12.C b/gcc/testsuite/g++.old-deja/g++.brendan/template12.C new file mode 100644 index 000000000000..2165ae29ee43 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/template12.C @@ -0,0 +1,8 @@ +// Build don't link: +// GROUPS passed templates +inline void foo (const int &x) {} + +template <class type> +inline void foo (const type &x) {x.eat_this_and_die();} + +int main (int argc, char **argv) {foo (argc);} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/template13.C b/gcc/testsuite/g++.old-deja/g++.brendan/template13.C new file mode 100644 index 000000000000..653ef215e88a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/template13.C @@ -0,0 +1,15 @@ +// Build don't link: +// GROUPS passed templates +template<class T> +class ListS { +public: + class Vix { + public: + Vix(); + }; +}; + +template<class T> +ListS<T>::Vix::Vix() +{ } + diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/template15.C b/gcc/testsuite/g++.old-deja/g++.brendan/template15.C new file mode 100644 index 000000000000..b830505e2098 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/template15.C @@ -0,0 +1,19 @@ +// Build don't link: +// GROUPS passed templates +template<class T> class Stack { + public: + Stack (int s = 10); //Comment out "= 10" and it will compile + ~Stack(void); //Omitting "void" doesn't help +}; + +template<class T> Stack<T>::~Stack(void) +{ } + +//If this definition comes before the one for ~Stack, the error message +//about redeclaration of `void Stack<int>::~Stack()' will not occur. +template<class T> Stack<T>::Stack(int s) +{ } + +int main () { + Stack<int> stk(10); +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/template16.C b/gcc/testsuite/g++.old-deja/g++.brendan/template16.C new file mode 100644 index 000000000000..ec13a24f86ed --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/template16.C @@ -0,0 +1,10 @@ +// Build don't link: +// GROUPS passed templates +template<class T> class TList { + typedef void (T::*TVOIDFUNT)(); + typedef T* (T::*TTPFUNT)(T*); +}; + +class A; +class B : TList<A> { }; + diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/template17.C b/gcc/testsuite/g++.old-deja/g++.brendan/template17.C new file mode 100644 index 000000000000..e6c2652dce52 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/template17.C @@ -0,0 +1,12 @@ +// Build don't link: +// GROUPS passed templates +struct Regex { int i; Regex(char *, int); }; +template<class KEY> +class NDAMName { +public: + static const Regex pattern; + static unsigned sequence_number; +}; + +const Regex NDAMName<'L'>::pattern("^[Ll](.*)$", 1);// ERROR - type/value.* +unsigned NDAMName<'L'>::sequence_number = 0;// ERROR - type/value diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/template18.C b/gcc/testsuite/g++.old-deja/g++.brendan/template18.C new file mode 100644 index 000000000000..5c6479cbffc2 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/template18.C @@ -0,0 +1,14 @@ +// Build don't link: +// GROUPS passed templates +template<class T> class X; +typedef X<int> IX; + +template<class T> +class X { +public: + T x; +}; + +struct A { + IX c; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/template19.C b/gcc/testsuite/g++.old-deja/g++.brendan/template19.C new file mode 100644 index 000000000000..a8b33c1b4dd5 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/template19.C @@ -0,0 +1,26 @@ +// Build don't link: +// GROUPS passed templates +template <class T> +class Base +{ +public: + Base() { } +}; + +template <class memberType, class keyType> +class Middle : public Base<memberType> +{ +public: + Middle (keyType const & (*ko) (memberType const &)) + { + } +}; + +// EXCHANGE the following lines for this code to work. +//template <class memberType, class keyType> class Middle; +template <class T, class keyType> class Middle; + +struct Test : public Middle <int, int> +{ + Test(); +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/template2.C b/gcc/testsuite/g++.old-deja/g++.brendan/template2.C new file mode 100644 index 000000000000..07e2e66a7c05 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/template2.C @@ -0,0 +1,14 @@ +// Build don't link: +// GROUPS passed templates +template <class Q> +class Conc { +public: + static int body(); +}; + +template <class Q> +int Conc<Q>::body() {return 0;} + +main () { + Conc<int> s2; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/template20.C b/gcc/testsuite/g++.old-deja/g++.brendan/template20.C new file mode 100644 index 000000000000..7f5c4acd4670 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/template20.C @@ -0,0 +1,21 @@ +// Build don't link: +// GROUPS passed templates +template <class A, class B> class Map; + +class Foo +{ +public: + static Map<int,int> bar; +}; + +template <class A, class B> +class Map +{ +public : + int find(); +}; + +main() +{ + int z = Foo::bar.find(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/template21.C b/gcc/testsuite/g++.old-deja/g++.brendan/template21.C new file mode 100644 index 000000000000..9d6139191e0c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/template21.C @@ -0,0 +1,43 @@ +// Build don't link: +// GROUPS passed templates +template<class T> +class L { +public: + L(); + + T x[30]; + int doit(int i) const; +}; + +#ifdef BUG +template<class T> +int +L<T>::doit(int i) const +{ + return x[i].z; +} +#endif + +class X { +public: + class Y { + public: + Y(); + Y(int); + + int z; + }; + + L<Y> ly; +}; + +#ifndef BUG +template<class T> +int +L<T>::doit(int i) const +{ + return x[i].z; +} +#endif + +static X x; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/template22.C b/gcc/testsuite/g++.old-deja/g++.brendan/template22.C new file mode 100644 index 000000000000..a977e2ffacf5 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/template22.C @@ -0,0 +1,22 @@ +// GROUPS passed templates +extern "C" int printf (const char *, ...); + +template <class T> +class Foo +{ +public: + void func (int const& i); +}; + +template <class T> +void Foo<T>:: +func (int const& i) +{} + + +main () +{ + Foo<int const> foo; + printf ("PASS\n"); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/template23.C b/gcc/testsuite/g++.old-deja/g++.brendan/template23.C new file mode 100644 index 000000000000..f38d42046851 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/template23.C @@ -0,0 +1,34 @@ +// Build don't link: +// GROUPS passed templates +template <class T> +class T_Base +{}; + +template <class T> +class T_Derived +: public T_Base<T> +{}; + + +class Base +{ +public: + Base (float name); +}; + +class Derived +: public Base +{ +private: + T_Base<int>* data_; // Fix (1): Change date_ from T_Base<int>* to T_Derived<int>* + +public: + Derived (float name); +}; + + +Derived:: +Derived (float name) +: Base(name), + data_(new T_Derived<int>()) +{} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/template24.C b/gcc/testsuite/g++.old-deja/g++.brendan/template24.C new file mode 100644 index 000000000000..7d6770232829 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/template24.C @@ -0,0 +1,20 @@ +// GROUPS passed templates +extern "C" void printf (char *, ...); + +template <class F> +class Temp +{ + F func_; +public: + Temp (F f) :func_(f) {} +}; + +int func (int h = 1, int z = 2) { return h+z; } + +main () +{ + Temp<int(*)(int, int)> temp (func); + + printf ("PASS\n"); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/template25.C b/gcc/testsuite/g++.old-deja/g++.brendan/template25.C new file mode 100644 index 000000000000..5939fed5b89f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/template25.C @@ -0,0 +1,36 @@ +// Build don't link: +// GROUPS passed templates +template <class T> +class Temp_Base +{}; + +template <class T> +class Temp_Derived +: public Temp_Base<T> +{ +public: + Temp_Derived (int i = 10) {} +}; + + +class Base +{ + float r_; +public: + Base (float r) : r_(r) {} +}; + +class Derived +: public Base +{ +private: + Temp_Base<int>* boo_; +public: + Derived (float); +}; + +Derived:: +Derived (float form) +: Base(form), + boo_(new Temp_Derived<int>) +{} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/template26.C b/gcc/testsuite/g++.old-deja/g++.brendan/template26.C new file mode 100644 index 000000000000..6dc15551f81d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/template26.C @@ -0,0 +1,31 @@ +// Build don't link: +// GROUPS passed templates +class V { + public: + V(); + V(int); + }; + +template <int I> class AA: public virtual V { + public: + AA(); + AA(int); + }; + +template <int I> class BB : public virtual V { + public: + BB(); + BB(int); + }; + +template <int I> AA<I>::AA() {}; +template <int I> AA<I>::AA(int i): V(i) {}; +template <int I> BB<I>::BB() {}; +template <int I> BB<I>::BB(int i) {}; + +class CC : public AA<1>, public BB<2> { + public: + CC(); + CC(int); + }; + diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/template27.C b/gcc/testsuite/g++.old-deja/g++.brendan/template27.C new file mode 100644 index 000000000000..a2649d439e08 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/template27.C @@ -0,0 +1,14 @@ +// Build don't link: +// GROUPS passed templates + template<class K, class V> class MapLS { }; + class String {}; + class X1 { }; + class RefProto { }; + template<class REP> class Ref { }; + + class MapLS<String, Ref<X1> >: public MapLS<String, RefProto> { + public: + ~MapLS(); + }; + + MapLS<String, Ref<X1> >::~MapLS() { } diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/template28.C b/gcc/testsuite/g++.old-deja/g++.brendan/template28.C new file mode 100644 index 000000000000..3ae4caf46385 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/template28.C @@ -0,0 +1,13 @@ +// Build don't link: +// GROUPS passed templates +class X { + const char *fptr; +public: + X(const char *ptr) { fptr = ptr; } + operator const char*() { return fptr; } +}; + +main(){ + X x1("1234"); + X x2(x1+1); +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/template29.C b/gcc/testsuite/g++.old-deja/g++.brendan/template29.C new file mode 100644 index 000000000000..fa81995ed74d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/template29.C @@ -0,0 +1,12 @@ +// Build don't link: +// GROUPS passed templates + template <class ElementType> class A + { public: + A(ElementType) {} + ElementType get() const ; + }; + + template <class ElementType> ElementType A<ElementType>::get() const + { return ElementType(0); } + + main() { const A<short> a(3); } diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/template3.C b/gcc/testsuite/g++.old-deja/g++.brendan/template3.C new file mode 100644 index 000000000000..3900421d12fa --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/template3.C @@ -0,0 +1,49 @@ +// GROUPS passed templates +extern "C" void printf (char *, ...); +extern "C" void exit (int); + +int count = 0; + +void +die (int x) +{ + if (x != ++count) + { + printf ("FAIL\n"); + exit (1); + } +} + +class A { + public: + void f() const { die (-1); } +}; + + +template <class Item> +class B : public A { + public: + void f() const; +}; + +template <class Item> +inline void B<Item>::f() const { die (1); } + +template <class Item> +class C : public A { + public: + void f() const { die (2); } +}; + + +int main() +{ + B<int> b; + C<int> c; + + b.f(); //- bugged, (A::f() called instead of B::f()) + c.f(); //- works fine (C::f() called) + + printf ("PASS\n"); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/template30.C b/gcc/testsuite/g++.old-deja/g++.brendan/template30.C new file mode 100644 index 000000000000..97357d63a801 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/template30.C @@ -0,0 +1,16 @@ +// Build don't link: +// GROUPS passed templates + + template<class K, class V> class MapLS { }; + class String {}; + class X1 { }; + class RefProto { }; + template<class REP> class Ref { }; + + class MapLS<String, Ref<X1> >: public MapLS<String, RefProto> { + public: + ~MapLS(); + }; + + MapLS<String, Ref<X1> >::~MapLS() { } + diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/template4.C b/gcc/testsuite/g++.old-deja/g++.brendan/template4.C new file mode 100644 index 000000000000..318cd2e10d03 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/template4.C @@ -0,0 +1,11 @@ +// Build don't link: +// GROUPS passed templates +// This used to be a circularity in chainon. +template <class ARG> struct TMPL { + typedef int ARG::*ARG_data_member_ptr; + typedef void (ARG::*ARG_func_member_ptr) (); +}; + +struct S { }; + +TMPL<S> object; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/template5.C b/gcc/testsuite/g++.old-deja/g++.brendan/template5.C new file mode 100644 index 000000000000..39b74d6a4df6 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/template5.C @@ -0,0 +1,48 @@ +// Build don't link: +// GROUPS passed templates +template<class T> +class Vector +{ +public: + Vector(int x); + ~Vector(); + T& operator [] (int i); + +private: + T* v; + int sz; +} ; + +template<class T> +Vector<T>::Vector(int x) +{ + sz = x; + v = new T (sz); +} ; + +template<class T> +Vector<T>::~Vector() + { delete [] v; } ; + +template<class T> +T & +Vector<T>::operator [] (int i) + { return v[i]; } ; + +int +main(int, char **) +{ + Vector<int> intvec(3); + + intvec[0] = 1; + intvec[1] = 2; + intvec[2] = 3; + + for (int i = 0; i < 3; i++) + intvec[i]; + + return 0; +} + + + diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/template6.C b/gcc/testsuite/g++.old-deja/g++.brendan/template6.C new file mode 100644 index 000000000000..96459ca355dd --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/template6.C @@ -0,0 +1,30 @@ +// Build don't link: +// GROUPS passed templates +struct B { +}; + +struct X : B { + ~X (); +}; + +struct Request { + X s; +}; + +template <class ET> class TC { + ET data; +}; + +struct TMem { + + ~TMem() {} + + TC<Request> *req; +}; + +struct FIO { + + void init (); + + FIO () { init(); } +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/template7.C b/gcc/testsuite/g++.old-deja/g++.brendan/template7.C new file mode 100644 index 000000000000..59dc4835632e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/template7.C @@ -0,0 +1,48 @@ +// Build don't link: +// GROUPS passed templates +template <class ET> +class ChainElem { +public: + + ET data; +}; + +template <class ET> +class Chain { +public: + + ChainElem<ET> *first; + + virtual ~Chain() {} + +}; + +struct B { +}; + +struct X : B { + ~X (); +}; + +struct TBNFexpression { +}; + +struct TCaseLabelPair { +}; + +struct TVariant { + Chain<TCaseLabelPair> CaseLabelList; +}; + +struct TCaseConstruct { + Chain<TBNFexpression> TagFieldPrefixes; + Chain<TVariant> Variants; +}; + +struct Production { + X TypeName; +}; + +struct SimpleSyntax { + Chain<Production> Productions; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/template8.C b/gcc/testsuite/g++.old-deja/g++.brendan/template8.C new file mode 100644 index 000000000000..0a24617239fe --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/template8.C @@ -0,0 +1,20 @@ +// Build don't link: +// GROUPS passed templates +#include <stdio.h> + +// make sure we accept unions for templates +template<int n> +union Double_alignt{ + double for_alignt; + char array[n]; + +}; + +main(){ + + + Double_alignt<20000> heap; + + printf(" &heap.array[0] = %d, &heap.for_alignt = %d\n", &heap.array[0], &heap.for_alignt); + +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/template9.C b/gcc/testsuite/g++.old-deja/g++.brendan/template9.C new file mode 100644 index 000000000000..8940c17724d5 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/template9.C @@ -0,0 +1,19 @@ +// GROUPS passed templates +// Test that the compiler will emit the definition of min given just +// the declaration. At one point in the past, it did not. +#include <iostream.h> + +template <class T> inline T min(T a, T b) { return (a < b) ? a : b;}; + +double min(double,double); // this should expand the template + +main () { + int a = 1, b = 2; + double aa = 2.0, bb = 1.2; + cout << min(a,b) << ", " << min(aa,bb) << "\n"; + if (min (a, aa) == a) + cout << "PASS" << endl; + else + cout << "FAIL" << endl; +} + diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/temporary1.C b/gcc/testsuite/g++.old-deja/g++.brendan/temporary1.C new file mode 100644 index 000000000000..5258edf36a5d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/temporary1.C @@ -0,0 +1,13 @@ +// Build don't link: +// GROUPS passed temporaries +#include <stdio.h> + +main () +{ + int a = 2; + + if (----a == 0) + printf ("a = 0\n"); + + printf ("a = %d\n", a); +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/typedef1.C b/gcc/testsuite/g++.old-deja/g++.brendan/typedef1.C new file mode 100644 index 000000000000..2f7aa87b122a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/typedef1.C @@ -0,0 +1,29 @@ +// Build don't link: + +class baseClassA +{ +public: +private: + class internalClassA + { + public: + private: + typedef int privateType; + + privateType memberA; + }; +}; + +class baseClassB +{ +public: +private: + class internalClassA + { + public: + private: + typedef unsigned int privateType; + + privateType memberB; + }; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/union1.C b/gcc/testsuite/g++.old-deja/g++.brendan/union1.C new file mode 100644 index 000000000000..7a4df261dbfe --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/union1.C @@ -0,0 +1,14 @@ +// Build don't link: +// GROUPS passed unions +// This is fixed by finish_anon_union doing a string_cst_equal check on +// the DECL_SIZE of the decls, instead of comparing the DECL_SIZE nodes. + unsigned + hash(const double d) + { + static union { + unsigned asint[2]; + double asdouble; + }; + asdouble = d; + return asint[0] ^ asint[1]; + } diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/union2.C b/gcc/testsuite/g++.old-deja/g++.brendan/union2.C new file mode 100644 index 000000000000..d913ae80321f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/union2.C @@ -0,0 +1,13 @@ +// Build don't link: +// GROUPS passed unions +class B; + +struct A { + A(B* x) : i(x) {} + A() : i(0) {} + + union { + B* i; + B* c; + }; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/union3.C b/gcc/testsuite/g++.old-deja/g++.brendan/union3.C new file mode 100644 index 000000000000..ad8b840b4bf6 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/union3.C @@ -0,0 +1,14 @@ +// Build don't link: +// GROUPS passed unions +union alan { +int a; +char *b; +alan(); +}; + +alan mary; + +alan::alan() +{ + a=0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/visibility1.C b/gcc/testsuite/g++.old-deja/g++.brendan/visibility1.C new file mode 100644 index 000000000000..7d11f875716f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/visibility1.C @@ -0,0 +1,16 @@ +// Build don't link: +// GROUPS passed visibility +class foo { +protected: + int i; +}; + +class bar : public foo { +public: + friend void baz (foo *); +}; + +void baz (foo *f) +{ + f->i = 1; // error: i is protected// ERROR - .* +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/visibility10.C b/gcc/testsuite/g++.old-deja/g++.brendan/visibility10.C new file mode 100644 index 000000000000..4eb3cae80505 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/visibility10.C @@ -0,0 +1,14 @@ +// Build don't link: +// GROUPS passed visibility +struct base +{ + protected: + void base_func() {}// ERROR - .*is protected.* +}; + +struct derived : public base +{ + protected: + void derived_func(base *ptr) { ptr->base_func(); }// ERROR - within this context +}; + diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/visibility2.C b/gcc/testsuite/g++.old-deja/g++.brendan/visibility2.C new file mode 100644 index 000000000000..09e0f6591ae9 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/visibility2.C @@ -0,0 +1,10 @@ +// Build don't link: +// GROUPS passed visibility +class X { + void g (int); // ERROR - private +public: + void g (double); +}; + +class Y : public X { void f() { g (1); } }; // ERROR - private + diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/visibility3.C b/gcc/testsuite/g++.old-deja/g++.brendan/visibility3.C new file mode 100644 index 000000000000..8d3f8fd81ac3 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/visibility3.C @@ -0,0 +1,38 @@ +// Build don't link: +// GROUPS passed visibility +// Used to say: +// manip.cc:17: member `_f' is a private member of class `B<int>' +// manip.cc:17: member `_a' is a private member of class `B<int>' + +class A {}; + +template <class TP> +class B +{ + A &(*_f) (A &, TP); + TP _a; +public: + B (A &(*f) (A &, TP), TP a) : _f (f), _a (a) {} + friend A &operator<< (A &o, const B<TP> &m); +}; + +template <class TP> +inline A & +operator<< (A &o, const B<TP> &m) +{ + (*m._f) (o, m._a); + return o; +} + +A &setw (A &, int); +B<int> setw (int n) +{ + return B<int> (setw, n); +} + +A x; + +void f () +{ + x << setw (2); +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/visibility4.C b/gcc/testsuite/g++.old-deja/g++.brendan/visibility4.C new file mode 100644 index 000000000000..b9de78f1881b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/visibility4.C @@ -0,0 +1,14 @@ +// Build don't link: +// Special g++ Options: -w +// GROUPS passed visibility +template <class T> +class Feld { +public: + Feld(const Feld&) {} +}; + +class Polynom : private Feld<double> { +friend Polynom f(const Polynom&); +}; + +Polynom f(const Polynom& p) { return p; } diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/visibility5.C b/gcc/testsuite/g++.old-deja/g++.brendan/visibility5.C new file mode 100644 index 000000000000..a53881a641e8 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/visibility5.C @@ -0,0 +1,8 @@ +// Build don't link: +// GROUPS passed visibility +template<int K> class B; +template<int K> class A {int n; friend class B<K>;}; +template<int K> class B {public: void method(A<K>) const;}; +template<int K> void B<K>::method(A<K> X) const {X.n=0;} +typedef B<2> B2; + diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/visibility6.C b/gcc/testsuite/g++.old-deja/g++.brendan/visibility6.C new file mode 100644 index 000000000000..5ca62c0c6a73 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/visibility6.C @@ -0,0 +1,17 @@ +// Build don't link: +// GROUPS passed visibility +class bottom +{ +public: + int b; +}; +class middle : private bottom +{ +public: + void foo () { b; } +}; +class top : public middle +{ +public: + void bar () { b; }// ERROR - .* +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/visibility7.C b/gcc/testsuite/g++.old-deja/g++.brendan/visibility7.C new file mode 100644 index 000000000000..670547dd2e37 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/visibility7.C @@ -0,0 +1,15 @@ +// Build don't link: +// GROUPS passed visibility +class X +{ +public: + void fn ();// ERROR - .* +}; +class Y : private X +{}; + +class Unrelated +{ +public: + void foo () { Y y; y.fn (); }// ERROR - .* +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/visibility8.C b/gcc/testsuite/g++.old-deja/g++.brendan/visibility8.C new file mode 100644 index 000000000000..a3bb856d1adf --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/visibility8.C @@ -0,0 +1,15 @@ +// Build don't link: +// GROUPS passed visibility +// Make sure private inheritance affects the visibility of +// static members used in an inherited context. +class foo +{ +public: + static int y; +}; +class foo1 : private foo +{ }; +class foo2 : public foo1 +{ public: + void bar () { y; }// ERROR - .* +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/visibility9.C b/gcc/testsuite/g++.old-deja/g++.brendan/visibility9.C new file mode 100644 index 000000000000..c2599291dc85 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/visibility9.C @@ -0,0 +1,16 @@ +// Build don't link: +// GROUPS passed visibility +class A { +public: + void aMethod(void) {};// ERROR - .* +}; + +class AA : A { }; + +class B { +public: + void thisMethod() { + AA ana; + ana.aMethod();// ERROR - .* + } +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/vtables1.C b/gcc/testsuite/g++.old-deja/g++.brendan/vtables1.C new file mode 100644 index 000000000000..984ce18ce6b7 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/vtables1.C @@ -0,0 +1,42 @@ +// GROUPS passed virtual-tables +// Check that virtual function tables are generated and used +// even for struct's/classes which have no explicit constructors. + +extern "C" void printf (char *, ...); + +int base_func_member_1_called = 0; +int derived_func_member_1_called = 0; + +struct base { + virtual void func_member_1 () + { + base_func_member_1_called++; + } +}; + +struct derived : public base { + virtual void func_member_1 () + { + derived_func_member_1_called++; + } + + virtual void func_member_2 () + { + } +}; + +base* bp1; +base* bp2; + +int main () +{ + bp1 = new base; + bp2 = new derived; + + bp1->func_member_1 (); + bp2->func_member_1 (); + + printf ("PASS\n"); + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/warnings1.C b/gcc/testsuite/g++.old-deja/g++.brendan/warnings1.C new file mode 100644 index 000000000000..02963623a22f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/warnings1.C @@ -0,0 +1,6 @@ +// Build don't link: +// GROUPS passed warnings +// there should be a warning about foo only defining private methods +class foo { + int bar(); +};// ERROR - .* diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/warnings10.C b/gcc/testsuite/g++.old-deja/g++.brendan/warnings10.C new file mode 100644 index 000000000000..78ddf77d856e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/warnings10.C @@ -0,0 +1,10 @@ +// Build don't link: +// GROUPS passed warnings +void foo() +{ + int i; + if (1) { + for (int i = 0; i < 10; i++) + ; + } +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/warnings2.C b/gcc/testsuite/g++.old-deja/g++.brendan/warnings2.C new file mode 100644 index 000000000000..49971d58356a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/warnings2.C @@ -0,0 +1,7 @@ +// Build don't link: +// GROUPS passed warnings +class K { +public: + void f() { + }; // there should be no warning about this semicolon +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/warnings3.C b/gcc/testsuite/g++.old-deja/g++.brendan/warnings3.C new file mode 100644 index 000000000000..14fe99785477 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/warnings3.C @@ -0,0 +1,16 @@ +// Build don't link: +// Special g++ Options: -O2 -Wall +// GROUPS passed warnings +class A { +int i; +public: + void funcA(void) { + funcB(); + } + + // The compiler should not emit a warning about not being + // able to inline this function. + void funcB(void) { + i++; + } +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/warnings4.C b/gcc/testsuite/g++.old-deja/g++.brendan/warnings4.C new file mode 100644 index 000000000000..d733522824ec --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/warnings4.C @@ -0,0 +1,10 @@ +// Build don't link: +// GROUPS passed warnings +int +main () +{ + register int x; + int * foo = &x; // in C++ it's perfectly legal to do this + + return 0; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/warnings5.C b/gcc/testsuite/g++.old-deja/g++.brendan/warnings5.C new file mode 100644 index 000000000000..5a953fd1c544 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/warnings5.C @@ -0,0 +1,10 @@ +// Build don't link: +// GROUPS passed warnings +enum TypeKind { ATK, BTK } ; + +struct Type { + enum TypeKind kind : 8; + void setBTK(); +}; + +void Type::setBTK() { kind = BTK; } diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/warnings6.C b/gcc/testsuite/g++.old-deja/g++.brendan/warnings6.C new file mode 100644 index 000000000000..785c083464a9 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/warnings6.C @@ -0,0 +1,9 @@ +// Build don't link: +// Special g++ Options: -O2 -Wall -ansi -pedantic +// GROUPS passed warnings +// should not emit this warning about func: +// x.C:2: warning: invalid storage class for function `func' +// +template <class T> inline void func(T) +{ +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/warnings7.C b/gcc/testsuite/g++.old-deja/g++.brendan/warnings7.C new file mode 100644 index 000000000000..24e7a2cde0d1 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/warnings7.C @@ -0,0 +1,21 @@ +// Build don't link: +// Special g++ Options: -O2 -Wall +// GROUPS passed warnings +template<class T> +class X { +public: + void kill(unsigned i) + { vec[i].~T(); } + T *vec; +}; + +class Y { }; + +void +x() +{ + X<int> x; + x.kill(0); + X<Y> y; + y.kill(0); +}; diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/warnings8.C b/gcc/testsuite/g++.old-deja/g++.brendan/warnings8.C new file mode 100644 index 000000000000..5599918fd125 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/warnings8.C @@ -0,0 +1,7 @@ +// Build don't link: +// Special g++ Options: -Wall +// GROUPS passed warnings +bool foo(unsigned char c) +{ + return (c & 17) != 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.brendan/warnings9.C b/gcc/testsuite/g++.old-deja/g++.brendan/warnings9.C new file mode 100644 index 000000000000..c46f2a1e45db --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.brendan/warnings9.C @@ -0,0 +1,7 @@ +// Build don't link: +// Special g++ Options: -Wall +// GROUPS passed warnings +inline int foo() +{ + return 3; +} diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/891229_02.C b/gcc/testsuite/g++.old-deja/g++.bugs/891229_02.C new file mode 100644 index 000000000000..042096c81b9e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/891229_02.C @@ -0,0 +1,24 @@ +// g++ 1.36.1 bug 891229_02 + +// g++ limits the scope of names which are declared as typedef names within +// another type to that other type. + +// This conflicts with the (global) scope given to such names by cfront 2.0. + +// Cfront 2.0 passes this test. + +// Note 2/15/94: The standard has changed; this limiting of scope is correct +// behavior. See 9.9. --jason + +// keywords: typedef, nested types, scope + +struct foo { + foo (); + typedef void (*function_p) (void); +}; + +function_p fp; // ERROR - no such type in scope + +foo::foo () {} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/891230_01.C b/gcc/testsuite/g++.old-deja/g++.bugs/891230_01.C new file mode 100644 index 000000000000..ac49e0bd4446 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/891230_01.C @@ -0,0 +1,20 @@ +// g++ 1.36.1 bug 891230_01 + +// g++ gives typedefs which are nested within class declarations a scope +// which is local to the class declaration itself. This causes examples +// like the following to get compile-time errors. + +// Cfront 2.0 passes this test. + +// keywords: typedef, nested types, scope + +struct foo { + + typedef foo* foo_p; + void member (foo_p); +}; + +void foo::member (foo_p p) { // gets bogus errors +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900107_01.C b/gcc/testsuite/g++.old-deja/g++.bugs/900107_01.C new file mode 100644 index 000000000000..7271f1aa71ee --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900107_01.C @@ -0,0 +1,37 @@ +// g++ 1.36.1 bug 900107_01 + +// Unlike GCC and Cfront 2.0, the g++ 1.36.1 compiler gives struct, union, +// and class declarations which are nested within blocks file scope. + +// Cfront 2.0 passes this test. + +// keywords: block scope, file scope, nested types, tagged types + +class c1 { int c1_member1; }; +struct s1 { int s1_member1; }; +union u1 { int u1_member1; }; +enum e1 { e1_val1 }; +typedef int t1; + +void foo () +{ + class c1 { // gets bogus error + int c1_member1; + } c1_local_object_0; + + struct s1 { // gets bogus error + int s1_member1; + } s1_local_object_0; + + union u1 { // gets bogus error + int u1_member1; + } u1_local_object_0; + + enum e1 { // OK using g++ or GCC, but mishandled by Cfront 2.0. + e1_value1 + } e1_local_object_0; + + typedef int t1; // OK +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900119_01.C b/gcc/testsuite/g++.old-deja/g++.bugs/900119_01.C new file mode 100644 index 000000000000..2eb8906ddd1d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900119_01.C @@ -0,0 +1,46 @@ +// g++ 1.36.1 bug 900119_01 + +// g++ allows initializers to be included in the declaration of members +// of classes, structs, unions (even when -pedantic is used). + +// This is not allowed by the C++ 2.0 Reference Manual or by Cfront 2.0. + +// keywords: member declaration, member initialization + +int global_int; + +class class0 { +public: + int class0_member_0 = 99; /* ERROR - */ + static int class0_member_1 = 99; /* ERROR - */ + int &class0_member_2 = global_int; /* ERROR - */ + + class0 () : class0_member_2 (global_int) { } +}; + + +struct struct0 { + int struct0_member_0 = 99; /* ERROR - */ + static int struct0_member_1 = 99; /* ERROR - */ + int &struct0_member_2 = global_int; /* ERROR - */ + + struct0 () : struct0_member_2 (global_int) { } +}; + +// g++ does not allow unions to have more than one member with an initializer + +union union0 { + int union0_member_0 = 99; /* ERROR - */ +}; + +union union1 { + //static int union1_member_0 = 99; /* definitely illegal (9.5) */ +}; + +union union2 { + int &union2_member_0 = global_int; /* ERROR - */ + + union2 () : union2_member_0 (global_int) { } +}; + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900121_01.C b/gcc/testsuite/g++.old-deja/g++.bugs/900121_01.C new file mode 100644 index 000000000000..99ab8f6cbcf1 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900121_01.C @@ -0,0 +1,16 @@ +// g++ 1.36.1 bug 900121_01 + +// The following file causes g++ 1.36.1 (and 1.36.2) to abort. + +// Cfront 2.0 passes this test. + +// keywords: abort, incomplete types, reference types, formal parameters + +struct s0; + +void function (struct s0 &arg1, struct s0 &arg2) +{ + arg1 = arg2; // ERROR - causes abort +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900121_02.C b/gcc/testsuite/g++.old-deja/g++.bugs/900121_02.C new file mode 100644 index 000000000000..c90dfd9aaa4c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900121_02.C @@ -0,0 +1,49 @@ +// g++ 1.36.1 bug 900121_02 + +// Assignment of structs is defined as memberwise assignment, +// however g++ (1.36.2) and Cfront 2.0 differ on the definition +// of assignment for unions. + +// (NOTE: Stroustrup now says that assignment of unions which contain either +// members or sub-members (base classes are not allowed for unions) which +// have non-default assignment operators defined for them will be illegal +// in future.) + +// g++ (1.36.2) on the other hand, accepts this program without errors. + +// keywords: unions, operator=, inheritance, members + +struct s0 { + + int i; + + void operator= (s0 & arg) + { + this->i = arg.i; + } +}; + +struct s1 { + + double d; + + void operator= (s1 & arg) + { + this->d = arg.d; + } +}; + +union u0 { + s0 u0_member_0; // ERROR - + s1 u0_member_1; // ERROR - +}; + +void function () +{ + u0 u0_object_0; + u0 u0_object_1; + + u0_object_0 = u0_object_1; +}; + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900121_05.C b/gcc/testsuite/g++.old-deja/g++.bugs/900121_05.C new file mode 100644 index 000000000000..03155abf52ec --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900121_05.C @@ -0,0 +1,30 @@ +// g++ 1.36.1 bug 900121_05 + +// g++ allows unions to have base types (i.e. to be "derived") and it allows +// other types to have unions as base types. Both cases are illegal. + +// g++ curently does not detect such errors. + +// Cfront 2.0 passes this test. + +// keywords: unions, inheritance + +struct s0 { + int s0_member; +}; + +union u0 : public s0 { /* ERROR - union has base class */ + int u0_member_0; + int u0_member_1; +}; + +union u1 { + int u1_member_0; + int u1_member_1; +}; + +struct s1 : public u1 { /* ERROR - base class is a union */ + int s1_member_0; +}; + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900127_01.C b/gcc/testsuite/g++.old-deja/g++.bugs/900127_01.C new file mode 100644 index 000000000000..7c24d08bc10d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900127_01.C @@ -0,0 +1,25 @@ +// g++ 1.36.1 bug 900127_01 + +// g++ often fails to detect (and issue errors for) ambiguous overload +// situations. In such cases, one of the possibilities is chosen +// (apparently arbitrarily). Errors should be issued instead. + +// Cfront 2.0 passes this test. + +// keywords: function overloading, ambiguity + +void foo (int); +int foo (void); + +typedef int (*f_ptr_t1) (void); +typedef void (*f_ptr_t2) (int); + +void bar (f_ptr_t1); // ERROR - +void bar (f_ptr_t2); // ERROR - + +void function () +{ + bar (foo); // ERROR - ambiguous +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900127_02.C b/gcc/testsuite/g++.old-deja/g++.bugs/900127_02.C new file mode 100644 index 000000000000..61cd481cecc8 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900127_02.C @@ -0,0 +1,46 @@ +// g++ 1.36.1 bug 900127_02 + +// g++ (mostly) keeps separate name spaces for the declarations of data +// objects and functions. + +// This means that a single name may be declared as both a data object and +// a function within a given scope. + +// This fact allows programmers to write code which is not portable to the +// Cfront translator (which keeps a single namespace for these entities). + +// This can also lead to ambiguity when the & (address-of) operator is used. + +// Cfront 2.0 passes this test. + +// keywords: name spaces, overloading + +int global0; // ERROR - +int global0 (); // ERROR - + +int global1 (); // ERROR - xref for below +int global1; // ERROR - caught + +struct struct_0 { + int class_local (); // ERROR - + int class_local; // ERROR - +}; + +struct struct_1 { + int class_local; // ERROR - + int class_local (); // ERROR - +}; + +void function_0 () +{ + int function_0_local; // ERROR - + extern int function_0_local (); // ERROR - +} + +void function_1 () +{ + int function_1_local (); // ERROR - + extern int function_1_local; // ERROR - +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900205_02.C b/gcc/testsuite/g++.old-deja/g++.bugs/900205_02.C new file mode 100644 index 000000000000..505792f0dfae --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900205_02.C @@ -0,0 +1,28 @@ +// g++ 1.36.1 bug 900205_02 + +// g++ allows constructors to be defined which do not include +// initializations for reference members of their associated classes. + +// Cfront 2.0 does not allow this. + +// keywords: reference members, constructors, member initialization + +int i; + +class c0 { + int &int_ref; +public: + c0 () /* : int_ref(i) */ { // ERROR - reference needs initializer + } +}; + +class c1 { + int &int_ref; +public: + c1 (); +}; + +c1::c1() /* : int_ref(i) */ { // ERROR - reference needs initializer +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900205_03.C b/gcc/testsuite/g++.old-deja/g++.bugs/900205_03.C new file mode 100644 index 000000000000..4c352c87ae43 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900205_03.C @@ -0,0 +1,48 @@ +// g++ 1.36.1 bug 900205_03 + +// Section 6.6.3 of the cfront 2.0 Reference Manual says "A return statement +// without an expression can be used only in functions that do not return +// a value, that is, a function with the return value type void..." + +// Also in 6.6.3: "Flowing off the end of a function is equivalent to a +// return with no value; this is illegal in a value returning function." + +// In contrast to the manual, g++ does not generate ERRORs for cases of +// "flowing off the end" of non-void functions. + +// keywords: return statements, return type, void return, implicit return + +// Special g++ Options: -Wreturn-type -pedantic-errors + +struct struct00 { }; + +int global_function_0 () { +} // ERROR - + +struct00 global_function_1 () { +} // ERROR - + +struct struct0 { + + int struct0_member_function_0 () { + } // ERROR - + + struct0 struct0_member_function_1 () { + } // ERROR - +}; + +struct struct1 { + + int struct1_member_function_0 (); + + struct1 struct1_member_function_1 (); + +}; + +int struct1_member_function_0 () { +} // ERROR - + +struct1 struct1::struct1_member_function_1 () { +} // ERROR - + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900205_04.C b/gcc/testsuite/g++.old-deja/g++.bugs/900205_04.C new file mode 100644 index 000000000000..f763480d45fc --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900205_04.C @@ -0,0 +1,26 @@ +// g++ 1.36.1 bug 900205_04 + +// g++ allows a class for which an implicit default X::X() constructor must +// be created (implicitly by the compiler) to be derived from another class +// which does not have its own default X::X() constructor. This is illegal. + +// Cfront 2.0 passes this test. + +// keywords: default constructor, inheritance + +struct struct0 { + int data_member; + + struct0 (int, void *); // suppresses implicit default constructor +}; + +struct0::struct0 (int, void *) +{ +} + +struct struct0_derived_struct_0 : public struct0 { +}; // ERROR - + +// struct0_derived_struct_0 object; // would give g++ error if compiled + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900207_03.C b/gcc/testsuite/g++.old-deja/g++.bugs/900207_03.C new file mode 100644 index 000000000000..187c070acb8c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900207_03.C @@ -0,0 +1,49 @@ +// g++ 1.36.1 bug 900207_03 + +// g++ fails to allow objects of class or struct types to be initialized +// using "constructor syntax" in cases where an implicitly generated copy +// constructor would be invoked for the initialization, and where there is +// no explicitly specified constructor associated with the type of the +// object being initialized. + +// Note that the type of the error changes depending upon whether or not the +// type being initialized has any virtual functions associated with it. + +// Cfront 2.0 passes this test. + +// keywords: implicit copy constructor, initialization + + +// Check construction for a type without virtual function members. + +struct struct0 { + int data_member; +}; + +struct0 struct0_gbl_object0; +struct0 struct0_gbl_object1 (struct0_gbl_object0); // gets bogus error + +void struct0_test () +{ + struct0 struct0_lcl_object1 (struct0_gbl_object0); // gets bogus error +} + +// Check construction for a type with virtual function members. + +struct struct1 { + int data_member; + + virtual void function_member (); +}; + +void struct1::function_member () { } + +struct1 struct1_gbl_object0; +struct1 struct1_gbl_object1 (struct1_gbl_object0); // gets bogus error + +void struct1_test () +{ + struct1 struct1_lcl_object1 (struct1_gbl_object0); // gets bogus error +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900208_02.C b/gcc/testsuite/g++.old-deja/g++.bugs/900208_02.C new file mode 100644 index 000000000000..7e99abdb00f8 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900208_02.C @@ -0,0 +1,17 @@ +// g++ 1.36.1 bug 900208_02 + +// g++ does not allow a static member of a class/struct/union to be +// declared as an array without an explicit upper bound. + +// Cfront 2.0 passes this test. + +// keywords: static data members, arrays, dimension, array bound + +class class0 { +public: + static int class0_data_member_0[]; // gets bogus error +}; + +int class0::class0_data_member_0[3] = { 1, 2, 3 }; // gets bogus error + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900208_03.C b/gcc/testsuite/g++.old-deja/g++.bugs/900208_03.C new file mode 100644 index 000000000000..667a174de22c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900208_03.C @@ -0,0 +1,18 @@ +// g++ 1.36.1 bug 900208_03 + +// The Cfront 2.0 reference manual (5.3.3) says "This type must be an +// object type; functions cannot be allocated this way...". + +// g++ fails to detect (at compile time) cases where an attempt is made to +// allocate a function using new. + +// keywords: operator new, function types + +typedef void (func_type) (); + +void global_function_0 () +{ + new func_type; // ERROR - missed by both cfront 2.0 and g++ 1.36.1 +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900208_04.C b/gcc/testsuite/g++.old-deja/g++.bugs/900208_04.C new file mode 100644 index 000000000000..bcf03973f104 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900208_04.C @@ -0,0 +1,20 @@ +// g++ 1.36.1 bug 900208_04 + +// The Cfront 2.0 reference manual (5.3.3) says "This type must be an +// object type; functions cannot be allocated this way...". + +// g++ fails to detect (at compile time) cases where an attempt is made to +// deallocate a function using delete. + +// Cfront 2.0 passes this test. + +// keywords: operator delete, function types + +typedef void (func_type) (); + +void global_function_1 (func_type *p) +{ + delete p; // ERROR - caught by Cfront 2.0 but not by g++ 1.36.1 +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900209_01.C b/gcc/testsuite/g++.old-deja/g++.bugs/900209_01.C new file mode 100644 index 000000000000..59871ab31edd --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900209_01.C @@ -0,0 +1,20 @@ +// g++ 1.36.1 bug 900209_01 + +// g++ implicitly casts values whose types are "void*" to other pointer +// types (just as the language rules for C permit). Such implicit +// conversions are not allowed by the Cfront 2.0 Reference Manual +// however. + +// Cfront 2.0 passes this test. + +// keywords: void pointers, type conversions, pointer type conversions + +void * void_pointer_object; +char * char_pointer_object; + +void global_function_0 () +{ + char_pointer_object = void_pointer_object; // ERROR - +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900210_01.C b/gcc/testsuite/g++.old-deja/g++.bugs/900210_01.C new file mode 100644 index 000000000000..0a98388f9158 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900210_01.C @@ -0,0 +1,112 @@ +// g++ 1.36.1 bug 900210_01 + +// g++ allows pointer type values to be assigned to variables of integal +// types. According to the C++ Reference Manual, this is illegal. + +// Cfront 2.0 passes this test. + +// keywords: pointer types, integral types, implicit type conversions + +int i; +long l; +short s; +char c; +float f; +double d; +long double ld; +enum {enum_value_0} e; + +signed int si; +signed long sl; +signed short ss; +signed char sc; + +unsigned int ui; +unsigned long ul; +unsigned short us; +unsigned char uc; + +void* vp; +char* cp; +int* ip; +enum {enum_value_1} * ep; +struct { int member; } * sp; +void (*fp) (void); + +void global_function () +{ + i = vp; /* ERROR - */ + i = cp; /* ERROR - */ + i = ip; /* ERROR - */ + i = ep; /* ERROR - */ + i = sp; /* ERROR - */ + i = fp; /* ERROR - */ + l = vp; /* ERROR - */ + l = cp; /* ERROR - */ + l = ip; /* ERROR - */ + l = ep; /* ERROR - */ + l = sp; /* ERROR - */ + l = fp; /* ERROR - */ + s = vp; /* ERROR - */ + s = cp; /* ERROR - */ + s = ip; /* ERROR - */ + s = ep; /* ERROR - */ + s = sp; /* ERROR - */ + s = fp; /* ERROR - */ + c = vp; /* ERROR - */ + c = cp; /* ERROR - */ + c = ip; /* ERROR - */ + c = ep; /* ERROR - */ + c = sp; /* ERROR - */ + c = fp; /* ERROR - */ + si = vp; /* ERROR - */ + si = cp; /* ERROR - */ + si = ip; /* ERROR - */ + si = ep; /* ERROR - */ + si = sp; /* ERROR - */ + si = fp; /* ERROR - */ + sl = vp; /* ERROR - */ + sl = cp; /* ERROR - */ + sl = ip; /* ERROR - */ + sl = ep; /* ERROR - */ + sl = sp; /* ERROR - */ + sl = fp; /* ERROR - */ + ss = vp; /* ERROR - */ + ss = cp; /* ERROR - */ + ss = ip; /* ERROR - */ + ss = ep; /* ERROR - */ + ss = sp; /* ERROR - */ + ss = fp; /* ERROR - */ + sc = vp; /* ERROR - */ + sc = cp; /* ERROR - */ + sc = ip; /* ERROR - */ + sc = ep; /* ERROR - */ + sc = sp; /* ERROR - */ + sc = fp; /* ERROR - */ + ui = vp; /* ERROR - */ + ui = cp; /* ERROR - */ + ui = ip; /* ERROR - */ + ui = ep; /* ERROR - */ + ui = sp; /* ERROR - */ + ui = fp; /* ERROR - */ + ul = vp; /* ERROR - */ + ul = cp; /* ERROR - */ + ul = ip; /* ERROR - */ + ul = ep; /* ERROR - */ + ul = sp; /* ERROR - */ + ul = fp; /* ERROR - */ + us = vp; /* ERROR - */ + us = cp; /* ERROR - */ + us = ip; /* ERROR - */ + us = ep; /* ERROR - */ + us = sp; /* ERROR - */ + us = fp; /* ERROR - */ + uc = vp; /* ERROR - */ + uc = cp; /* ERROR - */ + uc = ip; /* ERROR - */ + uc = ep; /* ERROR - */ + uc = sp; /* ERROR - */ + uc = fp; /* ERROR - */ +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900210_02.C b/gcc/testsuite/g++.old-deja/g++.bugs/900210_02.C new file mode 100644 index 000000000000..f900a86db0b3 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900210_02.C @@ -0,0 +1,112 @@ +// g++ 1.36.1 bug 900210_02 + +// g++ allows integral type values to be assigned to variables of pointer +// types. According to the C++ Reference Manual, this is illegal. + +// Cfront 2.0 passes this test. + +// keywords: integral types, pointer types, implicit type conversions +// Special Options: -ansi -pedantic-errors +int i; +long l; +short s; +char c; +float f; +double d; +long double ld; +enum {enum_value_0} e; + +signed int si; +signed long sl; +signed short ss; +signed char sc; + +unsigned int ui; +unsigned long ul; +unsigned short us; +unsigned char uc; + +void* vp; +char* cp; +int* ip; +enum {enum_value_1} * ep; +struct { int member; } * sp; +void (*fp) (void); + +void global_function () +{ + vp = i; /* ERROR - */ + vp = l; /* ERROR - */ + vp = s; /* ERROR - */ + vp = c; /* ERROR - */ + vp = si; /* ERROR - */ + vp = sl; /* ERROR - */ + vp = ss; /* ERROR - */ + vp = sc; /* ERROR - */ + vp = ui; /* ERROR - */ + vp = ul; /* ERROR - */ + vp = us; /* ERROR - */ + vp = uc; /* ERROR - */ + cp = i; /* ERROR - */ + cp = l; /* ERROR - */ + cp = s; /* ERROR - */ + cp = c; /* ERROR - */ + cp = si; /* ERROR - */ + cp = sl; /* ERROR - */ + cp = ss; /* ERROR - */ + cp = sc; /* ERROR - */ + cp = ui; /* ERROR - */ + cp = ul; /* ERROR - */ + cp = us; /* ERROR - */ + cp = uc; /* ERROR - */ + ip = i; /* ERROR - */ + ip = l; /* ERROR - */ + ip = s; /* ERROR - */ + ip = c; /* ERROR - */ + ip = si; /* ERROR - */ + ip = sl; /* ERROR - */ + ip = ss; /* ERROR - */ + ip = sc; /* ERROR - */ + ip = ui; /* ERROR - */ + ip = ul; /* ERROR - */ + ip = us; /* ERROR - */ + ip = uc; /* ERROR - */ + ep = i; /* ERROR - */ + ep = l; /* ERROR - */ + ep = s; /* ERROR - */ + ep = c; /* ERROR - */ + ep = si; /* ERROR - */ + ep = sl; /* ERROR - */ + ep = ss; /* ERROR - */ + ep = sc; /* ERROR - */ + ep = ui; /* ERROR - */ + ep = ul; /* ERROR - */ + ep = us; /* ERROR - */ + ep = uc; /* ERROR - */ + sp = i; /* ERROR - */ + sp = l; /* ERROR - */ + sp = s; /* ERROR - */ + sp = c; /* ERROR - */ + sp = si; /* ERROR - */ + sp = sl; /* ERROR - */ + sp = ss; /* ERROR - */ + sp = sc; /* ERROR - */ + sp = ui; /* ERROR - */ + sp = ul; /* ERROR - */ + sp = us; /* ERROR - */ + sp = uc; /* ERROR - */ + fp = i; /* ERROR - */ + fp = l; /* ERROR - */ + fp = s; /* ERROR - */ + fp = c; /* ERROR - */ + fp = si; /* ERROR - */ + fp = sl; /* ERROR - */ + fp = ss; /* ERROR - */ + fp = sc; /* ERROR - */ + fp = ui; /* ERROR - */ + fp = ul; /* ERROR - */ + fp = us; /* ERROR - */ + fp = uc; /* ERROR - */ +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900210_03.C b/gcc/testsuite/g++.old-deja/g++.bugs/900210_03.C new file mode 100644 index 000000000000..8711d868a06c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900210_03.C @@ -0,0 +1,26 @@ +// g++ 1.36.1 bug 900210_03 + +// g++ allows void* type values to be assigned to variables of other +// pointer types. According to the C++ Reference Manual, this is illegal. + +// Cfront 2.0 passes this test. + +// keywords: void pointers, pointer type conversions, implicit type conversions + +void* vp; +char* cp; +int* ip; +enum {enum_value_1} * ep; +struct { int member; } * sp; +void (*fp) (void); + +void global_function () +{ + cp = vp; /* ERROR - */ + ip = vp; /* ERROR - */ + ep = vp; /* ERROR - */ + sp = vp; /* ERROR - */ + fp = vp; /* ERROR - */ +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900210_05.C b/gcc/testsuite/g++.old-deja/g++.bugs/900210_05.C new file mode 100644 index 000000000000..fc0ead9b5149 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900210_05.C @@ -0,0 +1,37 @@ +// g++ 1.36.1 bug 900210_05 + +// Section 18.3 of the 2.0 Reference Manual says "An implementation +// providing { anachronistic features } should also provide a way for +// the user to ensure that they do not occur in a source file." + +// The *only* proper way to "ensure" an absence of anachronstic features +// is for C++ language processors to generate errors (rather than just +// warnings) when such features are used. These errors could perhaps be +// triggered by some set of command line options, or by the absence of +// certain command line options. (For g++, the -pedantic and -traditional +// options come to mind.) + +// The use of errors rather than warnings is important because errors +// usually result in non-zero exit status codes for language processors +// and these non-zero exit stati can be automatically checked during +// normal execution of a Makefile. + +// cfront 2.0 provides the +p option which causes errors to be generated for +// all cases of anachronistic usage. + +// g++ generates neither errors nor warnings for such usage, even when the +// -ansi and -pedantic options are used. + +// Cfront 2.0 passes this test. + +// keywords: anachronism, enum types, integral types, implicit type conversions + +enum enum0 { enum_value_0 } enum0_object; +int int0_object; + +void function () +{ + enum0_object = int0_object; /* ERROR - */ +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900210_06.C b/gcc/testsuite/g++.old-deja/g++.bugs/900210_06.C new file mode 100644 index 000000000000..d52f51143de0 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900210_06.C @@ -0,0 +1,25 @@ +// g++ 1.36.1 bug 900210_06 + +// g++ allows values of pointer-to-const types to be assigned to variables +// of pointer-to-non-const types. + +// Cfront 2.0 disallows such assignments. + +// g++ also allows values of pointer-to-volatile types to be assigned to +// variables of pointer-to-non-volatile types. + +// Cfront 2.0 *would* disallow this (if it only supported "volatile"). + +// keywords: pointer types, implicit type conversions + +const char *ccp; +volatile char *vcp; +char *cp; + +void function () +{ + cp = ccp; /* ERROR - */ + cp = vcp; /* ERROR - */ +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900210_07.C b/gcc/testsuite/g++.old-deja/g++.bugs/900210_07.C new file mode 100644 index 000000000000..10130586d30a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900210_07.C @@ -0,0 +1,19 @@ +// g++ 1.36.1 bug 900210_07 + +// g++ allows values of pointer-to-signed types to be assigned to variables +// of pointer-to-unsigned types, and vise versa. + +// Cfront 2.0 passes this test. + +// keyowrds: pointer types, implicit type conversions +// Special Options: -ansi -pedantic-errors +signed int *sip; +unsigned int *uip; + +void function () +{ + sip = uip; // ERROR - + uip = sip; // ERROR - +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900210_08.C b/gcc/testsuite/g++.old-deja/g++.bugs/900210_08.C new file mode 100644 index 000000000000..40704d470c07 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900210_08.C @@ -0,0 +1,18 @@ +// g++ 1.36.1 bug 900210_08 + +// g++ allows pointer-to-const values to be implicitly converted to +// void* values. This causes a silent loss of the const qualifier. + +// Cfront 2.0 passes this test. + +// keywords: pointer types, implicit type conversions + +const char *ccp; +void *vp; + +void function () +{ + vp = ccp; /* ERROR - */ +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900210_09.C b/gcc/testsuite/g++.old-deja/g++.bugs/900210_09.C new file mode 100644 index 000000000000..ce78540565b0 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900210_09.C @@ -0,0 +1,32 @@ +// g++ 1.36.1 bug 900210_09 + +// g++ allows pointer to members (both data members and function members) +// to be implicitly converted to void*. + +// Section 4.8 of the Cfront 2.0 Reference Manual disallows such implicit +// conversions. + +// Cfront 2.0 passes this test. + +// keywords: member pointers, void pointers, implicit type conversions + +class class0 { +public: + int class0_data_member_0; + void class0_function_member_0 (); +}; + +int class0::*class0_data_member_pointer; +int (class0::*class0_function_member_pointer) (); + +void *vp; + +void global_function_0 () +{ + vp = class0_data_member_pointer; // ERROR - + vp = class0_function_member_pointer; // ERROR - +} + +int main () { return 0; } + + diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900210_10.C b/gcc/testsuite/g++.old-deja/g++.bugs/900210_10.C new file mode 100644 index 000000000000..26c17218e771 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900210_10.C @@ -0,0 +1,14 @@ +// g++ 1.36.1 bug 900210_10 + +// g++ allows operator[] to be declared as a static member function. +// This is illegal. + +// Cfront 2.0 passes this test. + +// keywords: operator[], static function members + +struct struct0 { + static int operator[] (); /* ERROR - */ +}; + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900211_01.C b/gcc/testsuite/g++.old-deja/g++.bugs/900211_01.C new file mode 100644 index 000000000000..75c99b6ee0d9 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900211_01.C @@ -0,0 +1,16 @@ +// g++ 1.36.1 bug 900211_01 + +// g++ issues only warnings for calls to previously undeclared functions, +// however such calls are actually errors. + +// Cfront 2.0 passes this test. + +// keywords: undeclared, functions +// Build don't link: + +void global_function_0 () +{ + global_function_1 (); /* ERROR - */ +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900211_02.C b/gcc/testsuite/g++.old-deja/g++.bugs/900211_02.C new file mode 100644 index 000000000000..d23a9df1ab59 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900211_02.C @@ -0,0 +1,24 @@ +// g++ 1.36.1 bug 900211_02 + +// g++ allows you to explicitly specify the return type for a type conversion +// operator. + +// The Cfront 2.0 Reference Manual (12.3.2) says that this in not allowed. + +// Cfront 2.0 passes this test. + +// keywords: type conversion operators, return type + +struct struct0 { int member_0; }; + +struct0 struct0_object_0; + +struct struct1 { + struct0 operator struct0 (); /* ERROR - */ +}; + +struct0 struct1::operator struct0 () { // ERROR - + return struct0_object_0; +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900211_03.C b/gcc/testsuite/g++.old-deja/g++.bugs/900211_03.C new file mode 100644 index 000000000000..b805f78bd1f7 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900211_03.C @@ -0,0 +1,14 @@ +// g++ 1.36.1 bug 900211_03 + +// The following erroneous code causes g++ to segfault. + +// Cfront 2.0 passes this test. + +// keywords: segfault, operator new, arrays, undeclared, array bound + +void function () +{ + char* new_base = new char[x]; // ERROR - +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900211_04.C b/gcc/testsuite/g++.old-deja/g++.bugs/900211_04.C new file mode 100644 index 000000000000..81bea9ef7f18 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900211_04.C @@ -0,0 +1,27 @@ +// g++ 1.36.1 bug 900211_04 + +// g++ fails to flag as errors attempts to compare pointer values against +// (non-zero) integer values; + +// Since implicit conversions of pointer to integers (or vise versa) are +// illegal, these comparisons are also illegal. + +// Cfront 2.0 passes this test. + +// keywords: comparison operators, pointer types, integral types + +int result; +int i; +char *p; + +void function () +{ + result = i == p; /* ERROR - caught by g++ */ + result = i != p; /* ERROR - caught by g++ */ + result = i > p; /* ERROR - missed */ + result = i < p; /* ERROR - missed */ + result = i >= p; /* ERROR - missed */ + result = i <= p; /* ERROR - missed */ +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900212_01.C b/gcc/testsuite/g++.old-deja/g++.bugs/900212_01.C new file mode 100644 index 000000000000..03c41fb04236 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900212_01.C @@ -0,0 +1,38 @@ +// g++ 1.36.1 bug 900212_01 + +// g++ fails to flag as errors all attempts to add or subtract integer values +// from pointers-to-member values. + +// Some cases are detected however. + +// Cfront 2.0 passes this test. + +// keywords: pointer arithmetic, member pointers + +struct struct0 { +}; + +int struct0::*p0; +int struct0::*p1; + +int (struct0::*fp0) (); +int (struct0::*fp1) (); + +void global_function_0 () +{ + p0 = p1 + 3; // ERROR - + p0 = p1 - 3; // ERROR - + p1++; /* ERROR - caught by g++ */ + ++p1; /* ERROR - caught by g++ */ + p1--; /* ERROR - caught by g++ */ + --p1; /* ERROR - caught by g++ */ + + fp0 = fp1 + 3; // ERROR - + fp0 = fp1 - 3; // ERROR - + fp1++; /* ERROR - */ + ++fp1; /* ERROR - */ + fp1--; /* ERROR - */ + --fp1; /* ERROR - */ +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900212_02.C b/gcc/testsuite/g++.old-deja/g++.bugs/900212_02.C new file mode 100644 index 000000000000..d997b61e26e9 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900212_02.C @@ -0,0 +1,27 @@ +// g++ 1.36.1 bug 900212_02 + +// g++ fails to flag as errors attempts to take the difference of two values +// of some compatible pointer-to-member type. + +// Cfront 2.0 passes this test. + +// keywords: pointer arithmetic, subtraction, member pointers + +struct struct0 { +}; + +int struct0::*p0; +int struct0::*p1; + +int (struct0::*fp0) (); +int (struct0::*fp1) (); + +int result; + +void global_function_0 () +{ + result = (p0 - p1); // ERROR - + result = (fp0 - fp1); // ERROR - +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900212_03.C b/gcc/testsuite/g++.old-deja/g++.bugs/900212_03.C new file mode 100644 index 000000000000..479e32c795c4 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900212_03.C @@ -0,0 +1,33 @@ +// g++ 1.36.1 bug 900212_03 + +// g++ segfaults on any attempt to use the ->* operator. + +// Cfront 2.0 passes this test. + +// keywords: member pointers, operator->* + +struct struct0 { + int data_member; + void function_member (); +}; + +void struct0::function_member () +{ +} + +int i; + +int struct0::*dmp; +void (struct0::*fmp) (); + +struct0 *ptr; + +void global_function_0 () +{ + i = ptr->*dmp; // causes segfault + (ptr->*fmp) (); // causes segfault + // i = ptr->*(&struct0::data_member); // too complicated for cfront + // (ptr->*(&struct0::function_member)) (); // too complicated for cfront +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900213_01.C b/gcc/testsuite/g++.old-deja/g++.bugs/900213_01.C new file mode 100644 index 000000000000..309a41943dab --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900213_01.C @@ -0,0 +1,26 @@ +// g++ 1.36.1 bug 900213_01 + +// g++ incorrectly diagnoses the error when an attempt is made to reference +// a non-static data-member without an object indication. + +// Similar attempts to reference non-static function-members are correctly +// diagnosed by g++. + +// Cfront 2.0 passes this test. + +// keywords: non-static members, member pointers, scope resolution + +struct struct0 { + int struct0_data_member_0; /* ERROR - gets error from below */ + int struct0_function_member_0 (); +}; + +int i; + +void global_function_0 () +{ + i = struct0::struct0_data_member_0; /* ERROR - mishandled by g++ */ + //i = struct0::struct0_function_member_0 (); /* gets caught by g++ */ +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900213_02.C b/gcc/testsuite/g++.old-deja/g++.bugs/900213_02.C new file mode 100644 index 000000000000..c4263f99cd94 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900213_02.C @@ -0,0 +1,21 @@ +// g++ 1.36.1 bug 900213_02 + +// The following erroneous code causes g++ to abort. + +// Cfront 2.0 passes this test. + +// keywords: abort, member pointers, operator* + +struct struct0 { + int data_member; +}; + +int i; +int struct0::*dmp; + +void global_function_0 () +{ + i = *dmp; // ERROR - causes abort +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900213_03.C b/gcc/testsuite/g++.old-deja/g++.bugs/900213_03.C new file mode 100644 index 000000000000..d25a8b2f7f76 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900213_03.C @@ -0,0 +1,28 @@ +// g++ 1.36.1 bug 900213_03 + +// g++ fails to detect an error when the address of a "bound" function is +// assigned to a pointer-to-member-function variable. + +// It does however correctly detect a similar errors for data-members. + +// keywords: bound function, operator&, member pointers +// Build don't link: + +struct struct0 { + int data_member; + int function_member (); +}; + +int i; +int struct0::*dmp; +int (struct0::*fmp) (); + +struct0 *ptr; + +void global_function_0 () +{ + fmp = &ptr->function_member; // ERROR - missed by g++, warned by cfront, XFAIL *-*-* + //dmp = &ptr->data_member; // caught by g++, missed by cfront +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900214_01.C b/gcc/testsuite/g++.old-deja/g++.bugs/900214_01.C new file mode 100644 index 000000000000..3aac764f86e1 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900214_01.C @@ -0,0 +1,22 @@ +// g++ 1.36.1 bug 900214_01 + +// g++ allows function members of incomplete types to be declared to be +// friends of other types. + +// Cfront 2.0 passes this test. + +// keywords: friends, incomplete types, function members + +struct A; + +struct B { + friend void A::foo(); // ERROR - type A is incomplete +}; + +void A::foo(); /* ERROR - also illegal */ + +struct A { + void foo() {} +}; + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900215_01.C b/gcc/testsuite/g++.old-deja/g++.bugs/900215_01.C new file mode 100644 index 000000000000..ff16b2082e18 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900215_01.C @@ -0,0 +1,39 @@ +// g++ 1.36.1 bug 900215_01 + +// g++ allows the definition of a type conversion operator `operator void' +// for class types, but subsequently fails to generate calls (where needed) +// for such type conversion operators. + +// Cfront 2.0 does generate such calls. + +// The following program exits with status 0 when compiled with Cfront 2.0 +// but exits with status 1 when compiled with g++. + +// Cfront 2.0 passes this test. + +// 4/27/94 (jason): The pre-San Diego working paper prohibits operator +// void, so we can go back to just ignoring void values. + +// keywords: user-defined type conversion operators, void type, explicit casts + +struct struct0 { + + operator void (); // ERROR - operator void +}; + +int exit_status = 1; + +struct0::operator void () +{ // ERROR - operator void + exit_status = 0; +} + +struct struct0 s0_object; + +int test () +{ + (void) s0_object; + return exit_status; +} + +int main () { return test (); } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900215_02.C b/gcc/testsuite/g++.old-deja/g++.bugs/900215_02.C new file mode 100644 index 000000000000..fb08df3bd33a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900215_02.C @@ -0,0 +1,47 @@ +// g++ 1.36.1 bug 900215_02 + +// g++ allows global objects (which happen to be pointers to members of some +// class X) to be dereferenced without prefix object specifications within +// member functions of class X. + +// In effect, g++ treats any dereference of a pointer-to-member which appears +// within the context of a member function (and which is not preceeded by +// either ->* or .*) as if it had been implicitly prefixed with this->*. + +// The 2.0 Reference Manual only provides that such implicit prefixing +// takes place for *members* of the containing class, and *not* for +// global objects that happen to have certain types (i.e. pointer-to-member +// of the containing class). + +// Also, cfront 2.0 provides implicit this-> prefixes *only* for *members* +// of the containing class. + +// Cfront 2.0 passes this test. + +// keywords: member pointers, this, dereference, members + +struct struct0 { + int data_member; + void function_member (); +}; + +int struct0::*dmp; +int (struct0::*fmp) (); +int i; + +struct struct1 { + int data_member; + + void function_member (); +}; + +void struct0::function_member () +{ + i = (this->*fmp) (); // perfectly legal - for both cfront and g++ + i = this->*dmp; // perfectly legal - for both cfront and g++ + + i = (*fmp) (); // ERROR - + i = *dmp; // ERROR - , XFAIL *-*-* +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900220_01.C b/gcc/testsuite/g++.old-deja/g++.bugs/900220_01.C new file mode 100644 index 000000000000..df7e641fe5f7 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900220_01.C @@ -0,0 +1,36 @@ +// g++ 1.36.1 bug 900220_01 + +// Ref: 12.8 + +// Section 12.8 says: + +// "That is, X::operator=() will be generated only if no assignment +// operation is explicitly declared and an object of class X is actually +// assigned an object of class X (or an object of a class derived from X) +// or if the address of X::operator= is taken. + +// g++ does not allow you to take the address of an implicitly generated +// operator= + +// keywords: operator=, implicit copy operator, operator& + +struct struct0 { + int data_member; +}; + +typedef struct0& (struct0::*member_func_t) (const struct0&); + +member_func_t member_func; + +void global_function_0 (member_func_t member_f) +{ // gets bogus error - ref from below +} + +void global_function_1 () +{ + member_func = &struct0::operator=; // gets bogus error + + global_function_0 (&struct0::operator=); // gets bogus error +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900220_02.C b/gcc/testsuite/g++.old-deja/g++.bugs/900220_02.C new file mode 100644 index 000000000000..cf039f646bf3 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900220_02.C @@ -0,0 +1,30 @@ +// g++ 1.36.1 bug 900220_02 + +// g++ treats plain `char' and `unsigned char' as different types, however +// it fails to treat `signed char' as being a different type from plain +// `char' as called for by both the ANSI C standard and the C++ reference +// manual. + +// keywords: plain char type, signed char type, unsigned char type, overloading + +void overloaded (char) { +} + +void overloaded (signed char) { // gets bogus error +} + +void overloaded (unsigned char) { +} + +void global_function () +{ + char c = 0; + signed char sc = 0; + unsigned char uc = 0; + + overloaded (c); + overloaded (sc); + overloaded (uc); +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900220_03.C b/gcc/testsuite/g++.old-deja/g++.bugs/900220_03.C new file mode 100644 index 000000000000..532fc84b52e4 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900220_03.C @@ -0,0 +1,51 @@ +// g++ 1.36.1 bug 900220_03 + +// g++ does not properly disambiguate calls to overloaded functions +// which are nearly identical except that one take a reference to a +// type `T' object and another takes a reference to a type `const T' +// object. + +// (Note that the volatile stuff is commented out here because cfront +// does not yet grok volatile.) + +// Cfront 2.0 passes this test. + +// keywords: references, overloading, type qualifiers, pointers + +int c_call_count = 0; +int cc_call_count = 0; +//int vc_call_count = 0; + +void overloaded (char&) +{ + c_call_count++; +} + +void overloaded (const char&) +{ + cc_call_count++; +} + +//void overloaded (volatile char&) +//{ +// vc_call_count++; +//} + +int test () +{ + char c = 0; + const char cc = 0; + //volatile char vc = 0; + + char& cr = c; + const char& ccr = cc; + //volatile char& vcr = vc; + + overloaded (c); // OK + overloaded (cc); // gets bogus error + //overloaded (vc); // OK + + return (c_call_count != 1 || cc_call_count != 1 /* || vc_call_count != 1 */); +} + +int main () { return test (); } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900221_01.C b/gcc/testsuite/g++.old-deja/g++.bugs/900221_01.C new file mode 100644 index 000000000000..92c56fc08adf --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900221_01.C @@ -0,0 +1,21 @@ +// g++ 1.36.1 bug 900221_01 + +// Ref: 3.2 +// +// Section 3.2 of the C++ 2.0 Reference Manual says: +// +// "Names of formal arguments for a function are treated as if they +// were declared in the outermost block of that function" +// +// g++ does not enforce this treatment. + +// Cfront 2.0 passes this test. + +// keywords: scope, formal parameters + +void function (int arg1) +{ + int arg1; // ERROR - redeclaration of arg1 +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900227_01.C b/gcc/testsuite/g++.old-deja/g++.bugs/900227_01.C new file mode 100644 index 000000000000..77ac10028933 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900227_01.C @@ -0,0 +1,38 @@ +// g++ 1.37.1 bug 900227_01 + +// g++ allows pointer type values to be converted to integral types which are +// not actually large enough to hold the converted values. + +// Section 3.3.4 of the ANSI C standard says: + +// A pointer may be converted to an integral type. The size of the +// integer required and the results are implementation defined. If +// the space provided is not long enough, the behavior is undefined. + +// I believe that the only proper thing to do in such cases is to generate +// errors. After all, if the converted value gets truncated, it is not +// likely to be useful after that. + +// Furthermore, as the following example demonstrates, allowing pointers +// to be converted to integral types which are not of sufficient size to +// completely hold the converted values may cause additional troubles. + +// I tried the following code on 5 different machines and it failed on +// all five (unless I also use the GNU assembler and the GNU linker). Three +// of the five (Sun3, Sun4, and Symmetry) got link-time errors about byte +// offset overflows. The other two (368/SystemV and AViiON) got assembly +// time errors about relocatable names used in "constant" expressions. + +// keywords: casts, pointer types, integral types + +// Update 2/10/95: The compiler will now compute these expressions at +// runtime. I think this is in the spirit of the GNU compilers (jason). + +// Special g++ Options: + +int main (); + +short s = (short) &main; +char c = (char) &main; + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900321_01.C b/gcc/testsuite/g++.old-deja/g++.bugs/900321_01.C new file mode 100644 index 000000000000..56a333f532b2 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900321_01.C @@ -0,0 +1,29 @@ +// g++ 1.37.1 bug 900321_01 + +// cfront flags ERRORs on each of the lines indicated below. g++ does not +// flag either ERRORs or warnings. + +// Although I cannot find where in the current C++ Reference Manual this +// topic is covered, I am sure that these statements should get ERRORs in +// a "strongly typed" language. + +// Cfront 2.0 passes this test. + +// keywords: array types, array bound, pointers + +int (*ptr_to_array_of_ints)[]; +int (*ptr_to_array_of_3_ints) [3]; +int (*ptr_to_array_of_5_ints) [5]; + +void function_0 () +{ + // we miss the first two because typeck.c (comp_array_types) deems + // it okay if one of the sizes is null + ptr_to_array_of_ints = ptr_to_array_of_3_ints; // ERROR - , XFAIL *-*-* + ptr_to_array_of_3_ints = ptr_to_array_of_ints; // ERROR - , XFAIL *-*-* + + ptr_to_array_of_3_ints = ptr_to_array_of_5_ints; // ERROR - + ptr_to_array_of_5_ints = ptr_to_array_of_3_ints; // ERROR - +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900321_02.C b/gcc/testsuite/g++.old-deja/g++.bugs/900321_02.C new file mode 100644 index 000000000000..d635ba3d1e7f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900321_02.C @@ -0,0 +1,27 @@ +// g++ 1.37.1 bug 900321_02 + +// The following program exits with a non-zero status because the constructor +// is not called 3 times as it should be. This program exits with a zero +// status when compiled with cfront 2.0. + +// Cfront 2.0 passes this test. + +// keywords: arrays, initialization, default constructor, operator new + +int call_count = 0; + +struct struct0 { + struct0 (); +}; + +struct0::struct0 () { call_count++; } + +typedef struct0 array[3]; // known dimension + +int test () +{ + new array; + return (call_count != 3); +} + +int main () { return test (); } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900321_04.C b/gcc/testsuite/g++.old-deja/g++.bugs/900321_04.C new file mode 100644 index 000000000000..5f3d5a1471a0 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900321_04.C @@ -0,0 +1,16 @@ +// g++ 1.37.1 bug 900321_04 + +// The following code causes g++ to segfault. + +// Cfront 2.0 passes this test. + +// keywords: segfault, object declaration, pointer, array, incomplete type + +struct incomplete; + +void function () +{ + struct incomplete (*ptr)[]; // causes segfault +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900321_05.C b/gcc/testsuite/g++.old-deja/g++.bugs/900321_05.C new file mode 100644 index 000000000000..8f417e892fcc --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900321_05.C @@ -0,0 +1,20 @@ +// g++ 1.37.1 bug 900321_05 + +// The following code is legal as far as the ANSI C standard, GCC, and +// cfront are concerned, however g++ issues errors for the lines indicated. + +// Cfront 2.0 passes this test. + +// keywords: operator[], pointers, index + +char c; +char *cp; +int i; + +void function () +{ + c = 3["abcdef"]; // gets bogus error + c = i[cp]; // gets bogus error +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900322_01.C b/gcc/testsuite/g++.old-deja/g++.bugs/900322_01.C new file mode 100644 index 000000000000..961d95c08a99 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900322_01.C @@ -0,0 +1,51 @@ +// g++ 1.37.1 bug 900322_01 + +// The ANSI C standard, in section 3.1.2.5 (first paragraph) differentiates +// types into three disjoint sets, i.e object types, function types, and +// incomplete types. + +// Also in 3.1.2.5 (page 24) the standard says that the element type of +// an array type is an object type. + +// Later in that same section the standard also notes that array types with +// unknown size are considered incomplete types (page 25). (Struct & union +// types which have only been "forward declared" are also incomplete types.) + +// Some experts infer this to mean that it is not legal to specify or to +// construct an array *type* whose element type is an incomplete type. + +// This interpretation suggests that the statements indicated below contain +// errors. + +// g++ fails to flag all of the indicated statements with errors (even when +// the -pedantic option is used). + +// keywords: incomplete types, arrays, element types + +extern int extern_two_d [] []; // ERROR - , XFAIL *-*-* +int tenative_two_d [] []; // ERROR - caught by g++ +static int static_two_d [] []; // ERROR - caught by g++ + +int (*pointer_to_two_d)[][]; // ERROR - , XFAIL *-*-* + +void function_0 (int arg [] []) { /* ERROR - */ +} + +typedef int int_one_d_type []; +typedef int_one_d_type int_two_d_type[];// ERROR - , XFAIL *-*-* + +struct s; + +extern struct s extern_s_array [10]; // ERROR - , XFAIL *-*-* +struct s tenative_s_array [10]; /* ERROR - caught by g++ */ +static struct s static_s_array [10]; /* ERROR - caught by g++ */ + +struct s (*pointer_to_s_array) []; // ERROR - , XFAIL *-*-* + +void function_1 (struct s arg []) { // ERROR - , XFAIL *-*-* +} + +typedef struct s s_type; +typedef s_type s_one_d_type [10]; // ERROR - , XFAIL *-*-* + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900324_02.C b/gcc/testsuite/g++.old-deja/g++.bugs/900324_02.C new file mode 100644 index 000000000000..56ff7b738d10 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900324_02.C @@ -0,0 +1,18 @@ +// g++ 1.37.1 bug 900324_02 + +// The following erroreous code causes g++ to segfault. + +// Cfront 2.0 passes this test. + +// keywords: segfault, function pointer, conditional operator ?: + +void function_0 (int i) { } + +void (*fp)(void); + +void function_1 () +{ + fp = 1 ? function_0 : fp; // ERROR - +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900324_03.C b/gcc/testsuite/g++.old-deja/g++.bugs/900324_03.C new file mode 100644 index 000000000000..69d9b58f0399 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900324_03.C @@ -0,0 +1,21 @@ +// g++ 1.37.1 bug 900324_03 + +// g++ is unable to correctly parse declarations of non-global function-pointer +// variables and/or function-pointer formal parameters. + +// Cfront 2.0 passes this test. + +// keywords: syntax, function pointers, block local, formal + +void (*p0)(); // OK + +void function_0 () +{ + void (*p1)(); // gets bogus errors +} + +void function_1 (void (*p2)()); // gets bogus errors + +void (*function_2 ()) (); // OK + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900324_04.C b/gcc/testsuite/g++.old-deja/g++.bugs/900324_04.C new file mode 100644 index 000000000000..c874897e68a0 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900324_04.C @@ -0,0 +1,25 @@ +// g++ 1.37.1 bug 900324_04 + +// g++ implements an extension which supports the copying of array objects. + +// This extension is not described in the current C++ Reference Manual, and +// it is not implemented by cfront (2.0). + +// g++ should generate errors for the use of this extension when -pedantic +// is used, however it does not. + +// Cfront 2.0 passes this test. + +// keywords: extension, pedantic, arrays, copy + +typedef int int_array[20]; + +int_array ia1; +int_array ia2; + +void function_0 () +{ + ia1 = ia2; // ERROR - gnu extension +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900324_05.C b/gcc/testsuite/g++.old-deja/g++.bugs/900324_05.C new file mode 100644 index 000000000000..32f691d3719b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900324_05.C @@ -0,0 +1,21 @@ +// g++ 1.37.1 bug 900324_05 + +// The following erroneous code causes g++ to segfault. + +// Cfront 2.0 passes this test. + +// keywords: segfault, arrays, references, assignment operator= + +typedef int int_array[]; + +extern int_array int_array_object; + +int_array &left = int_array_object; +int_array &right = int_array_object; + +void function () +{ + left = right; // ERROR - causes segfault +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900324_06.C b/gcc/testsuite/g++.old-deja/g++.bugs/900324_06.C new file mode 100644 index 000000000000..5a1938af8b80 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900324_06.C @@ -0,0 +1,28 @@ +// g++ 1.37.1 bug 900324_06 + +// g++ is unable to use context information (i.e. the required type of the +// expression) to disambiguate a possibly overloaded function name when that +// name is used as either the second or the third operand of a ?: operator. + +// It is also unable to use the fact that the given name is not in fact +// overloaded (and has only one possible interpretation). + +// This results in improper errors being generated. + +// keywords: overloading, function pointers, disambiguation, operator?: + +int i; +void (*p)(); + +void function_0 () +{ +} + +void function_1 () +{ + p = i ? function_0 : 0; // gets bogus error + p = i ? 0 : function_0; // gets bogus error + p = i ? function_1 : function_0; // gets bogus error +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900325_01.C b/gcc/testsuite/g++.old-deja/g++.bugs/900325_01.C new file mode 100644 index 000000000000..f11ec189039d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900325_01.C @@ -0,0 +1,17 @@ +// g++ 1.37.1 bug 900325_01 + +// g++ fails to generate errors for attempts to declare a formal argument to +// be of a void type. + +// keywords: formal parameter, void type + +typedef void __void; +typedef __void Void; + +void function0 (void arg1) { // ERROR - missed +} + +void function1 (Void arg1) { // ERROR - missed +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900330_01.C b/gcc/testsuite/g++.old-deja/g++.bugs/900330_01.C new file mode 100644 index 000000000000..651d370ef144 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900330_01.C @@ -0,0 +1,52 @@ +// g++ 1.37.1 bug 900330_01 +// +// As indicated by the example at the end of the section 3.5.3 of the ANSI +// C standard, when a type qualifier (i.e. "const" or "volatile") is applied +// to an array type, the effect should be as if the element type had been +// qualified with the given qualifier. +// +// This rule applies to C++ also. +// +// In section 7.1.6 of the C++ Reference Manual it says "Each element of a +// const array is const..." +// +// It appears however that when a name already exists for a given array type +// (i.e. a typedef name) and when that name is qualified by a type qualifier, +// (i.e. "const" or "volatile"), gcc & g++ may act as if the qualifier applied +// to the named (array) type rather that to the elements of that type. +// +// The result is that (even with the -ansi and -pedantic options) g++ +// generates no errors or warnings for the lines indicated (even though it +// should). +// +// Due to the incorrect associations, gcc & g++ will also issue inappropriate +// warnings in some cases (as illustrated below). + +// keywords: type qualifiers, arrays + +typedef const int const_int; +typedef const_int array_of_const_int[3]; +array_of_const_int *ptr_to_array_of_consts; + +typedef int array_of_int[3]; +typedef const array_of_int const_array_of_int; +const_array_of_int *ptr_to_const_array; + +void function_0 () +{ + ptr_to_array_of_consts = ptr_to_const_array; /* gets bogus warning */ + ptr_to_const_array = ptr_to_array_of_consts; /* gets bogus warning */ +} + +/* The following example is taken from ANSI 3.5.3 */ + +typedef int A[2][3]; +const A a = {{4, 5, 6}, {7, 8, 9}}; +int *pi; + +void function_1 () +{ + pi = a[0]; // ERROR - a[0] has type "const int *" +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900330_02.C b/gcc/testsuite/g++.old-deja/g++.bugs/900330_02.C new file mode 100644 index 000000000000..85c40f0e8d9b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900330_02.C @@ -0,0 +1,29 @@ +// g++ 1.37.1 bug 900330_02 + +// The C++ Reference Manual says in section 13.1: + +// "Two function declarations of the same name refer to the same function +// if they are in the same scope and have identical argument types. A +// function member of a derived class is *not* in the same scope as a function +// member of the same name in a base class." + +// g++ fails to correctly detect the error indicated. + +// Cfront 2.0 passes this test. + +// keywords: function, member, overloading, hiding + +struct B { + int f(int); +}; + +struct D : public B { + int f(struct B); // ERROR - referred to below +}; + +void h(D* pd) +{ + pd->f(1); // ERROR - D::f(struct B) hides B::f(int) +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900331_02.C b/gcc/testsuite/g++.old-deja/g++.bugs/900331_02.C new file mode 100644 index 000000000000..11884db2e48b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900331_02.C @@ -0,0 +1,27 @@ +// g++ 1.37.1 bug 900331_02 + +// g++ fails to treat conditional expressions which yield composite type +// (i.e. struct type, union type, or class type) lvalues as if they did +// in fact yield lvalues in all cases. + +// Cfront 2.0 passes this test. + +// keywords: conditional operator?:, lvalues, composite types + +struct struct0 { + int data_member; +}; + +struct0 object0; +struct0 object1; +struct0 object2; + +int i; + +void function0 () +{ + (i ? object0 : object1).data_member = 99; // gets bogus error + (i ? object0 : object1) = object2; // gets bogus error +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900331_03.C b/gcc/testsuite/g++.old-deja/g++.bugs/900331_03.C new file mode 100644 index 000000000000..a73d68560401 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900331_03.C @@ -0,0 +1,31 @@ +// g++ 1.37.1 bug 900331_03 + +// Special Options: -ansi + +// The following code causes g++ to abort. + +// Curiously, the abort does not occur if the -pedantic option is used. + +// Cfront 2.0 passes this test. + +// Keywords: abort, conditional operator?:, lvalues, composite types + +struct struct0 { + int data_member; + + virtual void function_member () {} // contributes to the abort +}; + +struct0 object0; +struct0 object1; +struct0 object2; + +int i; + +void function0 () +{ + object2 = (i ? object0 : object1); // OK + (i ? object0 : object1) = object2; // causes abort +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900331_04.C b/gcc/testsuite/g++.old-deja/g++.bugs/900331_04.C new file mode 100644 index 000000000000..f8a14c693907 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900331_04.C @@ -0,0 +1,32 @@ +// g++ 1.37.1 bug 900331_04 + +// g++ is unable to correctly parse declarations of formal parameters and +// local objects which have pointer-to-array types or reference-to-array +// types. + +// Cfront 2.0 passes this test. + +// keywords: syntax, arrays, pointers, references, local, formal + +int array[10]; + +int (*global_array_ptr)[10] = &array; +int (&global_array_ref)[10] = array; + +void function0 (int (*formal_array_ptr)[10]) { // gets bogus errors +} + +void function1 (int (&formal_array_ref)[10]) { // gets bogus errors +} + +void function2 () +{ + int (*local_array_ptr)[10] = &array; // gets bogus errors +} + +void function3 () +{ + int (&local_array_ref)[10] = array; // gets bogus error +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900401_01.C b/gcc/testsuite/g++.old-deja/g++.bugs/900401_01.C new file mode 100644 index 000000000000..18ecd614e7a4 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900401_01.C @@ -0,0 +1,15 @@ +// g++ 1.37.1 bug 900401_01 + +// The following erroneous code causes g++ to abort. + +// Cfront 2.0 passes this test. + +// keywords: abort, bit-fields, arrays + +typedef unsigned nibble_array[4]; + +struct whole { + nibble_array nibbles:16; // ERROR - +}; + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900402_01.C b/gcc/testsuite/g++.old-deja/g++.bugs/900402_01.C new file mode 100644 index 000000000000..4e636b5ece96 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900402_01.C @@ -0,0 +1,15 @@ +// g++ 1.37.1 bug 900402_01 + +// The following erroneous code causes g++ to abort. + +// Cfront 2.0 passes this test. + +// keywords: abort, bit-fields, function types + +typedef void (func_type) (); + +struct s { + func_type f:32; // ERROR - XFAIL *-*-* +}; + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900402_02.C b/gcc/testsuite/g++.old-deja/g++.bugs/900402_02.C new file mode 100644 index 000000000000..705cbf22d014 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900402_02.C @@ -0,0 +1,21 @@ +// g++ 1.37.1 bug 900402_02 + +// g++ fails to correctly flag all attempts to construct an array type +// of zero length as errors. + +// keywords: arrays, array bound, zero length + +typedef int array_type[0]; // ERROR - gets warning only + +int array_object_1[0]; // ERROR - gets warning only + +void function_0 (int formal_array[0]) +{ // ERROR - gets warning only +} + +void function_2 () +{ + int local_object_array_0[0]; // ERROR - gets warning only +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900403_01.C b/gcc/testsuite/g++.old-deja/g++.bugs/900403_01.C new file mode 100644 index 000000000000..608d8f92bd53 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900403_01.C @@ -0,0 +1,19 @@ +// g++ 1.37.1 bug 900403_01 + +// g++ allows casts to be treated as lvalues (even when the -pedantic +// option is used). Neither the C++ Reference Manual nor cfront 2.0 +// allow this. (gcc gives warnings for such usage with -pedantic). + +// Cfront 2.0 passes this test. + +// keywords: lvalues, casts + +int i, j; + +void f () +{ + (int) i = j; // ERROR - + ((int) i) = j; // ERROR - +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900403_04.C b/gcc/testsuite/g++.old-deja/g++.bugs/900403_04.C new file mode 100644 index 000000000000..c68e4c2d88f8 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900403_04.C @@ -0,0 +1,12 @@ +// g++ 1.37.1 bug 900403_04 + +// The following erroneous code causes g++ to abort. + +// keywords: abort, bit-fields, zero length + +struct s { + unsigned int foo:0; // ERROR - This is the real line + unsigned int field; +}; + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900404_01.C b/gcc/testsuite/g++.old-deja/g++.bugs/900404_01.C new file mode 100644 index 000000000000..f728865961fe --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900404_01.C @@ -0,0 +1,15 @@ +// g++ 1.37.1 bug 900404_01 + +// g++ allows string initializers for known-length character arrays to be +// one character longer (counting the terminating null) than the actual +// length of the array to be initialized. + +// The C++ Reference Manual (section 8.4.2) expressly prohibits this. + +// Cfront 2.0 passes this test. + +// keywords: arrays, initialization, array bounds + +char cv[4] = "asdf"; // ERROR - missed + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900404_02.C b/gcc/testsuite/g++.old-deja/g++.bugs/900404_02.C new file mode 100644 index 000000000000..4099daa31e48 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900404_02.C @@ -0,0 +1,24 @@ +// g++ 1.37.1 bug 900404_02 + +// g++ fails to treat multicharacter literals as type "int" as required by +// section 2.5.2 of the C++ Reference Manual. + +// The result is that the following program will exit with a non-zero +// exit status. + +// keywords: character literals, multi-character literals, int type + +int exit_status = 0; + +void function0 (int i) // function that should be called +{ + i = i; +} + +void function0 (char c) // function that is actually called +{ + c = c; + exit_status++; +} + +int main () { function0 ('abcd'); return exit_status; } // WARNING - diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900404_03.C b/gcc/testsuite/g++.old-deja/g++.bugs/900404_03.C new file mode 100644 index 000000000000..98a33d717bbd --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900404_03.C @@ -0,0 +1,27 @@ +// g++ 1.37.1 bug 900404_03 + +// g++ fails to be able to properly flag errors for even simple cases of +// ambiguous overload resolution (such as the one shown below). + +// Cfront 2.0 passes this test. + +// keywords: overloading, ambiguity, resolution + +void function0 (int i, char c) +{ // ERROR - + i = c; +} + +void function0 (char c, int i) +{ // ERROR - + i = c; +} + +char c; + +void test () +{ + function0 (c,c); // ERROR - missed +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900404_04.C b/gcc/testsuite/g++.old-deja/g++.bugs/900404_04.C new file mode 100644 index 000000000000..b6d4830b14d4 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900404_04.C @@ -0,0 +1,20 @@ +// g++ 1.37.1 bug 900404_04 + +// The ANSI C does not allow vacuous statements (i.e. just semicolons) +// at the file-scope level. + +// The current C++ Reference Manual does not indicate whether these should +// be considered legal or not. + +// I am forced to conclude that C++ will follow ANSI C in this regard, +// and that these are therefore not legal. + +// g++ fails to flag errors for such usage. + +// keywords: semicolon, vacuous, file scope, declaration + +int i; + +; // ERROR - , XFAIL *-*-* + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900404_07.C b/gcc/testsuite/g++.old-deja/g++.bugs/900404_07.C new file mode 100644 index 000000000000..c07a57751896 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900404_07.C @@ -0,0 +1,17 @@ +// g++ 1.37.1 bug 900404_07 + +// It is illegal to use a cast to attempt to convert an object type +// to a non-scalar type (e.g. an array type). + +// g++ fails to properly flag as errors such illegal uses of array types. + +// keywords: array types, casts, type conversion + +typedef int array_type[10]; + +array_type *ap; + +void foo () +{ + int i = *((array_type) *ap); /* ERROR - missed */ +} diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900405_01.C b/gcc/testsuite/g++.old-deja/g++.bugs/900405_01.C new file mode 100644 index 000000000000..346db0c556d3 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900405_01.C @@ -0,0 +1,19 @@ +// g++ 1.37.1 bug 900405_01 + +// The C++ Reference Manual says (in section 5.4) "Types may not be defined +// in casts." + +// g++ fails to flag errors for cases where an attempt is made to define +// a struct, class, union, or enum type within a cast. + +// keywords: casts, type definitions, tagged types + +void f () +{ + (enum e { red, green } *) 0; // ERROR - type defined in cast + (struct s { int member; } *) 0; // ERROR - type defined in cast + (union u { int member; } * ) 0; // ERROR - type defined in cast + (class c { int member; } *) 0; // ERROR - type defined in cast +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900406_01.C b/gcc/testsuite/g++.old-deja/g++.bugs/900406_01.C new file mode 100644 index 000000000000..93e7af3f3787 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900406_01.C @@ -0,0 +1,19 @@ +// g++ 1.37.1 bug 900406_01 + +// The following code causes g++ to segfault. + +// cfront 2.0 passes this test. + +// keywords: segfault, operator new, array types, array bounds + +void function0 () +{ + new int[]; // ERROR - causes segfault +} + +void function1 () +{ + new int (*)[]; // ERROR - no size specified +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900406_02.C b/gcc/testsuite/g++.old-deja/g++.bugs/900406_02.C new file mode 100644 index 000000000000..daf46a14e861 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900406_02.C @@ -0,0 +1,25 @@ +// g++ bug 900406_02 + +// g++ fails to correctly parse some type specifications within casts. + +// This results in incorrect errors being issued. + +// These errors are not issued for identical code by either cfront or +// by gcc. + +// cfront 2.0 passes this test. + +// keywords: syntax, array types, casts + +int (*ipp)[]; +int (**ippp)[]; + +int function () +{ + ipp = (int (*)[]) 0; // OK + ippp = (int (**)[]) 0; // gets bogus error (syntax) + return 0; +} + +int main () { return 0; } + diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900407_01.C b/gcc/testsuite/g++.old-deja/g++.bugs/900407_01.C new file mode 100644 index 000000000000..988642f4ad35 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900407_01.C @@ -0,0 +1,36 @@ +// g++ 1.37.1 bug 900407_01 + +// g++ fails to flag errors for uses of anachronistic features such as the +// invocation of a base class constructor in a ctor-initializer list without +// explicitly giving its name. + +// Errors should probably be issued for such usage unless the -traditional +// option is used. + +// Warnings are however issued. + +// Cfront 2.0 flags such usage as an error when the +p (pure-language) option +// is used. + +// Cfront 2.0 passes this test. + +// keywords: anachronism, inheritance, initialization, mem-initializer + +struct s0 { + int member; + + s0 (); +}; + +s0::s0() { } + +struct s1 : public s0 { + int member; + + s1 (); +}; + +s1::s1() : () { // ERROR - anachronism used +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900407_02.C b/gcc/testsuite/g++.old-deja/g++.bugs/900407_02.C new file mode 100644 index 000000000000..20a323f932ff --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900407_02.C @@ -0,0 +1,32 @@ +// g++ 1.37.1 bug 900407_02 + +// g++ flags errors for attempts to assign to the "this" parameter within +// class constructors (regardless of whether or not the -traditional) +// option is used). + +// Such errors should probably not be issued when the -traditional option is +// used. + +// Special g++ Options: -fthis-is-variable +// Special CC Options: + +// Cfront only flags errors for such usage whin the +p (pure language) +// option is used. + +// cfront 2.0 passes this test. + +// keywords: anachronism, this, assignment + +struct s0 { + + int member; + + s0 (); +}; + +s0::s0 () +{ + this = this; // OK - anachronism allowed with -traditional +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900428_01.C b/gcc/testsuite/g++.old-deja/g++.bugs/900428_01.C new file mode 100644 index 000000000000..b46fc466529b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900428_01.C @@ -0,0 +1,51 @@ +// g++ 1.37.1 bug 900428_01 + +// g++ fails to issue error messages for cases where an incomplete type +// object must be evaluated if the value of such an evaluation is not +// actually used in the given context. + +// In the case where such an object is volatile, it is obvious that this +// could be a problem, however I believe that errors should be issued +// for such cases regardless of whether or not such values are volatile +// because the abstract semantics seem to require the evaluation of such +// values whether they are volatile or not. + +// keywords: incomplete types, evaluation, volatile qualifier +// Build don't link: + +int i; + +void *pv; +volatile void *pvv; +struct s; +extern struct s es, *ps; +extern volatile struct s evs, *pvs; + +void pv_test () +{ + *pv; // ERROR - , XFAIL *-*-* + (i ? *pv : *pv); // ERROR - , XFAIL *-*-* + *pv, *pv; // ERROR - , XFAIL *-*-* + + *pvv; // ERROR - , XFAIL *-*-* + (i ? *pvv : *pvv); // ERROR - , XFAIL *-*-* + *pvv, *pvv; // ERROR - , XFAIL *-*-* + + es; // ERROR - , XFAIL *-*-* + (i ? es : es); // ERROR - , XFAIL *-*-* + es, es; // ERROR - , XFAIL *-*-* + + evs; // ERROR - , XFAIL *-*-* + (i ? evs : evs); // ERROR - , XFAIL *-*-* + evs, evs; // ERROR - , XFAIL *-*-* + + *ps; // ERROR - , XFAIL *-*-* + (i ? *ps : *ps); // ERROR - , XFAIL *-*-* + *ps, *ps; // ERROR - , XFAIL *-*-* + + *pvs; // ERROR - , XFAIL *-*-* + (i ? *pvs : *pvs); // ERROR - , XFAIL *-*-* + *pvs, *pvs; // ERROR - , XFAIL *-*-* +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900428_02.C b/gcc/testsuite/g++.old-deja/g++.bugs/900428_02.C new file mode 100644 index 000000000000..9da709fdc819 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900428_02.C @@ -0,0 +1,27 @@ +// g++ 1.37.1 bug 900428_02 + +// g++ fails to issue either errors or warnings (even with -pedantic) for +// attempts to perform either pre or post increment or decrement operations +// on variables which have either pointer-to-void types or pointer-to-function +// types. + +// cfront 2.0 passes this test. + +// keywords: pointer arithmetic, increment, decrement +// Build don't link: + +void *vp; +void (*fp) (); + +void test () +{ + vp++; /* ERROR - */ + ++vp; /* ERROR - */ + vp--; /* ERROR - */ + --vp; /* ERROR - */ + + fp++; /* ERROR - */ + ++fp; /* ERROR - */ + fp--; /* ERROR - */ + --fp; /* ERROR - */ +} diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900428_03.C b/gcc/testsuite/g++.old-deja/g++.bugs/900428_03.C new file mode 100644 index 000000000000..74e55860d296 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900428_03.C @@ -0,0 +1,44 @@ +// g++ 1.37.1 bug 900428_03 + +// g++ fails to detect cases where a constructor for a derived class invokes +// (either explicitly or implicitly) a private constructor for a base class. + +// cfront 2.0 passes this test. + +// keywords: inheritance, private, accessability, constructors + +struct struct_0 { + int struct_0_data_member; + +private: + struct_0 (int, int); +public: + struct_0 (int); +}; + +struct_0::struct_0 (int i) { } +struct_0::struct_0 (int, int) { } // ERROR - xref from below + +struct struct_1 : public struct_0 { + + struct_1 (); +}; + +struct_1::struct_1 () : struct_0 (8,9) +{ // ERROR - +} + +struct struct_2 { + struct_0 struct_2_data_member; + + struct_2 (); +}; + +// g++ catches the following error (but does so only at the line with the +// closing curly brace). + +struct_2::struct_2 () : struct_2_data_member (8,9) +{ // ERROR - should be up one line +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900511_01.C b/gcc/testsuite/g++.old-deja/g++.bugs/900511_01.C new file mode 100644 index 000000000000..e4488d9bad1b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900511_01.C @@ -0,0 +1,42 @@ +// g++ 1.37.1 bug 900511_01 + +// g++ fails to properly apply user-defined type conversion operators +// in cases where is it not obvious that the given conversion is +// appropriate for the context (i.e. operator and other operands) +// where the conversion should take place. + +// cfront 2.0 passes this test. + +struct struct_1 { + int member; + + operator int (); +}; + +struct_1::operator int () +{ + return 0; +} + +struct struct_2 { + int member; + + operator float (); +}; + +struct_2::operator float () +{ + return 0.0; +} + +struct_1 struct_1_object; +struct_2 struct_2_object; +double d; + +void test () +{ + d = struct_2_object + struct_1_object; // OK + d = struct_1_object + struct_2_object; // gets bogus error +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900511_02.C b/gcc/testsuite/g++.old-deja/g++.bugs/900511_02.C new file mode 100644 index 000000000000..0154bfe41404 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900511_02.C @@ -0,0 +1,21 @@ +// g++ 1.37.1 bug 900511_02 + +// g++ does not properly shadow names of types with names of data members +// in cases where the type names in question are used in the context of +// formal parameters lists for member functions. + +// keywords: typedef names, shadowing, scope, formal parameter list + +// cfront 2.0 passes this test. + +enum enum0 { enum0_value_0 }; // ERROR - + +struct struct0 { + int enum0; // ERROR - + void member_function (enum0 e); +}; + +void class0::member_function (enum0 e) { // ERROR - +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900511_03.C b/gcc/testsuite/g++.old-deja/g++.bugs/900511_03.C new file mode 100644 index 000000000000..d8a549aa82c0 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900511_03.C @@ -0,0 +1,19 @@ +// g++ 1.37.1 bug 900511_03 + +// g++ does not properly shadow names of types with names of data members +// in cases where the type names in question are used in the context of +// formal parameters lists for member functions. + +// keywords: typedef names, shadowing, scope, formal parameter list + +class class0; // ERROR - + +struct struct1 { + int class0; // ERROR - + void member_function (class0 *); +}; + +void class1::member_function (class0 *p) { // ERROR - +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900514_03.C b/gcc/testsuite/g++.old-deja/g++.bugs/900514_03.C new file mode 100644 index 000000000000..7274bb72990d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900514_03.C @@ -0,0 +1,115 @@ +// g++ 1.37.1 bug 900514_03 + +// g++ fails to flag ERRORs on the following erroneous code. + +// In Section 12.3.2 it says "Defining conversion by both a constructor and +// a conversion function can lead to ambiguities." However in the case below, +// the explicit cast syntax disambiguates the constructor as one which +// invokes the type conversion operator rather than the conversion. + +// cfront 2.0 passes this test. + +// keywords: user-defined type conversion operator, constructor + +struct t_0_st_0; + +struct t_0_st_1 { + int member; + + t_0_st_1 (t_0_st_0&);// ERROR - + t_0_st_1 (); +};// ERROR - + +struct t_0_st_0 { + int member; + + operator t_0_st_1 ();// ERROR - +}; + +t_0_st_0 t_0_st_0_obj0; + +void t_0_assignment () +{ + t_0_st_1 t_0_st_1_obj0; + t_0_st_1 t_0_st_1_obj1; + t_0_st_1 t_0_st_1_obj2; + + t_0_st_1_obj0 = t_0_st_0_obj0; // ERROR - caught + t_0_st_1_obj1 = t_0_st_1 (t_0_st_0_obj0); +} + +void t_0_local_init () +{ + t_0_st_1 t_0_st_1_obj0 = t_0_st_0_obj0; // ERROR - + t_0_st_1 t_0_st_1_obj1 = t_0_st_1 (t_0_st_0_obj0); +} + +struct t_1_st_0; + +struct t_1_st_1 { + int member; + + t_1_st_1 (t_1_st_0&); // ERROR - + t_1_st_1 (); + void operator= (t_1_st_1&); // ERROR - +}; + +struct t_1_st_0 { + int member; + + operator t_1_st_1 (); // ERROR - +}; + +t_1_st_0 t_1_st_0_obj0; + +void t_1_assignment () +{ + t_1_st_1 t_1_st_1_obj0; + t_1_st_1 t_1_st_1_obj1; + t_1_st_1 t_1_st_1_obj2; + + t_1_st_1_obj0 = t_1_st_0_obj0; // ERROR - + t_1_st_1_obj1 = t_1_st_1 (t_1_st_0_obj0); // ERROR - +} + +void t_1_local_init () +{ + t_1_st_1 t_1_st_1_obj0 = t_1_st_0_obj0; // ERROR - + t_1_st_1 t_1_st_1_obj1 = t_1_st_1 (t_1_st_0_obj0); +} + +// These are not ambiguous because the binding of the this parm for the conv +// is better than the arg binding for the ctor. + +struct t_2_st_0; + +struct t_2_st_1 { + int member; + + t_2_st_1 (t_2_st_0); + t_2_st_1 (); +}; + +struct t_2_st_0 { + int member; + + operator t_2_st_1 (); +}; + +t_2_st_0 t_2_st_0_obj0; + +void t_2_assignment () +{ + t_2_st_1 t_2_st_1_obj0; + t_2_st_1 t_2_st_1_obj1; + t_2_st_1 t_2_st_1_obj2; + + t_2_st_1_obj0 = t_2_st_0_obj0; + t_2_st_1_obj1 = t_2_st_1 (t_2_st_0_obj0); +} + +void t_2_local_init () +{ + t_2_st_1 t_2_st_1_obj0 = t_2_st_0_obj0; + t_2_st_1 t_2_st_1_obj1 = t_2_st_1 (t_2_st_0_obj0); +} diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900519_01.C b/gcc/testsuite/g++.old-deja/g++.bugs/900519_01.C new file mode 100644 index 000000000000..9641d1d615c8 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900519_01.C @@ -0,0 +1,16 @@ +// g++ 1.37.1 bug 900519_01 + +// g++ fails to flag errors for some attempts to declare or define non-member +// type conversion operators. + +// cfront 2.0 passes this test. + +// keywords: user-defined type conversion operator, non-member + +extern operator int (); // ERROR - + +extern operator int () { // ERROR - + return 0; +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900519_02.C b/gcc/testsuite/g++.old-deja/g++.bugs/900519_02.C new file mode 100644 index 000000000000..90dc16a42ece --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900519_02.C @@ -0,0 +1,32 @@ +// g++ 1.37.1 bug 900519_02 + +// The C++ Reference Manual says (in section 8.4.3) "A reference to a plain +// T can only be initialized with a plain T" however g++ allows the +// initialization of plain references with qualified objects in many cases. + +// keywords: references, initialization, type qualifiers + +extern const int cint_obj = 9; +volatile int vint_obj = 9; + +void take_int_ref (int& arg) { } // ERROR - referenced by errors below + +int& global_int_ref0 = cint_obj; // ERROR - +int& global_int_ref1 = vint_obj; // ERROR - + +extern const int& cint_ref; +extern volatile int& vint_ref; + +void test_0 () +{ + int& local_int_ref0 = cint_obj; // ERROR - + int& local_int_ref1 = vint_obj; // ERROR - + + take_int_ref (cint_obj); // ERROR - caught + take_int_ref (vint_obj); // ERROR - + + take_int_ref (cint_ref); // ERROR - + take_int_ref (vint_ref); // ERROR - +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900519_03.C b/gcc/testsuite/g++.old-deja/g++.bugs/900519_03.C new file mode 100644 index 000000000000..114d90960bf0 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900519_03.C @@ -0,0 +1,47 @@ +// g++ 1.37.1 bug 900519_03 + +// The C++ Reference Manual says (in section 8.4.3) "A reference to a +// volatile T can be initialized with a volatile T or a plain T but not a +// const T. A reference to a const T can be initialized with a const T or +// a plain T or something that can be converted into a plain T, but not a +// volatile T." + +// g++ fails to disgnose such errors in most cases. + +// keywords: references, initialization, type qualifiers + +extern const int cint_obj; +extern volatile int vint_obj; + +void take_cint_ref (const int& arg) { } // ERROR - +void take_vint_ref (volatile int& arg) { } // ERROR - + +const int& global_cint_ref2 = vint_obj; // ERROR - + +volatile int& global_vint_ref1 = cint_obj; // ERROR - + +extern const int& extern_cint_ref; +extern volatile int& extern_vint_ref; + +void test_0 () +{ + const int& local_cint_ref2 = vint_obj; // ERROR - + + volatile int& local_vint_ref1 = cint_obj; // ERROR - +} + +void test_1 () +{ + take_cint_ref (vint_obj); // ERROR - + + take_vint_ref (cint_obj); // ERROR - caught +} + +void test_2 () +{ + take_cint_ref (extern_vint_ref); // ERROR - + + take_vint_ref (extern_cint_ref); // ERROR - +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900519_04.C b/gcc/testsuite/g++.old-deja/g++.bugs/900519_04.C new file mode 100644 index 000000000000..53867a1b2b04 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900519_04.C @@ -0,0 +1,21 @@ +// g++ 1.37.1 bug 900519_04 + +// The following legal code causes g++ to segfault. + +// cfront 2.0 passes this test. + +// keywords: segfault, references, initialization + +int cint_obj = 9; + +void take_cint_ref (int& arg) { } + +int& cint_ref_0 = cint_obj; +int& cint_ref_1 = cint_obj; + +void test_0 () +{ + take_cint_ref (cint_ref_1); // causes segfault +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900519_05.C b/gcc/testsuite/g++.old-deja/g++.bugs/900519_05.C new file mode 100644 index 000000000000..05d2ea03d3d8 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900519_05.C @@ -0,0 +1,18 @@ +// g++ 1.37.1 bug 900519_05 + +// g++ fails to allow the use of function-reference types. + +// cfront 2.0 passes this test. + +// keywords: function types, reference types + +typedef void (func_type) (int, int); +typedef func_type& func_ref_type; // gets bogus error, XFAIL *-*-* + +void function (int arg1, int arg2) +{ +} + +func_type& global_func_ref1 = function; // gets bogus error, XFAIL *-*-* + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900519_06.C b/gcc/testsuite/g++.old-deja/g++.bugs/900519_06.C new file mode 100644 index 000000000000..5704c3f95209 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900519_06.C @@ -0,0 +1,22 @@ +// g++ 1.37.1 bug 900519_06 + +// g++ allows the type given in an invocation of operator new to be a +// reference type. + +// Since pointers to reference types are illegal, the required return type +// from such an invocation (of operator new) is illegal, and thus (it seems) +// the entire call to new should be treated as being illegal. + +typedef int& int_ref; + +void test (int n) +{ + new int&; // ERROR - missed + new int_ref; // ERROR - missed + new int&[n]; // ERROR - missed + new int_ref[n]; // ERROR - missed + new int&[3]; // ERROR - missed + new int_ref[3]; // ERROR - missed +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900519_07.C b/gcc/testsuite/g++.old-deja/g++.bugs/900519_07.C new file mode 100644 index 000000000000..f5ea6bcb8d82 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900519_07.C @@ -0,0 +1,16 @@ +// g++ 1.37.1 bug 900519_07 + +// It is illegal to specify or to use array-of-reference types, yet g++ +// allows them to be specified (in typedef statements and in declarations) +// and to be used (in declarations). + +// keywords: reference types, array types + +int i; +int j; + +typedef int& int_ref; +typedef int_ref int_ref_array_type[2]; // ERROR - missed + +int& int_ref_array_obj0[2] = { i, j }; // ERROR - missed +int_ref int_ref_array_obj1[2] = { i, j }; // ERROR - missed diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900519_08.C b/gcc/testsuite/g++.old-deja/g++.bugs/900519_08.C new file mode 100644 index 000000000000..ed99ae62ad11 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900519_08.C @@ -0,0 +1,15 @@ +// g++ 1.37.1 bug 900519_08 + +// g++ fails to accept the following legal syntax for an invocation of the +// new operator, in which the type specifier is implicitly "int". + +// cfront 2.0 passes this test. + +// keywords: syntax, operator new, type specifier, type qualifier + +void test () +{ + new const /* int */ (1); // gets bogus error +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900519_09.C b/gcc/testsuite/g++.old-deja/g++.bugs/900519_09.C new file mode 100644 index 000000000000..3bff70eed745 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900519_09.C @@ -0,0 +1,29 @@ +// g++ 1.37.1 bug 900519_09 + +// g++ allows the allocation of const objects via operator new even when +// these uses of operator new do not include initializations. + +// This is inconsistant within the restrictions placed on the construction +// of class, struct, and union types which have constant members. + +// Since there is no completely valid way of initializing such objects +// after the invocation of new, these cases should all be illegal. + +// keywords: operator new, initialization, const qualifier + +struct struct_0 { + int member; +}; + +typedef const int const_int; +typedef const struct struct_0 const_struct_0; + +void test () +{ + new const int; // ERROR - + new const_int; // ERROR - + new const struct_0; // ERROR - + new const_struct_0; // ERROR - +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900519_12.C b/gcc/testsuite/g++.old-deja/g++.bugs/900519_12.C new file mode 100644 index 000000000000..112b989b805b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900519_12.C @@ -0,0 +1,11 @@ +// g++ 1.37.1 bug 900519_12 + +// The following erroneous code causes g++ to segfault. + +// cfront 2.0 passes this test. + +// keywords: segfault, typedef, pointer type, function type + +typedef eek void (*)(); // ERROR - + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900519_13.C b/gcc/testsuite/g++.old-deja/g++.bugs/900519_13.C new file mode 100644 index 000000000000..8161b59b801a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900519_13.C @@ -0,0 +1,35 @@ +// g++ 1.37.1 bug 900519_13 + +// If multiple inheritance creates a situation in which a given name is +// inherited from more than one base class, and if the inherited declarations +// for the name are for different categories of members (e.g. object members, +// function members, enumeral members), then g++ will (in some cases) fail +// to flag errors when the ambiguous name is used. + +// cfront 2.0 passes this test. + +// keywords: inheritance, ambiguity resolution, members + +struct base_0 { + enum { base_member }; +}; + +struct base_1 { + int base_member; +}; + +struct base_2 { + int base_member (); +}; + +struct derived_0 : public base_0, public base_1 { + void member () { base_member; } // ERROR - +}; + +struct derived_1 : public base_0, public base_2 { + void member () { base_member; } // ERROR - missed +}; + +struct derived_2 : public base_1, public base_2 { + void member () { base_member; } // ERROR - missed +}; diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900520_02.C b/gcc/testsuite/g++.old-deja/g++.bugs/900520_02.C new file mode 100644 index 000000000000..05c880d2e3c0 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900520_02.C @@ -0,0 +1,34 @@ +// g++ 1.37.1 bug 900520_02 + +// g++ fails to allow a reference to an unbounded array type to be passed +// into a formal parameter whose type is pointer-to-bounded-array type. + +// Cases other than parameter passing in which similar initializations +// take place are allowed however. + +// cfront 2.0 passes this test. + +// keywords: reference types, initialization, parameter passing + +typedef int b_array[3]; +typedef int u_array[]; + +typedef b_array &b_array_ref; +typedef u_array &u_array_ref; + +void take_b_array_ref (b_array_ref arg) { } + +extern u_array u_array_gbl_obj; + +u_array_ref u_array_ref_gbl_obj0 = u_array_gbl_obj; + +b_array_ref b_array_ref_gbl_obj0 = u_array_ref_gbl_obj0; // OK + +void test_passing () +{ + take_b_array_ref (u_array_ref_gbl_obj0); // gets bogus error +} + +b_array u_array_gbl_obj; + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900520_03.C b/gcc/testsuite/g++.old-deja/g++.bugs/900520_03.C new file mode 100644 index 000000000000..b1f05c95b14e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900520_03.C @@ -0,0 +1,49 @@ +// g++ 1.37.1 bug 900520_03 + +// The C++ Reference Manual says (in section 8.2.4): + +// When an identifier of array type appears in an expression, except +// as the operand of sizeof or & or used to initialize a reference, +// it is converted into a pointer to the first member of the array. + +// One must assume from the verbage, that when the name of a non-const array +// object appears in one of the exempted contexts mentioned in this passage, +// that it is *not* automatically converted into a pointer value, but rather +// that it remains as an array type value, and that it may therefore also +// still be an lvalue, and may be used to initialize references. + +// As the following code demonstrates, g++ does in fact treat the names +// of non-const array objects as valid initializers for reference-to-array +// type object in some (but not all) contexts. + +// The exception is that g++ does not allow names which designate objects +// on incomplete array types to be used as actual parameters in function +// calls where the corresponding formal parameter is of a reference-to-array +// type. + +// g++ does however allow other similar sorts of initializations of non-formal +// reference objects. + +// 5/16/94 (jason): The 1/25/94 WP explicitly states in section 8.3.5 that +// parameter types may not contain pointers or references to arrays of unknown +// bound. g++ is correct. + +// keywords: reference types, array types, initialization, parameter passing + +typedef int u_array[]; +typedef u_array &u_array_ref; + +void take_u_array_ref (u_array_ref arg) { } // ERROR - reference to array of unknown bound in parmtype + +extern u_array u_array_gbl_obj; +u_array_ref u_array_ref_gbl_obj0 = u_array_gbl_obj; // OK + +void test_local_initialization () +{ + u_array_ref u_array_ref_lcl_obj0 = u_array_gbl_obj; // OK +} + +void test_passing () +{ + take_u_array_ref (u_array_gbl_obj); +} diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900520_04.C b/gcc/testsuite/g++.old-deja/g++.bugs/900520_04.C new file mode 100644 index 000000000000..d9488cf9b537 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900520_04.C @@ -0,0 +1,40 @@ +// g++ 1.37.1 bug 900520_04 + +// g++ does not yet support the initialization of scalar type objects +// (including built-in arithmetic types, enum types, and pointer types) +// via constructor initialization syntax except within a call to operator +// new. + +// keywords: unimplemented, syntax, initialization, scalar types + +enum e_type { e_value }; + +typedef char *charp; + +charp cp; + +int global_i (1); // gets bogus error +double global_d (9.9); // gets bogus error +charp global_cp0 (cp); // gets bogus error +charp global_cp1 (0); // gets bogus error +enum e_type global_e (e_value); // gets bogus error + +void func0 () +{ + int local_i (1); // gets bogus error + double local_d (9.9); // gets bogus error + charp local_cp0 (cp); // gets bogus error + charp local_cp1 (0); // gets bogus error + enum e_type local_e (e_value); // gets bogus error +} + +void func1 () +{ + int* ip = new int (1); // gets bogus error + double* dp = new double (9.9); // gets bogus error + charp* cpp0 = new charp (cp); // gets bogus error + charp* cpp1 = new charp (0); // gets bogus error + enum e_type* ep = new e_type (e_value); // gets bogus error +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900520_05.C b/gcc/testsuite/g++.old-deja/g++.bugs/900520_05.C new file mode 100644 index 000000000000..5ddc9fda507e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900520_05.C @@ -0,0 +1,23 @@ +// g++ 1.37.1 bug 900520_05 + +// The following legal code gets syntax errors from g++. + +// keywords: syntax, unimplemented, operator new, initialization, pointer types + +struct struct_0 { +}; + +char *cp; +struct_0 *sp; + +void test0 () +{ + new char * (cp); // gets bogus error +} + +void test1 () +{ + new struct_0 * (sp); // gets bogus error +} + +int main () { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.bugs/900520_06.C b/gcc/testsuite/g++.old-deja/g++.bugs/900520_06.C new file mode 100644 index 000000000000..aa4ec9a320ef --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.bugs/900520_06.C @@ -0,0 +1,78 @@ +// g++ 1.37.1 bug 900520_06 + +// When an object of a class type is passed into a formal parameter of the +// same class type (in a function call) the language definition calls for +// this action to be treated like any other form of an initialization of +// an object of the given class type. + +// g++ fails however to invoke the (compiler-supplied) copy constructor for +// the class type when a parameter of the class type is passed as an +// actual parameter. + +// This causes the following program to exit with a non-zero exit status. + +// cfront 2.0 passes this test. + +int base_copy_ctor_called = 0; +int member_copy_ctor_called = 0; + +struct struct_0 { + struct_0 (); + struct_0 (const struct_0&); +}; + +struct_0::struct_0 () +{ +} + +struct_0::struct_0 (const struct_0&) +{ + base_copy_ctor_called++; +} + +struct struct_1 { + struct_1 (); + struct_1 (const struct_1&); +}; + +struct_1::struct_1 () +{ +} + +struct_1::struct_1 (const struct_1&) +{ + member_copy_ctor_called++; +} + +struct struct_2 : public struct_0 { + struct_2 (); + struct_1 struct_1_member; +#ifdef MAKE_COPY_CONSTRUCTOR_EXPLICIT + struct_2 (const struct_2&); +#endif +}; + +struct_2::struct_2 () +{ +} + +#ifdef MAKE_COPY_CONSTRUCTOR_EXPLICIT +struct_2::struct_2 (const struct_2& arg) : + struct_0 ((struct_0&)arg), + struct_1_member (arg.struct_1_member) +{ +} +#endif + +void take_struct_2 (struct_2 arg) +{ +} + +int test () +{ + struct_2 struct_2_object0; + take_struct_2 (struct_2_object0); + return (base_copy_ctor_called != 1 || member_copy_ctor_called != 1); +} + +int main () { return test (); } diff --git a/gcc/testsuite/g++.old-deja/g++.ext/array1.C b/gcc/testsuite/g++.old-deja/g++.ext/array1.C new file mode 100644 index 000000000000..808eb534403a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.ext/array1.C @@ -0,0 +1,22 @@ +// Testcase for assignment of non-array to array (assigns the same value to +// each member) +// Build don't link: +// Special Options: + +typedef struct {} ct2d_rigid, ct2d_rigid_a[1]; +class ccInspection +{ +protected: + ct2d_rigid_a _dev2phys; +}; +class ccBgaInspection : public ccInspection +{ +public: + int reinspect (unsigned long diagFlags); +}; +int +ccBgaInspection::reinspect (unsigned long diag_flags) +{ + ct2d_rigid physTdev; + _dev2phys = physTdev; // ERROR - +} diff --git a/gcc/testsuite/g++.old-deja/g++.ext/array2.C b/gcc/testsuite/g++.old-deja/g++.ext/array2.C new file mode 100644 index 000000000000..13679af63b24 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.ext/array2.C @@ -0,0 +1,13 @@ +// This testcase used to cause a crash on the Alpha. +// Special g++ Options: +// Build don't link: + +struct A { + int i; + ~A() { } +}; + +A f (int n) +{ + A a[n]; +} diff --git a/gcc/testsuite/g++.old-deja/g++.ext/arrnew.C b/gcc/testsuite/g++.old-deja/g++.ext/arrnew.C new file mode 100644 index 000000000000..ef051d265a04 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.ext/arrnew.C @@ -0,0 +1,5 @@ +// PRMS Id: 4992 +// Build don't link: +// Special g++ Options: + + int *f(){ return new int[1] = { 1 }; } diff --git a/gcc/testsuite/g++.old-deja/g++.ext/constructor.C b/gcc/testsuite/g++.old-deja/g++.ext/constructor.C new file mode 100644 index 000000000000..cdf9f1da98bf --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.ext/constructor.C @@ -0,0 +1,19 @@ +// Testcase for constructor expressions (GNU extension) +// Special g++ Options: + +struct Any { + int *type; + int *addr; +}; + +int i, j; + +main () { + struct Any *ap = (struct Any *) + __builtin_alloca (sizeof(struct Any)); + *ap = ((struct Any){ &i, &j }) ; + + if (ap->type != &i || ap->addr != &j) + return 1; + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.ext/default.C b/gcc/testsuite/g++.old-deja/g++.ext/default.C new file mode 100644 index 000000000000..24f336e5882f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.ext/default.C @@ -0,0 +1,26 @@ +// PRMS Id: 5353 +// This may be an extension, but it's a very common one... + +extern "C" int printf (const char *, ...); + +class A { +public: + static A*func (int = 3); + static A*(*ptr)(int = 4); +}; + +A*(*A::ptr)(int) = &A::func; + +main() +{ + A foo; + + A::ptr(); + A::ptr(47); +} + +A*A::func(int i) +{ + printf("I = %d\n",i); + return (A*)0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.ext/memconst.C b/gcc/testsuite/g++.old-deja/g++.ext/memconst.C new file mode 100644 index 000000000000..5b42d8ff9055 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.ext/memconst.C @@ -0,0 +1,24 @@ +// From: Ove.Ewerlid@syscon.uu.se (Ove Ewerlid) +// Subject: ss-940630:cc1plus: internal error +// Date: Sat, 2 Jul 1994 05:07:20 +0200 +// Special g++ Options: +// Build don't link: + +class qwerty { +public: + qwerty (const unsigned short userkey[8]); + ~qwerty (); +}; + +class foo { +private: + const unsigned char * const dummy_key = (unsigned char*)"ThisIs a dummy!"; +public: + void bar (); +}; + +void +foo::bar () +{ + qwerty QWERTY ((unsigned short*)dummy_key); +} diff --git a/gcc/testsuite/g++.old-deja/g++.ext/null1.C b/gcc/testsuite/g++.old-deja/g++.ext/null1.C new file mode 100644 index 000000000000..6650cbedde8e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.ext/null1.C @@ -0,0 +1,8 @@ +// Test for overloading with g++ NULL. + +void f (int *) { } +void f (char, char); +main () +{ + f (__null); +} diff --git a/gcc/testsuite/g++.old-deja/g++.ext/pretty.C b/gcc/testsuite/g++.old-deja/g++.ext/pretty.C new file mode 100644 index 000000000000..d7951324c62e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.ext/pretty.C @@ -0,0 +1,43 @@ +// Test for PRETTY_FUNCTION +// Build don't link: + +class SV; + +class SVTable // : public Debug +{ + // It is an array to pointer to a SV. + SV ** array; + + // This is the size of array. + int maxCount; + + // This is the current element count. + int count; + + void fatal_error (const char *f, ...); + +public: + SVTable (int size, const char *d); + SVTable (); + SVTable (const SVTable &); + ~SVTable () {} + +}; + + +SVTable::SVTable (int size, const char *d) + : maxCount (size), count (0)// , Debug (d) +{ + if (size < 0) + { + fatal_error (__PRETTY_FUNCTION__ ": Invalid size: %d\n", size); + } + + array = (SV **) new SV * [size]; + + if (array == 0) + { + fatal_error (__PRETTY_FUNCTION__ + ": Failed to allocate array\n"); + } +} diff --git a/gcc/testsuite/g++.old-deja/g++.gb/README b/gcc/testsuite/g++.old-deja/g++.gb/README new file mode 100644 index 000000000000..db118908b267 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.gb/README @@ -0,0 +1,20 @@ +These are my C++ signature and class-scoping tests. + +In changing my signature tests to DejaGnu style, I reduced the number +of tests from 40 to 25. They should still test the same features, +though. All of these tests are run. I don't have any tests yet to +check correct reporting of errors/warnings. + +The class scoping tests were in part derived from Vince Russo's +Renaissance operating system and in part written by myself in helping +Niklas Hallqvist test his rewrite of the scoping code. I had shared +some of these tests with Niklas, others were included in bug reports I +had sent to {g++,gcc}@cygnus.com. It is, therefore, possible that +these tests duplicate tests in other directories. + +All files in this directory, including this file, are Copyright FSF 1995 +and fall under the GPL version 2.0 or later. + +Gerald Baumgartner +gb@cs.purdue.edu +March 1, 1995 diff --git a/gcc/testsuite/g++.old-deja/g++.gb/scope01.C b/gcc/testsuite/g++.old-deja/g++.gb/scope01.C new file mode 100644 index 000000000000..e22dd394979c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.gb/scope01.C @@ -0,0 +1,4 @@ +// Build don't link: +// GROUPS passed gb scope +struct c { typedef int t; }; +struct d { typedef char t; }; diff --git a/gcc/testsuite/g++.old-deja/g++.gb/scope02.C b/gcc/testsuite/g++.old-deja/g++.gb/scope02.C new file mode 100644 index 000000000000..678b73e22510 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.gb/scope02.C @@ -0,0 +1,10 @@ +// Build don't link: +// GROUPS passed gb scope +struct c { + typedef int t; + struct d { + void foo (t &); + }; +}; + +void c::d::foo (t & x) { } diff --git a/gcc/testsuite/g++.old-deja/g++.gb/scope03.C b/gcc/testsuite/g++.old-deja/g++.gb/scope03.C new file mode 100644 index 000000000000..09fe16aed86f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.gb/scope03.C @@ -0,0 +1,10 @@ +// Build don't link: +// GROUPS passed gb scope +struct c { + class t { }; + struct d { + void foo (t &); + }; +}; + +void c::d::foo (t & x) { } diff --git a/gcc/testsuite/g++.old-deja/g++.gb/scope04.C b/gcc/testsuite/g++.old-deja/g++.gb/scope04.C new file mode 100644 index 000000000000..f63775bdb492 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.gb/scope04.C @@ -0,0 +1,15 @@ +// Build don't link: +// GROUPS passed gb scope +struct a { + struct c { + struct d { + static int foo (int); + }; + }; + + struct b { + int foo (int x) { return c::d::foo (x); } + }; +}; + +int a::c::d::foo (int) { return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.gb/scope05.C b/gcc/testsuite/g++.old-deja/g++.gb/scope05.C new file mode 100644 index 000000000000..60f0b02a58db --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.gb/scope05.C @@ -0,0 +1,12 @@ +// Build don't link: +// GROUPS passed gb scope +struct C { + void foo (int); + void foo (char); + + struct D { + void foo (); + }; +}; + +void C::D::foo () { } diff --git a/gcc/testsuite/g++.old-deja/g++.gb/scope06.C b/gcc/testsuite/g++.old-deja/g++.gb/scope06.C new file mode 100644 index 000000000000..46c9d07b5da1 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.gb/scope06.C @@ -0,0 +1,14 @@ +// Build don't link: +// GROUPS passed gb scope +struct C { + struct D { + int x; + void foo (); + }; + const int Ok = 0; // ERROR - initialization forbidden +}; + +void C::D::foo () +{ + x = Ok; +} diff --git a/gcc/testsuite/g++.old-deja/g++.gb/scope07.C b/gcc/testsuite/g++.old-deja/g++.gb/scope07.C new file mode 100644 index 000000000000..051bbb5fb50f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.gb/scope07.C @@ -0,0 +1,11 @@ +// Build don't link: +// GROUPS passed gb scope +struct D { + friend class A; + friend class B; + friend class C; + + void foo (); +}; + +void D::foo () { } diff --git a/gcc/testsuite/g++.old-deja/g++.gb/scope08.C b/gcc/testsuite/g++.old-deja/g++.gb/scope08.C new file mode 100644 index 000000000000..2451965f053a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.gb/scope08.C @@ -0,0 +1,14 @@ +// Build don't link: +// GROUPS passed gb scope +template <class X> class C { +public: + int f (X ob) { return 0; } + int g (X ob) { return f (ob); } +}; + +class D { +public: + class E { public: E (); }; + + C <E> x; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.gb/scope09.C b/gcc/testsuite/g++.old-deja/g++.gb/scope09.C new file mode 100644 index 000000000000..cc17afc9fe21 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.gb/scope09.C @@ -0,0 +1,16 @@ +// Build don't link: +// GROUPS passed gb scope +class enclose { + int e; +protected: + class nested { + int n; + }; +}; + +class derived : public enclose { +protected: + class nested_derived : public nested { + int nd; + }; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.gb/scope10.C b/gcc/testsuite/g++.old-deja/g++.gb/scope10.C new file mode 100644 index 000000000000..32caa6084a18 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.gb/scope10.C @@ -0,0 +1,9 @@ +// Build don't link: +// GROUPS passed gb scope +void Foo (void) +{ + class C { + public: + virtual int foo (void) { return 0; }; + }; +} diff --git a/gcc/testsuite/g++.old-deja/g++.gb/scope11.C b/gcc/testsuite/g++.old-deja/g++.gb/scope11.C new file mode 100644 index 000000000000..19229df9f256 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.gb/scope11.C @@ -0,0 +1,28 @@ +// Build don't link: +// GROUPS passed gb scope +template<class T, int N> class fixed_array { +public: + T _array[N]; +}; + +class Hash { +public: + Hash (int); +}; + +typedef fixed_array<char, 4> ipAddress_t; + +class IPAddress { +protected: + long _i; +public: + IPAddress (ipAddress_t ip) { } + IPAddress () { } + IPAddress netMask () { return *this; } + operator Hash (); +}; + +IPAddress::operator Hash () +{ + return Hash (_i); +} diff --git a/gcc/testsuite/g++.old-deja/g++.gb/scope12.C b/gcc/testsuite/g++.old-deja/g++.gb/scope12.C new file mode 100644 index 000000000000..52916b955b10 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.gb/scope12.C @@ -0,0 +1,35 @@ +// Build don't link: +// GROUPS passed gb scope +template<class T, int N> class FixedArray_t { +public: + T _array[N]; + + FixedArray_t () { } +}; + +typedef FixedArray_t<unsigned char, 4> IPAddress_t; + +class IPAddress { +public: + IPAddress (IPAddress_t ip) { } + + operator IPAddress_t () + { + IPAddress_t rv; + return rv; + } + + IPAddress () { } +}; + +class DatagramHeader { +public: + IPAddress _src; + + void setHeader (IPAddress); +}; + +void +DatagramHeader::setHeader (IPAddress) +{ +} diff --git a/gcc/testsuite/g++.old-deja/g++.gb/scope13.C b/gcc/testsuite/g++.old-deja/g++.gb/scope13.C new file mode 100644 index 000000000000..9ca5ba8ac251 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.gb/scope13.C @@ -0,0 +1,11 @@ +// Build don't link: +// GROUPS passed gb scope +class X { +public: +}; + +class Y { +public: + void X(); + ::X X(int); +}; diff --git a/gcc/testsuite/g++.old-deja/g++.gb/sig01.C b/gcc/testsuite/g++.old-deja/g++.gb/sig01.C new file mode 100644 index 000000000000..a3e927743f3a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.gb/sig01.C @@ -0,0 +1,33 @@ +// Special g++ Options: -fhandle-signatures +// GROUPS passed gb sigptr assignment +// Test assignment to local signature pointer. + +extern "C" +{ + int printf (char *, ...); +} + +class C +{ +public: + char * f (void) { return "PA"; } + char * g (int) { return "SS"; } +}; + +signature S +{ + char * f (void); + char * g (int); +}; + +int main (void) +{ + C a; + S * p; + + p = &a; + + printf ("%s%s\n", p->f (), p->g (0)); + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.gb/sig02.C b/gcc/testsuite/g++.old-deja/g++.gb/sig02.C new file mode 100644 index 000000000000..f739a282c1bd --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.gb/sig02.C @@ -0,0 +1,45 @@ +// Special g++ Options: -fhandle-signatures +// GROUPS passed gb sigptr assignment +// Test assigning objects of different classes to local signature pointer. + +extern "C" +{ + int printf (char *, ...); +} + +class C +{ +public: + char * f (void) { return "PA"; } +}; + +class D +{ +public: + char * f (void) { return "SS"; } +}; + +signature S +{ + char * f (void); +}; + +int main (void) +{ + C a; + D b; + S * p; + int i; + + for (i = 0; i < 2; i++) + { + if (i == 0) + p = &a; + else + p = &b; + printf ("%s", p->f ()); + } + printf ("\n"); + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.gb/sig03.C b/gcc/testsuite/g++.old-deja/g++.gb/sig03.C new file mode 100644 index 000000000000..d791c7edbefd --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.gb/sig03.C @@ -0,0 +1,33 @@ +// Special g++ Options: -fhandle-signatures +// GROUPS passed gb sigptr overloading +// Test overloading of signature member functions. + +extern "C" +{ + int printf (char *, ...); +} + +class C +{ +public: + char * f (void) { return "PA"; } + char * f (int) { return "SS"; } +}; + +signature S +{ + char * f (void); + char * f (int); +}; + +int main (void) +{ + C a; + S * p; + + p = &a; + + printf ("%s%s\n", p->f (), p->f (0)); + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.gb/sig04.C b/gcc/testsuite/g++.old-deja/g++.gb/sig04.C new file mode 100644 index 000000000000..af5495915916 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.gb/sig04.C @@ -0,0 +1,46 @@ +// Special g++ Options: -fhandle-signatures +// GROUPS passed gb sigptr this +// Test passing of 'this' pointer through signature pointer. + +extern "C" +{ + int printf (char *, ...); +} + +class C; +int inc_mod_4 (C *); + +class C +{ +public: + char * text[4]; + int i; + int get_i (void) { return i; } + char * msg (void) { i = inc_mod_4 (this); return text[i]; } +}; + +signature S +{ + char * msg (void); +}; + +int inc_mod_4 (C * p) +{ + return (p->get_i () + 1) % 4; +} + +int main (void) +{ + C o = { "P", "A", "S", "S", -1 }; + S * p; + int i; + + p = &o; + + for (i = 0; i < 4; i++) + printf ("%s", p->msg ()); + + printf ("\n"); + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.gb/sig05.C b/gcc/testsuite/g++.old-deja/g++.gb/sig05.C new file mode 100644 index 000000000000..3023e348dfb3 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.gb/sig05.C @@ -0,0 +1,31 @@ +// Special g++ Options: -fhandle-signatures +// GROUPS passed gb sigptr initialization +// Test initialization of a local signature pointer. + +extern "C" +{ + int printf (char *, ...); +} + +class C +{ +public: + char * f (void) { return "PA"; } + char * g (int) { return "SS"; } +}; + +signature S +{ + char * f (void); + char * g (int); +}; + +int main (void) +{ + C a; + S * p = &a; + + printf ("%s%s\n", p->f (), p->g (0)); + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.gb/sig06.C b/gcc/testsuite/g++.old-deja/g++.gb/sig06.C new file mode 100644 index 000000000000..b6476d5f9054 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.gb/sig06.C @@ -0,0 +1,31 @@ +// Special g++ Options: -fhandle-signatures +// GROUPS passed gb sigptr initialization +// Test initialization of a local signature pointer. + +extern "C" +{ + int printf (char *, ...); +} + +class C +{ +public: + char * f (void) { return "PA"; } + char * g (int) { return "SS"; } +}; + +signature S +{ + char * f (void); + char * g (int); +}; + +C a; +S * p = &a; + +int main (void) +{ + printf ("%s%s\n", p->f (), p->g (0)); + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.gb/sig07.C b/gcc/testsuite/g++.old-deja/g++.gb/sig07.C new file mode 100644 index 000000000000..18a47be7e6e0 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.gb/sig07.C @@ -0,0 +1,29 @@ +// Special g++ Options: -fhandle-signatures +// GROUPS passed gb sigptr default-argument +// Test calling a signature member function with default argument. + +extern "C" +{ + int printf (char *, ...); +} + +class C +{ +public: + char * f (char * text) { return text; } +}; + +signature S +{ + char * f (char * text = "PA"); +}; + +C a; +S * p = &a; + +int main (void) +{ + printf ("%s%s\n", p->f (), p->f ("SS")); + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.gb/sig08.C b/gcc/testsuite/g++.old-deja/g++.gb/sig08.C new file mode 100644 index 000000000000..2d5d14d99708 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.gb/sig08.C @@ -0,0 +1,40 @@ +// Special g++ Options: -fhandle-signatures +// GROUPS passed gb sigptr argument return-value +// Test passing a signature pointer to a function and returning it from one. + +extern "C" +{ + int printf (char *, ...); +} + +class C +{ +public: + char * text; + char * get_msg (void) const { return text; } +}; + +const C a = { "PA" }; +const C b = { "SS" }; + +signature S +{ + char * get_msg (void) const; +}; + +char * f (const S * p) +{ + return p->get_msg (); +} + +const S * g (const C * p) +{ + return p; +} + +int main (void) +{ + printf ("%s%s\n", f(&a), g(&b)->get_msg ()); + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.gb/sig09.C b/gcc/testsuite/g++.old-deja/g++.gb/sig09.C new file mode 100644 index 000000000000..a2e3b33e192b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.gb/sig09.C @@ -0,0 +1,34 @@ +// Special g++ Options: -fhandle-signatures +// GROUPS passed gb sigptr assignment initialization new +// Test assignment to/initialization of signature pointer with run-time value. + +extern "C" +{ + int printf (char *, ...); +} + +class C +{ +public: + int f (void) { return 1; } +}; + +signature S +{ + int f (void); +}; + +S * p1 = new C; + +int main (void) +{ + S * p2 = new C; + S * p3; + + p3 = new C; + + if (p1->f () + p2->f () + p3->f () == 3) + printf ("PASS\n"); + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.gb/sig10.C b/gcc/testsuite/g++.old-deja/g++.gb/sig10.C new file mode 100644 index 000000000000..e16f2eeb0957 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.gb/sig10.C @@ -0,0 +1,38 @@ +// Special g++ Options: -fhandle-signatures +// GROUPS passed gb sigptr argument return-value new +// Test passing a signature pointer to a function and returning it from one. + +extern "C" +{ + int printf (char *, ...); +} + +class C +{ + char * text; +public: + C (char * s) { text = s; } + char * get_msg (void) const { return text; } +}; + +signature S +{ + char * get_msg (void) const; +}; + +char * f (const S * p) +{ + return p->get_msg (); +} + +const S * g (const C * p) +{ + return p; +} + +int main (void) +{ + printf ("%s%s\n", f(new C ("PA")), g(new C ("SS"))->get_msg ()); + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.gb/sig11.C b/gcc/testsuite/g++.old-deja/g++.gb/sig11.C new file mode 100644 index 000000000000..892695f3fa39 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.gb/sig11.C @@ -0,0 +1,34 @@ +// Special g++ Options: -fhandle-signatures +// GROUPS passed gb sigptr array +// Test a signature pointer array. + +extern "C" +{ + int printf (char *, ...); +} + +class C +{ +public: + char * f (void) { return "PA"; } +}; + +class D +{ +public: + char * f (void) { return "SS"; } +}; + +signature S +{ + char * f (void); +}; + +int main (void) +{ + S * p[2] = { new C, new D }; + + printf ("%s%s\n", p[0]->f (), p[1]->f ()); + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.gb/sig12.C b/gcc/testsuite/g++.old-deja/g++.gb/sig12.C new file mode 100644 index 000000000000..2747a805915c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.gb/sig12.C @@ -0,0 +1,40 @@ +// Special g++ Options: -fhandle-signatures +// GROUPS passed gb sigptr structure +// Test a signature pointer structure. + +extern "C" +{ + int printf (char *, ...); +} + +class C +{ +public: + char * f (void) { return "PA"; } +}; + +class D +{ +public: + char * f (void) { return "SS"; } +}; + +signature S +{ + char * f (void); +}; + +struct SP +{ + S * p; + S * q; +}; + +int main (void) +{ + SP o = { new C, new D }; + + printf ("%s%s\n", o.p->f (), o.q->f ()); + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.gb/sig13.C b/gcc/testsuite/g++.old-deja/g++.gb/sig13.C new file mode 100644 index 000000000000..f5da9f808880 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.gb/sig13.C @@ -0,0 +1,38 @@ +// Special g++ Options: -fhandle-signatures +// GROUPS passed gb sigptr assignment initialization +// Test assignment of/initialization with same type signature pointer. + +extern "C" +{ + int printf (char *, ...); +} + +class C +{ +public: + int f (void) { return 1; } +}; + +signature S +{ + int f (void); +}; + +C a; +S * p1 = &a; +S * q1 = p1; + +int main (void) +{ + C a; + S * p2 = &a; + S * q2 = p2; + S * q3; + + q3 = p2; + + if (q1->f () + q2->f () + q3->f () == 3) + printf ("PASS\n"); + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.gb/sig14.C b/gcc/testsuite/g++.old-deja/g++.gb/sig14.C new file mode 100644 index 000000000000..6ce1d02d1bfc --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.gb/sig14.C @@ -0,0 +1,55 @@ +// Special g++ Options: -fhandle-signatures +// GROUPS passed gb sigptr assignment initialization +// Test assignment of/initialization with different type signature pointer. + +extern "C" +{ + int printf (char *, ...); +} + +class C +{ +public: + int f (void) { return 1; } + int g (int) { return 2; } +}; + +signature S +{ + int f (void); + int g (int); +}; + +signature T +{ + int f (void); +}; + +signature U +{ + int g (int); +}; + +C a; +S * p1 = &a; +T * q1 = p1; +U * r1 = p1; + +int main (void) +{ + C a; + S * p2 = &a; + T * q2 = p2; + U * r2 = p2; + T * q3; + U * r3; + + q3 = p2; + r3 = p2; + + if (q1->f () + q2->f () + q3->f () == 3 + && r1->g (0) + r2->g (0) + r3->g (0) == 6) + printf ("PASS\n"); + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.gb/sig15.C b/gcc/testsuite/g++.old-deja/g++.gb/sig15.C new file mode 100644 index 000000000000..f0ae52e9ea7a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.gb/sig15.C @@ -0,0 +1,35 @@ +// Special g++ Options: -fhandle-signatures +// GROUPS passed gb sigptr cast +// Test casting a signature pointer to a class pointer. + +extern "C" +{ + int printf (char *, ...); +} + +class C +{ +public: + char * f (void) { return "PA"; } + char * g (int) { return "SS"; } +}; + +signature S +{ + char * f (void); + char * g (int); +}; + +int main (void) +{ + C a; + S * p; + C * q; + + p = &a; + q = (C *) p; + + printf ("%s%s\n", q->f (), q->g (0)); + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.gb/sig16.C b/gcc/testsuite/g++.old-deja/g++.gb/sig16.C new file mode 100644 index 000000000000..35475e9f5047 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.gb/sig16.C @@ -0,0 +1,44 @@ +// Special g++ Options: -fhandle-signatures +// GROUPS passed gb sigptr cast +// Test casting a class pointer to an anonymous signature pointer. + +extern "C" +{ + int printf (char *, ...); +} + +class C +{ +public: + char * f (void) { return "PA"; } + char * g (int) { return "S"; } + char * h (void) { return "FAIL"; } +}; + +signature S +{ + char * f (void); + char * g (int); +}; + +signature T +{ + char * f (void); +}; + +C a; +signature { char * g (int); } * r1 = + (signature { char * h (void); char * g (int); } *) &a; + +int main (void) +{ + C a; + S * p = &a; + T * q = p; + signature { char * g (int); } * r2 = + (signature { char * h (void); char * g (int); } *) &a; + + printf ("%s%s%s\n", q->f (), r1->g (0), r2->g (0)); + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.gb/sig17.C b/gcc/testsuite/g++.old-deja/g++.gb/sig17.C new file mode 100644 index 000000000000..6d1d1d94df67 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.gb/sig17.C @@ -0,0 +1,54 @@ +// Special g++ Options: -fhandle-signatures +// GROUPS passed gb sigptr cast +// Test casting a class pointer through a chain of signature pointers. + +extern "C" +{ + int printf (char *, ...); +} + +class C +{ +public: + char * f (void) { return "PA"; } + char * g (int) { return "SS"; } +}; + +class D : public C +{ +public: + char * h (void) { return "FAIL"; } +}; + +class E : public C +{ +public: + int foo (int) { return 0; } +}; + +signature S +{ + char * f (void); + char * g (int); +}; + +signature T +{ + char * f (void); +}; + +int main (void) +{ + D a; + S * p; + T * q; + signature { char * g (int); } * r; + + p = &a; + q = (T*) (signature { char * f (void); int foo (int); } *) (E*) (S*) (C*) p; + r = (signature { char * h (void); char * g (int); } *) &a; + + printf ("%s%s\n", q->f (), r->g (0)); + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.gb/sig18.C b/gcc/testsuite/g++.old-deja/g++.gb/sig18.C new file mode 100644 index 000000000000..ba0ec8689cdb --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.gb/sig18.C @@ -0,0 +1,33 @@ +// Special g++ Options: -fhandle-signatures +// GROUPS passed gb sigptr assignment virtual +// Test assignment of object from virtual class to signature pointer. + +extern "C" +{ + int printf (char *, ...); +} + +class C +{ +public: + virtual char * f (void) { return "PA"; } + virtual char * g (int) { return "SS"; } +}; + +signature S +{ + char * f (void); + char * g (int); +}; + +int main (void) +{ + C a; + S * p; + + p = &a; + + printf ("%s%s\n", p->f (), p->g (0)); + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.gb/sig19.C b/gcc/testsuite/g++.old-deja/g++.gb/sig19.C new file mode 100644 index 000000000000..160a4a3bd49e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.gb/sig19.C @@ -0,0 +1,38 @@ +// Special g++ Options: -fhandle-signatures +// GROUPS passed gb sigptr initialization virtual +// Test initialization of signature pointer with object from abstract class. + +extern "C" +{ + int printf (char *, ...); +} + +class C +{ +public: + virtual char * f (void) = 0; + virtual char * g (int) = 0; +}; + +class D : public C +{ +public: + char * f (void) { return "PA"; } + char * g (int) { return "SS"; } +}; + +signature S +{ + char * f (void); + char * g (int); +}; + +int main (void) +{ + C * p = new D; + S * q = p; + + printf ("%s%s\n", q->f (), q->g (0)); + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.gb/sig20.C b/gcc/testsuite/g++.old-deja/g++.gb/sig20.C new file mode 100644 index 000000000000..a8228de74b99 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.gb/sig20.C @@ -0,0 +1,38 @@ +// Special g++ Options: -fhandle-signatures +// GROUPS passed gb sigptr initialization virtual +// Test initialization of signature pointer with object from virtual class. + +extern "C" +{ + int printf (char *, ...); +} + +class C +{ +public: + virtual char * f (void) { return "FA"; } + virtual char * g (int) { return "IL"; } +}; + +class D : public C +{ +public: + char * f (void) { return "PA"; } + char * g (int) { return "SS"; } +}; + +signature S +{ + char * f (void); + char * g (int); +}; + +int main (void) +{ + C * p = new D; + S * q = p; + + printf ("%s%s\n", q->f (), q->g (0)); + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.gb/sig21.C b/gcc/testsuite/g++.old-deja/g++.gb/sig21.C new file mode 100644 index 000000000000..faad45b6403d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.gb/sig21.C @@ -0,0 +1,56 @@ +// Special g++ Options: -fhandle-signatures +// GROUPS passed gb sigptr assignment virtual +// Test assignment of objects of different types to same signature pointer. + +extern "C" +{ + int printf (char *, ...); +} + +class C +{ +public: + virtual char * f (void) = 0; +}; + +class D : public C +{ +public: + char * f (void) { return "P"; } +}; + +class E +{ +public: + char * f (void) { return "AS"; } +}; + +class F : public C +{ +public: + char * f (void) { return "S"; } +}; + +signature S +{ + char * f (void); +}; + +int main (void) +{ + E a; + C * p = new D; + S * q; + + q = p; + printf ("%s", q->f ()); + + q = &a; + printf ("%s", q->f ()); + + p = new F; + q = p; + printf ("%s\n", q->f ()); + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.gb/sig22.C b/gcc/testsuite/g++.old-deja/g++.gb/sig22.C new file mode 100644 index 000000000000..25b0a1aa5d1b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.gb/sig22.C @@ -0,0 +1,59 @@ +// Special g++ Options: -fhandle-signatures +// GROUPS passed gb sigptr assignment initialization +// Test assignment to/init of sigptr that requires copying sigtable slots. + +extern "C" +{ + int printf (char *, ...); +} + +class C +{ +public: + int f (void) { return 1; } + int g (int) { return 2; } + int h (void) { return 666; } +}; + +signature S +{ + int f (void); + int g (int); + int h (void); +}; + +signature T +{ + int f (void); + int h (void); +}; + +signature U +{ + int h (void); + int g (int); +}; + +C a; +S * p = &a; +T * q1 = p; +U * r1 = p; + +int main (void) +{ + C a; + S * p = &a; + T * q2 = p; + U * r2 = p;; + T * q3; + U * r3; + + q3 = p; + r3 = p; + + if (q1->f () + q2->f () + q3->f () == 3 + && r1->g (0) + r2->g (0) + r3->g (0) == 6) + printf ("PASS\n"); + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.gb/sig23.C b/gcc/testsuite/g++.old-deja/g++.gb/sig23.C new file mode 100644 index 000000000000..767cfa31281c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.gb/sig23.C @@ -0,0 +1,53 @@ +// Special g++ Options: -fhandle-signatures +// GROUPS passed gb sigptr assignment local-signature +// Test assignment to signature pointer of local signature. + +extern "C" +{ + int printf (char *, ...); +} + +char * PA (void) +{ + class C + { + public: + char * f (void) { return "PA"; } + }; + + signature S + { + char * f (void); + }; + + C a; + S * p = &a; + + return p->f (); +} + +char * SS (void) +{ + class C + { + public: + char * f (void) { return "SS"; } + }; + + signature S + { + char * f (void); + }; + + C a; + S * p = &a; + + return p->f (); +} + +int main (void) +{ + printf ("%s%s\n", PA (), SS ()); + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.gb/sig24.C b/gcc/testsuite/g++.old-deja/g++.gb/sig24.C new file mode 100644 index 000000000000..2dca6f994ce3 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.gb/sig24.C @@ -0,0 +1,36 @@ +// Special g++ Options: -fhandle-signatures +// GROUPS passed gb sigptr opaque-type +// Test calling member functions taking/returning opaque type through sigptr. + +extern "C" +{ + int printf (char *, ...); +} + +signature S +{ + typedef t; + char * f (t); + t g (void); + t h (void); +}; + +class C +{ +public: + typedef char * t; + char * f (t text) { return text; } + t g (void) { return "PA"; } + t h (void) { return "SS"; } +}; + +int main (void) +{ + C a; + S * p = &a; + S::t w = p->h (); + + printf ("%s%s\n", p->f (p->g ()), p->f (w)); + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.gb/sig25.C b/gcc/testsuite/g++.old-deja/g++.gb/sig25.C new file mode 100644 index 000000000000..d00ef57ca5e1 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.gb/sig25.C @@ -0,0 +1,33 @@ +// Special g++ Options: -fhandle-signatures +// GROUPS passed gb sigptr default-implementation +// Test calling default implementation through signature pointer. + +extern "C" +{ + int printf (char *, ...); +} + +class C { }; + +class D +{ +public: + char * f (void) { return "SS"; } +}; + +signature S +{ + char * f (void) { return "PA"; } +}; + +int main (void) +{ + C a; + D b; + S * p = &a; + S * q = &b; + + printf ("%s%s\n", p->f (), q->f ()); + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.gb/sig26.C b/gcc/testsuite/g++.old-deja/g++.gb/sig26.C new file mode 100644 index 000000000000..399737b4a37d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.gb/sig26.C @@ -0,0 +1,34 @@ +// Special g++ Options: -fhandle-signatures +// GROUPS passed gb sigptr default-implementation +// Test calling default implementation through signature pointer. + +extern "C" +{ + int printf (char *, ...); +} + +class C { }; + +class D +{ +public: + char * f (void) { return "SS"; } +}; + +signature S +{ + char * f (void) { return "PA"; } + char * g (void) { return f (); } +}; + +int main (void) +{ + C a; + D b; + S * p = &a; + S * q = &b; + + printf ("%s%s\n", p->g (), q->g ()); + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.gb/sig27.C b/gcc/testsuite/g++.old-deja/g++.gb/sig27.C new file mode 100644 index 000000000000..7b9e7d296170 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.gb/sig27.C @@ -0,0 +1,38 @@ +// Special g++ Options: -fhandle-signatures +// GROUPS passed gb sigptr multiple-inheritance +// Test class defined by multiple inheritance as implementation of signature. + +extern "C" +{ + int printf (char *, ...); +} + +class C +{ +public: + char * f (void) { return "PA"; } +}; + +class D +{ +public: + char * g (void) { return "SS"; } +}; + +class E : public C, public D { }; + +signature S +{ + char * f (void); + char * g (void); +}; + +int main (void) +{ + E a; + S * p = &a; + + printf ("%s%s\n", p->f (), p->g ()); + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.gb/sig28.C b/gcc/testsuite/g++.old-deja/g++.gb/sig28.C new file mode 100644 index 000000000000..4edff680ce85 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.gb/sig28.C @@ -0,0 +1,46 @@ +// Special g++ Options: -fhandle-signatures +// GROUPS passed gb sigptr multiple-inheritance +// Test correct adjustment of `this' pointer in case of multiple inheritance. + +extern "C" +{ + int printf (char *, ...); +} + +class C +{ + char * text; +public: + C () { text = "PA"; } + char * f (void) { return text; } +}; + +class D +{ + char * text; +public: + D () { text = "SS"; } + char * g (void) { return text; } +}; + +class E : public C, public D +{ +public: + E () : C (), D () { } +}; + +signature S +{ + char * f (void); + char * g (void); +}; + +int main (void) +{ + E a; + S * p = &a; + + printf ("%s%s\n", p->f (), p->g ()); + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.gb/sig29.C b/gcc/testsuite/g++.old-deja/g++.gb/sig29.C new file mode 100644 index 000000000000..e5c5e3926436 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.gb/sig29.C @@ -0,0 +1,46 @@ +// Special g++ Options: -fhandle-signatures +// GROUPS passed gb sigptr multiple-inheritance +// Test calling virtual function from MI class through signature pointer. + +extern "C" +{ + int printf (char *, ...); +} + +class C +{ + char * text; +public: + C () { text = "PA"; } + virtual char * f (void) { return text; } +}; + +class D +{ + char * text; +public: + D () { text = "SS"; } + virtual char * g (void) { return text; } +}; + +class E : public C, public D +{ +public: + E () : C (), D () { } +}; + +signature S +{ + char * f (void); + char * g (void); +}; + +int main (void) +{ + E a; + S * p = &a; + + printf ("%s%s\n", p->f (), p->g ()); + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.gb/sig30.C b/gcc/testsuite/g++.old-deja/g++.gb/sig30.C new file mode 100644 index 000000000000..3e93e114b867 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.gb/sig30.C @@ -0,0 +1,48 @@ +// Special g++ Options: -fhandle-signatures +// GROUPS passed gb sigptr multiple-inheritance +// Test calling overwritten virtual functions through signature pointer. + +extern "C" +{ + int printf (char *, ...); +} + +class C +{ +public: + char * text1; + C () { text1 = "PA"; } + virtual char * f (void) = 0; +}; + +class D +{ +public: + char * text2; + D () { text2 = "SS"; } + virtual char * g (void) = 0; +}; + +class E : public C, public D +{ +public: + E () : C (), D () { }; + char * f (void) { return text1; } + char * g (void) { return text2; } +}; + +signature S +{ + char * f (void); + char * g (void); +}; + +int main (void) +{ + E a; + S * p = &a; + + printf ("%s%s\n", p->f (), p->g ()); + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.gb/sig31.C b/gcc/testsuite/g++.old-deja/g++.gb/sig31.C new file mode 100644 index 000000000000..90fa9e9d47a8 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.gb/sig31.C @@ -0,0 +1,52 @@ +// Special g++ Options: -fhandle-signatures +// GROUPS passed gb sigptr assignment sigsigtable +// Test use of multiple signature-signature tables for same signature pair. + +extern "C" +{ + int printf (char *, ...); +} + +class C +{ +public: + virtual int f (void) { return 1; } + int g (int) { return 2; } +}; + +class D : public C +{ +public: + int f (void) { return 3; } + int g (int) { return 4; } +}; + +signature S +{ + int f (void); + int g (int); +}; + +signature T +{ + int g (int); + int f (void); +}; + +int main (void) +{ + S * p = new C; + T * q = p; + T * r; + + p = new D; + r = p; + + if (q->f () == 1 && q->g (0) == 2 + && r->f () == 3 && r->g (0) == 4) + printf ("PASS\n"); + else + printf ("FAIL\n"); + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/2371.C b/gcc/testsuite/g++.old-deja/g++.jason/2371.C new file mode 100644 index 000000000000..08e72f084aa0 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/2371.C @@ -0,0 +1,583 @@ +// GROUPS passed templates nested-classes +// Special g++ Options: +// +// The SetLS template test +// +// Wendell Baker, Berkeley CAD Group, 1993 (wbaker@ic.Berkeley.EDU) +// + + +#pragma implementation "ListS.h" +#pragma implementation "SetLS.h" + +#include <stdlib.h> +#include <iostream.h> +# 1 "../../templates/SetLS.h" 1 +// -*- C++ -*- + + + +// +// A Set Template - implemented with an ListS +// +// Wendell Baker, Berkeley CAD Group, 1993 (wbaker@ic.Berkeley.EDU) +// + + + + + +#pragma interface + + +// $Source: /egcs/carton/cvsfiles/egcs/gcc/testsuite/g++.old-deja/g++.jason/2371.C,v $ +// $Author: law $ +// $Revision: 1.1 $ +// $Date: 1997/08/19 07:35:23 $ + + + +#define XTRUE true +#define XFALSE false + +# 37 "../../templates/SetLS.h" + + +# 1 "../../templates/ListS.h" 1 +// -*- C++ -*- + + + +// +// A List Template - providing a singly linked capability +// +// Wendell Baker, Berkeley CAD Group, 1993 (wbaker@ic.Berkeley.EDU) +// + + + + + +#pragma interface + + +// $Source: /egcs/carton/cvsfiles/egcs/gcc/testsuite/g++.old-deja/g++.jason/2371.C,v $ +// $Author: law $ +// $Revision: 1.1 $ +// $Date: 1997/08/19 07:35:23 $ + + + + +# 1 "/projects/gnu-cygnus/gnu-cygnus-14/mips/lib/gcc-lib/decstation/cygnus-reno-1/g++-include/bool.h" 1 3 +// Defining XTRUE and XFALSE is usually a Bad Idea, +// because you will probably be inconsistent with anyone +// else who had the same clever idea. +// Therefore: DON'T USE THIS FILE. + + + + + + + + + +# 26 "../../templates/ListS.h" 2 + +# 37 "../../templates/ListS.h" + + + +// g++ reno-1 is not yet capable of creating templates with nested +// classes which instantiate the template arguments. +template<class T> +struct ListS_link { + T item; + ListS_link<T> *next; + + ListS_link(const T& i, ListS_link<T> *n = 0): item(i), next(n) + { } +}; + + +// +// For now, errors are raised by ::abort() because exceptions +// are not well implemented in cxx or at all in CC 3.0.1 +// +template<class T> +class ListS { +public: + ListS(); + ListS(const ListS<T>&); + ~ListS(); + + void operator=(const ListS<T>&); + + unsigned length() const + { return count; } + + void prepend(const T& item); + void append(const T& item); + void clear(); + + const T& head() const + { ensure_1(); + return head_link->item; } + T& head() + { ensure_1(); + return head_link->item; } + void head(T& fill) const + { ensure_1(); + fill = head_link->item; } + void remove_head() + { remove_head_filling(0); } + void remove_head(T& fill) + { remove_head_filling(&fill); } + + const T& tail() const + { ensure_1(); + return tail_link->item; } + T& tail() + { ensure_1(); + return tail_link->item; } + void tail(T& fill) const + { ensure_1(); + fill = tail_link->item; } + + class Vix { + public: + Vix(): owner(0), index(0) + { } + + // These are friend functions so that v == x is the same as x == v + friend int operator==(void *v, const Vix& x) + { return v == x.index; } + friend int operator==(const Vix& x, void *v) + { return v == x.index; } + friend int operator!=(void *v, const Vix& x) + { return v != x.index; } + friend int operator!=(const Vix& x, void *v) + { return v != x.index; } + friend int operator==(const Vix& x1, const Vix& x2) + { return x1.owner == x2.owner && x1.index == x2.index; } + friend int operator!=(const Vix& x1, const Vix& x2) + { return x1.owner != x2.owner || x1.index != x2.index; } + private: + friend class ListS<T>; + + + Vix(const ListS<T> *o, ListS_link<T> *i): owner(o), index(i) + { } + + + + + + const ListS<T> *owner; + + ListS_link<T> *index; + + + + }; + + Vix first() const + { return Vix(this, head_link); } + void next(Vix& x) const + { check(x); + if (x.index != 0) + x.index = x.index->next; } + T& operator()(const Vix& x) + { check(x); + return x.index->item; } + const T& operator()(const Vix& x) const + { check(x); + return x.index->item; } +protected: +# 154 "../../templates/ListS.h" + + + unsigned count; + + ListS_link<T> *head_link; // 0 for a zero-length list + ListS_link<T> *tail_link; // 0 for a zero-length list + + + + + +private: + // fill may be 0 (then don't fill) + void remove_head_filling(T *fill); + + void ensure_1() const + { if (0 == head_link) + ::abort(); } + void check(const Vix& x) const + { if (this != x.owner) + ::abort(); + if (0 == x.index) + ::abort(); } +}; + +template<class T> +ListS<T>::ListS(): +count(0), +head_link(0), +tail_link(0) +{ } + +template<class T> +ListS<T>::ListS(const ListS<T>& other): +count(0), +head_link(0), +tail_link(0) +{ + for (Vix x=other.first(); 0 != x; other.next(x)) + append(other(x)); +} + +template<class T> +ListS<T>::~ListS() +{ + clear(); +} + +template<class T> +void +ListS<T>::operator=(const ListS<T>& other) +{ + clear(); + for (Vix x=other.first(); 0 != x; other.next(x)) + append(other(x)); +} + +template<class T> +void +ListS<T>::prepend(const T& item) +{ + + head_link = new ListS_link<T>(item, head_link); + + + + if (0 == tail_link) + tail_link = head_link; + count++; +} + +template<class T> +void +ListS<T>::append(const T& item) +{ + + ListS_link<T> *new_link = new ListS_link<T>(item); + + + + if (0 == tail_link) { + head_link = new_link; + tail_link = new_link; + } else { + tail_link->next = new_link; + tail_link = tail_link->next; + } + count++; +} + +template<class T> +void +ListS<T>::clear() +{ + + ListS_link<T> *next, *l; + + + + for (l=head_link; 0 != l; l=next) { + next = l->next; + delete l; + } + + count = 0; + head_link = 0; + tail_link = 0; +} + +template<class T> +void +ListS<T>::remove_head_filling(T* fill) +// fill may be 0 in which case don't assign into it +{ + ensure_1(); + + ListS_link<T> *ohead = head_link; + + + + if (0 != fill) + *fill = ohead->item; + head_link = ohead->next; + if (0 == head_link) + tail_link = 0; + count--; + delete ohead; +} + + +# 39 "../../templates/SetLS.h" 2 + + +# 62 "../../templates/SetLS.h" + +template<class T> +class SetLS { +public: + SetLS(); + + void add(const T& item); + // There is no remove(const T& item) for this set + bool contains(const T& item) const; + + unsigned length() const + { return list.length(); } + + void clear() + { list.clear(); } + + class Vix { + public: + Vix(): owner(0), vix() + { } + + // These are friend functions so that v == x is the same as x == v + friend int operator==(void *v, const Vix& x) + { return v == x.vix; } + friend int operator==(const Vix& x, void *v) + { return v == x.vix; } + friend int operator!=(void *v, const Vix& x) + { return v != x.vix; } + friend int operator!=(const Vix& x, void *v) + { return v != x.vix; } + friend int operator==(const Vix& x1, const Vix& x2) + { return x1.owner == x2.owner && x1.vix == x2.vix; } + friend int operator!=(const Vix& x1, const Vix& x2) + { return x1.owner != x2.owner || x1.vix != x2.vix; } + private: + friend class SetLS<T>; + + Vix(const SetLS<T> *o, const ListS<T>::Vix& x): owner(o), vix(x) + { } + + const SetLS<T> *owner; + ListS<T>::Vix vix; + }; + friend class Vix; + + Vix first() const + { return Vix(this, list.first()); } + void next(Vix& x) const + { check(x); + list.next(x.vix); } + const T& operator()(const Vix& x) const + { check(x); + return list(x.vix); } + // There is item no remove(const Vix&) for this set +protected: + ListS<T> list; + +private: + void check(const Vix& x) const + { if (this != x.owner) + ::abort(); } +}; + + +template<class T> +SetLS<T>::SetLS(): + + + +list() + +{ } + +template<class T> +void +SetLS<T>::add(const T& item) +{ + if ( ! contains(item) ) { + + + + list.append(item); + + } +} + +template<class T> +bool +SetLS<T>::contains(const T& item) const +{ + for (Vix x=first(); 0 != x; next(x)) { + if (operator()(x) == item) + return XTRUE; + } + return XFALSE; +} + + +# 14 "SetLS.cc" 2 + + +// $Source: /egcs/carton/cvsfiles/egcs/gcc/testsuite/g++.old-deja/g++.jason/2371.C,v $ +// $Author: law $ +// $Revision: 1.1 $ +// $Date: 1997/08/19 07:35:23 $ + +# 1 "/projects/gnu-cygnus/gnu-cygnus-14/mips/lib/gcc-lib/decstation/cygnus-reno-1/g++-include/iostream.h" 1 3 +// This is part of the iostream library, providing -*- C++ -*- input/output. +// Copyright (C) 1991 Per Bothner. +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Library General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Library General Public License for more details. +// +// You should have received a copy of the GNU Library General Public +// License along with this library; if not, write to the Free +// Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +# 211 "/projects/gnu-cygnus/gnu-cygnus-14/mips/lib/gcc-lib/decstation/cygnus-reno-1/g++-include/iostream.h" 3 + +# 21 "SetLS.cc" 2 + + +// In (most versions of) g++ 2.X, this use of typedefs has the effect +// of causing the instantiation of the templates, thereby testing the +// templates + +class test { +public: + test(): value(0) + { } + test(int v): value(v) + { } + + void print(ostream& out) const + { out << value; } + + friend int operator==(const test& a, const test& b); +private: + int value; +}; + +int +operator==(const test& a, const test& b) +{ + return a.value == b.value; +} + +ostream& +operator<<(ostream& o, const test& t) +{ + t.print(o); + return o; +} + +typedef SetLS<test> SLS; + +static ostream& +operator<<(ostream& o, const SLS& s) +{ + o << "set of " << s.length() << " = {"; + + bool first; + SetLS<test>::Vix x; + for (first=XTRUE, x=s.first(); 0 != x; s.next(x), first=XFALSE) { + if ( ! first ) + o << ','; + o << ' '; + s(x).print(o); + } + o << '}'; + + return o; +} + +SLS gsls; +const SLS gcsls; + +foo() +{ + const unsigned SIZE = 20; + + // + // SetLS() + // SetLS(const SetLS<T>&) + // + SLS sls; + { + // Fill sls with some interesting values + for (unsigned i=0; i<SIZE; i++) { + test t = i; + sls.add(t); + } + } + + const SLS csls(sls); + + // + // void operator=(const SetLS<T>&); + // + sls = csls; + + // + // bool contains(const T& item) const + // + for (unsigned i=0; i<SIZE; i++) { + test t = i; + + int contains = sls.contains(t); + } + + // + // void clear() + // + sls.clear(); + if (sls.length() != 0) + ::abort(); + + sls = csls; + + // + // Vix first() const + // void next(Vix& x) const + // T& operator()(const Vix& x) + // const T& operator()(const Vix& x) const + // + SetLS<test>::Vix cx; + for (cx=csls.first(); 0 != cx; sls.next(cx)) { + if ( ! sls.contains(csls(cx)) ) + ::abort(); + } + + cout << "gsls:\t" << gsls << '\n'; + cout << "gcsls:\t" << gcsls << '\n'; + cout << "sls:\t" << sls << '\n'; + cout << "csls:\t" << csls << '\n'; +} + +// Dummy function so it'll run +main() +{ + cout << "PASS" << endl; +} + +template class ListS<test>; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/3523.C b/gcc/testsuite/g++.old-deja/g++.jason/3523.C new file mode 100644 index 000000000000..f47bd7b5bf38 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/3523.C @@ -0,0 +1,40 @@ +// Build don't link: +// GROUPS passed assignment +class ccUnwind +{ +public: + virtual ~ccUnwind (); // comment out virtual, and void diag changes +}; + +template<class T> +class ccHandle : public ccUnwind // similarly comment out inheritance +{ +public: + ccHandle& operator = (const ccHandle& h); +}; + +class cc_Image; + +class ccImage : public ccHandle<cc_Image> +{ +public: +// reversing the order of the next two lines changes the diagnostic +// printed about the def of ccDisplay::image + ccImage (const ccImage &); + ccImage (const cc_Image &); +}; + +class ccDisplay +{ +public: + ccImage img; +//ccImage image ( ccImage i) {img = i; return img;} +// above line compiles + ccImage image ( ccImage i) { return img = i;} /* this gets void* error */ +}; + + + +// vd.C: In method `class ccImage ccDisplay::image (class ccImage)': +// vd.C:31: bad argument 1 for function `ccImage::ccImage (const class cc_Image&)' (type was void *) +// vd.C:31: in base initialization for class `ccImage' diff --git a/gcc/testsuite/g++.old-deja/g++.jason/access1.C b/gcc/testsuite/g++.old-deja/g++.jason/access1.C new file mode 100644 index 000000000000..fff77f25749f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/access1.C @@ -0,0 +1,17 @@ +// Bug: access declarations are broken. +// Build don't link: + +class A { +public: + void foo (); +}; + +class B: private A { +public: + A::foo; +}; + +void foo() { + B b; + b.foo (); // gets bogus error - +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/access10.C b/gcc/testsuite/g++.old-deja/g++.jason/access10.C new file mode 100644 index 000000000000..6db610c50105 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/access10.C @@ -0,0 +1,14 @@ +// PRMS Id: 4839 +// Bug: The initializer of a static member of a class has the same acess +// rights as a member function. g++ doesn't realize that. +// Build don't link: + +class X +{ + X (int); + static X foo; +public: + void dummy(); +}; + +X X::foo = 9; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/access11.C b/gcc/testsuite/g++.old-deja/g++.jason/access11.C new file mode 100644 index 000000000000..31a89b2ede8b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/access11.C @@ -0,0 +1,12 @@ +// PRMS Id: 4900 +// Bug: g++ doesn't apply access control uniformly to type conversion operators +// Build don't link: + +struct A { +protected: + operator int * () const; +}; + +struct B : public A { + int * foo () { return A::operator int *(); } +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/access12.C b/gcc/testsuite/g++.old-deja/g++.jason/access12.C new file mode 100644 index 000000000000..71e336180e64 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/access12.C @@ -0,0 +1,16 @@ +// PRMS Id: 4694 +// Bug: g++ doesn't realize that A::i refers to a member of `this' in B(). +// Build don't link: + +class A { +protected: + int i; +}; + +struct B : public A { + B () { A::i = 0; } +}; + +struct C : public B { + C () { B::i = 0; } +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/access13.C b/gcc/testsuite/g++.old-deja/g++.jason/access13.C new file mode 100644 index 000000000000..c12dd81dc87f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/access13.C @@ -0,0 +1,15 @@ +// PRMS Id: 4955 +// Build don't link: + +struct A { + protected: + int i; + void f (); +}; + +struct B: public A { + void g () { + this->A::i = 1; // gets bogus error - access control failure + this->A::f(); // gets bogus error - access control failure + } +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/access14.C b/gcc/testsuite/g++.old-deja/g++.jason/access14.C new file mode 100644 index 000000000000..f181906ec978 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/access14.C @@ -0,0 +1,10 @@ +// Build don't link: + +template <class T> struct A { T t; }; + +template <class T> class B: private T { + public: + T::t; // gets bogus error - doesn't recognize access decl +}; + +template class B<A<int> >; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/access15.C b/gcc/testsuite/g++.old-deja/g++.jason/access15.C new file mode 100644 index 000000000000..4380998521f3 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/access15.C @@ -0,0 +1,18 @@ +// Bug: g++ complains about Z being a private base when trying to +// initialize B::foo. +// Build don't link: + +struct Z { + Z(); + Z(int); +}; + +struct A : private Z { }; +struct B : public A +{ + Z foo; + B(); + B(const B&); +}; + +B::B() : foo(1) { } // gets bogus error diff --git a/gcc/testsuite/g++.old-deja/g++.jason/access16.C b/gcc/testsuite/g++.old-deja/g++.jason/access16.C new file mode 100644 index 000000000000..16a132a5b9f1 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/access16.C @@ -0,0 +1,20 @@ +// Bug: g++ uses the same binfo for the a subobject of c and the a subobject +// of b, so basetype_paths get bashed improperly. +// Build don't link: + +class a { +protected: + virtual void foo() { } // gets bogus error +}; + +class b : public virtual a {}; + +class c : public b { +public: + void bar() { b::foo(); } // gets bogus error +}; + +main() { + c test; + test.bar(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/access17.C b/gcc/testsuite/g++.old-deja/g++.jason/access17.C new file mode 100644 index 000000000000..9ed7d30d2a5d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/access17.C @@ -0,0 +1,24 @@ +// Make sure definitions of static members have the right access. +// Build don't link: + +struct A { +protected: + int i; + int f (); // ERROR - +}; + +struct B: public A { + static int A::*p; + static int (A::*fp)(); +}; + +int A::* B::p = &A::i; +int (A::* B::fp)() = &A::f; + +struct C { + static int A::*p; + static int (A::*fp)(); +}; + +int A::* C::p = &A::i; // ERROR - +int (A::* C::fp)() = &A::f; // ERROR - diff --git a/gcc/testsuite/g++.old-deja/g++.jason/access18.C b/gcc/testsuite/g++.old-deja/g++.jason/access18.C new file mode 100644 index 000000000000..11b7e10ed47d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/access18.C @@ -0,0 +1,23 @@ +// PRMS Id: 5073 +// Bug: g++ doesn't catch access violations in base initializers. +// Special g++ Options: -w + +int r = 0; +class A { + private: + A() { r = 1; } // ERROR - + ~A() {} // ERROR - +}; + +class B : public A { + public: + B(): A() {} // ERROR - + B(const B&) {} // ERROR - + ~B() { } // ERROR - private dtor +}; + +main() +{ + B b; + return r; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/access2.C b/gcc/testsuite/g++.old-deja/g++.jason/access2.C new file mode 100644 index 000000000000..cacfbe1c6a38 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/access2.C @@ -0,0 +1,11 @@ +// Bug: g++ doesn't deal with friends also being derived classes. +// Build don't link: + +class A { + int i; + friend class B; +}; + +class B : public A { + void f () { i = 1; } +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/access20.C b/gcc/testsuite/g++.old-deja/g++.jason/access20.C new file mode 100644 index 000000000000..96093dc01903 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/access20.C @@ -0,0 +1,39 @@ +// PRMS Id: 6662 +// Bug: we crash trying to check the access on anglesSinesCosines. +// Build don't link: + +#define Double double + +class GCTransform +{ + protected: + struct angle + { + Double phi1 ; + Double phi2 ; + } ; + + struct sineAndCosine + { + Double cosine1 ; + Double cosine2 ; + Double sine1 ; + Double sine2 ; + } ; + + union anglesSinesCosines + { + struct angle a ; + struct sineAndCosine siCo ; + } ; +}; + +class GCTransTransmit : public GCTransform +{ + protected: + + struct GCTransTransmitDataTemp + { + union anglesSinesCosines t ; // causes abort + } ; +} ; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/access21.C b/gcc/testsuite/g++.old-deja/g++.jason/access21.C new file mode 100644 index 000000000000..340ed61fe975 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/access21.C @@ -0,0 +1,22 @@ +// PRMS Id: 6877 +// Build don't link: + +typedef __SIZE_TYPE__ size_t; +class aa { +public: + aa(); + ~aa(); +private: + int iaa; + void operator delete(void*, size_t); +}; + +class bb { +public: + aa caa; +}; // gets bogus error - calling private delete + +void +f(){ + bb abb; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/access22.C b/gcc/testsuite/g++.old-deja/g++.jason/access22.C new file mode 100644 index 000000000000..736a053a591a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/access22.C @@ -0,0 +1,21 @@ +// PRMS Id: 8518 +// Bug: Call to foo is not checked for accessibility + +class A +{ + private: + static void foo() {} // ERROR - + public: + void goo() {} +}; + +struct B : public A +{ + void func() { foo(); } // ERROR - +}; + +main() +{ + B b; + b.func(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/access23.C b/gcc/testsuite/g++.old-deja/g++.jason/access23.C new file mode 100644 index 000000000000..57331687b7a2 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/access23.C @@ -0,0 +1,79 @@ +// PRMS Id: 9127 +// Bug: members of anonymous unions are not access-controlled. + +#include <stdio.h> + +struct Foo { +public: + union { + long A; + void *pX; + }; + union X { + long A; + void *pX; + } PUB ; + int PUB_A; +protected: + union { + long B; + void *pY; + } ; + union Y { + long B; + void *pY; + } PRT; + int PRT_A; +private: + union { + long C; + void *pZ; + }; + union Z { + long C; + void *pZ; + } PRV; + int PRV_A; +}; + +struct Bar : public Foo { +public: + DoSomething() { + PUB_A = 0; + Foo::A = 0; + printf("%x\n",pX); + Foo::PUB.A = 0; + printf("%x\n",PUB.pX); + B = 0; + printf("%x\n",Foo::pY); + PRT_A = 0; + PRT.B = 0; + printf("%x\n",Foo::PRT.pY); + PRV_A = 0; // ERROR - + Foo::C = 0; // ERROR - + printf("%x\n",pZ); // ERROR - + Foo::PRV.C = 0; // ERROR - + printf("%x\n",PRV.pZ); // ERROR - + } +}; + +main() +{ + Foo a; + + a.PUB_A = 0; + a.A = 0; + printf("%x\n",a.pX); + a.PRT_A = 0; // ERROR - + a.B = 0; // ERROR - + printf("%x\n",a.pY); // ERROR - + a.PRV_A = 0; // ERROR - + a.C = 0; // ERROR - + printf("%x\n",a.pZ); // ERROR - + a.PUB.A = 0; + printf("%x\n",a.PUB.pX); + a.PRT.B = 0; // ERROR - + printf("%x\n",a.PRT.pY); // ERROR - + a.PRV.C = 0; // ERROR - + printf("%x\n",a.PRV.pZ); // ERROR - +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/access24.C b/gcc/testsuite/g++.old-deja/g++.jason/access24.C new file mode 100644 index 000000000000..7c423598723a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/access24.C @@ -0,0 +1,11 @@ +// Bug: forward reference to friend doesn't work in template. +// Build don't link: + +template <class T> class A { + static int i; + friend struct B; +}; + +struct B { + void f () { A<int>::i = 0; } +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/access3.C b/gcc/testsuite/g++.old-deja/g++.jason/access3.C new file mode 100644 index 000000000000..fae6c9323e1b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/access3.C @@ -0,0 +1,12 @@ +// Simple testcase for access control. +// Build don't link: + +class A { + protected: + void f (); +}; + +class B : public A { + public: + void f () { A::f(); } +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/access4.C b/gcc/testsuite/g++.old-deja/g++.jason/access4.C new file mode 100644 index 000000000000..51f5fb10f8e5 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/access4.C @@ -0,0 +1,14 @@ +// Simple testcase for access control. +// Build don't link: + +class A { +protected: + static int i; +}; + +class B: public A { }; + +class C: public B { +public: + void g () { B b; b.i; } +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/access5.C b/gcc/testsuite/g++.old-deja/g++.jason/access5.C new file mode 100644 index 000000000000..5eec43d936ea --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/access5.C @@ -0,0 +1,12 @@ +// Simple testcase for access control. +// Build don't link: + +class A { + protected: + void f (); +}; + +class B : public A { }; +class C : public B { + void f () { B::f(); } +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/access6.C b/gcc/testsuite/g++.old-deja/g++.jason/access6.C new file mode 100644 index 000000000000..24676d4050b3 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/access6.C @@ -0,0 +1,12 @@ +// Simple testcase for access control. +// Build don't link: + +class A { + public: + void f (); +}; + +class B: protected A { }; +class C: protected B { + void g() { f (); } +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/access7.C b/gcc/testsuite/g++.old-deja/g++.jason/access7.C new file mode 100644 index 000000000000..708fa0fb626b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/access7.C @@ -0,0 +1,13 @@ +// Simple testcase for access control. +// Build don't link: + +class A { + protected: + static void f (); +}; + +class B: public A {}; +class C: public A {}; +class D: public C, public B { + void g () { A::f(); } // gets bogus error - wrongly ambiguous static member call, XFAIL *-*-* +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/access8.C b/gcc/testsuite/g++.old-deja/g++.jason/access8.C new file mode 100644 index 000000000000..c8addcd73a18 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/access8.C @@ -0,0 +1,29 @@ +// From: smidt@dd.chalmers.se (Peter Smidt) +// Date: 25 Jan 1994 23:41:33 -0500 +// Bug: g++ forgets access decls after the definition. +// Build don't link: + +class inh { + int a; +protected: + void myf(int); +}; + +class mel : private inh { +protected: + int t; + inh::myf; +}; + +class top_t : protected mel { +public: + void myf(int); +}; + +void inh::myf(int i) { + a = i; +} + +void top_t::myf(int i) { + inh::myf(i); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/access9.C b/gcc/testsuite/g++.old-deja/g++.jason/access9.C new file mode 100644 index 000000000000..f9c2797d72b8 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/access9.C @@ -0,0 +1,9 @@ +// Bug: g++ doesn't allow const objects to be constructed. +// Build don't link: + +struct B { B(); }; + +const B foo() +{ + return B(); // gets bogus error - constructing const +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/aggregate.C b/gcc/testsuite/g++.old-deja/g++.jason/aggregate.C new file mode 100644 index 000000000000..b451b23ef7cb --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/aggregate.C @@ -0,0 +1,13 @@ +struct A { int i; }; + +main() +{ + A a1 = { 42 }; + A a2 (a1); + A a3 = { 137 }; + a1 = a3; + + if (a1.i == 137 && a2.i == 42 && a3.i == 137) + return 0; + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/ambig1.C b/gcc/testsuite/g++.old-deja/g++.jason/ambig1.C new file mode 100644 index 000000000000..4551dc7d6e45 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/ambig1.C @@ -0,0 +1,6 @@ +// Testcase for ambiguity between functional cast and abstract declarator. +// This ambiguity accounts for 6 of the r/r conflicts. +// Special g++ Options: -pedantic-errors + +int i = sizeof (int ()); // ERROR - sizeof applied to fn type +int j = sizeof (int () + 1); diff --git a/gcc/testsuite/g++.old-deja/g++.jason/ambig2.C b/gcc/testsuite/g++.old-deja/g++.jason/ambig2.C new file mode 100644 index 000000000000..c6da7528bd36 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/ambig2.C @@ -0,0 +1,11 @@ +// Testcase for ambiguity between cast and parmlist. +// This ambiguity accounts for 1 of the r/r conflicts. +// Do not compile with -pedantic so that the compiler will accept taking +// the sizeof a function type. +// Special g++ Options: -Wno-pointer-arith +// Build don't link: + +void f(){ + (void)sizeof(int((int)1.2)); + (void)sizeof(int((int))); // gets bogus error - +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/ambig3.C b/gcc/testsuite/g++.old-deja/g++.jason/ambig3.C new file mode 100644 index 000000000000..3f01660bf988 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/ambig3.C @@ -0,0 +1,16 @@ +// Testcase for ambiguity between function and variable declaration (8.2). +// Build don't link: + +struct A { + A (int, int); + int k; +}; + +void f () +{ + int i[2], j; + A a (int (i[1]), j); // gets bogus error - late parsing XFAIL *-*-* + A b (int (i[1]), int j); // function + a.k = 0; // gets bogus error - late parsing XFAIL *-*-* + b (i, j); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/anon.C b/gcc/testsuite/g++.old-deja/g++.jason/anon.C new file mode 100644 index 000000000000..63d17a8cb2d6 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/anon.C @@ -0,0 +1,18 @@ +// Bug: g++ has trouble copying anonymous structs. + +typedef struct { int i; } foo; +struct A : public foo { + struct { int i; } x; +}; + +int main () +{ + A a; + a.i = 5; + a.x.i = 42; + A b (a); + a = b; + if (a.i != 5 || a.x.i != 42) + return 1; + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/anon2.C b/gcc/testsuite/g++.old-deja/g++.jason/anon2.C new file mode 100644 index 000000000000..55d68988e5cc --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/anon2.C @@ -0,0 +1,7 @@ +// g++ should not complain about anonymous bitfields. +// Build don't link: + +struct A +{ + int : 2; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/anon3.C b/gcc/testsuite/g++.old-deja/g++.jason/anon3.C new file mode 100644 index 000000000000..b3f05f8ad14c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/anon3.C @@ -0,0 +1,25 @@ +// Bug: g++ dies. +// Build don't link: + +class cl { +public: + cl(); + void set(void *, char *, int); +private: + union { + float vf; + struct ff { + void *ptr; + char *name; + int sz; + } *vff; + }; +}; + +void cl::set(void *p, char *n, int sz) +{ + vff = new ff; // This procude an internal compiler error. + vff->ptr = p; + vff->name = n; + vff->sz = sz; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/anon4.C b/gcc/testsuite/g++.old-deja/g++.jason/anon4.C new file mode 100644 index 000000000000..de0b40e2aec6 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/anon4.C @@ -0,0 +1,14 @@ +// PRMS Id: 5371 +// Bug: g++ screws up the alignment of buff and dies. +// Build don't link: +// Special g++ Options: -O + +main() +{ + union { + double a; + char buff[sizeof(double)]; + }; + + void *p = buff; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/binding.C b/gcc/testsuite/g++.old-deja/g++.jason/binding.C new file mode 100644 index 000000000000..0a013abd73ee --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/binding.C @@ -0,0 +1,11 @@ +// Bug: g++ only looks in the current temporary binding level for a name. + +struct T { ~T(); }; + +main() +{ + foo: + T t; // ERROR - redeclared + bar: + T t; // ERROR - redeclaration +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/binding2.C b/gcc/testsuite/g++.old-deja/g++.jason/binding2.C new file mode 100644 index 000000000000..e56a0544b472 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/binding2.C @@ -0,0 +1,15 @@ +// Bug: g++ screws up binding levels in a switch statement with cleanups. +// Build don't link: + +struct A { + ~A() { } +}; + +int f (int i) +{ + switch (i) { + default: + A a; + } + return 1; +} // causes compiler segfault diff --git a/gcc/testsuite/g++.old-deja/g++.jason/binding3.C b/gcc/testsuite/g++.old-deja/g++.jason/binding3.C new file mode 100644 index 000000000000..3cd358fb7af7 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/binding3.C @@ -0,0 +1,20 @@ +// Bug: g++ fails to clear out the IDENTIFIER_CLASS_VALUEs of various names +// after a class definition. +// Build don't link: + +struct A { + typedef double T; + virtual T f () = 0; +}; + +class B { + B (const B&); + void operator=(const B&); +public: + B (); + typedef void * T; +}; + +struct C : public A { + T f (); // gets bogus error +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/bool.C b/gcc/testsuite/g++.old-deja/g++.jason/bool.C new file mode 100644 index 000000000000..e446f12fab65 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/bool.C @@ -0,0 +1,46 @@ +// Testcase for uses of bool. +// Build don't link: + +int i,j,k; + +/* Check that types of certain expressions are bool. */ +void f () +{ + i ? j == k : true; + i ? j < k : true; + i ? j && k : true; +} + +/* Check that g++ can find a conversion to bool when one exists. */ +struct A { operator char * (); } a; +struct B { operator int (); } b; +struct C { operator float (); } c; +struct D { operator bool (); } d; +struct E { operator int E::* (); } e; + +void g () +{ + a || true; + b || true; + c || true; // gets bogus error + d || true; + e || true; +} + +/* Check for support in templates. */ +template <class T> struct F { }; +template class F<bool>; + +template <class T> void f (T, bool) { }; +template void f (bool, bool); + +/* Special cases. */ +void h () +{ + /* Used to cause infinite recursion. */ + i&1 || true; + /* Should find conversion path to int. */ + d == true; +} + +bool boo = -1; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/bool2.C b/gcc/testsuite/g++.old-deja/g++.jason/bool2.C new file mode 100644 index 000000000000..4c0edcb3596b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/bool2.C @@ -0,0 +1,14 @@ +// Make sure that bool bitfields promote to int properly. + +struct F { + bool b1 : 1; + bool b2 : 7; +}; + +main() +{ + F f = { true, true }; + + if (int (f.b1) != 1) + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/bool3.C b/gcc/testsuite/g++.old-deja/g++.jason/bool3.C new file mode 100644 index 000000000000..d8e95147b754 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/bool3.C @@ -0,0 +1,13 @@ +// From: panisset@cae.ca (Jean-Francois Panisset) +// Subject: Problem with constant expressions for bitfields +// Date: Mon, 6 Jun 94 14:00:01 EDT + +// Bug: g++ doesn't treat boolean true and false as constant values. +// Build don't link: + +enum E { e1,e2,e3,e4,e5 }; + +struct X +{ + unsigned int bits : ((e5 > 4) ? 8 : 4); // gets bogus error - constant expression +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/bool4.C b/gcc/testsuite/g++.old-deja/g++.jason/bool4.C new file mode 100644 index 000000000000..36a2180c9273 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/bool4.C @@ -0,0 +1,10 @@ +// Test for allowing conversion to bool. + +struct A { }; + +main () +{ + bool b = (void*)0; + b = (int A::*)0; + b = (int (A::*)())0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/bool5.C b/gcc/testsuite/g++.old-deja/g++.jason/bool5.C new file mode 100644 index 000000000000..79d848c0b194 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/bool5.C @@ -0,0 +1,10 @@ +main () +{ + bool b = false; + int i = b++; + if (i != false || b != true) + return 1; + i = b++; + if (i != true || b != true) + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/bool6.C b/gcc/testsuite/g++.old-deja/g++.jason/bool6.C new file mode 100644 index 000000000000..b8db8722b8fd --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/bool6.C @@ -0,0 +1,9 @@ +// Bug: The conversion from bool to int gets stripped. +// Build don't link: + +bool b; + +main () +{ + return ((!b) != 0); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/bool7.C b/gcc/testsuite/g++.old-deja/g++.jason/bool7.C new file mode 100644 index 000000000000..1ecb68d4e047 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/bool7.C @@ -0,0 +1,29 @@ +// Build don't link: + +struct A +{ + operator bool () const; + operator const void * () const; +}; + +struct B +{ + A a; + int foo1 (); + int foo2 (); +}; + +int +B::foo1 () +{ + return a ? 0 : 1; // ambiguous default type conversion for `operator !=' +} + +int +B::foo2 () +{ + if (a) + return 0; + else + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/builtin.C b/gcc/testsuite/g++.old-deja/g++.jason/builtin.C new file mode 100644 index 000000000000..0e0cc48c6918 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/builtin.C @@ -0,0 +1,10 @@ +// Bug: g++ overloads strlen instead of bashing the builtin version. +// Special g++ Options: -w +// Build don't link: + +extern "C" void strlen (const char *); + +void f () +{ + strlen("Hi"); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/builtin2.C b/gcc/testsuite/g++.old-deja/g++.jason/builtin2.C new file mode 100644 index 000000000000..698d0a121120 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/builtin2.C @@ -0,0 +1,8 @@ +// Build don't link: + +inline void strlen (const char *) { } + +void f () +{ + strlen("Hi"); // gets bogus error - wrongful overload +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/byval.C b/gcc/testsuite/g++.old-deja/g++.jason/byval.C new file mode 100644 index 000000000000..45fb1e2836b6 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/byval.C @@ -0,0 +1,19 @@ +// Bug: a is destroyed in both foo() and main() + +int count; + +struct A { + double a,b; + A(int) { count++; } + A(const A&) { count++; } + ~A() { count--; } +}; + +void foo (A a) +{ } + +main() +{ + foo (1); + return count; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/byval2.C b/gcc/testsuite/g++.old-deja/g++.jason/byval2.C new file mode 100644 index 000000000000..490e625805d9 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/byval2.C @@ -0,0 +1,23 @@ +// From: panisset@cae.ca (Jean-Francois Panisset) +// Subject: 2.6.0 pre-rel, internal error, regression, mips-sgi-irix4 +// Date: Thu, 14 Jul 94 23:34:21 EDT +// Build don't link: + +class Char +{ +protected: + char rep; +public: + Char (const char ) {}; + operator char() const; + void operator -= (const Char ); +}; + +inline Char operator - (const Char a, const Char b) {} +inline char operator == (const Char a, const char b) {} + +char mystrcmp(Char s[31], Char t[31]) +{ + for (; *s == *t; ++s, ++t) if (*s == '\0') return 0; + return char(*s - *t); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/byval3.C b/gcc/testsuite/g++.old-deja/g++.jason/byval3.C new file mode 100644 index 000000000000..7c2a798ed473 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/byval3.C @@ -0,0 +1,14 @@ +// Test to make sure that value return of classes with cleanups works; it +// has been broken at various times on PCC_STATIC_STRUCT_RETURN targets. +// Build don't link: + +struct A {}; + +struct R : virtual A { virtual ~R(); }; + +R g(); + +void encode() +{ + g(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/c-inline.C b/gcc/testsuite/g++.old-deja/g++.jason/c-inline.C new file mode 100644 index 000000000000..7e90c4ea027a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/c-inline.C @@ -0,0 +1,11 @@ +// Bug: the compiler gets hopelessly confused. +// Build don't link: + +#line 1 "c-inline.h" +#pragma interface +inline double abs (double) { return 0.0; } +inline short abs (short) { return 0; } +#line 2 "c-inline.C" +extern "C" { + inline int abs (int) { return 0; } // causes segfault - +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/c2.C b/gcc/testsuite/g++.old-deja/g++.jason/c2.C new file mode 100644 index 000000000000..ba7f0ed0d559 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/c2.C @@ -0,0 +1,18 @@ +// PRMS Id: 3134 +// g++ understands C redeclaration semantics. Sun CC 2.0.1 doesn't. +// Special g++ Options: +// Build don't link: + +extern "C" { + int foo(); + int foo(int); + + int bar(int); + int bar(); +} + +main() +{ + foo (1); + bar (1); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/cast1.C b/gcc/testsuite/g++.old-deja/g++.jason/cast1.C new file mode 100644 index 000000000000..4e987eafece1 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/cast1.C @@ -0,0 +1,8 @@ +// Bug: g++ fails to grok functional casts in all situations. +// Build don't link: + +class A { +public: + typedef int B; + static B foo() { return B(1); } // gets bogus error - +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/cast2.C b/gcc/testsuite/g++.old-deja/g++.jason/cast2.C new file mode 100644 index 000000000000..02495b346d1d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/cast2.C @@ -0,0 +1,15 @@ +// Build don't link: +// The compiler tried to build up a double with a NOP_EXPR from +// integer_zero_node, which fails. + +template <class T> +class vector { +public: + vector (int n, const T& value = T()) {} +}; + +void +foo (void) +{ + vector<double> v (10); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/cast3.C b/gcc/testsuite/g++.old-deja/g++.jason/cast3.C new file mode 100644 index 000000000000..5d599805aa30 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/cast3.C @@ -0,0 +1,16 @@ +// PRMS Id: 7088 +// Build don't link: + +struct string +{ + int length () const; + string (string &); + string (char * = 0); + int operator [] (int); + ~string (); +}; + +string _cook(const string raw, bool for_postscript) +{ + unsigned char c = (unsigned) ((string &)raw)[1]; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/cleanup.C b/gcc/testsuite/g++.old-deja/g++.jason/cleanup.C new file mode 100644 index 000000000000..d9adddec2e80 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/cleanup.C @@ -0,0 +1,23 @@ +// Bug: continue over object decl calls destructor but not constructor. + +int c = 0; +int d = 0; +extern "C" int printf(const char *,...); + +class Foo { +public: + Foo(){ c++; } + ~Foo(){ d++; } +}; + +int main() +{ + for(int i=0;i<2;i++){ + continue; + Foo bar; + } + printf ("%d %d\n", c, d); + if (c == d && d == 0) + return 0; + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/cleanup2.C b/gcc/testsuite/g++.old-deja/g++.jason/cleanup2.C new file mode 100644 index 000000000000..21addfe67d71 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/cleanup2.C @@ -0,0 +1,15 @@ +// PRMS Id: 6303 +// Bug: compiler crashes processing the cleanup for arrayOfClass. +// Build don't link: + +class Class { +public: + ~Class(); // This dtor MUST be declared to generate the error... +}; + +Class varOfClass; + +main() { + // This MUST be 'const' to generate the error... + const Class arrayOfClass[1] = { varOfClass }; // causes abort +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/complete1.C b/gcc/testsuite/g++.old-deja/g++.jason/complete1.C new file mode 100644 index 000000000000..0f140e161147 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/complete1.C @@ -0,0 +1,12 @@ +// PRMS Id: 4695 +// Bug: g++ wrongly requires A to be complete here. +// Build don't link: + +struct A; + +void foo(const A &); + +void bar(A *p) +{ + foo(*p); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/cond.C b/gcc/testsuite/g++.old-deja/g++.jason/cond.C new file mode 100644 index 000000000000..8f4da347bb62 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/cond.C @@ -0,0 +1,39 @@ +// Build don't link: +// GROUPS passed rtti +// Negative testcase for decls in conditions. + +main() +{ + float i; + + if (int i = 1) // ERROR - , XFAIL *-*-* + { + char i; // ERROR - , XFAIL *-*-* + char j; + } + else + { + short i; // ERROR - , XFAIL *-*-* + char j; + } + + if (struct A { operator int () { return 1; } } *foo = new A) // ERROR - + ; + + A bar; // ERROR - + + if (enum A { one, two, three } foo = one) // ERROR - + ; + + struct B { operator int () { return 2; } }; + + if (struct B * foo = new B) + ; + + if (int f () = 1) // ERROR - + ; + + if (int a[2] = {1, 2}) // ERROR - + ; + +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/cond2.C b/gcc/testsuite/g++.old-deja/g++.jason/cond2.C new file mode 100644 index 000000000000..890c3193d3dd --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/cond2.C @@ -0,0 +1,65 @@ +// Positive testcase for decls in conditions. + +extern "C" int printf(const char *, ...); + +int up = 0; +int down = 0; + +struct T +{ + int i; + T(int j) { i = j; printf("UP\n"); up++; } + T(const T& t) { i = t.i; printf("unwanted copy\n"); } + ~T() { printf ("DOWN\n"); down++; } + operator int () { return i; } +}; + +main () +{ + int t; + + if (T t = 1) + ; + + printf ("\n"); + + int j = 3; + while (T t = j--) + ; + + printf ("\n"); + + j = 3; + while (1) + { + T t = j--; + if (t) continue; + break; + } + + printf ("\n"); + + j = 3; + for (;T t = j--;) + ; + + printf ("\n"); + + for (int k = 3; T t = k--;) + ; + + printf ("\n"); + + switch (T t = 34) + { + case 34: + ; + } + + printf ("\n"); + + if (up == down && up == 18) + return 0; + else + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/condexp.C b/gcc/testsuite/g++.old-deja/g++.jason/condexp.C new file mode 100644 index 000000000000..edfd12ef1a99 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/condexp.C @@ -0,0 +1,14 @@ +// PRMS id: 5629 +// Build don't link: + +struct String { const char *x; }; +class Pathname: public String { }; + +String +f(int i) +{ + Pathname p; + String s; + + return i ? p: s; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/const.C b/gcc/testsuite/g++.old-deja/g++.jason/const.C new file mode 100644 index 000000000000..2faf8e5811ec --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/const.C @@ -0,0 +1,16 @@ +// Bug: a ends up in the text segment, so trying to initialize it causes +// a seg fault. + +struct A { + int i; + A(): i(0) {} + A(int j): i(j) {} +}; + +const A a; +const A b(1); + +int main () +{ + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/const2.C b/gcc/testsuite/g++.old-deja/g++.jason/const2.C new file mode 100644 index 000000000000..3aeae3c7e716 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/const2.C @@ -0,0 +1,14 @@ +// Example of static member constants + +extern "C" int printf (const char *, ...); + +struct T { + static const char letter = 'a'; // this is the new stuff! + char x[letter]; + void f(); +}; + +void T::f() { printf ("%p", &letter); } +const char T::letter; // still need def after class + +main() { } diff --git a/gcc/testsuite/g++.old-deja/g++.jason/const3.C b/gcc/testsuite/g++.old-deja/g++.jason/const3.C new file mode 100644 index 000000000000..49360a4fabe4 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/const3.C @@ -0,0 +1,10 @@ +// Bug: bar isn't emitted, which causes havoc. + +extern int i; +const int bar = i; +int i = 5; + +main() +{ + return bar != 5; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/const4.C b/gcc/testsuite/g++.old-deja/g++.jason/const4.C new file mode 100644 index 000000000000..b8b8efa0ae60 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/const4.C @@ -0,0 +1,24 @@ +// PRMS Id: 8927 +// Bug: complex inheritance interferes with const checking + +class GrandParent { +public: + virtual void DoIt(); +protected: + int A; +}; + +class Parent : virtual public GrandParent { +public: + virtual void DoX() const; +}; + +class Child : public Parent { +public: + void DoX() const; +}; + +void Child::DoX() const +{ + A = 10; // ERROR - assignment to const +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/context.C b/gcc/testsuite/g++.old-deja/g++.jason/context.C new file mode 100644 index 000000000000..a9a836319929 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/context.C @@ -0,0 +1,20 @@ +// PRMS Id: 3988 +// Bug: DECL_CONTEXT of A::B gets clobbered in pushdecl when defining A::foo(). +// Build don't link: + +#pragma implementation "context.h" +#line 1 "context.h" +#pragma interface + +template <class T> +struct A { + inline void foo () { } + class B { }; +}; + +struct C : public A<int> { + void bar (C::B&); +}; +#line 2 "context.C" + +void C::bar (C::B& b) { } diff --git a/gcc/testsuite/g++.old-deja/g++.jason/conversion.C b/gcc/testsuite/g++.old-deja/g++.jason/conversion.C new file mode 100644 index 000000000000..80436f355a23 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/conversion.C @@ -0,0 +1,16 @@ +// Bug: g++ doesn't find the conversion path from DPtr& to B*. +// Build don't link: + +class B {}; +class D : public B {}; +class DPtr +{ +public: + operator D*() const; +}; + +void foo (B* bp); +void bar (DPtr& dp) +{ + foo (dp); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/conversion10.C b/gcc/testsuite/g++.old-deja/g++.jason/conversion10.C new file mode 100644 index 000000000000..97bb70744cbe --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/conversion10.C @@ -0,0 +1,19 @@ +// PRMS Id: 9019 +// Bug: g++ doesn't find conversion to const char *. +// Build don't link: + +struct String { + String (); + explicit String (const char *); + operator const char * (); +}; + +int main(int argc, char **argv) +{ + String deflt("no args"); + String useme; + + const char *p = (argv[1]) ? argv[1] : deflt; + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/conversion11.C b/gcc/testsuite/g++.old-deja/g++.jason/conversion11.C new file mode 100644 index 000000000000..c0c6ca4159cc --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/conversion11.C @@ -0,0 +1,26 @@ +// PRMS Id: 8805 +// Bug: The two-level conversion is not found when calling a global fn. + +class Int { +public: + Int(int A); +}; + +class Ding { +public: + Ding(Int A); +}; + +class Something { +public: + void DoSomething(Ding A); // ERROR - referred to +}; + +void DoSomething(Ding A); + +void foo(Something* pX) +{ + DoSomething(1); // ERROR - + pX->DoSomething(1); // ERROR - + (*pX).DoSomething(1); // ERROR - +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/conversion2.C b/gcc/testsuite/g++.old-deja/g++.jason/conversion2.C new file mode 100644 index 000000000000..db773d698e4e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/conversion2.C @@ -0,0 +1,6 @@ +// PRMS Id: 3069 + +void f(int&); // ERROR - referenced by error below +void g(const int& i) { + f(i); // ERROR - discarding const +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/conversion3.C b/gcc/testsuite/g++.old-deja/g++.jason/conversion3.C new file mode 100644 index 000000000000..0d66c1ecee1b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/conversion3.C @@ -0,0 +1,7 @@ +void qsort (void *, int, int, int (*)(const void *, const void *)); +int f (char *, char *); +void g () +{ + typedef int (*pf)(void *, void *); + qsort(0, 0, 0, pf(f)); // ERROR - adding const to function parms +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/conversion4.C b/gcc/testsuite/g++.old-deja/g++.jason/conversion4.C new file mode 100644 index 000000000000..7caca196d0af --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/conversion4.C @@ -0,0 +1,14 @@ +// Build don't link: +struct A { + A (int); +}; +struct B { + operator int () { return 1; } +}; +void f (const A&); +void g() +{ + B b; + f ((A) b); + f (A (b)); // gets bogus error - functional cast treated differently from C style +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/conversion5.C b/gcc/testsuite/g++.old-deja/g++.jason/conversion5.C new file mode 100644 index 000000000000..303860b47254 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/conversion5.C @@ -0,0 +1,12 @@ +// Build don't link: +struct A { }; +struct B: public A { + A a; + operator A () { return a; } // WARNING - never used implicitly +}; +void f (const A&); +void g() +{ + B b; + (A) b; // gets bogus error - trying both constructor and type conversion operator +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/conversion6.C b/gcc/testsuite/g++.old-deja/g++.jason/conversion6.C new file mode 100644 index 000000000000..42b9ac226d88 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/conversion6.C @@ -0,0 +1,40 @@ +// PRMS Id: g++/6034 + +extern "C" int printf (const char *, ...); + +class Base +{ + char x; +}; + +template <class T> +// remove the public Base inheritance and the problem goes away... +class Container : public Base +{ +public: + + Container(const T& aValue): myValue(aValue) { } + + operator const T&(void) const + { + printf("Container::const T& called\n"); + return myValue; + } + +protected: + + T myValue; +}; + +typedef unsigned short Type; + +typedef Container<Type> TypeContainer; + +main(void) +{ + TypeContainer myTypeContainer(2); + Type t = myTypeContainer; + + printf ("myType = %d\n", t); + return t != 2; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/conversion7.C b/gcc/testsuite/g++.old-deja/g++.jason/conversion7.C new file mode 100644 index 000000000000..01812f5b8eee --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/conversion7.C @@ -0,0 +1,16 @@ +// Bug: g++ tries to look inside (B*)0 for a virtual base pointer. + +struct A +{ +}; + +struct B : virtual A +{ +}; + +A* a; + +int main() +{ + a = (B*)0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/conversion8.C b/gcc/testsuite/g++.old-deja/g++.jason/conversion8.C new file mode 100644 index 000000000000..fc4de8111b81 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/conversion8.C @@ -0,0 +1,10 @@ +// PRMS id: 8279 + +main () +{ + char *const *p = 0; + char **q = 0; + + (void)(p - q); + (void)(q - p); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/conversion9.C b/gcc/testsuite/g++.old-deja/g++.jason/conversion9.C new file mode 100644 index 000000000000..e0d3715dae28 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/conversion9.C @@ -0,0 +1,13 @@ +// PRMS Id: 8475 + +class SomeClass { +public: + operator int & () { + static int x; + return x; + } +} a; + +int main (int, char**) { + return a + 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/crash1.C b/gcc/testsuite/g++.old-deja/g++.jason/crash1.C new file mode 100644 index 000000000000..298273490fc6 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/crash1.C @@ -0,0 +1,29 @@ +// Bug: g++ dies on this input. +// Build don't link: + +class Sample + { + public: + int operator <<(const char *c); + }; + +extern Sample sample; + +struct Simple + { + int a; + }; + +extern "C" void get_it(); + +class Test + { + private: + void test(); + friend void get_it(); + }; + +void Test::test() + { + sample << "hello"; + } diff --git a/gcc/testsuite/g++.old-deja/g++.jason/crash10.C b/gcc/testsuite/g++.old-deja/g++.jason/crash10.C new file mode 100644 index 000000000000..b96694495896 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/crash10.C @@ -0,0 +1,7 @@ +// PRMS Id: 5155 + +struct A { + enum foo { bar }; +}; + +typedef A::foo A::foo; // ERROR - causes compiler segfault diff --git a/gcc/testsuite/g++.old-deja/g++.jason/crash11.C b/gcc/testsuite/g++.old-deja/g++.jason/crash11.C new file mode 100644 index 000000000000..51d1629630e7 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/crash11.C @@ -0,0 +1,9 @@ +// Bug: g++ crashes on this input. +// Build don't link: + +struct A { + const char *p; +}; +const char foo[] = "bar"; +const A a = { foo }; +extern const A* ap = &a; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/crash12.C b/gcc/testsuite/g++.old-deja/g++.jason/crash12.C new file mode 100644 index 000000000000..46d63225bab0 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/crash12.C @@ -0,0 +1,10 @@ +// Bug: g++ dies instead of flagging this invalid. +// Build don't link: + +inline float max(float x, float y) { return (x>y)?x:y; } + +float b(float x, float y, float z) +{ + float f = (y<x)?x:(max<y)?z:y; // ERROR - + return f; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/crash2.C b/gcc/testsuite/g++.old-deja/g++.jason/crash2.C new file mode 100644 index 000000000000..9e96af1e3c3d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/crash2.C @@ -0,0 +1,10 @@ +// Bug: g++ crashes on this (admittedly invalid) input. +// Special g++ Options: +// Build don't link: + +class PhysicalPageId { + const maximum_block_numbers = 2; + long block_number[maximum_block_numbers]; +}; + +const PhysicalPageId shadows_physical_page_id_null = { 2, { 0, 0 } }; // ERROR - constructor initializes non-field m_b_n diff --git a/gcc/testsuite/g++.old-deja/g++.jason/crash3.C b/gcc/testsuite/g++.old-deja/g++.jason/crash3.C new file mode 100644 index 000000000000..c3709c555360 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/crash3.C @@ -0,0 +1,13 @@ +// Bug: g++ tries to generate initialization semantics for a Node from an int, +// and fails. +// Build don't link: + +struct Node +{ + Node* child[2]; +}; // ERROR - + +void bug(int i) +{ + Node* q = new Node(i); // ERROR - +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/crash4.C b/gcc/testsuite/g++.old-deja/g++.jason/crash4.C new file mode 100644 index 000000000000..bf6a15c370aa --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/crash4.C @@ -0,0 +1,38 @@ +// PRMS Id: 4346 +// Bug: g++ dies on redefinition of cc_Array::repInvariant. +// Build don't link: + +class ccObjectInfo +{ +public: + virtual const ccObjectInfo& repInvariant (int =0) const; +}; + +template <class T> +class cc_Array : public ccObjectInfo +{ +public: + virtual const ccObjectInfo& repInvariant (int =0) const ; +}; + +template <class T> +const ccObjectInfo& cc_Array<T>::repInvariant(int) const +{ return *this /* *this is required here */; } // ERROR - redefined + +template <class T> +class ccArray :public ccObjectInfo +{ + ccArray (cc_Array<T>*); +}; + +template <class T> +class ccObjArray : public ccArray<T> +{ + ccObjArray(); +}; + +template <class T> +const ccObjectInfo& cc_Array<T>::repInvariant(int) const +{ return 0; } // ERROR - causes compiler segfault + +typedef ccObjArray< double> ccROIRuns; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/crash5.C b/gcc/testsuite/g++.old-deja/g++.jason/crash5.C new file mode 100644 index 000000000000..b67376fe261a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/crash5.C @@ -0,0 +1,4 @@ +// Bug: g++ doesn't deal well with abstract declarators used inappropriately. +// Build don't link: + +void (*)(); // ERROR - diff --git a/gcc/testsuite/g++.old-deja/g++.jason/crash6.C b/gcc/testsuite/g++.old-deja/g++.jason/crash6.C new file mode 100644 index 000000000000..8e0a9c861f2a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/crash6.C @@ -0,0 +1,9 @@ +// Bug: g++ dies on the below. +// Build don't link: + +class A { }; +void f () +{ + A a; + a.~a(); // ERROR - causes segfault +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/crash7.C b/gcc/testsuite/g++.old-deja/g++.jason/crash7.C new file mode 100644 index 000000000000..e7dd8f75aad7 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/crash7.C @@ -0,0 +1,5 @@ +// Bug: g++ can't deal. + +typedef unsigned size_t; // ERROR - previous declaration +typedef unsigned long size_t; // ERROR - redefining size_t +void f (size_t); // causes compiler segfault - diff --git a/gcc/testsuite/g++.old-deja/g++.jason/crash8.C b/gcc/testsuite/g++.old-deja/g++.jason/crash8.C new file mode 100644 index 000000000000..4482a43f4bce --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/crash8.C @@ -0,0 +1,9 @@ +struct A { + A(); + A(A); // ERROR - copy ctor must take reference +}; +main() +{ + A a; + A b(a); // causes compiler segfault +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/crash9.C b/gcc/testsuite/g++.old-deja/g++.jason/crash9.C new file mode 100644 index 000000000000..6cacb11a5410 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/crash9.C @@ -0,0 +1,29 @@ +// PRMS Id: 5085 +// Bug: TYPE_POINTER_TO wasn't set. +// Build don't link: + +class A { + A(const A &); + void operator=(const A &); +public: + inline A(); +}; + +class B { + A a; +public: + B(); + virtual void f() const; +}; + +class C : public B { }; + +class D : C { +public: + void f() const; +}; + +void D::f() const +{ + C::f(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/ctor1.C b/gcc/testsuite/g++.old-deja/g++.jason/ctor1.C new file mode 100644 index 000000000000..69afd4255198 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/ctor1.C @@ -0,0 +1,26 @@ +// PRMS Id: 5584 + +extern "C" +{ + struct xx { + void (*xx)(void); + int x,y; + }; +} + +int r = 1; + +void f(void) +{ + r = 0; +} + +main() +{ + struct xx p; + + p.xx = f; + p.xx(); + + return r; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/ctor2.C b/gcc/testsuite/g++.old-deja/g++.jason/ctor2.C new file mode 100644 index 000000000000..bf37c114be17 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/ctor2.C @@ -0,0 +1,16 @@ +// Bug: the reference to c in the initializer list doesn't get fixed up. +// Build don't link: + +struct AP { + AP(unsigned char); +}; + +struct AI : AP { + AI(unsigned char); +}; + +AI::AI(unsigned char c) +: AP(c) +{ + &c; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/dcast1.C b/gcc/testsuite/g++.old-deja/g++.jason/dcast1.C new file mode 100644 index 000000000000..f4d93c3c0684 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/dcast1.C @@ -0,0 +1,20 @@ +// PRMS Id: 7162 +// Build don't link: + +struct B { + int i; + B() : i(1) {} +}; + +struct D : B { + int i; + D() : i(2) {} +}; + +void ch() +{ + D od2; + D &rd2 = od2; + + B &rd1 = dynamic_cast<B&>(rd2); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/dcast2.C b/gcc/testsuite/g++.old-deja/g++.jason/dcast2.C new file mode 100644 index 000000000000..2ba1357fd62b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/dcast2.C @@ -0,0 +1,18 @@ +struct A { virtual void f() { } }; +struct B { virtual void g() { } }; +struct C : public A, public B { }; + +main () +{ + C* cp = 0; + B* bp = 0; + + if (dynamic_cast <B*> (cp) != 0) + return 1; + + if (dynamic_cast <void *> (bp) != 0) + return 1; + + if (dynamic_cast <C*> (bp) != 0) + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/dcast3.C b/gcc/testsuite/g++.old-deja/g++.jason/dcast3.C new file mode 100644 index 000000000000..1dc00a138eb5 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/dcast3.C @@ -0,0 +1,32 @@ +// Testcase for tricky dynamic cast situations. + +struct A { + virtual void f () { } +}; + +struct B : public A { }; +struct C : public B { }; +struct D : public B { }; +struct E : public C, public D { }; + +struct B2 : public virtual A { }; +struct C2 : public B2 { }; +struct D2 : public B2 { }; +struct E2 : public C2, public D2 { }; + +main () +{ + E e; + E2 e2; + + A* ap = (C*)&e; + + // ap points to base subobject of unique B; succeeds + if (dynamic_cast <B*> (ap) == 0) + return 1; + + ap = (C2*)&e2; + // ap points to base subobject shared by two Bs; fails + if (dynamic_cast <B2*> (ap) != 0) + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/default1.C b/gcc/testsuite/g++.old-deja/g++.jason/default1.C new file mode 100644 index 000000000000..e6ef57768e0a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/default1.C @@ -0,0 +1,16 @@ +// PRMS Id: 5204 +// Bug: g++ bashes the type of add_sym with the type of add, so calling it +// with one parameter generates an error. +// Build don't link: + +int add(int const &symbol, + const unsigned char flags=(void*)0); // ERROR - invalid default arg + +int add_sym(int const &symbol, + const unsigned char flags=0); + +main() +{ + int fname; + add_sym(fname); // Guarantee a symbol exists +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/default2.C b/gcc/testsuite/g++.old-deja/g++.jason/default2.C new file mode 100644 index 000000000000..f50ee2f151b9 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/default2.C @@ -0,0 +1,31 @@ +// PRMS Id: 5921 +// Build don't link: +// Bug: default arguments containing constructor calls persist incorrectly. + +class foo +{ + public: + foo(); + foo(int x); + public: + int iamamember; +}; + +class bar +{ + public: + bar(); + int memberfunction(int i, char *j, double k, foo foo1 = foo(0)); +}; + +int +pain(bar *bar1) +{ + return bar1->memberfunction(1, "x", 0.0); +} + +int +pain2(bar *bar1) +{ + return bar1->memberfunction(1, "x", 0.0); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/default3.C b/gcc/testsuite/g++.old-deja/g++.jason/default3.C new file mode 100644 index 000000000000..05af3b68b274 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/default3.C @@ -0,0 +1,6 @@ +// Bug: type_list_equal aborts when it sees lang-specific tree nodes. +// Build don't link: + +struct A { }; +void f (A a = A()); +void g (A a = A()); diff --git a/gcc/testsuite/g++.old-deja/g++.jason/defctor.C b/gcc/testsuite/g++.old-deja/g++.jason/defctor.C new file mode 100644 index 000000000000..252d43ef6ad9 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/defctor.C @@ -0,0 +1,15 @@ +// Bug: g++ doesn't generate default constructor. + +class A { +public: + int i; +}; + +extern "C" int printf(const char *, ...); + +main () { + A a; + a.i = 1; + A b (a); + printf("%d\n",b.i); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/delete1.C b/gcc/testsuite/g++.old-deja/g++.jason/delete1.C new file mode 100644 index 000000000000..a176652df712 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/delete1.C @@ -0,0 +1,5 @@ +#include <stddef.h> +struct A { + virtual void operator delete (void *); // ERROR - virtual delete + virtual void * operator new (size_t); // ERROR - virtual new +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/delete2.C b/gcc/testsuite/g++.old-deja/g++.jason/delete2.C new file mode 100644 index 000000000000..7748e2b9cb51 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/delete2.C @@ -0,0 +1,16 @@ +// PRMS Id: 5003 +// Bug: g++ complains about calling the destructor for a const object. +// Build don't link: + +struct A { +public: + ~A(); +}; + +const A foo (); + +void bar() +{ + A n; + n = foo(); // gets bogus error - deleting const +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/delete3.C b/gcc/testsuite/g++.old-deja/g++.jason/delete3.C new file mode 100644 index 000000000000..8bffb9aca86c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/delete3.C @@ -0,0 +1,18 @@ +// PRMS Id: 6093 + +class A { +public: + A(); + ~A(); +protected: + void operator delete(void *); // ERROR - protected +}; + +A::~A() +{ +} + +void foo(A *p) +{ + delete p; // ERROR - in this context +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/destruct.C b/gcc/testsuite/g++.old-deja/g++.jason/destruct.C new file mode 100644 index 000000000000..a9d7e86a4671 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/destruct.C @@ -0,0 +1,33 @@ +// Exhaustive test for destructors of simple types. +// PRMS Id: 2744, 3308 +// Build don't link: + +template <class T> class A { + T q; +public: + ~A() { + q.T::~T(); + q.~T(); + (&q)->T::~T(); + (&q)->~T(); + } +}; + +typedef char * cp; + +main () +{ + A<int> a; + A<cp> b; + int i; + cp c; + + i.~int(); + i.int::~int(); + (&i)->~int(); + (&i)->int::~int(); + c.~cp(); + c.cp::~cp(); + (&c)->~cp(); + (&c)->cp::~cp(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/destruct2.C b/gcc/testsuite/g++.old-deja/g++.jason/destruct2.C new file mode 100644 index 000000000000..09b6bdd79917 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/destruct2.C @@ -0,0 +1,20 @@ +// PRMS Id: 4342 +// Bug: g++ does not massage things enough to allow calling ~X(). +// Build don't link: + +struct X +{ + virtual ~X (); +}; + +struct Y : public X +{}; + +struct Z : public Y, public X +{}; // WARNING - + +void foo () +{ + Z* f = new Z; + delete f; // gets bogus error - +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/destruct3.C b/gcc/testsuite/g++.old-deja/g++.jason/destruct3.C new file mode 100644 index 000000000000..94ca834d65f9 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/destruct3.C @@ -0,0 +1,44 @@ +// PRMS Id: 4342 (second testcase) +// Bug: g++ still can't deal with ambiguous inheritance in destructor calls. +// Build don't link: + +struct ccUnwind +{ + ccUnwind (); + virtual ~ccUnwind (); +}; + +struct ccPersistent +{ + virtual void bar(); +}; + +struct ccImpExp : public ccPersistent, public ccUnwind +{}; + +struct ccTool : public ccImpExp +{}; + +struct ccScreenTool : public ccTool +{}; + +struct ccVTool : public ccScreenTool +{}; + +struct ccScreenObjRep : public ccUnwind +{}; + +struct ccScreenObj : public ccScreenObjRep +{}; + +struct ccVSTool : public ccImpExp, public ccUnwind +{}; // gets bogus error - XFAIL *-*-* + +struct ccSCCP : public ccVSTool +{}; // gets bogus error - XFAIL *-*-* + +void foo () +{ + ccSCCP* foo = new ccSCCP; + delete foo; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/destruct4.C b/gcc/testsuite/g++.old-deja/g++.jason/destruct4.C new file mode 100644 index 000000000000..3ce7d765505f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/destruct4.C @@ -0,0 +1,14 @@ +// PRMS Id: 4342 +// Bug: g++ fails to massage ambiguity in calling virtual destructor. +// Build don't link: + +class A { public: virtual ~A();}; +class B: public A { }; +class C: public A { }; +class D: public B, public C { }; + +void foo () +{ + D* p = new D; + delete p; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/dot.C b/gcc/testsuite/g++.old-deja/g++.jason/dot.C new file mode 100644 index 000000000000..7f4bd7776d4b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/dot.C @@ -0,0 +1,20 @@ +// PRMS Id: 4143 +// Bug: Pointer is silently dereferenced in method call. +// Build don't link: + +extern "C" int printf (const char *, ...); + +class Test +{ + char ch; + public: + Test(char c) : ch(c) {} + void Print() { printf("%c", ch); } +}; + +main() +{ + Test *p = new Test('x'); + + p.Print(); // ERROR - +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/dtor.C b/gcc/testsuite/g++.old-deja/g++.jason/dtor.C new file mode 100644 index 000000000000..c9e71628d09b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/dtor.C @@ -0,0 +1,13 @@ +struct A { + ~A(); +}; + +struct B { + ~B(); +}; + +main() +{ + A a; + a.~B(); // ERROR - wrong name +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/dtor2.C b/gcc/testsuite/g++.old-deja/g++.jason/dtor2.C new file mode 100644 index 000000000000..7f975136e8d4 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/dtor2.C @@ -0,0 +1,10 @@ +// PRMS Id: 5163 +// Bug: g++ doesn't accept the explicit destructor call syntax for templates. + +template <class T> struct A { }; +A<int> a; + +main() +{ + a.~A(); // gets bogus error +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/dtor3.C b/gcc/testsuite/g++.old-deja/g++.jason/dtor3.C new file mode 100644 index 000000000000..0c5e68abb47c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/dtor3.C @@ -0,0 +1,18 @@ +// PRMS Id: 5341 +// Bug: g++ complains about the explicit destructor notation. +// Build don't link: + +#include <stddef.h> + +void *operator new(size_t Size, void* pThing) { return pThing; }; + +template <class T> class Stack { +public: + Stack() { new (Data) T(); } + ~Stack() { ((T*)Data)->~T(); } +private: + char Data[sizeof(T)]; +}; + +Stack<int> a; +Stack<Stack<int> > c; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/dtor4.C b/gcc/testsuite/g++.old-deja/g++.jason/dtor4.C new file mode 100644 index 000000000000..dfdc3aafd6cf --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/dtor4.C @@ -0,0 +1,23 @@ +// PRMS Id: 5420 +// Bug: g++ gets mixed up calling destructors for references. +// Build don't link: + +template<class X> +class Z { +public: + char space[100]; + void kill() + { X& x = (X&) space[0]; + x.~X(); } +}; + +class C { int i; }; + +void +f() +{ + Z<int> r; + r.kill(); + Z<C> s; + s.kill(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/dtor5.C b/gcc/testsuite/g++.old-deja/g++.jason/dtor5.C new file mode 100644 index 000000000000..245e057deace --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/dtor5.C @@ -0,0 +1,24 @@ +// PRMS Id: 5286 +// Bug: g++ forgets side-effects of object in call to nonexistent destructor. + +void * operator new (__SIZE_TYPE__ s, void * p) { return p; } + +int r; + +template <class T> struct A { + T *p; + int i; + A() { i = 0; p = (T*) new char[sizeof (T)]; new (p + i++) T; } + ~A() { p[--i].~T(); r = i; } +}; + +main() +{ + { A<int> a; } + + int* p = (int*) new char[sizeof (int)]; + new (p + r++) int; + p[--r].~int(); + + return r; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/enum.C b/gcc/testsuite/g++.old-deja/g++.jason/enum.C new file mode 100644 index 000000000000..6dd24e618115 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/enum.C @@ -0,0 +1,19 @@ +// PRMS Id: 4337 +// Bug: Enums are not looked up to arbitrary depth. +// Build don't link: + +struct W { + enum A { B }; +}; + +struct X : public W +{}; + +struct Y : public X +{}; + +struct S +{ + X::A a1; + Y::A a2; // gets bogus error - +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/enum2.C b/gcc/testsuite/g++.old-deja/g++.jason/enum2.C new file mode 100644 index 000000000000..8fb753868784 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/enum2.C @@ -0,0 +1,8 @@ +// Build don't link: + +enum tristate { no = -1, maybe, yes }; + +void foobar () +{ + tristate var = no; // gets bogus error +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/enum3.C b/gcc/testsuite/g++.old-deja/g++.jason/enum3.C new file mode 100644 index 000000000000..9e25570ab42d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/enum3.C @@ -0,0 +1,19 @@ +// Build don't link: +// Special g++ Options: -Wall + +enum tristate { no = -1, maybe, yes }; + +tristate +tristate_satisfies (register tristate const t1, register tristate const t2) +{ + switch (t1) + { + case no: + return (tristate) -t2; + case maybe: + return yes; + case yes: + return t2; + } + return maybe; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/enum4.C b/gcc/testsuite/g++.old-deja/g++.jason/enum4.C new file mode 100644 index 000000000000..ab8b69f4aa73 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/enum4.C @@ -0,0 +1,10 @@ +// Build don't link: +// Special g++ Options: -Wall + +enum tristate { no = -1, maybe, yes }; + +tristate +definite_tristate (int truth) +{ + return (truth) ? yes : no; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/enum5.C b/gcc/testsuite/g++.old-deja/g++.jason/enum5.C new file mode 100644 index 000000000000..bbaa6747461e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/enum5.C @@ -0,0 +1,8 @@ +enum { a = 1 }; + +int main(void) +{ + int l = -1; + + return ! (l < a); // testcase fails if a is unsigned +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/enum6.C b/gcc/testsuite/g++.old-deja/g++.jason/enum6.C new file mode 100644 index 000000000000..4097e2db1eb8 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/enum6.C @@ -0,0 +1,15 @@ +// Special g++ Options: -fshort-enums + +#include <limits.h> + +enum A { a1 = 0x7fffffff }; +enum B { b1 = 0x80000000 }; +enum C { c1 = -1, c2 = 0x80000000 }; +enum D { d1 = CHAR_MIN, d2 = CHAR_MAX }; +enum E { e1 = CHAR_MIN, e2 = CHAR_MIN }; + +main() +{ + return (sizeof (A) != 4 || sizeof (B) != 4 || sizeof (C) != 8 + || sizeof (D) != 1 || sizeof (E) != 1); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/enum7.C b/gcc/testsuite/g++.old-deja/g++.jason/enum7.C new file mode 100644 index 000000000000..0f683047aec4 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/enum7.C @@ -0,0 +1,15 @@ +// Yet Another testcase for signed/unsigned enums. +// Build don't link: + +enum A { AA = 0, AB = 1}; +enum B { BA = -1, BB = 1}; + +void set(int a); +void set(long a); + +void +foo() +{ + set(AA); // gets bogus error - why is this ambiguous + set(BA); // when this is not amibguous +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/enum8.C b/gcc/testsuite/g++.old-deja/g++.jason/enum8.C new file mode 100644 index 000000000000..811b44cf29b9 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/enum8.C @@ -0,0 +1,20 @@ +// Bug: the switch fails on the Alpha because folding ef - 1 fails. + +enum foo { one=1, thirty=30 }; + +int f (enum foo ef) +{ + switch (ef) + { + case one: + case thirty: + return 0; + default: + return 1; + } +} + +main () +{ + return f (one); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/explicit.C b/gcc/testsuite/g++.old-deja/g++.jason/explicit.C new file mode 100644 index 000000000000..9fcecfd81aea --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/explicit.C @@ -0,0 +1,15 @@ +// Testcase for explicit instantiation of templates. +// Build don't link: + +template <class T> +class A { + T t; +public: + void f () { } +}; + +template class A<int>; + +template <class T> T min (T a, T b) { return (a < b ? a : b); } + +template int min (int, int); diff --git a/gcc/testsuite/g++.old-deja/g++.jason/expr1.C b/gcc/testsuite/g++.old-deja/g++.jason/expr1.C new file mode 100644 index 000000000000..89d719fddd96 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/expr1.C @@ -0,0 +1,12 @@ +// Bug: g++ doesn't figure out what to do. +// Build don't link: + +struct A { + operator char *(); +}; + +char foo(A a) +{ + char c = a[0]; // gets bogus error + return c; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/friend.C b/gcc/testsuite/g++.old-deja/g++.jason/friend.C new file mode 100644 index 000000000000..ee6ee8d5eaeb --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/friend.C @@ -0,0 +1,18 @@ +// Bug: g++ doesn't keep track of the lexical context of friends properly. + +extern "C" void exit(int); + +struct B; +struct A { + static void f () { exit (1); } +}; + +struct B { + static void f () { exit (0); } + friend void g () { f (); } +}; + +main () +{ + g (); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/friend2.C b/gcc/testsuite/g++.old-deja/g++.jason/friend2.C new file mode 100644 index 000000000000..02ccb5c59dc9 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/friend2.C @@ -0,0 +1,21 @@ +// PRMS Id: 5189 +// Bug: g++ fails to collapse the several declarations of freefoo, so it isn't +// recognized as a friend. +// Build don't link: + +extern "C" +void freefoo(void); + +class foo { + friend void freefoo(void); + protected: + static void foomem(); + public: + foo(); + ~foo(); +}; + +void freefoo(void) +{ + foo::foomem(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/groff1.C b/gcc/testsuite/g++.old-deja/g++.jason/groff1.C new file mode 100644 index 000000000000..79a96438ad9f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/groff1.C @@ -0,0 +1,40 @@ +// PRMS Id: 3744 +// Bug: unswitching a COND_EXPR initializer fails to set SIDE_EFFECTS on the +// result, so expand_expr ignores it. + +extern "C" { + int printf(const char *,...); + void exit(int); +} + +struct A { + int x; + int y; + + A() : x(0), y(0) { } +}; + +struct S { + S() : flags(0) { } + unsigned flags; + A from; + void foo(const A &pos); +}; + +void S::foo(const A &pos) +{ + A a = flags ? from : pos; + printf("%d %d\n", a.x, a.y); + if (a.x != 17 || a.y != 12) + exit (1); +} + +main() +{ + A pos; + pos.x = 17; + pos.y = 12; + S s; + s.foo(pos); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/hmc1.C b/gcc/testsuite/g++.old-deja/g++.jason/hmc1.C new file mode 100644 index 000000000000..751cf80f481d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/hmc1.C @@ -0,0 +1,19 @@ +// Build don't link: +// GROUPS passed templates default-arguments +template <class I> +class Class { +public: + void func1(int n=1); + void func2(int d) {} +}; +template <class I> +void Class<I>::func1(int n) {} + +//if this is replaced by: +//void Class<I>::func1(int n=1) {} +//the code compiles. + +main() { + Class<int> C; + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/incomplete1.C b/gcc/testsuite/g++.old-deja/g++.jason/incomplete1.C new file mode 100644 index 000000000000..8b738d9f6065 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/incomplete1.C @@ -0,0 +1,15 @@ +// The reference parameter to fred isn't dereferenced properly. +// Build don't link: + +class Gump {}; +Gump operator & (const Gump x){return x;} + +class B; + +void *sam(int &x) +{return &x;} + +const void *fred(const B& x) +{return &x;} // "&x" causes the compilation error. + +class B {}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/incomplete2.C b/gcc/testsuite/g++.old-deja/g++.jason/incomplete2.C new file mode 100644 index 000000000000..66423215a92f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/incomplete2.C @@ -0,0 +1,7 @@ +// Build don't link: + +struct A { + int foo(A a) { return a.bar(); } + int bar(); + int n; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/init.C b/gcc/testsuite/g++.old-deja/g++.jason/init.C new file mode 100644 index 000000000000..032d172e1609 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/init.C @@ -0,0 +1,7 @@ +// Bug: g++ uses an empty initializer list for its own devious purpose +// internally, and gets confused if it shows up in the input. +// Build don't link: + +struct A { int i; }; + +A a = { }; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/init2.C b/gcc/testsuite/g++.old-deja/g++.jason/init2.C new file mode 100644 index 000000000000..dcee91835dc4 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/init2.C @@ -0,0 +1,9 @@ +// PRMS Id: 5126 + +extern int i, j; +static const int foo [] = { i, j }; +int i = 5, j = 42; +main() +{ + return foo[1] != 42; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/init3.C b/gcc/testsuite/g++.old-deja/g++.jason/init3.C new file mode 100644 index 000000000000..bb3d0d8cf10f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/init3.C @@ -0,0 +1,42 @@ +// PRMS Id: 5652 +// Bug: strings does not get initialized. + +extern "C" void * memcpy (void *, const void *, __SIZE_TYPE__); +extern "C" int strcmp (const char *, const char *); + +class My_string { + char *str; + int len; +public: + My_string(const char* string); + My_string(const My_string &); + ~My_string() { delete str; } + char* char_p() { return str; } +}; + +const My_string strings[4] = { + "first string", + "second string", + "third string", + "fourth string" +}; + +My_string::My_string(const char* string) +{ + len = strlen(string) + 1; + str = new char[len]; + memcpy(str, string, len); +} + +My_string::My_string(const My_string &string) +{ + len = string.len; + str = new char[len]; + memcpy(str, string.str, len); +} + +main() +{ + My_string str1 = strings[0]; + return strcmp ("first string", str1.char_p ()) != 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/init4.C b/gcc/testsuite/g++.old-deja/g++.jason/init4.C new file mode 100644 index 000000000000..aa9417c642f3 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/init4.C @@ -0,0 +1,3 @@ +struct A { int i; }; + +A a = {{{1}}}; // ERROR - causes abort diff --git a/gcc/testsuite/g++.old-deja/g++.jason/inline.C b/gcc/testsuite/g++.old-deja/g++.jason/inline.C new file mode 100644 index 000000000000..ac140ab6744e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/inline.C @@ -0,0 +1,21 @@ +// PRMS Id: 4341 +// Bug: Instantiating a template in the middle of processing the functions +// from another template screws up lineno/input_filename. + +#pragma implementation "C.h" +#line 1 "A.h" +#pragma interface +template <class T> class A {}; +#line 1 "C.h" +#pragma interface +template <class T> class C +{ +public: + C() { A<T> *ap; } + ~C() { } +}; +#line 18 "inline.C" +main() +{ + C<int> c; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/inline2.C b/gcc/testsuite/g++.old-deja/g++.jason/inline2.C new file mode 100644 index 000000000000..7dea476d373e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/inline2.C @@ -0,0 +1,12 @@ +// Bug: the lang-specific bits of the decl for g aren't being copied when +// inlining. +// Special g++ Options: -O +// Build don't link: + +inline void f () { + void g (); +} + +void h() { + f(); // causes compiler segfault - +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/jump.C b/gcc/testsuite/g++.old-deja/g++.jason/jump.C new file mode 100644 index 000000000000..754e7006c369 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/jump.C @@ -0,0 +1,14 @@ +// PRMS Id: 6036 + +extern int a; + +main() { + switch (a) { + case 1: + int v2 = 3; // ERROR - referenced below + case 2: // ERROR - jumping past initializer + if (v2 == 7) + ; + } + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/lex1.C b/gcc/testsuite/g++.old-deja/g++.jason/lex1.C new file mode 100644 index 000000000000..69fb0b7bbea6 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/lex1.C @@ -0,0 +1,6 @@ +main() +{ + char c = '\351'; + if (c != '\351') + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/lineno.C b/gcc/testsuite/g++.old-deja/g++.jason/lineno.C new file mode 100644 index 000000000000..6878f75b61a9 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/lineno.C @@ -0,0 +1,6 @@ +// Bug; g++ binds a function definition to the line number of a later decl. +// Build don't link: + +void foo () { } // ERROR - redeclared +void foo (); // gets bogus error - invalid binding +void foo () { } // ERROR - redeclared diff --git a/gcc/testsuite/g++.old-deja/g++.jason/lineno2.C b/gcc/testsuite/g++.old-deja/g++.jason/lineno2.C new file mode 100644 index 000000000000..6c278036b9a5 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/lineno2.C @@ -0,0 +1,14 @@ +// Build don't link: +// GROUPS passed error-reporting +// Special g++ Options: +// Bug: # line directive gets ignored immediately after text. +template <class T> class A +{ +public: +# 200 "lineno2.C" +}; + +main() +{ + undef1(); // ERROR - , LINE 204 +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/lineno3.C b/gcc/testsuite/g++.old-deja/g++.jason/lineno3.C new file mode 100644 index 000000000000..f2688635437b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/lineno3.C @@ -0,0 +1,13 @@ +// Build don't link: +// Special g++ Options: +// GROUPS passed error-reporting +// potential bug: # line directive does not get reproduced in template +// expansion +template <class T> class A +{ +public: +# 200 "lineno3.C" + int foo () { undef1(); } // ERROR - , LINE 200 +}; + +template class A<int>; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/lineno4.C b/gcc/testsuite/g++.old-deja/g++.jason/lineno4.C new file mode 100644 index 000000000000..a570edf313c2 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/lineno4.C @@ -0,0 +1,13 @@ +// Build don't link: +// Special g++ Options: +// GROUPS passed error-reporting +// Bug: # line directive in template definition interferes with growing obstack +template <class T> class A +{ +public: + +# 200 "lineno4.C" + int foo () { undef1(); } // ERROR - , LINE 200 +}; + +template class A<int>; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/lineno5.C b/gcc/testsuite/g++.old-deja/g++.jason/lineno5.C new file mode 100644 index 000000000000..f15aef05fceb --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/lineno5.C @@ -0,0 +1,10 @@ +// Build don't link: +// GROUPS passed error-reporting +// Bug: incomplete instantiation messes with lineno +template <class T> class A; + +main() +{ + A<int> *p; + undef1();// ERROR - +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/local.C b/gcc/testsuite/g++.old-deja/g++.jason/local.C new file mode 100644 index 000000000000..6159db0c613b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/local.C @@ -0,0 +1,20 @@ +// General testcase for local classes. + +int x; +void f () +{ + static int s; + int x; // ERROR - referenced below + extern int q(); + + struct local { + int g() { return x; } // ERROR - automatic variable + int h() { return s; } // gets bogus error - local class + int k() { return ::x; } // OK + int l() { return q(); } // OK + int m(); // OK - not defined + static int foo; // ERROR - static data member of local class + }; +} + +local* p = 0; // ERROR - no such type in scope diff --git a/gcc/testsuite/g++.old-deja/g++.jason/lookup.C b/gcc/testsuite/g++.old-deja/g++.jason/lookup.C new file mode 100644 index 000000000000..c6c44c373d9f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/lookup.C @@ -0,0 +1,30 @@ +// PRMS Id: 4357 +// Bug: g++ forgets to clear out push/popclass cache stuff when instantiating +// templates. +// Build don't link: + +template <class T> class ccHandle { }; + +class cc_GStack +{ + static cc_GStack* freeList; +}; + +// OK if ccGStack is not derived from ccHandle<something> +class ccGStack : public ccHandle<int> { }; + +struct S { }; + +S* freeList; + +class X +{ +public: + void foo(); +}; + +void X::foo() +{ + S m; + freeList = &m; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/lookup2.C b/gcc/testsuite/g++.old-deja/g++.jason/lookup2.C new file mode 100644 index 000000000000..e44b1dcb0579 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/lookup2.C @@ -0,0 +1,13 @@ +// Build don't link: + +struct A { + struct B { + B (); + }; +}; +void f (A::B); +void g () +{ + A::B b; + f (b); // gets bogus error - can't find nested constructor +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/lookup3.C b/gcc/testsuite/g++.old-deja/g++.jason/lookup3.C new file mode 100644 index 000000000000..7be731ef0f54 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/lookup3.C @@ -0,0 +1,15 @@ +// [class.ambig]: A single function, object, type, or enumerator may be +// reached through more than one path through the DAG of base classes. This +// is not an ambiguity. +// Build don't link: + +struct A { + typedef long T; +}; + +struct B : public A { }; +struct C : public A { }; + +struct D : public C , public B { + void f (T&); // gets bogus error - ambiguous lookup +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/loverload.C b/gcc/testsuite/g++.old-deja/g++.jason/loverload.C new file mode 100644 index 000000000000..2d1a9b36ae6b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/loverload.C @@ -0,0 +1,11 @@ +// Bug: g++ can't deal with multi-language overloading. +// Build don't link: + +extern void foo (int, int); +extern "C" void foo (int); + +void bar () +{ + foo (1); + foo (1, 2); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/loverload3.C b/gcc/testsuite/g++.old-deja/g++.jason/loverload3.C new file mode 100644 index 000000000000..c9cc3bfbe578 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/loverload3.C @@ -0,0 +1,12 @@ +// PRMS Id: 2010 +// Bug: g++ doesn't deal with overloads involving C-language fns properly. +// Build don't link: + +extern "C" double pow (double, double); +inline double pow (double d, int e) { return pow (d, (double) e); } + +void foo () +{ + pow (1.0, 1); + pow (1.0, 1.0); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/loverload4.C b/gcc/testsuite/g++.old-deja/g++.jason/loverload4.C new file mode 100644 index 000000000000..c689bf5169d7 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/loverload4.C @@ -0,0 +1,8 @@ +// Bug: g++ dies on this input. +// Build don't link: + +inline char abs (char x) { return 0; } + +extern "C" { + inline int abs (int x) { return 1; } +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/lvalue.C b/gcc/testsuite/g++.old-deja/g++.jason/lvalue.C new file mode 100644 index 000000000000..c85e6fe5f280 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/lvalue.C @@ -0,0 +1,22 @@ +// Bug: Scoped method calls don't propagate the constness of `this'. +// PRMS Id: 4181 (second testcase) +// Build don't link: + +class D; + +class Bptr +{ +public: + Bptr& operator=(D*); + const Bptr& operator=(const D*) const; +}; + +class Dptr : public Bptr +{ +public: + const Dptr& operator=(const D* rep) const + { + Bptr::operator=(rep); + return *this; + } +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/lvalue2.C b/gcc/testsuite/g++.old-deja/g++.jason/lvalue2.C new file mode 100644 index 000000000000..2fba73c9c87c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/lvalue2.C @@ -0,0 +1,20 @@ +// PRMS Id: 4892 +// Bug: COND_EXPRs, MODIFY_EXPRs and COMPOUND_EXPRs aren't properly recognized +// as lvalues. +// Build don't link: + +extern int foo; +int& f (int& a, int& b) +{ + return (foo ? a : b); // gets bogus error - +} + +int& g (int& a) +{ + return (a = 0); // gets bogus error - +} + +int& h (int& a, int& b) +{ + return (a = 1, b); // gets bogus error - +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/lvalue3.C b/gcc/testsuite/g++.old-deja/g++.jason/lvalue3.C new file mode 100644 index 000000000000..a3edaac6557e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/lvalue3.C @@ -0,0 +1,9 @@ +// Bug: C++ semantics for assignment don't match the backend semantics for +// MODIFY_EXPR. +// Build don't link: + +void +foo (int j) +{ + (j = 1)++; // causes compiler segfault +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/lvalue4.C b/gcc/testsuite/g++.old-deja/g++.jason/lvalue4.C new file mode 100644 index 000000000000..f308213bcc48 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/lvalue4.C @@ -0,0 +1,6 @@ +main() { + int i = 2; + int *pi = &(++i); + + return i != 3; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/mangle1.C b/gcc/testsuite/g++.old-deja/g++.jason/mangle1.C new file mode 100644 index 000000000000..59b83b9c3611 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/mangle1.C @@ -0,0 +1,23 @@ +// Bug: numeric_outputed_need_bar is not cleared properly, adding random '_'s +// to mangled names. + +// Build don't link: + +template <int seed_length> +class rand1 +{ +public: + rand1 (); +}; + +class codes +{ +public: + rand1<32> * randgen; + codes (int ptr); + +}; + +codes::codes (int ptr) +{ +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/mangle2.C b/gcc/testsuite/g++.old-deja/g++.jason/mangle2.C new file mode 100644 index 000000000000..b1876b71249d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/mangle2.C @@ -0,0 +1,23 @@ +// I guess this was broken once. +// Build don't link: + +template <class C, int D> class X { }; +typedef X<int, 0> T; + +class Y +{ + public: + ~Y(); +}; + +class Z +{ + public: + void f(T**); +}; + +void Z::f(T** t) +{ } + +Y::~Y() +{ } diff --git a/gcc/testsuite/g++.old-deja/g++.jason/mangle3.C b/gcc/testsuite/g++.old-deja/g++.jason/mangle3.C new file mode 100644 index 000000000000..5a82107bfef8 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/mangle3.C @@ -0,0 +1,19 @@ +// PRMS Id: 7563 +// Bug: declaration at function scope causes mismangling. + +int main() +{ + char ArrA[10][10][20][30], + ArrB[10][10][20][30]; + + void HitMe(char [10][10][20][30], char [10][10][20][30]); + + HitMe(ArrA, ArrB); + + return 0; +} + +void HitMe(char A[10][10][20][30], char B[10][10][20][30]) +{ + return; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/member.C b/gcc/testsuite/g++.old-deja/g++.jason/member.C new file mode 100644 index 000000000000..3518811967cf --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/member.C @@ -0,0 +1,35 @@ +// Build don't link: +// GROUPS passed member-pointers error-reporting +struct Y +{ + struct X + { + int A; + int Y::X::* foo () { undef1(1); return &Y::X::A; }// ERROR - foo().* + int bar () { return A; } + }; +}; + +int Y::X::* foo () +{ + undef2(1);// ERROR - foo().* + return &Y::X::A; +} + +int Y::X::* (* foo2 ())() +{ + undef3(1);// ERROR - foo().* + return foo; +} + +int (Y::X::* bar2 ()) () +{ + undef4(1);// ERROR - foo\(\).* + return Y::X::bar;// ERROR - foo\(\).* +} + +int Y::X::* (Y::X::* foo3 ())() +{ + undef5(1);// ERROR - foo().* + return Y::X::foo;// ERROR - foo().* +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/member1.C b/gcc/testsuite/g++.old-deja/g++.jason/member1.C new file mode 100644 index 000000000000..c25a1904a4a7 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/member1.C @@ -0,0 +1,4 @@ +// Build don't link: + +struct S { int S; } object; +struct S function () { return object; } diff --git a/gcc/testsuite/g++.old-deja/g++.jason/method.C b/gcc/testsuite/g++.old-deja/g++.jason/method.C new file mode 100644 index 000000000000..e9496b828614 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/method.C @@ -0,0 +1,12 @@ +// Bug: pointer to pointer is treated as plain pointer. +// PRMS Id: 1767 +// Build don't link: + +class Foo { +public: + void method(); +}; + +void func(Foo ** ppFoo) { + ppFoo->method(); // ERROR - +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/mi.C b/gcc/testsuite/g++.old-deja/g++.jason/mi.C new file mode 100644 index 000000000000..eaf59b202333 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/mi.C @@ -0,0 +1,16 @@ +int status; + +struct A { virtual void foo () { status = 1; } }; +struct B { }; +struct C : public A, public B { }; +struct D { virtual void baz () { } }; +struct E : public D, public C { void foo () { status = 0; } }; + +main () +{ + E* ep = new E; + + ep->foo(); + + return status; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/mutable1.C b/gcc/testsuite/g++.old-deja/g++.jason/mutable1.C new file mode 100644 index 000000000000..9298d2ef882a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/mutable1.C @@ -0,0 +1,11 @@ +struct X +{ + X () { } + mutable int x; +}; + +main () +{ + const X x; + x.x = 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/nested1.C b/gcc/testsuite/g++.old-deja/g++.jason/nested1.C new file mode 100644 index 000000000000..4405f3d06495 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/nested1.C @@ -0,0 +1,12 @@ +// Bug: g++ can't deal with function-local classes that talk about themselves. +// Build don't link: + +void foo() { + class Wrapper { + public: + void F (void * Wrapperptr) + { + Wrapper * wrapptr = ( Wrapper *) Wrapperptr; // gets bogus error + } + }; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/nested2.C b/gcc/testsuite/g++.old-deja/g++.jason/nested2.C new file mode 100644 index 000000000000..24020a2dd24f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/nested2.C @@ -0,0 +1,26 @@ +// PRMS Id: 3764 (c/h) +// Bug: g++ gets into an infinite loop trying to find the top-level context +// Build don't link: + +class Menu; +class MenuItem; + +class MenuAction { +public: + virtual void execute (Menu& menu, MenuItem& menuItem) = 0; +protected: + MenuAction () {} +}; + +class Test { + class MenuCBA : public MenuAction { + public: + typedef void (Test::* MenuCBA_Member) (Menu& menu, MenuItem& menuItem); + MenuCBA (Test& instance, MenuCBA_Member member) + : _instance(&instance), _member(member) { } + void execute (Menu& menu, MenuItem& menuItem); + private: + MenuCBA_Member _member; + Test* _instance; + }; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/nested4.C b/gcc/testsuite/g++.old-deja/g++.jason/nested4.C new file mode 100644 index 000000000000..cd5a8393eb06 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/nested4.C @@ -0,0 +1,17 @@ +// From: quipu@ulrik.uio.no +// Subject: extern "C" nested class +// Date: Fri, 13 Aug 1993 15:33:53 +0200 +// Build don't link: + +extern "C" { + struct A { + struct B { int j; } *x; + }; +} + +void +foo () { + A a; + struct A::B *b; + b = a.x; // gets bogus error - type `B' is not a base type for type `B' +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/nested5.C b/gcc/testsuite/g++.old-deja/g++.jason/nested5.C new file mode 100644 index 000000000000..1b0e35c9b919 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/nested5.C @@ -0,0 +1,11 @@ +// Build don't link: + +struct A { + struct B { }; +}; + +struct C : public A { + struct D + : public B // gets bogus error - can't find B + { }; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/nested6.C b/gcc/testsuite/g++.old-deja/g++.jason/nested6.C new file mode 100644 index 000000000000..b98c643d3fb1 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/nested6.C @@ -0,0 +1,5 @@ +// Build don't link: +union A { + struct B { }; + A::B b; // gets bogus error +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/nested7.C b/gcc/testsuite/g++.old-deja/g++.jason/nested7.C new file mode 100644 index 000000000000..43cce2385468 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/nested7.C @@ -0,0 +1,16 @@ +// Testcase for defining nested types separately. +// Build don't link: + +class remote +{ + class remote_file; +}; + +class remote::remote_file +{ +public: + ~remote_file(); +}; + +remote::remote_file::~remote_file() +{} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/nested8.C b/gcc/testsuite/g++.old-deja/g++.jason/nested8.C new file mode 100644 index 000000000000..ff2d659a3fc7 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/nested8.C @@ -0,0 +1,8 @@ +// Build don't link: + +struct A { }; +struct B: public A { + struct C { +friend struct B; // gets bogus error - base clause w/o members + }; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/net.C b/gcc/testsuite/g++.old-deja/g++.jason/net.C new file mode 100644 index 000000000000..be8b962ad805 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/net.C @@ -0,0 +1,10 @@ +// Bug: g++ doesn't instantiate function templates in instantiate_type. +// Build don't link: + +template <class T> void fn (T t) { } +template <class T> struct A { + void (*p)(T); + A() { p = fn; } +}; + +A<int> a; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/net2.C b/gcc/testsuite/g++.old-deja/g++.jason/net2.C new file mode 100644 index 000000000000..8738eade438a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/net2.C @@ -0,0 +1,37 @@ +// Test of various ?: problems. + +class D +{ +public: + void a(); + void b(); + D(int i):x(i) {} +private: + int x; +}; + +void D::a() {++x;} +void D::b() {--x;} + + +int aa=1, bb=0; + +int fa() {return 0;} +int fb() {return 2;} + +int main(int argc, char* argv[]) +{ + typedef int* pi; + int* p = (argc == 1)? &aa: &bb; + *p = 0; + + typedef int (*ifptr)(); + ifptr fp = (argc == 1)? fa: fb; + aa = fp(); + + D d(0); + typedef void (D::*dmem)(); + dmem mfp = (argc == 1)? &D::a: &D::b; + (d.*mfp)(); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/new.C b/gcc/testsuite/g++.old-deja/g++.jason/new.C new file mode 100644 index 000000000000..1a71ea5f3c53 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/new.C @@ -0,0 +1,25 @@ +// Bug: new doesn't make sure that the count is an integral value. + +typedef __SIZE_TYPE__ size_t; +extern "C" int printf (const char *, ...); +extern "C" void *malloc (size_t); +size_t s; + +void * operator new (size_t siz) { + if (s == 0) + s = siz; + else + s = (s != siz); + return malloc (siz); +} + +main() +{ + s = 0; + + float f = 3; + int* b1 = new int[(int)f]; + int* b2 = new int[f]; + + return s; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/new2.C b/gcc/testsuite/g++.old-deja/g++.jason/new2.C new file mode 100644 index 000000000000..96ac5a3ce0ca --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/new2.C @@ -0,0 +1,12 @@ +// PRMS Id: 6267 +// Special g++ Options: -fthis-is-variable + +struct A { + int i; + A() { i = 2; } +}; + +main() +{ + A *p = new A (); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/new3.C b/gcc/testsuite/g++.old-deja/g++.jason/new3.C new file mode 100644 index 000000000000..ede3a00e9dd0 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/new3.C @@ -0,0 +1,23 @@ +// PRMS Id: 6037 +// Special g++ Options: -fcheck-new + +extern "C" void * malloc (__SIZE_TYPE__); + +struct A { + int i; + A () { i = 2; } +}; + +int ena = 0; +void * operator new (__SIZE_TYPE__ s) +{ + if (ena) + return 0; + return malloc (s); +} + +main () +{ + ena = 1; + A* ap = new A; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/new4.C b/gcc/testsuite/g++.old-deja/g++.jason/new4.C new file mode 100644 index 000000000000..ba8af272cb5d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/new4.C @@ -0,0 +1,22 @@ +// Special g++ Options: -fcheck-new + +struct A { + A(): i(42) { } + A(int j): i(j) { } + int i; +}; + +A* ap = new A (1); +A* ap2 = new A[3]; + +main () +{ + if (ap->i != 1 || ap2[0].i != 42 || ap2[1].i != 42 || ap2[2].i != 42) + return 1; + + A* ap = new A (1); + A* ap2 = new A[3]; + + if (ap->i != 1 || ap2[0].i != 42 || ap2[1].i != 42 || ap2[2].i != 42) + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/new5.C b/gcc/testsuite/g++.old-deja/g++.jason/new5.C new file mode 100644 index 000000000000..70f5ec5d4751 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/new5.C @@ -0,0 +1,5 @@ +main () +{ + const int *p = new const int (0); + delete p; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/offset1.C b/gcc/testsuite/g++.old-deja/g++.jason/offset1.C new file mode 100644 index 000000000000..d4fd38b70dc0 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/offset1.C @@ -0,0 +1,17 @@ +// PRMS Id: 5070 (testcase 1) +// Build don't link: + +struct foo { + foo(int x = 0) {}; + int IsAlive(void) { return 1; } +}; + +struct xx { + int IsOk(int X); + foo a; +}; + +int xx::IsOk(int X) +{ + return ((xx::a).IsAlive()); // gets bogus error +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/offset2.C b/gcc/testsuite/g++.old-deja/g++.jason/offset2.C new file mode 100644 index 000000000000..787e3f120810 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/offset2.C @@ -0,0 +1,23 @@ +// PRMS Id: 5070 (testcase 2) + +int status = 1; + +struct foo { + foo& operator= (const foo&) { status = 0; } +}; + +struct xx { + foo a; +}; + +struct yy : public xx { + yy(foo& a) { xx::a = a; } +}; + +main() +{ + foo f; + yy y (f); + + return status; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/offset3.C b/gcc/testsuite/g++.old-deja/g++.jason/offset3.C new file mode 100644 index 000000000000..d980ba1fcd0f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/offset3.C @@ -0,0 +1,22 @@ +// PRMS Id: 5070 (bug 2) +// Build don't link: + +struct A { + void f (); +}; + +struct Ptr { + A* operator->(); +}; + +struct B { + Ptr p; +}; + +struct C: public B { + void g (); +}; + +void C::g() { + B::p->f(); // gets bogus error +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/offset4.C b/gcc/testsuite/g++.old-deja/g++.jason/offset4.C new file mode 100644 index 000000000000..2a5049105a4d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/offset4.C @@ -0,0 +1,15 @@ +// Bug: g++ complains about the use of A::p below. +// Build don't link: + +struct A { + void *p; +}; + +struct B: public A { + int f () + { + if (A::p) + return 1; + return 0; + } +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/opeq.C b/gcc/testsuite/g++.old-deja/g++.jason/opeq.C new file mode 100644 index 000000000000..ac099a4a6670 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/opeq.C @@ -0,0 +1,39 @@ +// PRMS Id: 4297 (related to 3525) +// Bug: Generating default op= didn't set TYPE_HAS_ASSIGNMENT, so it wasn't +// found. + +extern "C" int printf (char *, ...); + +class Y +{ +public: + Y(char*) {} + Y& operator = (const Y&) {} +}; + + +class X +{ +public: + X(int v, char* m) : _v(v), _m (m) {} + X () : _v(0), _m("Unknown") {} + // Defining our own op= here makes things work correctly. + +private: + int _v; + int _m4; + // Adding more members here increases the count on u. + Y _m; +}; + +const X sPassed (1, "Passed"), sFailed (-1, "Failed"); + +int main (int, char**) +{ + X result; + int u = 0; + result = (u++ ? sPassed : sFailed); + if (u == 1) + return 0; + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/opeq2.C b/gcc/testsuite/g++.old-deja/g++.jason/opeq2.C new file mode 100644 index 000000000000..9e91ab3ae0fa --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/opeq2.C @@ -0,0 +1,26 @@ +// Bug: default operator= is not being generated properly. +// PRMS Id: 3525 +// Build don't link: + +struct ccUnwind +{ + ccUnwind& operator = (const ccUnwind&); +}; + +struct ccEllipseUnit +{ + ccEllipseUnit () {} +}; + +struct ccEllipse : ccUnwind +{ + ccEllipse (); + ccEllipse (const ccEllipseUnit&); + +}; + +void foo () +{ + ccEllipse e; + e = ccEllipseUnit(); // gets bogus error - assignment not defined +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/opeq3.C b/gcc/testsuite/g++.old-deja/g++.jason/opeq3.C new file mode 100644 index 000000000000..e290f7a21bab --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/opeq3.C @@ -0,0 +1,15 @@ +// Bug: g++ generates code for assignment in invalid situations. +// Build don't link: + +class X { + int& a; +public: + X(int& i): a(i) { }; +}; + +void foo () +{ + int one=1, two=2; + X a(one), b(two); + a = b; // ERROR - no assignment semantics defined +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/opeq4.C b/gcc/testsuite/g++.old-deja/g++.jason/opeq4.C new file mode 100644 index 000000000000..d993d83ab9dc --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/opeq4.C @@ -0,0 +1,8 @@ +// PRMS Id: 4329 +// Bug: default op= gives an warning about casting away volatile. +// Build don't link: + +struct foo +{ + volatile int bar[2]; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/opeq5.C b/gcc/testsuite/g++.old-deja/g++.jason/opeq5.C new file mode 100644 index 000000000000..c591830515bc --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/opeq5.C @@ -0,0 +1,26 @@ +// Testcase for tricky synthesized op= in complex inheritance situation. +// See discussion in g++int.texi. + +// execution test fails - + +int count = 0; +extern "C" int printf (const char *, ...); + +class A { + public: + A& operator = (const A&) { count++; return *this; } +}; + +class B: virtual private A { }; +class C: virtual public A { }; +class D: public B, public C { }; + +int main() +{ + D a, b; + a = b; + printf ("%d\n",count); + if (count != 1) + return 1; + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/opeq6.C b/gcc/testsuite/g++.old-deja/g++.jason/opeq6.C new file mode 100644 index 000000000000..62be499c56d7 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/opeq6.C @@ -0,0 +1,24 @@ +// Testcase for wrongful generation of operator =. +// Build don't link: + +class ivResource { +public: + ivResource (); +private: + ivResource & operator =(const ivResource &); +}; + +class ivButtonState : virtual public ivResource { +public: + void operator=(ivButtonState &); +}; + +class ivPrintBS : public ivButtonState { +}; + +void f () +{ + ivPrintBS a, b; + a = b; +} + diff --git a/gcc/testsuite/g++.old-deja/g++.jason/operator.C b/gcc/testsuite/g++.old-deja/g++.jason/operator.C new file mode 100644 index 000000000000..a81a42385f80 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/operator.C @@ -0,0 +1,31 @@ +// General test for operator overloading permissiveness. +// Build don't link: +// Special g++ Options: + +typedef unsigned long size_t; + +struct A { + int operator?:(int a, int b); // WARNING - + static int operator()(int a); // ERROR - must be nonstatic + static int operator+(A,A); // ERROR - must be nonstatic + int operator+(int a, int b = 1); // ERROR - two errors on this line + int operator++(char); // ERROR - must take 'int' + void operator delete (void *); // ERROR - overloaded + void operator delete (void *, unsigned long); // ERROR - overloaded +}; + +struct B { + void * operator new (size_t, void *); + int operator++(int = 0); + int operator+ (int); + void operator()(); + char * operator[](int); + B * operator->(); +}; + +int operator-(int a, int b); // ERROR - no class argument + +void * operator new (A a); // ERROR - invalid first argument +void operator delete (A a); // ERROR - ditto + +char * operator char * (int); // ERROR - return value, nonmember diff --git a/gcc/testsuite/g++.old-deja/g++.jason/operator2.C b/gcc/testsuite/g++.old-deja/g++.jason/operator2.C new file mode 100644 index 000000000000..477616086a2a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/operator2.C @@ -0,0 +1,14 @@ +// PRMS Id: 6018 +// Build don't link: + +class string { + char *p; +public: + string(const char* s) ;// { p == s; } + operator const char*() ;// { return s; } +}; + +void f4(string& s) +{ + *s; // implies "s.operator const char*()" +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/opover.C b/gcc/testsuite/g++.old-deja/g++.jason/opover.C new file mode 100644 index 000000000000..1fa90b68f253 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/opover.C @@ -0,0 +1,15 @@ +// Bug: g++ prefers a non-matching operator== over user-defined conversions +// and a default operator==. +// Build don't link: + +struct A { + operator int (); +}; + +struct B { + friend operator== (B, int); +}; + +int foo (A& a) { + return a == 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/optimize.C b/gcc/testsuite/g++.old-deja/g++.jason/optimize.C new file mode 100644 index 000000000000..1f554e219359 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/optimize.C @@ -0,0 +1,42 @@ +// Bug: g++ claims that control can fall off the end of these functions. +// PRMS Id: 4943 +// Special g++ Options: -O -pedantic-errors +// Build don't link: + +struct A { + A(); + A(const A&); + A& operator= (const A&); + ~A(); +}; + +int f () +{ + A a[2]; + return 1; +} // gets bogus error - jump_optimize + +int g () +{ + A a; + return 1; +} // gets bogus error - jump_optimize + +struct B { + B(); + B(const B&); + B& operator= (const B&); + ~B(); +}; + +inline B::~B() +{ + int i = 2; + while (i--) ; +} + +int h () +{ + B b; + return 1; +} // gets bogus error - jump_optimize diff --git a/gcc/testsuite/g++.old-deja/g++.jason/optimize2.C b/gcc/testsuite/g++.old-deja/g++.jason/optimize2.C new file mode 100644 index 000000000000..0d4e17752c75 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/optimize2.C @@ -0,0 +1,19 @@ +// Used to crash on the alpha with optimization. +// Special g++ Options: -w + +struct Fix { + unsigned short l; +}; + +static inline void f (int len) +{ + if (len > 65535) + abort (); +} + +struct Fix a = { 33 }; + +main() +{ + f (a.l); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/overload.C b/gcc/testsuite/g++.old-deja/g++.jason/overload.C new file mode 100644 index 000000000000..7d7aeee05b1a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/overload.C @@ -0,0 +1,20 @@ +// Build don't link: +// GROUPS passed overloading +enum bar {}; + +void operator+ (int, int);// ERROR - .* +void operator+ (bar&, int); + +template <class T> void operator+ (int b, T& t) { return b; } +void operator+ (int, bar&); + +template <class T> class foo +{ +public: + friend void operator+ (int, T&); +}; + +class baz; + +class foo<int>; +class foo<baz>; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/overload1.C b/gcc/testsuite/g++.old-deja/g++.jason/overload1.C new file mode 100644 index 000000000000..e29a7c16b916 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/overload1.C @@ -0,0 +1,12 @@ +// Bug: g++ thinks there is a conversion from void * to B *. +// Build don't link: + +struct A { + operator void* (); +}; + +struct B: public A { }; + +void bar (A& a) { + B* bp = (B*)a; // ERROR - +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/overload10.C b/gcc/testsuite/g++.old-deja/g++.jason/overload10.C new file mode 100644 index 000000000000..a2402fcd63e6 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/overload10.C @@ -0,0 +1,21 @@ +// PRMS Id: 4257 (second bug) +// Bug: g++ fails to recognize multiple previous instantiations of a function +// template. +// Build don't link: + +template <class T> +class A { + int i; + + friend int foo (A<T>&); +}; + +template <class T> int foo (A<T>& a) { return a.i; } + +A<int> a; +A<char> dummy; + +void bar () +{ + foo (a); // gets bogus error - two foo(A<int>&)'s +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/overload11.C b/gcc/testsuite/g++.old-deja/g++.jason/overload11.C new file mode 100644 index 000000000000..e8c043f05459 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/overload11.C @@ -0,0 +1,17 @@ +// PRMS Id: 4697 +// Bug: g++ calls the non-const method for a const object. + +class A { +public: + void foo(int &i) const { i = 0; } + void foo(int &i) { i = 1; } +}; + +main() +{ + A a; + const A& b = a; + int i = 2; + b.foo (i); + return i; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/overload12.C b/gcc/testsuite/g++.old-deja/g++.jason/overload12.C new file mode 100644 index 000000000000..dc336c5caed3 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/overload12.C @@ -0,0 +1,15 @@ +// PRMS Id: 4066 +// Bug: g++ doesn't notice the const on reference returns. + +struct B { + int foo() { return 1; } + int foo() const { return 0; } +}; + +B b_; +const B &b () { return b_; } + +main() +{ + return b().foo(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/overload13.C b/gcc/testsuite/g++.old-deja/g++.jason/overload13.C new file mode 100644 index 000000000000..602dc2b4e1dc --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/overload13.C @@ -0,0 +1,27 @@ +// Bug: g++ screws up derived->base conversions when calling a global function +// in the presence of matching members in the base. Whew. + +struct xios { + virtual ~xios() { } +}; + +struct xistream: virtual public xios { + int j; + void operator>>(char&); +}; + +struct xfstreambase: virtual public xios { }; + +struct xifstream: public xfstreambase, public xistream { }; + +void operator>>(xistream& i, int j) +{ + i.j = 0; +} + +main() { + int i; + xifstream ifs; + + ifs >> i; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/overload14.C b/gcc/testsuite/g++.old-deja/g++.jason/overload14.C new file mode 100644 index 000000000000..6a5d3dc2d5ac --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/overload14.C @@ -0,0 +1,10 @@ +// Bug: g++ fails to recognize that the template matches the target type. +// Build don't link: + +template <class T> void foo (T *, int); + +struct A; +void bar () +{ + void (*p)(A *, int) = &foo; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/overload15.C b/gcc/testsuite/g++.old-deja/g++.jason/overload15.C new file mode 100644 index 000000000000..779de722c41a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/overload15.C @@ -0,0 +1,10 @@ +// Bug: g++ thinks that int->long is a promotion. +// Build don't link: + +long f (long, long); +double f (double, double); + +void g (double d) +{ + f (d, 0); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/overload16.C b/gcc/testsuite/g++.old-deja/g++.jason/overload16.C new file mode 100644 index 000000000000..e1b7f3f8a1f1 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/overload16.C @@ -0,0 +1,6 @@ +void f (int); // ERROR - +void f (long); // ERROR - +main() +{ + f (1 & 0xffffff00UL); // ERROR - ambiguous +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/overload17.C b/gcc/testsuite/g++.old-deja/g++.jason/overload17.C new file mode 100644 index 000000000000..65738482844b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/overload17.C @@ -0,0 +1,20 @@ +// Bug: g++ fails to prefer UDC's alone to UDC's plus standard conversions. +// Build don't link: + +struct B { }; +struct D: public B { }; +struct DP { + operator D * () const; + operator double () const; +}; + +void f (B *); +void f (D *); +void g (double); +void g (float); + +void h (DP p) +{ + f (p); + g (p); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/overload18.C b/gcc/testsuite/g++.old-deja/g++.jason/overload18.C new file mode 100644 index 000000000000..d4d9ec14b7e4 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/overload18.C @@ -0,0 +1,6 @@ +// pushdecl gets confused by this. +// Build don't link: + +void f (); +void f (int, int); +template <class T> T f (T) { } diff --git a/gcc/testsuite/g++.old-deja/g++.jason/overload19.C b/gcc/testsuite/g++.old-deja/g++.jason/overload19.C new file mode 100644 index 000000000000..ad5817565fbb --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/overload19.C @@ -0,0 +1,11 @@ +// PRMS Id: 4689 +// Bug: g++ doesn't notice operators overloaded on enumeral types. + +enum E { A=5, B=32, C=100 }; + +E operator|(E a, E b) { return C; }; + +int main() +{ + return (A|B) != C; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/overload2.C b/gcc/testsuite/g++.old-deja/g++.jason/overload2.C new file mode 100644 index 000000000000..564194253835 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/overload2.C @@ -0,0 +1,12 @@ +// Bug: foo and bar are considered to be overloaded (i.e. their +// IDENTIFIER_GLOBAL_VALUES are TREE_LISTs) even though they aren't, +// so ?: thinks it can't resolve the names. +// Build don't link: + +void foo (); +void bar (); + +void baz () +{ + void (*p)() = 1 ? foo : bar; // gets bogus error - wrongful overloading +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/overload20.C b/gcc/testsuite/g++.old-deja/g++.jason/overload20.C new file mode 100644 index 000000000000..dde686c5c303 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/overload20.C @@ -0,0 +1,11 @@ +// Bug: this code causes an internal compiler error 4. + +void f (char *); +void f (int); +struct A { + void f (); + void f (int); + void g () { + void (*p)(char *) = f; // ERROR - no matching function in scope + } +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/overload21.C b/gcc/testsuite/g++.old-deja/g++.jason/overload21.C new file mode 100644 index 000000000000..dc2f69ee908b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/overload21.C @@ -0,0 +1,12 @@ +struct X { + void f (int = 4, char = 'r'); // ERROR - + void g (int = 4, char = 'r'); // ERROR - +}; + +void +X::f (int i = 4, char x = 'r') +{ } // ERROR - duplicate default args + +void +X::g (int i = 9, char x = 's') +{ } // ERROR - duplicate default args diff --git a/gcc/testsuite/g++.old-deja/g++.jason/overload22.C b/gcc/testsuite/g++.old-deja/g++.jason/overload22.C new file mode 100644 index 000000000000..fd7276a473b7 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/overload22.C @@ -0,0 +1,17 @@ +// PRMS Id: 4574 +// Bug: g++ prefers int to double for float& argument +// Build don't link: + +inline double abs (double x) { return x;} +inline int abs (int i) { return i; } + +float& fn(float& f) +{ + return f; +} + +void foo() +{ + float f = 23.45; + abs(fn(f)); // gets bogus warning +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/overload23.C b/gcc/testsuite/g++.old-deja/g++.jason/overload23.C new file mode 100644 index 000000000000..1cc1d0bc3fbc --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/overload23.C @@ -0,0 +1,27 @@ +// From: panisset@cae.ca (Jean-Francois Panisset) +// Date: Mon, 6 Jun 94 13:39:25 EDT +// Subject: Problem with operator overloading + +// Build don't link: + +class ostream { +public: + ostream& operator<<(double n); + ostream& operator<<(float n); +}; + +class X +{ +public: + operator long() const; + operator double() const; +}; +ostream& operator<< (ostream& os, const X& x); + + +main() +{ + X x; + ostream os; + os << x; // gets bogus error - converting to float +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/overload24.C b/gcc/testsuite/g++.old-deja/g++.jason/overload24.C new file mode 100644 index 000000000000..0a12b001f780 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/overload24.C @@ -0,0 +1,23 @@ +// PRMS Id: 5124 +// Bug: g++ promotes bar to int* too soon and the call to f fails. +// Build don't link: + +typedef int arr[1]; + +struct A { + void f(void); + void f(arr &); + + void g(void); + void g(int *); + + void h(void); +}; + + +void A::h(void) +{ + arr bar; + f(bar); + g(bar); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/overload26.C b/gcc/testsuite/g++.old-deja/g++.jason/overload26.C new file mode 100644 index 000000000000..872b0b206e09 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/overload26.C @@ -0,0 +1,22 @@ +// Bug: g++ tries to build up a mangled name for its ideal match, which +// fails for one call below. +// Build don't link: + +extern const char foo[]; +extern const char baz[10]; +extern const char *fred; + +struct A { + void f(const char *); +} *a; + +void bing(const char *); +main () +{ + a->f(foo); // gets bogus error because foo's size unknown. + a->f(baz); + a->f(fred); + bing(fred); + bing(foo); + bing(baz); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/overload27.C b/gcc/testsuite/g++.old-deja/g++.jason/overload27.C new file mode 100644 index 000000000000..3ae1a1dab5e5 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/overload27.C @@ -0,0 +1,7 @@ +void f(const int &) { } +void f(const float &); + +main() +{ + f(false); // gets bogus error +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/overload28.C b/gcc/testsuite/g++.old-deja/g++.jason/overload28.C new file mode 100644 index 000000000000..e94e97872ecc --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/overload28.C @@ -0,0 +1,11 @@ +// PRMS Id: 6056 + +struct Foo { + Foo() { } // ERROR - candidate + Foo(int i = 25) { } // ERROR - candidate +}; + +main() +{ + Foo* f1 = new Foo(); // ERROR - ambiguous +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/overload29.C b/gcc/testsuite/g++.old-deja/g++.jason/overload29.C new file mode 100644 index 000000000000..ecd43592b08d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/overload29.C @@ -0,0 +1,16 @@ +// Bug: we get an error trying to build up our ideal candidate. +// Build don't link: + +class C { + public: + C( const char * ); +}; + + extern const char c1[]; + +void f2( const char * ); + +void f1() { + C *fntp = new C(c1); // Line 10 + f2( c1 ); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/overload3.C b/gcc/testsuite/g++.old-deja/g++.jason/overload3.C new file mode 100644 index 000000000000..63b175e70dfb --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/overload3.C @@ -0,0 +1,12 @@ +// Bug: bar is considered to be overloaded (i.e. its +// IDENTIFIER_GLOBAL_VALUES are TREE_LISTs) even though it isn't, +// so default_conversion thinks it can't resolve the name. +// Build don't link: + +void foo (); +void bar (); + +void baz () +{ + void (*p)() = 1 ? (void (*)()) &foo : bar; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/overload30.C b/gcc/testsuite/g++.old-deja/g++.jason/overload30.C new file mode 100644 index 000000000000..24485c5851dc --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/overload30.C @@ -0,0 +1,17 @@ +// PRMS Id: 6412 +// Build don't link: + +class Foo; + +template <class F> +class Temp +{ + F func_; +public: + Temp (F f) : func_(f) {} +}; + +template <class T> +T* func1 (T* t) { return t; } + +Temp<Foo*(*)(Foo*)> temp2(func1); diff --git a/gcc/testsuite/g++.old-deja/g++.jason/overload31.C b/gcc/testsuite/g++.old-deja/g++.jason/overload31.C new file mode 100644 index 000000000000..e45d802033f0 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/overload31.C @@ -0,0 +1,24 @@ +// PRMS Id: 6568 +// Bug: g++ complains about the ambiguous conversion to bool even though +// we wouldn't end up using it anyway. +// Build don't link: + +class AString +{ +public: + AString (unsigned len); + operator char *() const; + operator char const *() const; +}; + +void +foo(unsigned t, AString const & handle) +{ +} + +void +foo(AString const & handle, bool includeSpecials) +{ + unsigned t; + foo(t, handle); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/overload32.C b/gcc/testsuite/g++.old-deja/g++.jason/overload32.C new file mode 100644 index 000000000000..95f251d66647 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/overload32.C @@ -0,0 +1,19 @@ +// PRMS Id: 7128 +// Build don't link: + +class B {}; + +class D : public B {}; + +class X { + public: + operator const B & () const; + operator const D & () const; +}; + +void f( const D & ); + +void g( const X & x ) +{ + f( x ); +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/overload33.C b/gcc/testsuite/g++.old-deja/g++.jason/overload33.C new file mode 100644 index 000000000000..8b5bb4a34ae9 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/overload33.C @@ -0,0 +1,78 @@ +// PRMS ID: 7507 +// Build don't link: + +/* ------------------------------------------------------------ */ + +class Base0 +{ +public: + Base0() {} + virtual ~Base0() {} +}; + +class Base1 +{ +public: + Base1() {} + virtual ~Base1() {} +}; + +class Derived : public Base0, public Base1 +{ +public: + Derived() {} + virtual ~Derived() {} +}; + +/* ------------------------------------------------------------ */ + +class Dummy +{ + public: + Dummy(Base0 * theBase) {} + ~Dummy() {} +}; + +/* ------------------------------------------------------------ */ + +template<class T> +class ConstSmartPtr +{ + T* myItem; // private + + public: + ConstSmartPtr(T const* theItem); + + operator T const*() const + { return myItem; } + protected: + T* _item() const + { return myItem; } +}; + +template<class T> +class SmartPtr : public ConstSmartPtr<T> +{ + public: + SmartPtr(T* theItem) + : ConstSmartPtr<T>(theItem) {} + + T* item() const + { return _item(); } + + operator T*() const + { return _item(); } +}; + +/* ------------------------------------------------------------ */ + +void +function() +{ + SmartPtr<Derived> myObj = new Derived(); + + Dummy th1(myObj); // Doesn't work under Cygnus + Dummy th2((Base0 *) myObj); // Doesn't work either +} + +/* ------------------------------------------------------------ */ diff --git a/gcc/testsuite/g++.old-deja/g++.jason/overload34.C b/gcc/testsuite/g++.old-deja/g++.jason/overload34.C new file mode 100644 index 000000000000..871c35aea931 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/overload34.C @@ -0,0 +1,8 @@ +// PRMS ID: 8010 +// Build don't link: + +class X { + int & flag; +public: + void f(){ flag++ ; } +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/overload35.C b/gcc/testsuite/g++.old-deja/g++.jason/overload35.C new file mode 100644 index 000000000000..bb6e436f2dc1 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/overload35.C @@ -0,0 +1,25 @@ +// PRMS Id: 9647 +// Build don't link: + +class castBug +{ +public: + operator int *(); + operator const int *() const; +}; + +class castBug2 +{ +public: + operator const int *() const; +}; + +void voidfn(void *); + +void test() +{ + castBug b; + castBug2 b2; + voidfn(b); // gets bogus error + voidfn(b2); // ERROR - discarding const +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/overload4.C b/gcc/testsuite/g++.old-deja/g++.jason/overload4.C new file mode 100644 index 000000000000..1da0ff0a454c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/overload4.C @@ -0,0 +1,11 @@ +// Testcase for simple overloading resolution. +// Build don't link: + +void foo (int); +void foo (int, int); + +void bar () +{ + foo (1); + foo (1, 2); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/overload5.C b/gcc/testsuite/g++.old-deja/g++.jason/overload5.C new file mode 100644 index 000000000000..8702bbb26ead --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/overload5.C @@ -0,0 +1,4 @@ +// Testcase for simple overloading resolution. + +int foo (); // ERROR - +void foo (); // ERROR - disallowed overload diff --git a/gcc/testsuite/g++.old-deja/g++.jason/overload6.C b/gcc/testsuite/g++.old-deja/g++.jason/overload6.C new file mode 100644 index 000000000000..3ae964283898 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/overload6.C @@ -0,0 +1,15 @@ +// Bug: g++ thinks there is a default conversion from void* to B*. +// There isn't. +// Build don't link: + +struct A { + operator void* (); +}; + +struct B { }; + +void foo (B* bp); + +void bar (A& a) { + foo (a); // ERROR - +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/overload7.C b/gcc/testsuite/g++.old-deja/g++.jason/overload7.C new file mode 100644 index 000000000000..361150569c91 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/overload7.C @@ -0,0 +1,15 @@ +// Bug: g++ thinks there is a default conversion from A& to B*. +// There isn't. +// Build don't link: + +struct A { + operator A* (); +}; + +struct B: public A { }; + +void foo (B* bp); + +void bar (A& a) { + foo (a); // ERROR - +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/overload8.C b/gcc/testsuite/g++.old-deja/g++.jason/overload8.C new file mode 100644 index 000000000000..9b605f8bce76 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/overload8.C @@ -0,0 +1,7 @@ +// Bug: g++ fails to catch the ambiguity below. +// Build don't link: + +struct A { + operator int () { return 1; }; + operator int &() { return 1; }; // ERROR - +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/overload9.C b/gcc/testsuite/g++.old-deja/g++.jason/overload9.C new file mode 100644 index 000000000000..5b832fbc5f14 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/overload9.C @@ -0,0 +1,39 @@ +// PRMS Id: 4257 +// Bug: g++ ignores non-member possibilities (ideal_candidate_ansi bug) +// Build don't link: + +class ostream +{ +public: +#ifdef EITHER_ONE_A + ostream& operator<<(unsigned long n); + ostream& operator<<(long n); +#else + ostream& operator<<(short n); + ostream& operator<<(unsigned short n); +#endif +}; + +class ccObjectInfo {}; + +ostream& operator << (ostream& out, const ccObjectInfo& obj); + +class ccString : public ccObjectInfo +{ +#ifdef EITHER_ONE_B + operator int () const; +#else + operator long () const; +#endif +}; + +// Should pick this one!! +ostream& operator << (ostream& o, const ccString & s); + +extern ostream cout; + +void f () +{ + ccString foo; + cout << foo; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/parse1.C b/gcc/testsuite/g++.old-deja/g++.jason/parse1.C new file mode 100644 index 000000000000..a5ba83c78ebe --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/parse1.C @@ -0,0 +1,8 @@ +// Bug: g++ parses the declaration of r as a function declaration. +// Build don't link: + +void foo (int i) +{ + int &r (i); + r = 1; // gets bogus error - +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/parse10.C b/gcc/testsuite/g++.old-deja/g++.jason/parse10.C new file mode 100644 index 000000000000..477f7f53a638 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/parse10.C @@ -0,0 +1,15 @@ +// Testcase for precedence of ?: wrt = + +extern "C" int printf (const char *, ...); + +main() +{ + int j = 0, k = 0; + 1 ? j : k = 5; // should be parsed 1 ? j : (k = 5) + (void) (1 ? k = 5 : 0); + k = 5 ? 1 : 0; // should be parsed k = (5 ? 1 : 0) + + printf ("%d %d\n", j, k); + + return j == 5 || k == 5; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/parse11.C b/gcc/testsuite/g++.old-deja/g++.jason/parse11.C new file mode 100644 index 000000000000..e9f285cee8d8 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/parse11.C @@ -0,0 +1,9 @@ +// PRMS Id: 6825 +// Build don't link: + +class aClass +{ + ; +private: + ; // This line causes problems +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/parse12.C b/gcc/testsuite/g++.old-deja/g++.jason/parse12.C new file mode 100644 index 000000000000..7829a8b1b0d4 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/parse12.C @@ -0,0 +1,17 @@ +// PRMS Id: 6821 + +struct A { + int operator()(int i) { return i; } +}; + +struct B { + A* p; + int f () { return (*p)(42); } // gets bogus error +}; + +main () +{ + B b = { new A }; + + return b.f () != 42; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/parse13.C b/gcc/testsuite/g++.old-deja/g++.jason/parse13.C new file mode 100644 index 000000000000..0ffef983e705 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/parse13.C @@ -0,0 +1,8 @@ +// Build don't link: + +struct A { + struct B {}; + struct C; +}; + +struct A :: C : A :: B {}; // gets bogus error - parse error before `:' diff --git a/gcc/testsuite/g++.old-deja/g++.jason/parse14.C b/gcc/testsuite/g++.old-deja/g++.jason/parse14.C new file mode 100644 index 000000000000..20fcc47dbf8e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/parse14.C @@ -0,0 +1,12 @@ +// Bug: g++ decides that A::foo is introducing a constructor declarator. +// Build don't link: + +struct A { + typedef bool foo; +}; + +A::foo (*bar) (); + +struct B { + A::foo (*bar) (); +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/parse2.C b/gcc/testsuite/g++.old-deja/g++.jason/parse2.C new file mode 100644 index 000000000000..71be1f4aa22d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/parse2.C @@ -0,0 +1,6 @@ +// Bug: g++ doesn't understand constructor syntax for pointers. +// Build don't link: + +void f () { + char * p (0); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/parse3.C b/gcc/testsuite/g++.old-deja/g++.jason/parse3.C new file mode 100644 index 000000000000..16f99aaa2dea --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/parse3.C @@ -0,0 +1,6 @@ +// PRMS Id: 4484 (bug 2) +// Bug: g++ does not grok abstract declarator syntax for method pointers. +// Build don't link: + +template <class T> class A { }; +void (A<int>::*p)() = (void (A<int>::*)())0; // gets bogus error - abstract declarator failure diff --git a/gcc/testsuite/g++.old-deja/g++.jason/parse4.C b/gcc/testsuite/g++.old-deja/g++.jason/parse4.C new file mode 100644 index 000000000000..95e0f441c732 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/parse4.C @@ -0,0 +1,7 @@ +// Bug: g++ doesn't handle superfluous parentheses when redeclaring a TYPENAME. +// Build don't link: + +typedef int foo; +class A { + typedef int ((foo)); // gets bogus error - +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/parse5.C b/gcc/testsuite/g++.old-deja/g++.jason/parse5.C new file mode 100644 index 000000000000..519deb2867a3 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/parse5.C @@ -0,0 +1,12 @@ +// Bug: foo (bar) should be a declaration of a static data member, not a +// function; it's getting caught by the rules for constructors. +// Build don't link: + +typedef int foo; +typedef int bar; +struct A { + static foo (bar); // gets bogus error +}; + +int i = A::bar; // gets bogus error +int (*fp)(bar) = A::foo; // ERROR - diff --git a/gcc/testsuite/g++.old-deja/g++.jason/parse6.C b/gcc/testsuite/g++.old-deja/g++.jason/parse6.C new file mode 100644 index 000000000000..677dbe2cb3fe --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/parse6.C @@ -0,0 +1,9 @@ +// PRMS id: 4653 +// Bug: g++ tries to resolve declarator/expression ambiguities too soon. +// Build don't link: + +template<class T> struct A { }; + +void f () { + void (A<int>::*pmf) (); // gets bogus error - late binding +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/parse7.C b/gcc/testsuite/g++.old-deja/g++.jason/parse7.C new file mode 100644 index 000000000000..bd9744c83153 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/parse7.C @@ -0,0 +1,7 @@ +// Bug: g++ tries to parse this as a constructor. +// Build don't link: + +typedef int foo; +struct A { + foo (*bar)(); +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/parse8.C b/gcc/testsuite/g++.old-deja/g++.jason/parse8.C new file mode 100644 index 000000000000..1ed9de760400 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/parse8.C @@ -0,0 +1,2 @@ +// Build don't link: +void foo(const int* const); // gets bogus error diff --git a/gcc/testsuite/g++.old-deja/g++.jason/parse9.C b/gcc/testsuite/g++.old-deja/g++.jason/parse9.C new file mode 100644 index 000000000000..62836e46438d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/parse9.C @@ -0,0 +1,18 @@ +// PRMS Id: 5720 +// Bug: the extra set of parens confuses the expr/declarator disambiguation. + +class Fu +{ + int val; +public: + Fu(int i) : val(i) { }; + void print() { } +}; + +main(int argc, char * argv[]) +{ + int * i = &argc; + + Fu((*i)).print(); // gets bogus error + Fu((*j)); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/pmem.C b/gcc/testsuite/g++.old-deja/g++.jason/pmem.C new file mode 100644 index 000000000000..76e873255eda --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/pmem.C @@ -0,0 +1,11 @@ +// Bug: g++ parses the declaration of 'char A::* foo' below as a +// declaration of 'char A'. +// Build don't link: + +class A { }; +typedef int foo; +void f () +{ + char A::* foo; + foo = 0; // gets bogus error - parsing blunder +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/pmem2.C b/gcc/testsuite/g++.old-deja/g++.jason/pmem2.C new file mode 100644 index 000000000000..f8d9797a2ce9 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/pmem2.C @@ -0,0 +1,43 @@ +template <class Called> +class aCallback +{ +public: + aCallback(Called& obj, int (Called::*met)()); + + int callback(); + +protected: + +private: + Called& object; + + int (Called::*method)(); + +}; + +template <class Called> +aCallback<Called>::aCallback(Called& obj, + int (Called::*met)()) : +object(obj), +method(met) +{}; + +template <class Called> +int aCallback<Called>::callback() +{ + return (object.*method)(); +} + +struct myStruct +{ + int action() {return 0;}; +}; + +main() +{ + myStruct toto; + + aCallback<myStruct> cb(toto, &myStruct::action); + + return cb.callback(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/pmem3.C b/gcc/testsuite/g++.old-deja/g++.jason/pmem3.C new file mode 100644 index 000000000000..343953b96045 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/pmem3.C @@ -0,0 +1,11 @@ +// Test that comparison of pointers to members does not complain about +// contravariance violation. + +struct A { int i; }; +struct B : public A { int j; int f (); }; +main () +{ + int A::*apm = &A::i; + int B::*bpm = apm; + return apm != bpm; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/pmem4.C b/gcc/testsuite/g++.old-deja/g++.jason/pmem4.C new file mode 100644 index 000000000000..3ce2bb9fc0be --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/pmem4.C @@ -0,0 +1,10 @@ +struct X {}; +X& X::*PTM_1; // ERROR - pointer to reference member +void X::*PTM_2; // ERROR - pointer to void member + +struct A { + static int& ir; +}; + +int i; +int& A::ir = i; // not an error diff --git a/gcc/testsuite/g++.old-deja/g++.jason/pmf.C b/gcc/testsuite/g++.old-deja/g++.jason/pmf.C new file mode 100644 index 000000000000..677363995b71 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/pmf.C @@ -0,0 +1,7 @@ +// PRMS Id: 4333 +// Bug: g++ can't deal with casts to pointer to member function. +// Build don't link: + +class A { }; +typedef void (A::* pmf)(); +void foo () { (pmf) 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.jason/pmf2.C b/gcc/testsuite/g++.old-deja/g++.jason/pmf2.C new file mode 100644 index 000000000000..c3decc2e639a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/pmf2.C @@ -0,0 +1,13 @@ +// PRMS Id: 4484 (bug 3) +// Bug: g++ does implicitly take the address of methods passed to fns. +// Build don't link: + +struct A { + void f (); +}; + +void g (void (A::*)()); + +void h () { + g (A::f); // ERROR - failed conversion to method pointer XFAIL *-*-* +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/pmf3.C b/gcc/testsuite/g++.old-deja/g++.jason/pmf3.C new file mode 100644 index 000000000000..4d4d6ef237f7 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/pmf3.C @@ -0,0 +1,19 @@ +// From: enewton@uunet.uu.NET +// Subject: g++ 2.5.8: cannot cast member function pointers +// Date: 27 Jan 1994 01:22:56 -0500 +// Build don't link: + +struct A { + void f(char); + void g(int); +}; + +typedef void (A::*Ptr)(char); + +void q() { + Ptr p; + + p = (Ptr) &A::f; + p = (Ptr) &A::g; + p = &A::f; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/pmf4.C b/gcc/testsuite/g++.old-deja/g++.jason/pmf4.C new file mode 100644 index 000000000000..a0af9f412891 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/pmf4.C @@ -0,0 +1,9 @@ +// PRMS Id: 4484 (bug 5) +// Bug: g++ can't convert between pmf types. +// Build don't link: + +class A; +typedef void (A::*pmf)(); +typedef void (A::*pmfc)() const; + +pmfc p = (pmfc)(pmf)0; // gets bogus error - pmf conversion diff --git a/gcc/testsuite/g++.old-deja/g++.jason/pmf5.C b/gcc/testsuite/g++.old-deja/g++.jason/pmf5.C new file mode 100644 index 000000000000..c27bec10f9ee --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/pmf5.C @@ -0,0 +1,18 @@ +// PRMS Id: 4985 +// Build don't link: +// Special g++ Options: + +struct Thing { + int OverloadFn() const; + void FunctionA(char* restOfLine); + void OverloadFn(char* restOfLine); +}; + +struct ThingEntry { + void (Thing::*_handler)(char* restOfLine); +}; + +static ThingEntry KeyWordTable[] = { + &Thing::FunctionA, + Thing::OverloadFn, +}; // WARNING - implicit & diff --git a/gcc/testsuite/g++.old-deja/g++.jason/pmf6.C b/gcc/testsuite/g++.old-deja/g++.jason/pmf6.C new file mode 100644 index 000000000000..08e425b79314 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/pmf6.C @@ -0,0 +1,11 @@ +// PRMS Id: 5656 +// Bug: g++ tries (which is a bug) and fails (which is a bug) to initialize +// var at runtime. +// Build don't link: + +struct A +{ + int func(int); + int func() const; +}; +int (A::* var) () const = & A::func; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/pmf7.C b/gcc/testsuite/g++.old-deja/g++.jason/pmf7.C new file mode 100644 index 000000000000..303dfb9b241a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/pmf7.C @@ -0,0 +1,27 @@ +// PRMS Id: 6486 +// Make sure that no confused handling of COND_EXPRs and SAVE_EXPRs messes +// with the number of calls to foo. + +int c; + +struct A { + void f () {} + virtual void g () {} +}; + +A& foo () +{ + static A a; + ++c; + return a; +} + +main () +{ + void (A::*p)() = &A::f; + (foo ().*p)(); + p = &A::g; + (foo ().*p)(); + + return 2 - c; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/pmf8.C b/gcc/testsuite/g++.old-deja/g++.jason/pmf8.C new file mode 100644 index 000000000000..97f551eb9bfb --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/pmf8.C @@ -0,0 +1,29 @@ +// PRMS Id: 6905 + +class Parent { +public: + void DoSomething() { return; }; + int i; +}; + +class Child : public Parent { +public: +}; + +class User { +public: + void DoAnyThing(void (Parent::*)(void)) { return; } + void DoAThing(void (Child::*)(void)) { return; } + void DoAThing(int Child::*) { return; } +}; + + +main() +{ + User a; + + a.DoAnyThing(&Child::DoSomething); + a.DoAThing(&Child::DoSomething); + a.DoAThing(&Parent::DoSomething); + a.DoAThing(&Parent::i); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/pmftemp.C b/gcc/testsuite/g++.old-deja/g++.jason/pmftemp.C new file mode 100644 index 000000000000..87d2ed114643 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/pmftemp.C @@ -0,0 +1,16 @@ +// PRMS Id: 4484 (bug 1) +// Bug: g++ does not support templates involving method pointers. +// Build don't link: + +struct A { + void f (); +}; + +template <class T> void +f (void (T::*p)()) // gets bogus error - use of template parm as aggregate +{ } + +void g () +{ + f (&A::f); // gets bogus error - templates and method pointers +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/precedence.C b/gcc/testsuite/g++.old-deja/g++.jason/precedence.C new file mode 100644 index 000000000000..af2dcde85a5a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/precedence.C @@ -0,0 +1,14 @@ +// Bug: g++ groups ->* before casts. +// PRMS Id: 4484 (bug 4) +// Build don't link: + +struct A { }; +struct B : public A { void f (); }; + +void g () +{ + A* ap = new B; + void (B::*p)() = &B::f; + + ((B*)ap->*p)(); // gets bogus error - incorrect precedence +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/redecl1.C b/gcc/testsuite/g++.old-deja/g++.jason/redecl1.C new file mode 100644 index 000000000000..fecace37af42 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/redecl1.C @@ -0,0 +1,12 @@ +class A +{ +public: + A (const A& ccref); + friend A const re (const A& v1); // ERROR - +}; + +A // const +re (const A& ref) +{ // ERROR - mismatched decls + return A (ref); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/ref1.C b/gcc/testsuite/g++.old-deja/g++.jason/ref1.C new file mode 100644 index 000000000000..590ddf507c9a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/ref1.C @@ -0,0 +1,8 @@ +// Bug: g++ tries to call a constructor for a reference. Doh! +// Build don't link: + +class B; +struct A { + B & b; + A (B & x) : b (x) { } // gets bogus error - +}; // gets bogus error - diff --git a/gcc/testsuite/g++.old-deja/g++.jason/ref10.C b/gcc/testsuite/g++.old-deja/g++.jason/ref10.C new file mode 100644 index 000000000000..faadb2e79dad --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/ref10.C @@ -0,0 +1,31 @@ +// Test that conversion from D* to B*& works properly. + +extern "C" int printf (const char *, ...); + +struct V { + int a; +}; + +struct B: virtual V { + int b; +}; + +struct D: B { + int c; +}; + +V* gp = 0; + +void foo(V * const &r) { + gp = r; +} + +int bar(V *r) { + return (r != gp); +} + +main() { + D *p = new D; + foo(p); + return bar(p); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/ref11.C b/gcc/testsuite/g++.old-deja/g++.jason/ref11.C new file mode 100644 index 000000000000..b8c6f317a103 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/ref11.C @@ -0,0 +1,17 @@ +int main(int argc, char ** argv) { + + int (&var_field_ref)[] = * (int (*)[]) new int [42]; + int (&fix_field_ref)[1] = * (int (*)[1]) new int [42]; + + int static_field[42]; + + int *const &var_field_ptr_ref = var_field_ref; // gets bogus error + int *const &fix_field_ptr_ref = fix_field_ref; + int *const &static_field_ptr_ref = static_field; + + int * var_field_ptr = var_field_ref; // gets bogus error + int * fix_field_ptr = fix_field_ref; + int * static_field_ptr = static_field; + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/ref12.C b/gcc/testsuite/g++.old-deja/g++.jason/ref12.C new file mode 100644 index 000000000000..7a33647ffb6b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/ref12.C @@ -0,0 +1,5 @@ +void f (char *const &) { } +main () +{ + f ("hi"); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/ref2.C b/gcc/testsuite/g++.old-deja/g++.jason/ref2.C new file mode 100644 index 000000000000..fe97990cd922 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/ref2.C @@ -0,0 +1,6 @@ +// Bug: g++ can't deal with references to arrays. +// Build don't link: + +typedef float Matrix[4][4]; +Matrix m; +Matrix& f () { return m; } diff --git a/gcc/testsuite/g++.old-deja/g++.jason/ref3.C b/gcc/testsuite/g++.old-deja/g++.jason/ref3.C new file mode 100644 index 000000000000..2bdd023383fb --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/ref3.C @@ -0,0 +1,7 @@ +// PRMS Id: ???? +// Build don't link: + +void f (const int& i) +{ + &(int&)i; // gets bogus error - references ARE lvalues +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/ref4.C b/gcc/testsuite/g++.old-deja/g++.jason/ref4.C new file mode 100644 index 000000000000..422c58cab702 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/ref4.C @@ -0,0 +1,4 @@ +// Build don't link: + +void f (); +void (&fr)() = f; // gets bogus error - references to functions XFAIL *-*-* diff --git a/gcc/testsuite/g++.old-deja/g++.jason/ref5.C b/gcc/testsuite/g++.old-deja/g++.jason/ref5.C new file mode 100644 index 000000000000..ca0135323b50 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/ref5.C @@ -0,0 +1,10 @@ +// Build don't link: +// Special g++ Options: -w +int i; +int &const j = i; +int &const f(); +void g () +{ + j = 1; + f() = 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/ref6.C b/gcc/testsuite/g++.old-deja/g++.jason/ref6.C new file mode 100644 index 000000000000..afebb6bab98f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/ref6.C @@ -0,0 +1,2 @@ +const int &f(); +int &a = f(); // ERROR - diff --git a/gcc/testsuite/g++.old-deja/g++.jason/ref7.C b/gcc/testsuite/g++.old-deja/g++.jason/ref7.C new file mode 100644 index 000000000000..ba7bd1d2cb19 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/ref7.C @@ -0,0 +1,21 @@ +// Testcase for the lifetime of a temporary object which is used to +// initialize a reference. + +int destroyed = 0; + +struct A { + A() { } + A(int) { } + ~A() { destroyed++; } +}; + +A a; +A foo () { return a; } + +main() +{ + const A& ar = foo(); + const A& ar2 = A(); + const A& ar3 = (A)1; + return destroyed; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/ref8.C b/gcc/testsuite/g++.old-deja/g++.jason/ref8.C new file mode 100644 index 000000000000..53f9c1ceef97 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/ref8.C @@ -0,0 +1,17 @@ +// PRMS Id: 5184 +// Bug: cast to C& below does not adjust address + +struct A {}; +struct B { + virtual void foo () {}; +}; +struct C : public B, public A {}; + +main() { + C c; + + A& ar = c; + C& cr = (C&)ar; + + cr.foo(); // this line causes core dump +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/ref9.C b/gcc/testsuite/g++.old-deja/g++.jason/ref9.C new file mode 100644 index 000000000000..099d3421cf8e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/ref9.C @@ -0,0 +1,25 @@ +// Bug: g++ re-evaluates the initializer for r before calling f(); since i has +// changed to an invalid index, this breaks. + +class C +{ +public: + void f () { } +}; + +void foo (C * objs[]) +{ + int i = 0; + C & r = * objs[i]; /* make reference to element */ + + i = 666; + r.f (); /* core dumps here */ +} + +int +main () +{ + C * objs[1] = { new C }; + + foo (objs); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/report.C b/gcc/testsuite/g++.old-deja/g++.jason/report.C new file mode 100644 index 000000000000..d3d3392e451d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/report.C @@ -0,0 +1,68 @@ +// Build don't link: +// GROUPS passed error-reporting +template <char C> +class badoo +{ +}; + +template <int (*F) (int)> +class doowop +{ +}; + +struct A +{ + int a; + ~A () { a = 0; } + operator int () { return a; } +}; + +extern "C" int atoi (char *); + +int (*fee)(char *) = atoi; +int (**bar)(char *) = &fee; + +char *s = "4"; +char **sp = &s; +char ***spp = &sp; + +int foo (int a = (**bar) (s)) +{ + return doowop<foo>::bar; // ERROR - not a member +} // ERROR - non-void + +int foo2 (int (*a)(int) = &foo) +{ + undef4 (1); // ERROR - implicit declaration + return 1; +} + +class X{ + class Y{}; +}; + +typedef int const * bart (); +typedef bart const * const * bar2; + +bar2 baz (X::Y y) +{ + X::Y f; + bar2 wa [5]; + wa[0] = baz(f); + undef2 (1); // ERROR - implicit declaration +} // ERROR - non-void + +int ninny () +{ + struct A + { + static int ninny2 () { return badoo<'\001'>::foo; } // ERROR - not a member + }; + + return A::ninny2(); +} + +int darg (char X::*p) +{ + undef3 (1); // ERROR - implicit declaration +} // ERROR - non-void diff --git a/gcc/testsuite/g++.old-deja/g++.jason/return.C b/gcc/testsuite/g++.old-deja/g++.jason/return.C new file mode 100644 index 000000000000..c737a3ea8bda --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/return.C @@ -0,0 +1,21 @@ +// PRMS Id: 5331 +// Bug: the return value of foo is constructed in a temporary and then +// copied into the return slot. This is not necessary. + +int c = 0; + +struct X { + X(int i) { } + X(X const &XX) { c = 1; } + ~X() { } +}; + +const X foo() { + return X(3); +}; + +int main() +{ + foo(); + return c; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/return2.C b/gcc/testsuite/g++.old-deja/g++.jason/return2.C new file mode 100644 index 000000000000..272390903e80 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/return2.C @@ -0,0 +1,23 @@ +// PRMS Id: 5368 +// Bug: the X temporary in foo() is not destroyed. + +int c = 0; + +struct X { + X (int) { c++; } + ~X() { c--; } +}; + +struct Y { + Y(const X &) { } +}; + +Y foo() { + return X(3); +}; + +int main() +{ + foo(); + return c; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/return3.C b/gcc/testsuite/g++.old-deja/g++.jason/return3.C new file mode 100644 index 000000000000..61e3dda02cee --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/return3.C @@ -0,0 +1,19 @@ +// PRMS id: 10912 + +struct A { + A() { i=10; }; + int i; +}; +struct B : public A {}; +B b; + +A f() +{ + return b; +} + +main () +{ + A a = f (); + return a.i != 10; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/rfg1.C b/gcc/testsuite/g++.old-deja/g++.jason/rfg1.C new file mode 100644 index 000000000000..a9b581f27515 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/rfg1.C @@ -0,0 +1,13 @@ +// Bug: g++ parses the declaration of i as a functional cast. +// Build don't link: + +void take_int (int arg) { } + +void +test () +{ + int (i); + + i = 0; + take_int (i); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/rfg10.C b/gcc/testsuite/g++.old-deja/g++.jason/rfg10.C new file mode 100644 index 000000000000..8e7d2d1349d6 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/rfg10.C @@ -0,0 +1,9 @@ +// Bug: g++ doesn't notice the overflow in the enum values. + +#include <limits.h> + +enum COLOR +{ + red, + green = ULONG_MAX, blue +}; // ERROR - enum overflow diff --git a/gcc/testsuite/g++.old-deja/g++.jason/rfg11.C b/gcc/testsuite/g++.old-deja/g++.jason/rfg11.C new file mode 100644 index 000000000000..2b3e4cc02d0d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/rfg11.C @@ -0,0 +1 @@ +typedef int int; /* ERROR - trying to redefine int */ diff --git a/gcc/testsuite/g++.old-deja/g++.jason/rfg12.C b/gcc/testsuite/g++.old-deja/g++.jason/rfg12.C new file mode 100644 index 000000000000..e33404dfc1b6 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/rfg12.C @@ -0,0 +1 @@ +int array[3] = { 1, 2, 3, 4 }; /* ERROR - excess initializer elements */ diff --git a/gcc/testsuite/g++.old-deja/g++.jason/rfg13.C b/gcc/testsuite/g++.old-deja/g++.jason/rfg13.C new file mode 100644 index 000000000000..77560b338651 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/rfg13.C @@ -0,0 +1,11 @@ +// Bug: g++ does overloading on a function-by-function basis. + +void +f () +{ + void (*fp)(void); + { + extern void g (); + } + fp = g; /* ERROR - no 'g' in scope */ +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/rfg14.C b/gcc/testsuite/g++.old-deja/g++.jason/rfg14.C new file mode 100644 index 000000000000..8475ecd6c817 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/rfg14.C @@ -0,0 +1,15 @@ +void *vp; +int (*ap)[]; +struct S *sp; +union U *up; +int (*fp)(); + +void +test () +{ + vp++; /* ERROR - incrementing void * */ + ap++; /* ERROR - incrementing ptr to incomplete type */ + sp++; /* ERROR - incrementing ptr to incomplete type */ + up++; /* ERROR - incrementing ptr to incomplete type */ + fp++; /* ERROR - incrementing ptr to function */ +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/rfg15.C b/gcc/testsuite/g++.old-deja/g++.jason/rfg15.C new file mode 100644 index 000000000000..1f0ff3b64e73 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/rfg15.C @@ -0,0 +1,6 @@ +const void *cvp; + +const void func1 () +{ + return *cvp; /* ERROR - returning a value from a void function */ +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/rfg16.C b/gcc/testsuite/g++.old-deja/g++.jason/rfg16.C new file mode 100644 index 000000000000..75d87a5f0f2f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/rfg16.C @@ -0,0 +1,5 @@ +// Bug: g++ doesn't push parameter decls as they are parsed. +// Build don't link: + +void (*ptr) (int foo, int array[sizeof(foo)]); // gets bogus error XFAIL *-*-* +void test2 (int bar, int array[sizeof(bar)]) { } // gets bogus error XFAIL *-*-* diff --git a/gcc/testsuite/g++.old-deja/g++.jason/rfg17.C b/gcc/testsuite/g++.old-deja/g++.jason/rfg17.C new file mode 100644 index 000000000000..8291650b7d6b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/rfg17.C @@ -0,0 +1,15 @@ +// The default assignment operator for B uses array assignment, so we can't +// just disallow it... + +struct A { A& operator=(const A&); }; +struct B { A f[20]; }; + +int a1[20], a2[20]; +B b1, b2; + +void +test () +{ + b1 = b2; /* OK */ + a1 = a2; /* ERROR - array assignment */ +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/rfg18.C b/gcc/testsuite/g++.old-deja/g++.jason/rfg18.C new file mode 100644 index 000000000000..53c3dd1628f7 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/rfg18.C @@ -0,0 +1,11 @@ +// Any expression may be explicitly converted to type void. +// Build don't link: + +struct S { int m[10]; } object; +struct S f () { return object; } + +void +test () +{ + (void) f().m; /* OK - cast to void; see constraints in 3.8.1 */ +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/rfg2.C b/gcc/testsuite/g++.old-deja/g++.jason/rfg2.C new file mode 100644 index 000000000000..9c30c3640a8b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/rfg2.C @@ -0,0 +1,6 @@ +// Bug: g++ complains about a class definition containing a const member +// but no constructor; it shouldn't complain at that point, since this is +// valid use. +// Build don't link: + +struct S { const int member; } object = { 0 }; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/rfg20.C b/gcc/testsuite/g++.old-deja/g++.jason/rfg20.C new file mode 100644 index 000000000000..33b4858b758f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/rfg20.C @@ -0,0 +1,10 @@ +// Build don't link: + +typedef void func_type (); +func_type *fp; +void *vp; + +void example () +{ + vp != fp; // gets bogus error - nuttin' wrong wit dat +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/rfg21.C b/gcc/testsuite/g++.old-deja/g++.jason/rfg21.C new file mode 100644 index 000000000000..d6389bebfa78 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/rfg21.C @@ -0,0 +1 @@ +char array0[4] = "abcde"; /* ERROR - initializer too long */ diff --git a/gcc/testsuite/g++.old-deja/g++.jason/rfg22.C b/gcc/testsuite/g++.old-deja/g++.jason/rfg22.C new file mode 100644 index 000000000000..7be8ba03fc0b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/rfg22.C @@ -0,0 +1,6 @@ +static void f (); // ERROR - used but not defined + +void g () +{ + f (); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/rfg23.C b/gcc/testsuite/g++.old-deja/g++.jason/rfg23.C new file mode 100644 index 000000000000..73bcfc0f0e67 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/rfg23.C @@ -0,0 +1,2 @@ + signed char *ptr2 = "hello"; /* ERROR - changing sign */ +unsigned char *ptr3 = "hello"; /* ERROR - changing sign */ diff --git a/gcc/testsuite/g++.old-deja/g++.jason/rfg24.C b/gcc/testsuite/g++.old-deja/g++.jason/rfg24.C new file mode 100644 index 000000000000..e5987a149c15 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/rfg24.C @@ -0,0 +1,8 @@ +typedef int Int; + +Int Int_object_1; + +void test () +{ + ((Int) Int_object_1) = Int_object_1; /* ERROR - not an lvalue*/ +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/rfg25.C b/gcc/testsuite/g++.old-deja/g++.jason/rfg25.C new file mode 100644 index 000000000000..deb319d7057c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/rfg25.C @@ -0,0 +1 @@ +struct { int :0; }; /* ERROR - anon struct not used to declare objects */ diff --git a/gcc/testsuite/g++.old-deja/g++.jason/rfg26.C b/gcc/testsuite/g++.old-deja/g++.jason/rfg26.C new file mode 100644 index 000000000000..1ad204e8ad45 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/rfg26.C @@ -0,0 +1,9 @@ +typedef void (FTYPE) (); + +FTYPE f; /* ok */ + +void +test_0 () +{ + (FTYPE) f; /* ERROR - casting to function type */ +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/rfg27.C b/gcc/testsuite/g++.old-deja/g++.jason/rfg27.C new file mode 100644 index 000000000000..8fb85e80f525 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/rfg27.C @@ -0,0 +1,4 @@ +short volatile short var_0_2; /* ERROR - duplicate short */ +long volatile long var_0_3; /* ERROR - duplicate long */ +signed volatile signed var_0_7; /* ERROR - duplicate signed */ +unsigned volatile unsigned var_0_8; /* ERROR - duplicate unsigned */ diff --git a/gcc/testsuite/g++.old-deja/g++.jason/rfg28.C b/gcc/testsuite/g++.old-deja/g++.jason/rfg28.C new file mode 100644 index 000000000000..246c7e69b315 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/rfg28.C @@ -0,0 +1,9 @@ +/* From 01/25/94 working paper (7.1.3): + + If, in a decl-specifier-seq containing the decl-specifier typedef, + there is no type-specifier, or the only type-specifiers are cv- + qualifiers, the typedef declaration is ill-formed. +*/ + +typedef foo; // ERROR - invalid typedef +typedef const bar; // ERROR - invalid typedef diff --git a/gcc/testsuite/g++.old-deja/g++.jason/rfg3.C b/gcc/testsuite/g++.old-deja/g++.jason/rfg3.C new file mode 100644 index 000000000000..fc254511cfe7 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/rfg3.C @@ -0,0 +1,15 @@ +// Bug: g++ remembers the members of OUTER and complains about the second +// definition. +// Build don't link: + +void +test () +{ + { + struct OUTER { struct INNER { int mbr; } member; }; + } + + { + struct OUTER { struct INNER { int mbr; } member; }; + } +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/rfg4.C b/gcc/testsuite/g++.old-deja/g++.jason/rfg4.C new file mode 100644 index 000000000000..978b3634aaba --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/rfg4.C @@ -0,0 +1,12 @@ +// Bug: f1 and f2 are treated as overloaded when they aren't. +// Build don't link: + +int i; +void f1(double) { } +void f2(double) { } + +void +test () +{ + i ? f1 : f2; // gets bogus error - improper overloading +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/rfg5.C b/gcc/testsuite/g++.old-deja/g++.jason/rfg5.C new file mode 100644 index 000000000000..700fae362949 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/rfg5.C @@ -0,0 +1,10 @@ +// Bug: func is treated as an overloaded function when it isn't. +// Build don't link: + +int *func () { return 0; } + +void +test () +{ + *func; // gets bogus error - improper overloading +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/rfg6.C b/gcc/testsuite/g++.old-deja/g++.jason/rfg6.C new file mode 100644 index 000000000000..0f3c9c3823ce --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/rfg6.C @@ -0,0 +1,4 @@ +// Build don't link: + +wchar_t *single = L"xyz" ; +wchar_t *(array[]) = { L"xyz" }; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/rfg7.C b/gcc/testsuite/g++.old-deja/g++.jason/rfg7.C new file mode 100644 index 000000000000..8f3835fffcce --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/rfg7.C @@ -0,0 +1,6 @@ +// Bug: fixincludes and/or cpp mangle the definition of wchar_t so that this +// doesn't work. +// Build don't link: + +#include <stdlib.h> +wchar_t array[] = L"xxx"; // gets bogus error - wchar_t diff --git a/gcc/testsuite/g++.old-deja/g++.jason/rfg8.C b/gcc/testsuite/g++.old-deja/g++.jason/rfg8.C new file mode 100644 index 000000000000..401d05de5907 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/rfg8.C @@ -0,0 +1,4 @@ +// Bug: g++ is wrongfully pedantic about union initializers. +// Build don't link: + +union U { int mbr; } array[1] = { 0 }; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/rfg9.C b/gcc/testsuite/g++.old-deja/g++.jason/rfg9.C new file mode 100644 index 000000000000..abf6335fa97f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/rfg9.C @@ -0,0 +1,9 @@ +int cond; +int i; +int *ip; + +void +test () +{ + cond ? i : ip; /* ERROR - pointer/integer mismatch */ +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/rvalue1.C b/gcc/testsuite/g++.old-deja/g++.jason/rvalue1.C new file mode 100644 index 000000000000..01cd497b1c07 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/rvalue1.C @@ -0,0 +1,51 @@ +// PRMS Id: 6000 +// Bug: g++ gets confused trying to build up a reference to a cast. + +class String { +protected: + char *cp; +public: + String(char *incp); + String(const String &constStringRef); + virtual void virtualFn1(void) const {;} +}; + +String::String(char *incp) +{ + cp = incp; +} + +String::String(const String &constStringRef) +{ +// Right here, do an 'info args', and look at the virtual function table +// pointer: typically junk! Calling the function through that table could +// do anything, since we're really leaping off into the void. This example +// goes down with 'SIGBUS', but I've seen 'SIGSEGV' too, and 'SIGILL' is +// possible. + + cp = constStringRef.cp; + constStringRef.virtualFn1(); +} + +void foofun(String string) +{ + ; +} + +class Class1 { +public: + Class1(const String & constStringRef); +}; + +Class1 :: Class1 (const String & constStringRef) +{ +// If instead of calling the function 'foofun()' here, we just assign +// 'constStringRef' to a local variable, then the vptr is typically == 0! + + foofun(String(constStringRef)); +} + +int main(void) +{ + Class1 *class1 = new Class1("Hi!"); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/rvalue2.C b/gcc/testsuite/g++.old-deja/g++.jason/rvalue2.C new file mode 100644 index 000000000000..522c35fb0031 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/rvalue2.C @@ -0,0 +1,17 @@ +// Test for undesired aliasing. + +struct A { + const A * get_this () const { return this; } +}; + +main () +{ + A a; + int r = 0; + const A& ar1 = (A)a; + if (&ar1 == &a) + r |= 1; + if (A(a).get_this () == &a) + r |= 2; + return r; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/rvalue3.C b/gcc/testsuite/g++.old-deja/g++.jason/rvalue3.C new file mode 100644 index 000000000000..12fe76d31634 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/rvalue3.C @@ -0,0 +1,5 @@ +main () +{ + int i; + int &ir = (int&)(int)i; // ERROR - casting rvalue to reference type +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/scoping.C b/gcc/testsuite/g++.old-deja/g++.jason/scoping.C new file mode 100644 index 000000000000..49715be0a9aa --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/scoping.C @@ -0,0 +1,12 @@ +// PRMS Id: 3977 +// Bug: A member function is not hidden properly by a later use of its name. +// Build don't link: + +struct A { + void index (); +}; + +struct B: A { + int index; + B(): index(4) {} +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/scoping10.C b/gcc/testsuite/g++.old-deja/g++.jason/scoping10.C new file mode 100644 index 000000000000..9119951978ce --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/scoping10.C @@ -0,0 +1,14 @@ +// Test for scope-based hiding of functions. + +void f (char *); +struct A { + void f (); // ERROR - referred to +}; +struct B : public A { + void g (char *); + void h () { + extern void g (); // ERROR - + f("foo"); // ERROR - hidden + g("foo"); // ERROR - hidden + } +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/scoping11.C b/gcc/testsuite/g++.old-deja/g++.jason/scoping11.C new file mode 100644 index 000000000000..870b9d5b5664 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/scoping11.C @@ -0,0 +1,11 @@ +// Build don't link: + +void f (); +void g () +{ + int f; + { + void f (); + f (); // gets bogus error - trying to call integer + } +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/scoping12.C b/gcc/testsuite/g++.old-deja/g++.jason/scoping12.C new file mode 100644 index 000000000000..ef2f178a1867 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/scoping12.C @@ -0,0 +1,9 @@ +void f () +{ + struct A { + friend void g (); + }; +} +void h () { + g (); // ERROR - no g in scope +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/scoping13.C b/gcc/testsuite/g++.old-deja/g++.jason/scoping13.C new file mode 100644 index 000000000000..2fd1707627b6 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/scoping13.C @@ -0,0 +1,10 @@ +// Build don't link: + +struct A { typedef int foo; }; +struct B: public A { + typedef int bar; + struct C { + void g (B::bar); // gets bogus error - nested type failure + void f (B::foo); + }; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/scoping14.C b/gcc/testsuite/g++.old-deja/g++.jason/scoping14.C new file mode 100644 index 000000000000..d8c19388151e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/scoping14.C @@ -0,0 +1,8 @@ +// [class.scope0]: The scope of a name declared in a class consists +// ... also of all ... default arguments ... in that class .... +// Build don't link: + +struct A { + void f (int A::* = &A::i); + int i; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/scoping15.C b/gcc/testsuite/g++.old-deja/g++.jason/scoping15.C new file mode 100644 index 000000000000..bfebf240984d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/scoping15.C @@ -0,0 +1,20 @@ +// Bug: g++ ignores the :: qualification and dies trying to treat an integer +// variable as a list of functions. +// Build don't link: + +class DComplex { +public: + friend double imag(const DComplex& a); +}; + +class FComplex { +public: + friend float imag(const FComplex& a); +}; + +void +scnrm2(FComplex cx[]) +{ + int imag; + ::imag( cx[0] ); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/scoping16.C b/gcc/testsuite/g++.old-deja/g++.jason/scoping16.C new file mode 100644 index 000000000000..d88501e67a41 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/scoping16.C @@ -0,0 +1,4 @@ +struct A { + int a(); // ERROR - + int a; // ERROR - +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/scoping17.C b/gcc/testsuite/g++.old-deja/g++.jason/scoping17.C new file mode 100644 index 000000000000..a05acef3d91b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/scoping17.C @@ -0,0 +1,8 @@ +// Test that the integer hides the struct in block scope. + +main () +{ + int A; + struct A { }; + A = 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/scoping2.C b/gcc/testsuite/g++.old-deja/g++.jason/scoping2.C new file mode 100644 index 000000000000..68c8c754a80e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/scoping2.C @@ -0,0 +1,15 @@ +// Bug: A function is not hidden properly by a use of its name in an +// inner scope. +// Build don't link: + +struct A +{ + struct B + { + int f; + B() : f(0) {}; + void g() { f = 0; }; + }; + void f(); + void f(int); +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/scoping3.C b/gcc/testsuite/g++.old-deja/g++.jason/scoping3.C new file mode 100644 index 000000000000..578de7a7e8ea --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/scoping3.C @@ -0,0 +1,8 @@ +// Bug: g++ does not grok nested types very well. +// Build don't link: + +class A { + class B; + friend class B; + class B { }; // gets bogus error - +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/scoping4.C b/gcc/testsuite/g++.old-deja/g++.jason/scoping4.C new file mode 100644 index 000000000000..33f11a672ecc --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/scoping4.C @@ -0,0 +1,30 @@ +// PRMS Id: 4375 +// Bug: g++ fails to keep track of nested typedefs properly. +// Build don't link: + +class A { +public: + typedef char * Ptr; + Ptr s; + Ptr get_string(); + A(Ptr string); // { s = string; }; +}; + +class B { +public: + typedef A * Ptr; + Ptr a; + Ptr get_A(); + B(Ptr a_ptr); +}; + +A::A(Ptr string) { // gets bogus error - + s = string; // gets bogus error - +} + +main() { + A a("testing"); + A *a_ptr; + B b(&a); + a_ptr = b.get_A(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/scoping5.C b/gcc/testsuite/g++.old-deja/g++.jason/scoping5.C new file mode 100644 index 000000000000..4572da7652af --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/scoping5.C @@ -0,0 +1,6 @@ +// Bug: g++ thinks that A defines operator delete, and tries to call it. +// Build don't link: + +struct A { + ~A () { ::operator delete (0); } +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/scoping6.C b/gcc/testsuite/g++.old-deja/g++.jason/scoping6.C new file mode 100644 index 000000000000..161cc4762f74 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/scoping6.C @@ -0,0 +1,27 @@ +// Testcase for all uses of explicit global scope. +// Build don't link: + +int a, B; + +struct A { }; +int operator+(A&, int); + +struct B { + struct C { + static int a; + static int f () { A a; return ::operator+ (a, ::a); } // gets bogus error + }; +}; + +int B::C::a = 0; + +struct D : public ::B::C { }; // gets bogus error + +void f () +{ + int B; + ::B::C b; + + B = ::B::C::a; // gets bogus error + B = ::B::C::f(); // gets bogus error +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/scoping7.C b/gcc/testsuite/g++.old-deja/g++.jason/scoping7.C new file mode 100644 index 000000000000..6ffa907f62a1 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/scoping7.C @@ -0,0 +1,6 @@ +// Bug: g++ doesn't flag name collisions between types and non-types as +// errors. It shouldn't for class names, but it should for typedefs. +// Build don't link: + +int bar; // ERROR - +typedef int bar; // ERROR - diff --git a/gcc/testsuite/g++.old-deja/g++.jason/scoping8.C b/gcc/testsuite/g++.old-deja/g++.jason/scoping8.C new file mode 100644 index 000000000000..de023d1c3e18 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/scoping8.C @@ -0,0 +1,7 @@ +// Bug: g++ allows two different meanings of a name in the same scope. + +typedef int foo; // ERROR - +struct A { + A (foo); + int foo (); // ERROR - foo already used in scope +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/scoping9.C b/gcc/testsuite/g++.old-deja/g++.jason/scoping9.C new file mode 100644 index 000000000000..3d8a1555ff2a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/scoping9.C @@ -0,0 +1,12 @@ +// Bug: g++ silently mangles the second 'B' to 'A::B', so the definition is +// lost. +// Build don't link: + +struct A { + enum B { }; +}; + +struct C: public A { + enum B { }; + void foo (C::B); +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/shadow1.C b/gcc/testsuite/g++.old-deja/g++.jason/shadow1.C new file mode 100644 index 000000000000..59ffcbd15c39 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/shadow1.C @@ -0,0 +1,16 @@ +// Special g++ Options: -Wshadow +// Build don't link: + +class x { +public: + void fun(); +private: + int foo; +}; + +void x::fun() { }; + +main () +{ + float foo; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/soverload.C b/gcc/testsuite/g++.old-deja/g++.jason/soverload.C new file mode 100644 index 000000000000..793e37f33c11 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/soverload.C @@ -0,0 +1,10 @@ +// Bug: dfs_pushdecls doesn't create an overload list for member functions, +// like it claims to. +// Build don't link: + +struct A +{ + static int foo (int); + static int foo (int, int); + void bar () { foo (1, 2); } // gets bogus error - broken overloading +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/special.C b/gcc/testsuite/g++.old-deja/g++.jason/special.C new file mode 100644 index 000000000000..9f6202ecf440 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/special.C @@ -0,0 +1,6 @@ +// Make sure that forward declarations of specializations work... + +template <class T> class A { }; +class A<int>; +A<int> a; // ERROR - incomplete type +class A<int> { }; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/static1.C b/gcc/testsuite/g++.old-deja/g++.jason/static1.C new file mode 100644 index 000000000000..fd0a937b6ebc --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/static1.C @@ -0,0 +1,31 @@ +// PRMS id: 6863 + +extern "C" printf(const char *, ...); +extern "C" void abort(); + +enum ENUM {E1=0, E2 }; +int d; + +class AAA{ +public: + AAA() {a = new char[10];printf("constructor AAA() called\n");} + AAA(int) {printf("constructor AAA(int) called\n");} + ~AAA(){ printf("destructor ~AAA() called\n"); d = 1; } + operator int () { return 1;} + char *a; + int i; +}; + +struct sentinel { + ~sentinel () { if (d == 0) abort (); } +} s; + +/* forward decl here causes gcc not to execute ct and dt for arr1 */ +extern AAA arr1[]; + +AAA arr1[] = {(int)E1 }; + +main() +{ + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/synth.C b/gcc/testsuite/g++.old-deja/g++.jason/synth.C new file mode 100644 index 000000000000..733243cf3639 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/synth.C @@ -0,0 +1,13 @@ +// Bug: the synthesized copy constructor for A is not found. +// Build don't link: + +struct A { + // A (const A& a): i(a.i) {} + int i; +}; + +struct B { + A a; + B (const B& b): a(b.a), j(b.j) { } // gets bogus error - + int j; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/synth10.C b/gcc/testsuite/g++.old-deja/g++.jason/synth10.C new file mode 100644 index 000000000000..d94e6bdebe96 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/synth10.C @@ -0,0 +1,52 @@ +// Special g++ Options: -O +// Build don't link: +// Bug: Synthesizing methods for the nested class screwed up current_class_decl +// for the outer class. + +class A; +class AH +{ + public: + inline AH ( A * p = 0 ); + AH ( const AH & from ) + : pointer( from.pointer ) { inc(); } + ~ AH () { dec(); } + private: + A * pointer; + inline void inc() const; + inline void dec() const; +}; + +class A +{ + protected: + struct AttrTable + { + struct Row + { + }; + }; + + public: + + class Attributes + { + public: + class iterator + { + public: + iterator() : mo(0), attr(0) {} + iterator& operator++() { ++attr; return *this; } + iterator operator++(int) + { iterator tmp = *this; ++*this; return tmp; } + + private: + AH mo; + const AttrTable::Row* attr; + }; + + Attributes(AH mo) + : mo(mo) {} + AH mo; + }; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/synth2.C b/gcc/testsuite/g++.old-deja/g++.jason/synth2.C new file mode 100644 index 000000000000..3094b8e55cb1 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/synth2.C @@ -0,0 +1,8 @@ +// PRMS Id: 4623 +// Bug: g++ tries and fails to synthesize a copy constructor for D. +// Build don't link: + +class A { }; +class B: public virtual A { }; +class C: public A { }; +class D: public B, public C { }; // gets bogus error - bad synthesis diff --git a/gcc/testsuite/g++.old-deja/g++.jason/synth3.C b/gcc/testsuite/g++.old-deja/g++.jason/synth3.C new file mode 100644 index 000000000000..26af8aed3b9b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/synth3.C @@ -0,0 +1,6 @@ +// Testcase for wrongful generation of copy constructor. +// Build don't link: + +class A { }; +class B: virtual private A { }; +class D: public B { }; // gets bogus error diff --git a/gcc/testsuite/g++.old-deja/g++.jason/synth4.C b/gcc/testsuite/g++.old-deja/g++.jason/synth4.C new file mode 100644 index 000000000000..89ecf2dc0749 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/synth4.C @@ -0,0 +1,15 @@ +// Build don't link: + +struct X { + X(); +}; +typedef void (X::*mfp)(); +struct Y { + Y(); + mfp memfp; +}; +void f() +{ + Y *y1, *y2 ; + *y1 = *y2; // gets bogus error - failed to synthesize op= +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/synth5.C b/gcc/testsuite/g++.old-deja/g++.jason/synth5.C new file mode 100644 index 000000000000..cfc68c534484 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/synth5.C @@ -0,0 +1,14 @@ +// Bug: generated B::operator= tries to call A::operator= + +#pragma implementation +#line 1 "synth5.h" +#pragma interface + +struct A { + virtual A& operator= (const A&) = 0; +}; + +struct B: public A { +}; +#line 5 "synth5.C" +main() { } diff --git a/gcc/testsuite/g++.old-deja/g++.jason/synth6.C b/gcc/testsuite/g++.old-deja/g++.jason/synth6.C new file mode 100644 index 000000000000..f3a95db44f73 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/synth6.C @@ -0,0 +1,15 @@ +// Bug: g++ tries to generate an op= for DbmItem and fails. +// Build don't link: + +class RefCount{ +public: + RefCount(); + +private: + RefCount& operator=(const RefCount); +}; + +class DbmItem: public RefCount{ +public: + DbmItem(): RefCount() {}; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/synth7.C b/gcc/testsuite/g++.old-deja/g++.jason/synth7.C new file mode 100644 index 000000000000..1d4264b2983d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/synth7.C @@ -0,0 +1,11 @@ +// Testcase to make sure that synthesized methods are found when needed. + +struct B { ~B() { } }; +struct A { B b; }; + +main() +{ + A a, b (a), c = A(); + A& (A::*afp)(const A&) = &A::operator=; + (a.*afp) (b); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/synth8.C b/gcc/testsuite/g++.old-deja/g++.jason/synth8.C new file mode 100644 index 000000000000..f7e82a9e8a78 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/synth8.C @@ -0,0 +1,20 @@ +// Bug: the synthesized constructor for A tries to use the mem-initializer +// list for the B constructor. +// Build don't link: + +struct A +{ + virtual ~A(); +}; + +struct B +{ + B(); + char* x; + A* a; +}; + +B::B() +: x(0), a(new A()) +{ +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/synth9.C b/gcc/testsuite/g++.old-deja/g++.jason/synth9.C new file mode 100644 index 000000000000..6886feb6e210 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/synth9.C @@ -0,0 +1,20 @@ +// PRMS Id: 6837 +// Bug: anonymous union confuses g++. +// Build don't link: + +struct my_key { + my_key(const my_key&); + my_key(const char* n); +}; + +struct my_node { + my_node(my_key&); + union { + long cnt; + my_node* next; + }; + my_key a; +}; + +extern my_node n; +my_node a(n); diff --git a/gcc/testsuite/g++.old-deja/g++.jason/tempargs.C b/gcc/testsuite/g++.old-deja/g++.jason/tempargs.C new file mode 100644 index 000000000000..749e02cbd19e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/tempargs.C @@ -0,0 +1,8 @@ +// Build don't link: +// GROUPS passed templates overloading +template<class T> class Vector { }; +template<class T> struct Sort { static void sort (Vector<typename T::foo> &); }; +template<class T> void Sort<T>::sort (Vector<typename T::foo> &) { } +struct whee { typedef int foo; }; + +void f (Vector<int> &vi) { Sort<whee>::sort (vi); } diff --git a/gcc/testsuite/g++.old-deja/g++.jason/tempcons.C b/gcc/testsuite/g++.old-deja/g++.jason/tempcons.C new file mode 100644 index 000000000000..bbc6afeb77e9 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/tempcons.C @@ -0,0 +1,8 @@ +// Bug: member initializers are allowed where they shouldn't be. +// Build don't link: + +template <class T> +class A { + int i; + Blarg () : i(0) { } // ERROR - +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/tempdest.C b/gcc/testsuite/g++.old-deja/g++.jason/tempdest.C new file mode 100644 index 000000000000..78fb75df22c7 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/tempdest.C @@ -0,0 +1,20 @@ +// Build don't link: +// GROUPS passed templates destructors +// Example of PR 3308 workaround + +template <class T> +class A +{ + T q; +public: + ~A() { (&q)->T::~T(); } +}; + +typedef unsigned int ui; + +main() +{ + A<ui> *ap = new A<ui>; + + delete ap; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/tempinst1.C b/gcc/testsuite/g++.old-deja/g++.jason/tempinst1.C new file mode 100644 index 000000000000..2efcf241bf4a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/tempinst1.C @@ -0,0 +1,21 @@ +// Bug: g++ fails to instantiate operator<<. +// Build don't run: +// Special g++ Options: -g + +struct ostream { + ostream& operator<< (const char *) { return *this; }; +}; + +template <class T> class foo { + friend ostream& operator<<(ostream&, foo<T>&); +}; + +template <class T> ostream& operator<< (ostream& ios, foo<T>&obj) { }; + +int main() +{ + ostream cout; + foo<int> foo_obj; + cout << foo_obj; // causes linker error + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/template1.C b/gcc/testsuite/g++.old-deja/g++.jason/template1.C new file mode 100644 index 000000000000..f3aa571483e8 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/template1.C @@ -0,0 +1,20 @@ +// PRMS Id: 4688 +// Bug: g++ can't deal with templates instantiated within extern "C". +// Build don't link: + +class Gnaf { +public: + virtual int invariant (); +}; + +template <class T> class Array : public Gnaf { +public: + virtual int invariant(); +}; + +extern "C" +int foo() +{ + Array<int> toConv; + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/template10.C b/gcc/testsuite/g++.old-deja/g++.jason/template10.C new file mode 100644 index 000000000000..35841f64712d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/template10.C @@ -0,0 +1,26 @@ +// Bug: member operator shadows global template in tsubst. +// Build don't link: + +class ostream; + +template <class TP> class smanip { +public: + friend ostream& operator<<(ostream &o, const smanip<TP>&m); +}; + +template<class TP> +ostream& operator<<(ostream& o, const smanip<TP>& m) +{ return o;} + +class X +{ +public: + X operator<<(int); // commenting out this line makes it work! + void print(ostream& os); +}; + +void X::print(ostream& os) +{ + smanip<double> smd; + os << smd; // gets bogus error +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/template11.C b/gcc/testsuite/g++.old-deja/g++.jason/template11.C new file mode 100644 index 000000000000..25449e2e7425 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/template11.C @@ -0,0 +1,14 @@ +// Bug: initializers for static data members of templates don't get run. + +template <class T> struct A { + static T t; +}; + +int foo () { return 1; } + +int A<int>::t = foo (); + +main () +{ + return (A<int>::t != 1); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/template12.C b/gcc/testsuite/g++.old-deja/g++.jason/template12.C new file mode 100644 index 000000000000..93c19b63571b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/template12.C @@ -0,0 +1,14 @@ +// Testcase for 'this is a type' syntax. +// Build don't link: + +struct B { + typedef int A; +}; + +template <class T> struct Y { + void f() { + typename T::A *d; + } +}; + +template class Y<B>; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/template13.C b/gcc/testsuite/g++.old-deja/g++.jason/template13.C new file mode 100644 index 000000000000..11d218018469 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/template13.C @@ -0,0 +1,10 @@ +// Bug: g++ fails to actually instantiate templates to the specifications of +// guiding decls. +// Special g++ Options: -g -ansi -pedantic-errors + +template <class T> inline T min (T a, T b) { return a<b?a:b; } +double min (double, double); + +main () { + return (int) min (0, 1.0); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/template14.C b/gcc/testsuite/g++.old-deja/g++.jason/template14.C new file mode 100644 index 000000000000..464638d5b557 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/template14.C @@ -0,0 +1,16 @@ +// PRMS Id: 4745 +// Bug: g++ gets the constructor and destructor confused because the default +// parm prevents the two constructor types from satisfying ==. + +template <class T> struct A { + A(int = 1); + ~A(); +}; + +template <class T> A<T>::A(int) { } // causes compiler abort +template <class T> A<T>::~A() { } + +main() +{ + A<int> a; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/template15.C b/gcc/testsuite/g++.old-deja/g++.jason/template15.C new file mode 100644 index 000000000000..99e129bea89a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/template15.C @@ -0,0 +1,27 @@ +// PRMS Id: 2139 +// Bug: g++ tries to instantiate the template with types on the function +// obstack and fails. + +template<class T> +class X { +public: + X(int) { } + + T x; +}; + +class A { }; + +main() +{ + int i; + X<int> xi(i); + X<double> xd(i); + + X<int (*)(int, void *)> fp0(i); + X<int (*)(int, char, double)> fp1(i); + X<int (*)(int, double**, void *)> fp2(i); + + X<int (A::*)()> mp0 (i); + X<int A::*> mp1 (i); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/template16.C b/gcc/testsuite/g++.old-deja/g++.jason/template16.C new file mode 100644 index 000000000000..3241f981f354 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/template16.C @@ -0,0 +1,33 @@ +// PRMS Id: 1502 +// Bug: g++ fails to resolve 'gnc' in the call to 'grid'. + +template<class T> class foo { +public: + foo() { } +}; + +template<class T> class bar : public foo<T> { +public: + bar() : foo<T>() {} +}; + +template<class T> class ben : public foo<T> { +public: + ben() : foo<T>() {} + void grid(T (*f)(bar<T>&),bar<T>& x,bar<T>& y,bar<T>& param); +}; + +template<class T> void ben<T>::grid(T (*f)(bar<T>&),bar<T>& x,bar<T>& y,bar<T>& param) { } + +template<class T> T gnc(bar<T>& a) +{ + return 0; +} + +int main() +{ + ben<double> a; + bar<double> x,y,p; + a.grid(gnc,x,y,p); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/template17.C b/gcc/testsuite/g++.old-deja/g++.jason/template17.C new file mode 100644 index 000000000000..27e4d047ccdb --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/template17.C @@ -0,0 +1,11 @@ +// Caught by Booch Components. +// Bug: g++ tries to instantiate nested enums. +// Build don't link: + +template <class T> struct A +{ + struct B { }; + enum C { c }; +}; + +template struct A<int>; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/template18.C b/gcc/testsuite/g++.old-deja/g++.jason/template18.C new file mode 100644 index 000000000000..bcee653c64e8 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/template18.C @@ -0,0 +1,16 @@ +// Build don't link: +// Special g++ Options: -g -fexternal-templates +// GROUPS passed templates +// Bug: g++ emits template instances when it shouldn't. +// Special g++ Options: -g -fexternal-templates + +#pragma implementation "irrelevant_file" +#line 1 "wa.h" +#pragma interface // ERROR - , XFAIL *-*-* +template <class T> inline T min (T a, T b) { return a<b?a:b; } +#line 3 "wa.C" + +main() +{ + min (1, 1); +}// UNKNOWN "min" diff --git a/gcc/testsuite/g++.old-deja/g++.jason/template19.C b/gcc/testsuite/g++.old-deja/g++.jason/template19.C new file mode 100644 index 000000000000..ab3444325305 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/template19.C @@ -0,0 +1,9 @@ +// Make sure type deduction isn't confused by top-level cv-quals. +template <class T> T max (const T a, const T b) { return a>b?a:b; } + +main() +{ + int a = 0, b = 1; + int c = max (a, b); + int d = max ((const int)a, (const int)b); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/template2.C b/gcc/testsuite/g++.old-deja/g++.jason/template2.C new file mode 100644 index 000000000000..d3950e9b2b9b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/template2.C @@ -0,0 +1,12 @@ +// Bug: instantiation of member templates breaks. +// Build don't link: + +template <class T> struct A { + static void f (); + void g (); +}; + +template <class T> void A<T>::f () { } +template <class T> void A<T>::g () { } + +A<int> a; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/template20.C b/gcc/testsuite/g++.old-deja/g++.jason/template20.C new file mode 100644 index 000000000000..fe776c9ff21b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/template20.C @@ -0,0 +1,9 @@ +// Make sure type deduction works for both types of array parameters. +template <class T> void f (T (&a)[2]) { } +template <class T> void g (T a[2]) { } +main() +{ + int a[2] = { 0, 0 }; + f (a); + g (a); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/template21.C b/gcc/testsuite/g++.old-deja/g++.jason/template21.C new file mode 100644 index 000000000000..817d1da88282 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/template21.C @@ -0,0 +1,16 @@ +// Gosh, this works! +// Build don't link: + +template<class T> +struct A +{ + struct B + { + void bar(); + }; + struct C { }; +}; + +template<class T> void A<T>::B::bar() { } + +template class A<int>; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/template22.C b/gcc/testsuite/g++.old-deja/g++.jason/template22.C new file mode 100644 index 000000000000..db2c6202767d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/template22.C @@ -0,0 +1,31 @@ +// Testcase for proper unification of code involving references. +// Build don't link: + +template<class T> +struct A +{ + void foo(); +}; + +template<class T> void A<T>::foo() { } + +template class A<int&>; + +const int& f1 (); +int& f2 (); +int f3 (); + +template <class T> void g1 (const T&); +template <class T> void g2 (T&); +template <class T> void g3 (T); + +main() +{ + g1 (f1 ()); + g1 (f2 ()); + g1 (f3 ()); + g2 (f2 ()); + g3 (f1 ()); + g3 (f2 ()); + g3 (f3 ()); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/template23.C b/gcc/testsuite/g++.old-deja/g++.jason/template23.C new file mode 100644 index 000000000000..1d257a2e7df2 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/template23.C @@ -0,0 +1,12 @@ +// Testcase for instantiation with cv-qualified type +// Build don't link: + +template<class T> +struct A +{ + void foo(); +}; + +template<class T> void A<T>::foo() { } + +template class A<const int>; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/template24.C b/gcc/testsuite/g++.old-deja/g++.jason/template24.C new file mode 100644 index 000000000000..c56d92a8564d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/template24.C @@ -0,0 +1,21 @@ +// Bug: g++ doesn't find the conversion from ostream_withassign to ostream. + +#include <iostream.h> + +template <class T> +struct A { + T t; +}; + +template <class T> +ostream & operator<< (ostream & os, A<T> & a) +{ + os << a.t; + return os; +} + +main () +{ + A<int> a = { 1 }; + cout << a << endl; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/template25.C b/gcc/testsuite/g++.old-deja/g++.jason/template25.C new file mode 100644 index 000000000000..4fc2a9938639 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/template25.C @@ -0,0 +1,48 @@ +// PRMS Id: 6393 +// Bug: g++ is too lax in considering UPTs to be the same. + +template <class R, class T> +class Bar +{ +public: + R do_bar (T arg); +}; + + +template <class T> +class Foo +{ + T i; + +public: + void do_foo () {} + void do_foo (T const & t) {} + void do_foo (Bar<char, T> const & bar); // {} Put the body here and it works + void do_foo (Bar<T, T> const & bar); // {} Put the body here and it works +}; + +// These definitions don't work + +template <class T> +inline void Foo<T>:: +do_foo (Bar<char, T> const & bar) +{} + +template <class T> +inline void Foo<T>:: +do_foo (Bar<T, T> const & bar) +{} + + +main () +{ int i; + Bar<char, int> bar1; + Bar<int, int> bar2; + Foo<int> foo; + foo.do_foo(); + foo.do_foo(i); + foo.do_foo(bar1); + foo.do_foo(bar2); + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/template26.C b/gcc/testsuite/g++.old-deja/g++.jason/template26.C new file mode 100644 index 000000000000..fcd598dda840 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/template26.C @@ -0,0 +1,114 @@ +// PRMS Id: 6275 +// Bug: unification fails for call to find_parameter_in_stack. + +#include <stdio.h> +#include <stdlib.h> + +const int max_stack_size = 20; + +template <class T> +class Stack { + private: + T objects[max_stack_size]; + int nobjects; + public: + Stack(): nobjects(0) {} + void push(const T&a) { + if (nobjects >= max_stack_size) { + fprintf(stderr,"Stack: overflow\n"); + abort(); + } + objects[nobjects++] = a; + } + T pop() { + if (!nobjects) { + fprintf(stderr,"Stack: underflow\n"); + abort(); + } + nobjects -= 1; + T result = objects[nobjects]; + return result; + } + T top() const { + if (!nobjects) { + fprintf(stderr,"Stack: underflow\n"); + abort(); + } + return objects[nobjects - 1]; + } + int n() const { return nobjects; } + T operator[](int i) { return objects[i]; } +}; + +template <class T> +class Parameter { + T parameter_; + int is_set_; + int overrides_; + public: + Parameter(): is_set_(0), overrides_(0) {} + void set(const T& a) { parameter_ = a; is_set_ = 1; } + void override(int overrides = 1) { overrides_ = overrides; } + const T& value() const { return parameter_; } + int overrides() const { return overrides_; } + int is_set() const { return is_set_; } +}; + +template <class T1, class T2> +T2 +find_parameter_in_stack(Stack<T1>& stack, Parameter<T2>& (T1::*access)()) +{ + T2 result; + int have_result = 0; + for (int i=stack.n()-1; i>=0; i--) { + if ((stack[i].*access)().is_set()) { + if (!have_result || (stack[i].*access)().overrides()) { + result = (stack[i].*access)().value(); + have_result = 1; + } + } + } + return result; +} + +class A { + private: + Parameter<int> a_; + public: + A() { } + Parameter<int>& a() { return a_; } +}; + +int +main(int, char**) +{ + Stack<A> A_stack; + A a1; + A a2; + a1.a().set(1); + a2.a().set(2); + A_stack.push(a1); + A_stack.push(a2); + + int val = find_parameter_in_stack(A_stack, &A::a); + + printf("val = %d\n", val); + if (val != 2) + return 1; + + A_stack.pop(); + A_stack.pop(); + + a1.a().override(); + + A_stack.push(a1); + A_stack.push(a2); + + val = find_parameter_in_stack(A_stack, &A::a); + + printf("val = %d\n", val); + if (val != 1) + return 1; + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/template27.C b/gcc/testsuite/g++.old-deja/g++.jason/template27.C new file mode 100644 index 000000000000..3806da0ac7fb --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/template27.C @@ -0,0 +1,48 @@ +// PRMS Id: 6826 +// Check that unnecessary templates are not instantiated. + +template <class T> +class Test +{ + public: + void doThiss(); + void doThat(); +}; + +template <class T> +void Test<T>::doThiss() +{ + T x; + + x.thiss(); +} + +template <class T> +void Test<T>::doThat() +{ + T x; + + x.that(); +} + +class A +{ + public: + thiss() {}; +}; + +class B +{ + public: + that() {}; +}; + +main() +{ + Test<A> a; + a.doThiss(); // a.doThat() is not well formed, but then + // it's not used so needn't be instantiated. + + Test<B> b; + b.doThat(); // simillarly b.doThiss(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/template28.C b/gcc/testsuite/g++.old-deja/g++.jason/template28.C new file mode 100644 index 000000000000..c5501d91e617 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/template28.C @@ -0,0 +1,33 @@ +// PRMS Id: 7179 + +template <class T> +class Car{ +public: + Car(); +} ; + +class Wheels{ +public: + Wheels(); +} ; + +class Shop +{ +public: + Shop(); +private: + Car<Wheels> car ; +} ; + +Wheels::Wheels() {} + +Shop::Shop() {} + +int main() +{ + Shop shop ; + return 0 ; +} + +template <class T> +Car<T>::Car() {} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/template29.C b/gcc/testsuite/g++.old-deja/g++.jason/template29.C new file mode 100644 index 000000000000..d4212e2e5e79 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/template29.C @@ -0,0 +1,19 @@ +// PRMS Id: 9500 +// Build don't link: + +template <int S> +class base + { +public: + inline base(); + }; + +template <class T> +class derived : public base<sizeof(T)> + { +public: + inline derived(); + }; + +template <class T> +inline derived<T>::derived() : base<sizeof(T)>(){} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/template3.C b/gcc/testsuite/g++.old-deja/g++.jason/template3.C new file mode 100644 index 000000000000..e03b8a9ab35b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/template3.C @@ -0,0 +1,14 @@ +// PRMS Id: 4679 +// Bug: g++ doesn't re-instantiate templates after definition is seen. + +template <class T> struct A; + +A<int> *a; + +template <class T> struct A { T t; }; + +main() +{ + if (a) + a->t = 1; // gets bogus error +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/template30.C b/gcc/testsuite/g++.old-deja/g++.jason/template30.C new file mode 100644 index 000000000000..b9a6dbeaf3f7 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/template30.C @@ -0,0 +1,13 @@ +template <class T, class U> +int func(U, T); // ERROR - ref below + +template <class T, class U> +int func(T, U) +{ // ERROR - ref below + return 2; +} + +main () +{ + func (0, 1); // ERROR - ambiguous +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/template31.C b/gcc/testsuite/g++.old-deja/g++.jason/template31.C new file mode 100644 index 000000000000..8870bf4ec4ec --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/template31.C @@ -0,0 +1,38 @@ +// PRMS Id: 8569 + +#include <iostream.h> +#include <vector> + +class Component { + int george; + char mabel[128]; +}; +class CopyMe { +public: + CopyMe(){;} +private: + vector<Component> strvec; +}; + +class IncludeIt { +public: + IncludeIt() {} + ~IncludeIt() {} + IncludeIt(const IncludeIt& i) { + myStrvec = i.myStrvec; + } + IncludeIt& operator=(const IncludeIt& i) { + myStrvec = i.myStrvec; + } +private: + CopyMe myStrvec; +}; + +main(int argc, char**argv) { + IncludeIt foo; + IncludeIt* bar; + exit(0); +} + +template class __malloc_alloc_template<0>; +template class __default_alloc_template<false, 0>; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/template32.C b/gcc/testsuite/g++.old-deja/g++.jason/template32.C new file mode 100644 index 000000000000..d510e93c4920 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/template32.C @@ -0,0 +1,10 @@ +// Bug: Instantiating A<int> screws with class bindings for B +// Build don't link: + +template <class T> struct A { }; +struct B { + typedef int foo; + void f (); +}; + +void B::f () { A<int> a; foo i; } diff --git a/gcc/testsuite/g++.old-deja/g++.jason/template33.C b/gcc/testsuite/g++.old-deja/g++.jason/template33.C new file mode 100644 index 000000000000..35a63aad3da1 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/template33.C @@ -0,0 +1,17 @@ +// Test nested enums in templates. +// Build don't link: + +template <class T> +class A +{ +public: + enum muni {X, Y}; + + muni e() { return X; }; + muni f(); +}; + +template <class T> +A<T>::muni A<T>::f() { return X; } + +template class A<int>; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/template34.C b/gcc/testsuite/g++.old-deja/g++.jason/template34.C new file mode 100644 index 000000000000..76943291db8a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/template34.C @@ -0,0 +1,24 @@ +template<class T> +class Set { + public: + typedef int (*Compare)(const T&, const T&); + static Compare cmp1; + static int (*cmp2)(const T&, const T&); +}; + +template<class T> +int gen_cmp(const T& a, const T& b) { + if (a<b) return -1; + else if (a==b) return 0; + else return 1; +} + +template<class T> +Set<T>::Compare Set<T>::cmp1 = &gen_cmp; + +template<class T> +int (*Set<T>::cmp2)(const T&, const T&) = &gen_cmp; + +main() { + Set<int> s; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/template35.C b/gcc/testsuite/g++.old-deja/g++.jason/template35.C new file mode 100644 index 000000000000..be3f808252c3 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/template35.C @@ -0,0 +1,15 @@ +// Bug: instantiation of D() corrupts declaration of basis[]. +// Build don't link: + +struct B { }; +template <int t> +struct D : public B +{ + D() : B () { } +}; + +B const * basis[] = +{ + new D<0>, + new D<1>, +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/template36.C b/gcc/testsuite/g++.old-deja/g++.jason/template36.C new file mode 100644 index 000000000000..807af75e0d2a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/template36.C @@ -0,0 +1,51 @@ +// Testcase for implicit 'typename' and resolution of 'typename's in the +// current scope. + +class base1 { +public: + int bar() const + { return 1; } +}; + +class base2 { +public: + int bar() const + { return 0; } +}; + +template<class X> +struct base_trait { + typedef base1 base; +}; + +struct base_trait<float> { + typedef base2 base; +}; + +template<class T> +class weird : public base_trait<T>::base { +public: + typedef base_trait<T>::base base; + + base f (); + int base::* g (); + + int zowee() const + { return bar(); } +}; + +template <class T> +weird<T>::base weird<T>::f () +{ + return base(); +} + +template <class T> +int weird<T>::base::* weird<T>::g () +{ return 0; } + +int main() +{ + weird<float> z; + return z.zowee() || z.f().bar(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/template37.C b/gcc/testsuite/g++.old-deja/g++.jason/template37.C new file mode 100644 index 000000000000..fc237ca439e3 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/template37.C @@ -0,0 +1,36 @@ +// PRMS Id: 9930 +// Test of -fexternal-templates hackery in new template code +// Special g++ options: -fexternal-templates + + #pragma implementation "foo.hh" + #pragma interface "foo.hh" + + template<class T> + class ONE + { + public: + static void func(); + }; + + template<class T> + void ONE<T>::func() + { + } + + class ONE<int> + { + public: + static void func(); + }; + + void ONE<int>::func() + { + } + + main() + { + ONE<char>::func(); + ONE<int>::func(); + + return 0; + } diff --git a/gcc/testsuite/g++.old-deja/g++.jason/template38.C b/gcc/testsuite/g++.old-deja/g++.jason/template38.C new file mode 100644 index 000000000000..567dc20e4193 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/template38.C @@ -0,0 +1,18 @@ +// Special g++ Options: -fansi-overloading + +struct A { + friend int operator== (const A&, const A&); + A (int) { } +}; + +template <class T> int +operator== (const T&, const T&) +{ + return 0; +} + +main () +{ + A a (1); + return a == 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/template39.C b/gcc/testsuite/g++.old-deja/g++.jason/template39.C new file mode 100644 index 000000000000..dc76889e4e04 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/template39.C @@ -0,0 +1,22 @@ +// PRMS Id: 10283 +// Build don't link: + +template <class T> struct B { + static void (*p)(); + static void f (); +}; + +template <class T> +void (*B<T>::p)() = &B<T>::f; + +B<int> b; + +template <int i> struct A { + static const int j = i; + int k[j]; +}; + +A<1> a; + +template <int i> +const int A<i>::j; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/template4.C b/gcc/testsuite/g++.old-deja/g++.jason/template4.C new file mode 100644 index 000000000000..7fcb45c3f9a4 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/template4.C @@ -0,0 +1,21 @@ +// Bug: g++ tries to instantiate ccList twice, and fails. +// Build don't link: + +template<class T> class ccHandle{ }; +template <class T> class ccList; +template <class T> class cc_List { +public: + ccList <T> copy (); +}; + +template <class T> class ccList : public ccHandle < cc_List <T> > { +public: + ccList (int); +}; + +template <class T> +ccList <T> cc_List<T>::copy (){} + +int main (int, char **) { + ccList <int> size1(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/template40.C b/gcc/testsuite/g++.old-deja/g++.jason/template40.C new file mode 100644 index 000000000000..635dffcf143a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/template40.C @@ -0,0 +1,19 @@ +// PRMS id: 11315 +// Bug: g++ doesn't recognize the copy ctor for Array<long>. + +template <class Type> +class Array { +public: + Array(int sz=12) + : ia (new Type[sz]), size(sz) {} + ~Array() { delete[] ia;} + Array(const Array<long>& r) : size(0) {} // just for testing +private: + Type *ia; + int size; +}; + +main(int argc, char *argv[]) +{ + Array<long> ia; // looping occurs on this line +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/template41.C b/gcc/testsuite/g++.old-deja/g++.jason/template41.C new file mode 100644 index 000000000000..62d03b67372c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/template41.C @@ -0,0 +1,33 @@ +// PRMS Id: 11420 +// Bug: Can't handle indirect virtual template base init. + +extern "C" int printf (const char *, ...); + +template<class T> +class Vbase { + public: + Vbase(T i) { printf ("%d\n", i); } +}; + +template<class T> +class D1 : virtual public Vbase<T> { + public: + D1(T i) : Vbase<T>(i) {} +}; + +template<class T> +class D2 : virtual public Vbase<T> { + public: + D2(T i) : Vbase<T>(i) {} +}; + +template<class T> +class Most : public D1<T>, public D2<T> { + public: + Most(T i) : D1<T>(i), D2<T>(i), Vbase<T>(i) {} +}; + +int main () { + Most<int> x(2); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/template42.C b/gcc/testsuite/g++.old-deja/g++.jason/template42.C new file mode 100644 index 000000000000..529aaccd3484 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/template42.C @@ -0,0 +1,18 @@ +// Testcase for not evaluating template default args if they are +// never used. + +struct X { + X(int) { } +}; + +template <class T> +struct A { + void f (T t = T()) { } +}; + +main () +{ + A<X> a; + X x (1); + a.f (x); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/template43.C b/gcc/testsuite/g++.old-deja/g++.jason/template43.C new file mode 100644 index 000000000000..62c7ee76182d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/template43.C @@ -0,0 +1,30 @@ +// Test matching of partial specializations. + +template <int* x, int* y> +class EQUAL { +public: + enum { value = 0 }; +}; +template <int* x> +class EQUAL<x,x> { +public: + enum { value = 1 }; +}; + +int x; +int y; + +int equals_x_x = EQUAL<&x,&x>::value; // expected value: 1 +int equals_x_y = EQUAL<&x,&y>::value; // expected value: 0 +int equals_y_x = EQUAL<&y,&x>::value; // expected value: 0 +int equals_y_y = EQUAL<&y,&y>::value; // expected value: 1 + +main () +{ + if (equals_x_x == 1 + && equals_x_y == 0 + && equals_y_x == 0 + && equals_y_y == 1) + return 0; + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/template5.C b/gcc/testsuite/g++.old-deja/g++.jason/template5.C new file mode 100644 index 000000000000..3c1e4cd04c65 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/template5.C @@ -0,0 +1,28 @@ +// Bug: g++ fails to compare integer constants properly. +// Build don't link: + +template <int X, int Y> +struct Matrix { + int base [X] [Y]; +}; + +template <int M,int H,int N> +Matrix<M,N>& Mul(Matrix<M,N>& Q,Matrix<M,H>& A,Matrix<H,N>& B) { + for(int i=0;i<M;i++) { + for(int j=0;j<N;j++) { + Q.base[i][j]=0; + for(int k=0;k<H;k++) { + Q.base[i][j]+=A.base[i][k]*B.base[k][j]; + } + } + } + return Q; +} + +void f () +{ + Matrix<2, 3> q; + Matrix<2, 4> a; + Matrix<4, 3> b; + q = Mul (q, a, b); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/template6.C b/gcc/testsuite/g++.old-deja/g++.jason/template6.C new file mode 100644 index 000000000000..c42426a19081 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/template6.C @@ -0,0 +1,20 @@ +// PRMS Id: 4656 +// Testcase for use of member pointers in template resolution + +template <class T> class A { + public: + A() : a(1) {} + T a; +}; + +template <class T> +int foo (T A<int>::*p) +{ + return 0; +} +int main() +{ + int A<int>::*pm = &A<int>::a; // gets bogus error - failed temp resolution + foo (pm); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/template7.C b/gcc/testsuite/g++.old-deja/g++.jason/template7.C new file mode 100644 index 000000000000..87d79a8ab7bf --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/template7.C @@ -0,0 +1,9 @@ +// PRMS Id: 4826 +// Build don't link: + +class A; +template <class T> void f(const T&, const T&); + +void g (const A& a, A& b) { + f (a, b); // gets bogus error - failed unification +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/template8.C b/gcc/testsuite/g++.old-deja/g++.jason/template8.C new file mode 100644 index 000000000000..586fb61a02e6 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/template8.C @@ -0,0 +1,10 @@ +// PRMS Id: 4827 +// Build don't link: + +class A; +template <class T> int f (const T&, const A *); + +int g (const int& a) +{ + return f (a, (A *)0); // gets bogus error - failed unification +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/template9.C b/gcc/testsuite/g++.old-deja/g++.jason/template9.C new file mode 100644 index 000000000000..80fd8c9775ba --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/template9.C @@ -0,0 +1,12 @@ +// PRMS Id: 4864 +// Bug: g++ can't deal with a guiding declaration which comes before the +// template. +// Build don't link: + +void f (const int&, const int&); +template <class T> void f (const T&, const T&) { } + +void g (int a) +{ + f (a,a); // gets bogus error - two identical candidates +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/temporary.C b/gcc/testsuite/g++.old-deja/g++.jason/temporary.C new file mode 100644 index 000000000000..168bfe9103e1 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/temporary.C @@ -0,0 +1,19 @@ +// From: bruno@isoft.com.ar (Bruno R. Depascale) +// Subject: No destructor bug +// Date: Mon, 14 Feb 1994 12:49:45 -0300 (Arg) + +// Bug: temporaries created with constructor notation aren't destroyed. + +int count = 0; + +class A { +public: + A() { ++count; } + ~A() { --count; } +}; + +int main() +{ + A(); + return count; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/temporary2.C b/gcc/testsuite/g++.old-deja/g++.jason/temporary2.C new file mode 100644 index 000000000000..ea80a3fa6b91 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/temporary2.C @@ -0,0 +1,16 @@ +class X // Indentation has been done so to see the similarities. +{ +public: + X() {} // ERROR - referenced below + X(X& x) {x.i=7;} // ERROR - Both functions modify the + void bar(X& x) {x.i=7;} // ERROR - reference parameter x. + int i; +}; + +X foo() { X x; return x; } + +main() +{ + X x(foo()); // ERROR - Compiler doesn't warn about temporary reference. + x.bar(foo()); // ERROR - The same mistake is warned about in this case. +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/temporary3.C b/gcc/testsuite/g++.old-deja/g++.jason/temporary3.C new file mode 100644 index 000000000000..ec5984c3aeef --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/temporary3.C @@ -0,0 +1,26 @@ +// Bug: the temporary returned from f is elided, causing a to be constructed +// twice but only destroyed once. + +extern "C" int printf (const char *, ...); + +int c,d; + +struct A { + A (int) { c++; } + ~A () { d++; } + A (const A&) { c++; } + int i; +}; + +A f () +{ return 1; } + +main () +{ + { + A a (1); + a = f (); + } + printf ("%d %d\n", c, d); + return c != d; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/temporary4.C b/gcc/testsuite/g++.old-deja/g++.jason/temporary4.C new file mode 100644 index 000000000000..97ce95a81c0c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/temporary4.C @@ -0,0 +1,31 @@ +// Bug: g++ initializes both B::i and B::j before destroying any temps. + +extern "C" int printf (const char *, ...); + +int c = 0; +int d = 0; +int r = 0; + +struct A { + A() { if (c != d) r = 1; ++c; } + A(const A&); // declare so g++ returns A on the stack + ~A() { ++d; } + operator int () { return 0; } +}; + +A foo () +{ + return A(); +} + +struct B { + int i; + int j; + B(): i(foo()), j(foo()) { } +}; + +main() +{ + B b; + return r; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/temporary5.C b/gcc/testsuite/g++.old-deja/g++.jason/temporary5.C new file mode 100644 index 000000000000..07033d0e934c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/temporary5.C @@ -0,0 +1,16 @@ +// PRMS Id: 6604 +// Bug: Scoped constructor call is not properly recognized as a functional cast + +int c; + +struct A { + A() { ++c; } + ~A() { --c; } + operator int () { return 1; } +}; + +main () +{ + A::A(); + return c; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/temporary6.C b/gcc/testsuite/g++.old-deja/g++.jason/temporary6.C new file mode 100644 index 000000000000..ce6a92e586ad --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/temporary6.C @@ -0,0 +1,8 @@ +// Bug: the temporary from the default parameter to f2 is reused. +// Build don't link: + +struct A {}; +int f2 (int i, const A& ar = A()); +void f (int i, int j = f2(1)); +void g () { f (1); } +void h () { f (1); } diff --git a/gcc/testsuite/g++.old-deja/g++.jason/temporary7.C b/gcc/testsuite/g++.old-deja/g++.jason/temporary7.C new file mode 100644 index 000000000000..8b91fe1324d1 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/temporary7.C @@ -0,0 +1,35 @@ +// PRMS ID: 7304 + +struct V { + int n; + V() : n(0) { } + V(int x) : n(x) { } +}; + +V baz(const V &x) +{ + return x; +} + +int bar(V v1, V v2, V v3) +{ + return v1.n; +} + +struct A { + A(): n(7) { } + int foo(); + V n; +}; + +int A::foo() +{ + V v1, v2; + return bar(n, baz(v1), v2); +} + +int main() +{ + A a; + return (a.foo() != 7); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/temporary8.C b/gcc/testsuite/g++.old-deja/g++.jason/temporary8.C new file mode 100644 index 000000000000..bb0698e2e3c8 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/temporary8.C @@ -0,0 +1,25 @@ +// Test for proper handling of temporaries in ?: exprs. + +extern "C" int printf (const char *, ...); +int c = 0, d = 0; + +class A { +public: + A() { ++c; } + A(const A&) { ++c; } + ~A() { ++d; } +}; + +A f (const A& a) +{ + return (c ? A() : A()); +} + +int main() +{ + { + f (c ? A() : A()); + } + printf ("%d %d\n", c, d); + return c != d || c != 2; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/tempover.C b/gcc/testsuite/g++.old-deja/g++.jason/tempover.C new file mode 100644 index 000000000000..0998f692a591 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/tempover.C @@ -0,0 +1,14 @@ +// Build don't link: +// GROUPS passed templates overloading +#define TEMPL template <class T> + +class B {}; + +TEMPL class A : virtual public B { + public: + A(int); +}; + +TEMPL A<T>::A(int){} + +A<double> a(1); diff --git a/gcc/testsuite/g++.old-deja/g++.jason/tempparse.C b/gcc/testsuite/g++.old-deja/g++.jason/tempparse.C new file mode 100644 index 000000000000..68f67adc4738 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/tempparse.C @@ -0,0 +1,29 @@ +/* + PRMS Id: 3631 + Bug is: g++ mangles template class names in a way that it won't accept, + and then tries to feed them to itself. +*/ +// Build don't link: + +template<class T> +struct A { + A(); +}; + +template<class T> +struct B : A<T> { + B(); +}; // gets bogus error - B<C<char>> + +template<class T> +struct C { + C(); +}; + +template<class T> +struct D { + D(); + B<C<T> > p_f; +}; + +typedef D<char> Dummy; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/tempsub.C b/gcc/testsuite/g++.old-deja/g++.jason/tempsub.C new file mode 100644 index 000000000000..4b69d888d36e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/tempsub.C @@ -0,0 +1,28 @@ +// Distillation of crash1.C problem (PR 3633) +// Build don't link: + +template<class P> +class A +{ + P p; +}; + +template<class Q> +class B +{ + A<Q> a; // bogus error - temp parm name propagating +}; + +template<class R> +class C +{ + B<R> b; +}; + +template<class S> +class D +{ + S s; +}; + +C< D<int> > c; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/this.C b/gcc/testsuite/g++.old-deja/g++.jason/this.C new file mode 100644 index 000000000000..544db6c361a5 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/this.C @@ -0,0 +1,16 @@ +// PRMS Id: 5190 +// Bug: g++ fails to build up a const reference to `this'. +// Build don't link: + +class X +{ +public: + void member (); +}; + +void print (const X* const &); + +void X::member () +{ + print (this); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/thunk1.C b/gcc/testsuite/g++.old-deja/g++.jason/thunk1.C new file mode 100644 index 000000000000..22c0516f1b33 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/thunk1.C @@ -0,0 +1,47 @@ +// Test that non-variadic function calls using thunks work right. +// Special g++ Options: -fvtable-thunks + +struct A { + void* p; + A (void* q): p (q) { } + A (const A& a): p (a.p) { } +}; + +class CBase { +public: + void BaseFunc(); +}; + +class MMixin { +public: + virtual A MixinFunc(int arg, A arg2) = 0; +}; + +class CExample : public CBase, public MMixin { +public: + A MixinFunc(int arg, A arg2); +}; + +void CBase::BaseFunc() +{ +} + +A CExample::MixinFunc(int arg, A arg2) +{ + if (arg != 1 || arg2.p != 0) + return 0; + return this; +} + +void* test(MMixin& anExample) +{ + return anExample.MixinFunc(1,A(0)).p; +} + +main () +{ + CExample c; + + if (test(c) != &c) + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/thunk2.C b/gcc/testsuite/g++.old-deja/g++.jason/thunk2.C new file mode 100644 index 000000000000..d4ba59bbf000 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/thunk2.C @@ -0,0 +1,48 @@ +// Test that non-variadic function calls using thunks and PIC work right. +// Skip if not native +// Special g++ Options: -fvtable-thunks -fPIC + +struct A { + void* p; + A (void* q): p (q) { } + A (const A& a): p (a.p) { } +}; + +class CBase { +public: + void BaseFunc(); +}; + +class MMixin { +public: + virtual A MixinFunc(int arg, A arg2) = 0; +}; + +class CExample : public CBase, public MMixin { +public: + A MixinFunc(int arg, A arg2); +}; + +void CBase::BaseFunc() +{ +} + +A CExample::MixinFunc(int arg, A arg2) +{ + if (arg != 1 || arg2.p != 0) + return 0; + return this; +} + +void* test(MMixin& anExample) +{ + return anExample.MixinFunc(1,A(0)).p; +} + +main () +{ + CExample c; + + if (test(c) != &c) + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/thunk3.C b/gcc/testsuite/g++.old-deja/g++.jason/thunk3.C new file mode 100644 index 000000000000..50f008655eae --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/thunk3.C @@ -0,0 +1,56 @@ +// Test that function calls using thunks work right. +// Special g++ Options: -fvtable-thunks +// excess errors test - XFAIL mips*-*-* alpha*-*-* rs6000-*-* powerpc-*-eabi m68k-*-coff + +#include <stdarg.h> + +struct A { + void* p; + A (void* q): p (q) { } + A (const A& a): p (a.p) { } +}; + +class CBase { +public: + void BaseFunc(); +}; + +class MMixin { +public: + virtual A MixinFunc(int arg, ...) = 0; +}; + +class CExample : public CBase, public MMixin { +public: + A MixinFunc(int arg, ...); +}; + +void CBase::BaseFunc() +{ +} + +A CExample::MixinFunc(int arg, ...) +{ + va_list ap; + va_start (ap, arg); + + if (arg != 1 || va_arg (ap, int) != 2 || va_arg (ap, int) != 3 + || va_arg (ap, int) != 4 || va_arg (ap, int) != 5 + || va_arg (ap, int) != 6 || va_arg (ap, int) != 7 + || va_arg (ap, int) != 8 || va_arg (ap, int) != 9) + return 0; + return this; +} + +void* test(MMixin& anExample) +{ + return anExample.MixinFunc(1,2,3,4,5,6,7,8,9).p; +} + +main () +{ + CExample c; + + if (test(c) != &c) + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/tpt-1.cc b/gcc/testsuite/g++.old-deja/g++.jason/tpt-1.cc new file mode 100644 index 000000000000..15095200d011 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/tpt-1.cc @@ -0,0 +1,30 @@ +// Testcase for use of template parms as types for other template parms. + +template <class T, T t> +class A { + T a; +public: + A(): a(t) {} + + operator T () { return a; } +}; + +template <class S, S s> +class B { + A<S,s> a; +public: + B(A<S,s>& b): a(b) {} + + operator S () { return a*20; } +}; + +main() +{ + A<int, 5> a; + B<int, 5> b(a); + + if (b * a == 500) + return 0; + else + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/tredecl.C b/gcc/testsuite/g++.old-deja/g++.jason/tredecl.C new file mode 100644 index 000000000000..72cbae7a6eea --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/tredecl.C @@ -0,0 +1,17 @@ +// Bug: Foo<Bar> *p semi-instantiates Foo<Bar> in local scope, so +// when Foo<Bar> f tries to instantiate it later, it only finds the partial +// instantiation from before. +// +// No PR; distilled from James Clark's SGML project. +// +// Build don't link: + +class Bar { }; + +template<class T> class Foo; + +Foo<Bar> *p; + +template<class T> class Foo { }; + +Foo<Bar> f; // gets bogus error - hosed binding levels diff --git a/gcc/testsuite/g++.old-deja/g++.jason/tredecl2.C b/gcc/testsuite/g++.old-deja/g++.jason/tredecl2.C new file mode 100644 index 000000000000..faaf8624f273 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/tredecl2.C @@ -0,0 +1,5 @@ +// No bug; making sure my fix for tredecl.C doesn't break other cases +// Build don't link: + +template<class T> struct Foo { Foo<T> * me() { return this; } }; +Foo<int> i; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/tredecl3.C b/gcc/testsuite/g++.old-deja/g++.jason/tredecl3.C new file mode 100644 index 000000000000..bcc25ba484f2 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/tredecl3.C @@ -0,0 +1,11 @@ +// PRMS Id: 4679 +// Bug: redeclaration of templates erases the definition. +// Build don't link: + +template <class T> class Foo { public: void h(); }; +template <class T> class Foo; + +void g() +{ + Foo<int> f; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/tredecl4.C b/gcc/testsuite/g++.old-deja/g++.jason/tredecl4.C new file mode 100644 index 000000000000..64ba4b8ff8b0 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/tredecl4.C @@ -0,0 +1,5 @@ +// It is illegal to use the name of a class template for anything else, +// including another class template. + +template <class T> class A { }; // ERROR - +template <class U, class V> class A { }; // ERROR - diff --git a/gcc/testsuite/g++.old-deja/g++.jason/trivial.C b/gcc/testsuite/g++.old-deja/g++.jason/trivial.C new file mode 100644 index 000000000000..f5a535541cba --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/trivial.C @@ -0,0 +1,71 @@ +// PRMS Id: 3665 +// Build don't link: + +//------------------------------------------------------------- +// Referential declaration within class +// +// Imbeded below is the invocation of the compiler and the error +// message +// +// This compiles successfully with both the xlC and CFRONT compilers +// This was reviewed with Clem Dickey and we agree that it appears to +// be a Cygnus compiler problem. +//------------------------------------------------------------- +/* +$ make bug.reference.o + /usr/p3/bin/i960-vxworks-g++ `getsrc bug.reference.C` -I. -Iinc1 -Iinc2 + -I/vw5.0.3/h -I/vw5.0.3/h/i960 -I/usr/p3/lib/gcc-lib/i960-vxworks/cygnus-2.3.3 +/include -I/usr/p3/lib/gcc-lib/i960-vxworks/cygnus-2.3.3-930417/include -I/usr/p +3/lib/i960-vxworks/include -I/usr/p3/i960-vxworks/include -c -DCPU_FAMILY=I960 +-DCPU=I960CA -mca -mold-align -g3 -O1 -DASSERT_ON -nostdinc -nostdinc++ -MD +./bug.reference.C: In method `class1::class1 (long unsigned int, long unsigned i +nt **&)': +./bug.reference.C:43: cannot convert type `long unsigned int **' +./bug.reference.C:43: to type `long unsigned int *[]&' +make: 1254-004 The error code from the last command is 1. +*/ + +// typedefs +typedef unsigned long u32; +typedef u32 *ul[16]; + +// class defs +class class1 { + u32 var1; + class1(const class1 &); // Copy constructor + class1& operator=(const class1 &); // operator= member function +public: + class1(u32, ul&); + ul &ulref; + ~class1() {} +}; + + +// member function defs +class1::class1(u32 u, ul &l) : var1(u), ulref(l) +{} + +/* =========================================================================== +Note: The following is a "work around" that allows the successful compilation. + + +// typedefs +typedef unsigned long u32; +typedef u32 *ul[16]; + +// class defs +class class1 { + u32 var1; + class1(const class1 &); // Copy constructor + class1& operator=(const class1 &); // operator= member function +public: + class1(u32, ul*); + ul &ulref; + ~class1() {} +}; + + +// member function defs +class1::class1(u32 u, ul *l) : var1(u), ulref(*l) +{} +============================================================================*/ diff --git a/gcc/testsuite/g++.old-deja/g++.jason/typeck.C b/gcc/testsuite/g++.old-deja/g++.jason/typeck.C new file mode 100644 index 000000000000..cffbc87bbce1 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/typeck.C @@ -0,0 +1,19 @@ +// Bug: g++ fails to catch incompatibilities in the parameter lists when +// assigning. +// Build don't link: + +typedef struct S *type_p; +typedef struct S const *ctype_p; + +typedef ctype_p (*PF) (int); + +type_p callee (type_p arg) { return 0; } + +void foobar () +{ + static PF p = callee; // ERROR - + + p = callee; // ERROR - +} + +PF pp = callee; // ERROR - diff --git a/gcc/testsuite/g++.old-deja/g++.jason/typedef.C b/gcc/testsuite/g++.old-deja/g++.jason/typedef.C new file mode 100644 index 000000000000..fac78cebeaf0 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/typedef.C @@ -0,0 +1,9 @@ +// PRMS Id: 4687 +// Bug: g++ misinterprets typedefs of function type in class scope. +// Build don't link: + +struct A { + typedef int F(); + F *fp; + void* g() { return fp; } // gets bogus error - typing +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/typedef2.C b/gcc/testsuite/g++.old-deja/g++.jason/typedef2.C new file mode 100644 index 000000000000..44a32de39256 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/typedef2.C @@ -0,0 +1,12 @@ +// PRMS Id: 5367 +// Bug: the nested name of C::func gets hosed. + +struct C { + typedef int func(int *, int *); +}; + +int +main() +{ + C::func *handler; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/typedef3.C b/gcc/testsuite/g++.old-deja/g++.jason/typedef3.C new file mode 100644 index 000000000000..5b96451ccc91 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/typedef3.C @@ -0,0 +1,8 @@ +// Test that inheriting from a type typedefed to itself works. +// Build don't link: + +typedef struct class1 { + class1& operator=(const class1&); +} class1; + +class class2 : public class1 { }; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/typeid1.C b/gcc/testsuite/g++.old-deja/g++.jason/typeid1.C new file mode 100644 index 000000000000..90eeb4558fe2 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/typeid1.C @@ -0,0 +1,11 @@ +#include <typeinfo> +#include <iostream.h> + +struct foo { double f(int); }; + +main() { + double f (int); + const type_info &r = typeid (f); + cout << typeid(f).name() << endl; + cout << typeid(foo::f).name() << endl; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/typeid2.C b/gcc/testsuite/g++.old-deja/g++.jason/typeid2.C new file mode 100644 index 000000000000..16d5e970142e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/typeid2.C @@ -0,0 +1,30 @@ +// PRMS Id: 11596 + +#include <typeinfo> +extern "C" int printf (const char *, ...); + +class Chicken +{ +public: + int eggs_per_day; +}; + +template <class Bird> +class Flock +{ +public: + Bird * flock_head; + int head_count; + void print_self() { + printf ("A flock of %d %ss\n", head_count, typeid (Bird).name ()); + printf ("A flock of %d %ss\n", head_count, typeid (*flock_head).name ()); + } +}; + +main() +{ + Flock<Chicken> x; + printf ("%s\n", typeid(x).name()); + x.head_count = 42; + x.print_self(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/union.C b/gcc/testsuite/g++.old-deja/g++.jason/union.C new file mode 100644 index 000000000000..b145390efcca --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/union.C @@ -0,0 +1,11 @@ +// Bug: g++ doesn't insert anon union members into class scope. +// Breaks groff. +// Build don't link: + +struct A { + union { + int i; + }; + + void foo () { i = 1; } // gets bogus error - +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/vecdel.C b/gcc/testsuite/g++.old-deja/g++.jason/vecdel.C new file mode 100644 index 000000000000..717e96788982 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/vecdel.C @@ -0,0 +1,19 @@ +__SIZE_TYPE__ newsize = 0; +__SIZE_TYPE__ delsize = 0; + +struct A { + int i; + void * operator new [] (__SIZE_TYPE__ i) + { newsize = i; return ::operator new [](i); } + void operator delete [] (void *p, __SIZE_TYPE__ i) + { delsize = i; ::operator delete [](p); } +}; + +int main() +{ + A* ap = new A [2]; + delete [] ap; + if (!newsize || newsize != delsize) + return 1; + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/virtual.C b/gcc/testsuite/g++.old-deja/g++.jason/virtual.C new file mode 100644 index 000000000000..65e8c94f2428 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/virtual.C @@ -0,0 +1,41 @@ +// From: chw@bellcore.com (Charlie Woloszynski,MRE 2J-278,8295228,,27143) +// Newsgroups: gnu.g++.bug +// Subject: gcc-2.5.5 bug in multiple inheritance and pure virtual functions +// Date: 25 Jan 1994 23:41:36 -0500 + +// Bug: g++ fails to notice definitions of abstract virtuals. +// Build don't link: + +class A +{ +public: + virtual void a1() = 0; + virtual void a2() = 0; +}; + +class B +{ +public: + virtual void b1() = 0; + virtual void b2() = 0; +}; + + +class C: public A, public B +{ +public: + virtual void a2() {}; + virtual void b2() {}; +}; + +class D : public C +{ +public: + virtual void a1() {}; + virtual void b1() {}; +}; + +main() +{ + D d; // gets bogus error +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/virtual2.C b/gcc/testsuite/g++.old-deja/g++.jason/virtual2.C new file mode 100644 index 000000000000..22b9fec5e741 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/virtual2.C @@ -0,0 +1,13 @@ +struct A { + virtual A* f () { return this; } +}; + +struct B: public A { + virtual B* f () { return 0; } +}; + +main () +{ + A* ap = new B; + return (ap->f () != 0); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/warning1.C b/gcc/testsuite/g++.old-deja/g++.jason/warning1.C new file mode 100644 index 000000000000..86a2160e764c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/warning1.C @@ -0,0 +1,7 @@ +// Bug: g++ protests that foo was never defined. +// Build don't link: + +static void foo (); +static void foo (); +static void foo () { } +void bar () { foo(); } // gets bogus error - diff --git a/gcc/testsuite/g++.old-deja/g++.jason/warning10.C b/gcc/testsuite/g++.old-deja/g++.jason/warning10.C new file mode 100644 index 000000000000..8dbf5ed32179 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/warning10.C @@ -0,0 +1,19 @@ +// Don't warn about these comparisons. +// Build don't link: +// Special g++ Options: -W -Wall + +struct A { + unsigned int b : 28; +}; + +int f (int i, unsigned char u, A a, unsigned long ul) +{ + if ((u & 0x10) == 0) + return 1; + if (i == 0U) + return 1; + if (a.b > ul) + return 1; + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/warning2.C b/gcc/testsuite/g++.old-deja/g++.jason/warning2.C new file mode 100644 index 000000000000..778a6158a8cc --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/warning2.C @@ -0,0 +1,14 @@ +// g++ ought to warn about casting a base pointer to a derived reference. +// Build don't link: + +struct A { + virtual int f () = 0; +}; + +struct B: public A { int f () { } }; + +main() +{ + B* bp; + A& ar = (A&)bp; // WARNING - +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/warning3.C b/gcc/testsuite/g++.old-deja/g++.jason/warning3.C new file mode 100644 index 000000000000..b63b9cac1483 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/warning3.C @@ -0,0 +1,12 @@ +// Bug: overloading of 'A' for template causes bogus shadowing warnings. +// Special g++ Options: -Wshadow +// Build don't link: + +template<class T> +class A +{ + public: + virtual ~A() {} +}; + +template class A<int>; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/warning4.C b/gcc/testsuite/g++.old-deja/g++.jason/warning4.C new file mode 100644 index 000000000000..a4eb4ac7d41e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/warning4.C @@ -0,0 +1,16 @@ +// Bug: a virtual function with the same name in an unrelated class will +// cause a bogus overloading warning. +// Special g++ Options: -Woverloaded-virtual +// Build don't link: + +struct A { + virtual void foo (); +}; + +struct B { + virtual void bar (); +}; + +struct C: public A { + virtual void bar (); +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/warning5.C b/gcc/testsuite/g++.old-deja/g++.jason/warning5.C new file mode 100644 index 000000000000..ffa8713ea640 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/warning5.C @@ -0,0 +1,23 @@ +// PRMS Id: 5135 +// Bug: g++ complains that the result of the new expression is not used. +// Special g++ Options: -Wall + +extern "C" int printf (const char *, ...); +inline void * operator new (__SIZE_TYPE__, void *p) { return p; } + +class foo { +public: + foo() : a(42) {}; + int a; +}; + +main() +{ + char buffer[1024]; + + new (buffer) foo; + + foo* pY = (foo *)buffer; + + return pY->a != 42; +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/warning6.C b/gcc/testsuite/g++.old-deja/g++.jason/warning6.C new file mode 100644 index 000000000000..920a4694acd6 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/warning6.C @@ -0,0 +1,7 @@ +// Special g++ Options: -Wunused +// Build don't link: + +struct A { + int i:8; + virtual ~A() {} +}; diff --git a/gcc/testsuite/g++.old-deja/g++.jason/warning7.C b/gcc/testsuite/g++.old-deja/g++.jason/warning7.C new file mode 100644 index 000000000000..1fe03f89ce94 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/warning7.C @@ -0,0 +1,6 @@ +// PRMS Id: 5481 +// Special g++ Options: -Wunused +// Build don't link: + +struct A { }; +static A a = A(); diff --git a/gcc/testsuite/g++.old-deja/g++.jason/warning8.C b/gcc/testsuite/g++.old-deja/g++.jason/warning8.C new file mode 100644 index 000000000000..d6ea821eb902 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/warning8.C @@ -0,0 +1,17 @@ +// Build don't link: + +struct A { + A(); + ~A(); +}; + +struct B { + B (const A&); + ~B (); +}; + +const B& f () +{ + A a; + return a; // WARNING - returning reference to temporary +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/warning9.C b/gcc/testsuite/g++.old-deja/g++.jason/warning9.C new file mode 100644 index 000000000000..d46ba37650cd --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/warning9.C @@ -0,0 +1,13 @@ +// Special g++ Options: -Wsynth + +struct A { + operator int (); + A& operator= (int); // WARNING - not used below +}; + +main() +{ + A a, b; + + a = b; // WARNING - uses synthesized op= +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/access1.C b/gcc/testsuite/g++.old-deja/g++.law/access1.C new file mode 100644 index 000000000000..75b7ec39808a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/access1.C @@ -0,0 +1,34 @@ +// Build don't link: +// GROUPS passed access +// access file +// Message-Id: <9211281852.AA24557@cove.cis.ufl.edu> +// From: Robert Forsman <thoth@cove.cis.ufl.edu> +// Subject: method access bug in gcc-2.3.1 on a sparc-sun-sunos4.1.2 +// Date: Sat, 28 Nov 92 13:52:14 EST + +extern "C" { + int atoi(const char*); +} + +struct thingus; + +class foo { +public: + static const foo alpha; + static const foo beta; + +private: + int i; + foo(thingus * s); +public: + foo() {i=0;} +}; + +struct thingus { + int i; +}; + +static thingus blah, blah2; + +const foo foo::alpha(&blah); +const foo foo::beta(&blah2); diff --git a/gcc/testsuite/g++.old-deja/g++.law/access2.C b/gcc/testsuite/g++.old-deja/g++.law/access2.C new file mode 100644 index 000000000000..02b27c3e8c60 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/access2.C @@ -0,0 +1,20 @@ +// Build don't link: +// GROUPS passed access +// access file +// Message-Id: <9306301534.AA05072@sparc1.cnm.us.es> +// From: juando@cnm.us.es (Juan D. Martin) +// Subject: Compiler lets access to private constructor in template. +// Date: Wed, 30 Jun 93 17:34:10 +0200 + +template <class T> class Foo +{ +private: + friend class Bar; // To avoid warning. + Foo(const T &v) {}; // ERROR - private +}; + + +main() +{ + Foo<int>(1);// ERROR - +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/access3.C b/gcc/testsuite/g++.old-deja/g++.law/access3.C new file mode 100644 index 000000000000..7836fe55edd1 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/access3.C @@ -0,0 +1,16 @@ +// Build don't link: +// GROUPS passed access +// unsorted.2 file +// Date: Sat, 6 Jun 1992 18:23:03 -0400 +// From: Brendan Kehoe <brendan@cs.widener.edu> +// Message-Id: <199206062223.AA22653@betty.cs.widener.edu> +// Subject: bug with access control to member functions + + class X { + void g (int); // ERROR - is private + public: + void g (double); + }; + + class Y : public X { void f() { g (1); } };// ERROR - + diff --git a/gcc/testsuite/g++.old-deja/g++.law/access4.C b/gcc/testsuite/g++.old-deja/g++.law/access4.C new file mode 100644 index 000000000000..994a6109bde9 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/access4.C @@ -0,0 +1,27 @@ +// Build don't link: +// GROUPS passed access +// (Message bugs/access:3) +// From: jamshid@ses.com (Jamshid Afshar) +// Date: Wed, 2 Mar 94 18:24:22 CST +// Subject: g++ 2.5.5 doesn't warn about inaccessible virtual base ctor +// Message-ID: <9403030024.AA04534@ses.com> + +class ForceLeafSterile { + friend class Sterile; + ForceLeafSterile() {} // ERROR - +}; + +class Sterile : private virtual ForceLeafSterile { +public: + Sterile() {} + Sterile(const char* /*blah*/) {} +}; + +class Illegitimate : public Sterile { +public: + Illegitimate() {} // ERROR - can't access virtual base deflt ctor + Illegitimate(const char* /*blah*/) + : ForceLeafSterile() {} // ERROR - can't access default ctor + Illegitimate(const Illegitimate&) + {} // ERROR - can't access default ctor +}; diff --git a/gcc/testsuite/g++.old-deja/g++.law/access5.C b/gcc/testsuite/g++.old-deja/g++.law/access5.C new file mode 100644 index 000000000000..8d25ed2c6a7c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/access5.C @@ -0,0 +1,24 @@ +// Build don't link: +// GROUPS passed access +// access file +// From: Jeffrey C. Gealow <jgealow@mtl.mit.edu> +// Date: Thu, 18 Feb 93 10:22:23 -0500 +// Subject: nested class access control bug +// Message-ID: <9302181522.AA29209@mtl.mit.edu> + + +class enclose { +public: + class nested_public { int x; }; +protected: + class nested_protected { int x; }; +private: + class nested_private { int x; }; +}; + +class derived : public enclose { + nested_public obj1; // ok + nested_protected obj2; // ok + nested_private obj3; // error// ERROR - .* , XFAIL *-*-* +}; + diff --git a/gcc/testsuite/g++.old-deja/g++.law/arg1.C b/gcc/testsuite/g++.old-deja/g++.law/arg1.C new file mode 100644 index 000000000000..f980874e48ca --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/arg1.C @@ -0,0 +1,29 @@ +// Build don't link: +// GROUPS passed arg-matching +// arg-matching file +// Subject: argument matching depending on the def order +// From: kondo@akane.mech.ibaraki.ac.jp +// Date: Fri, 04 Sep 92 17:41:05 JST + +#include <iostream.h> +// check the order of declarations +class A { +public: + void f(double* p) { cout << "A(double*)\n"; } // ERROR - candidate + void f(int* p) { cout << "A(int*)\n"; } // ERROR - candidate +}; + +class B { +public: + void f(int* p) { cout << "B(int*)\n"; } // ERROR - candidate + void f(double* p) { cout << "B(double*)\n"; } // ERROR - candidate +}; + +main() +{ + A a; + B b; + + a.f(0);// ERROR - .* + b.f(0);// ERROR - .* +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/arg10.C b/gcc/testsuite/g++.old-deja/g++.law/arg10.C new file mode 100644 index 000000000000..2c21ced16383 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/arg10.C @@ -0,0 +1,20 @@ +// Build don't link: +// GROUPS passed arg-matching +// arg-matching file +// From: Terry Lee <terry@uivlsisd.csl.uiuc.edu> +// Date: Sat, 14 May 1994 02:46:15 -0500 +// Subject: g++ 2.5.8 template<const void*> bug +// Message-ID: <199405140746.AA03993@uivlsisd.csl.uiuc.edu> + +template<class T> +class A { +public: + void func(const T& val) { } +}; + +int main() +{ + A<const void*> a; + int* ptr = 0; + a.func(ptr); +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/arg11.C b/gcc/testsuite/g++.old-deja/g++.law/arg11.C new file mode 100644 index 000000000000..77ea8d84e456 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/arg11.C @@ -0,0 +1,23 @@ +// Build don't link: +// GROUPS passed arg-matching +// excess errors test - XFAIL *-*-* +// From: gustavo@cpqd.br (Gustavo Chaves) +// Date: Wed, 25 May 94 09:38:00 EST +// Subject: problem with user defined conversions in initialization +// Message-ID: <9405251238.AA19815@moon.cpqd.br> + +struct String { String(const char*); }; + +struct Ack { Ack(String); }; + +struct S { void method(Ack); }; + +void function(Ack); + +int +foo(S *o) +{ // Neither call has a usable constructor for conversions of char[5] to Ack. + function("adsf");// ERROR - + o->method("adsf");// ERROR - + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/arg2.C b/gcc/testsuite/g++.old-deja/g++.law/arg2.C new file mode 100644 index 000000000000..5dbf48389ca8 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/arg2.C @@ -0,0 +1,22 @@ +// Build don't link: +// GROUPS passed arg-matching +// arg-matching file +// Message-Id: <199303032114.AA03574@kolvir.Boulder.ParcPlace.COM> +// From: Warner Losh <imp@boulder.parcplace.com> +// Subject: Overloading bug in g++ 2.3.3 (sparc) compiled by GNU C version 2.3.3 +// Date: Wed, 03 Mar 1993 14:14:02 MST + +class c1 { }; + +typedef void (*fnp)(void *); +typedef void (c1::*memfnp)(void *); +extern void fn1( fnp ); +extern void fn1( c1*, memfnp ); + +void f3(void *) { } + +void fn2() +{ + fn1((fnp) &f3); // Everybody likes this + fn1(&f3); // g++ complains here line 13 +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/arg3.C b/gcc/testsuite/g++.old-deja/g++.law/arg3.C new file mode 100644 index 000000000000..0037c40d72a8 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/arg3.C @@ -0,0 +1,22 @@ +// Build don't link: +// GROUPS passed arg-matching +typedef void* Ptr; + + +void func(int, const Ptr& p); + +template <class T> void func(T, const Ptr& p); + + +Ptr& return_ref(); + + +main() +{ + char* x; + + func(x,return_ref()); // bug: + // call of func(int, const Ptr&) + // instead of func(char*,const Ptr&) + +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/arg4.C b/gcc/testsuite/g++.old-deja/g++.law/arg4.C new file mode 100644 index 000000000000..2d4479deebcc --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/arg4.C @@ -0,0 +1,20 @@ +// Build don't link: +// GROUPS passed arg-matching +// arg-matching file +// Message-Id: <14t4tyk@rpi.edu> +// From: jorgej@colossus.cs.rpi.edu (Joaquim Jorge) +// Subject: g++ 2.3.3 Doesn't check function types in initializer lists ? +// Date: Tue, 9 Mar 1993 21:39:08 GMT + +typedef void (*FuncPtr)(int a, float b); +class Amazing { int a; int b; int c; }; + +extern void *Wrong1(char *a, int *b); +extern void *Wrong2(Amazing a, int *b); +extern void *Wrong3(char *a, Amazing *b); +extern void Wrong4(char *a, int *b); +extern Amazing Wrong5(char *a, int *b); + +FuncPtr p = &Wrong5;// ERROR - .* +FuncPtr func_ptr_array[] = { &Wrong1, &Wrong2, &Wrong3, &Wrong4, &Wrong5, 0 };// ERROR - .* + diff --git a/gcc/testsuite/g++.old-deja/g++.law/arg5.C b/gcc/testsuite/g++.old-deja/g++.law/arg5.C new file mode 100644 index 000000000000..276068aa8b6d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/arg5.C @@ -0,0 +1,16 @@ +// Build don't link: +// GROUPS passed arg-matching +extern double pow(double,int*); + +extern "C" { + extern int printf(char*,...); + extern double pow(double, double); +} + +int main() +{ + if (pow (2.0, 3.0) != 8.0) + printf ("FAIL\n"); + else + printf ("PASS\n"); +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/arg6.C b/gcc/testsuite/g++.old-deja/g++.law/arg6.C new file mode 100644 index 000000000000..2ad7732c1565 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/arg6.C @@ -0,0 +1,15 @@ +// Build don't link: +// GROUPS passed arg-matching +// arg-matching file +// Message-Id: <9305032310.AA03900@malachite.bbn.com> +// From: Dan Franklin <dan@diamond.bbn.com> +// Subject: overloaded function bug +// Date: Mon, 3 May 93 19:10:10 EDT + + + typedef int (*fnp)(int, void*); + void dispatch_insert(int, int, fnp, void* = 0); + void dispatch_insert(int, int, long*, char*); + typedef void (*InsertFunP)(int, int, fnp, void*); + extern void f(InsertFunP); + void g() { f(dispatch_insert); } diff --git a/gcc/testsuite/g++.old-deja/g++.law/arg7.C b/gcc/testsuite/g++.old-deja/g++.law/arg7.C new file mode 100644 index 000000000000..5cf1cd0b3d35 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/arg7.C @@ -0,0 +1,33 @@ +// GROUPS passed arg-matching +// arg-matching file +// Message-Id: <9305041759.AA04913@malachite.bbn.com> +// From: Dan Franklin <dan@diamond.bbn.com> +// Subject: overloaded function resolved incorrectly +// Date: Tue, 4 May 93 13:59:18 EDT + +#include <stdio.h> + +// Given the following overloaded function definitions + +void ovf(unsigned long, short, short) { printf ("PASS\n"); } +void ovf( int, short, unsigned long) { printf ("FAIL\n"); } + +// and the call +// +// ovf(unsigned long, unsigned int, unsigned int) +// +// it seems to me (and to cfront) that this should resolve to ovf #1 above, +// but g++ resolves it to ovf #2. Resolving to ovf #1 requires two conversions +// (unsigned int => short) while resolving to ovf #2 takes two conversions +// (unsigned long => int, unsigned int => short) and a promotion +// (unsigned int => unsigned long). + +main(int, char**) +{ + unsigned long pixmap = 0; + unsigned int x = 0; + unsigned int y = 0; + + ovf(pixmap, x, y); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/arg8.C b/gcc/testsuite/g++.old-deja/g++.law/arg8.C new file mode 100644 index 000000000000..802471bae47b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/arg8.C @@ -0,0 +1,27 @@ +// GROUPS passed arg-matching +// arg-matching file +// Message-Id: <9307081747.AA14030@tnt> +// From: mclaugh@tnt.acsys.com (Mark A. McLaughlin) +// Subject: g++ bug +// Date: Thu, 8 Jul 93 11:47:28 MDT + + +#include <iostream.h> +#include <stdio.h> + +// With this declaration the program will not link. +template <class Type> ostream & save(ostream & os, Type T); + + template <class Type> ostream & +save(ostream & os, Type T) { + return os << T; +} // save + + int +main() { + int i = 10; + save((ostream &)cout, i) << endl; + short int s = 5; + save((ostream &)cout, s) << endl; + printf ("PASS\n"); +} // main diff --git a/gcc/testsuite/g++.old-deja/g++.law/arg9.C b/gcc/testsuite/g++.old-deja/g++.law/arg9.C new file mode 100644 index 000000000000..809f2b76a4a0 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/arg9.C @@ -0,0 +1,39 @@ +// Build don't link: +// GROUPS passed arg-matching +// arg-matching file +// Message-Id: <199405132049.QAA06835@elan.cs.UMD.EDU> +// Subject: Bug in g++ 2.4.5 and 2.5.8 +// Date: Fri, 13 May 1994 16:49:22 -0400 +// From: Evan Rosser <ejr@cs.umd.edu> + +#include <assert.h> +#include <stdio.h> +#include <stdlib.h> + +class TupleIterator { +public: + TupleIterator(int *tpl); + int& operator*(); + int live() const; +// The compile fails with "no post-increment operator for type" at "TI++" +// below. +// It succeeds with the same declarations if set_position does not take an int. +// This occurs with G++ 2.4.5 and 2.5.8. +// Sun CC works OK with either case. + void operator++(int); + void set_position(int); +private: +}; + +main() { + +int t[5]; +t[1] = 1; t[2] = 2;t[3] = 3;t[4] = 4; +TupleIterator TI(t); + + while(TI.live()){ + printf("%d", *TI); + TI++; + } +} + diff --git a/gcc/testsuite/g++.old-deja/g++.law/arm1.C b/gcc/testsuite/g++.old-deja/g++.law/arm1.C new file mode 100644 index 000000000000..112c6d801550 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/arm1.C @@ -0,0 +1,21 @@ +// Build don't link: +// GROUPS passed ARM-compliance +// arm file +// Message-Id: <9211191128.AA14718@us-es.sel.de> +// From: dcb@us-es.sel.de +// Subject: ARM p79 trivial bug +// Date: Thu, 19 Nov 92 12:28:24 +0100 + +extern "C" int printf( const char *, ...); + +int main() +{ + int a = 1 ; + int b = 2 ; + int c = 3 ; + + (a = b) = c ; + printf( " %d %d %d\n", a, b, c); + return 0 ; +} + diff --git a/gcc/testsuite/g++.old-deja/g++.law/arm10.C b/gcc/testsuite/g++.old-deja/g++.law/arm10.C new file mode 100644 index 000000000000..a57785e55e18 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/arm10.C @@ -0,0 +1,9 @@ +// Build don't link: +// GROUPS passed ARM-compliance +// arm file +// Message-Id: <1oab2hINN7m@gap.caltech.edu> +// From: tll@cco.caltech.edu (Tal Lewis Lancaster) +// Subject: ARM Page 65 +// Date: 18 Mar 1993 17:21:21 GMT + +int(*p)[10]=new int[20][10]; diff --git a/gcc/testsuite/g++.old-deja/g++.law/arm11.C b/gcc/testsuite/g++.old-deja/g++.law/arm11.C new file mode 100644 index 000000000000..14f6b9d48321 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/arm11.C @@ -0,0 +1,15 @@ +// Build don't link: +// GROUPS passed ARM-compliance +// arm file +// Message-Id: <9302181055.AA12522@slsvitt> +// From: dcb@us-es.sel.de (David Binderman 3841) +// Subject: Page 81 of the ARM +// Date: Thu, 18 Feb 93 11:55:15 +0100 + + +int main() { + int x[ 10, 11]; // ERROR - .* + + return 0; +} + diff --git a/gcc/testsuite/g++.old-deja/g++.law/arm12.C b/gcc/testsuite/g++.old-deja/g++.law/arm12.C new file mode 100644 index 000000000000..89e2a4d2c82f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/arm12.C @@ -0,0 +1,47 @@ +// Build don't link: +// GROUPS passed ARM-compliance +// arm file +// From: belley@cae.ca (Benoit Belley 3218) +// Subject: Bad access control with private constructor and derivation +// Date: Fri, 28 May 1993 12:39:57 -0400 (EDT) + +#include <iostream.h> + +class X +{ +public: + void f(); + +private: + X(); +}; + +class Y : public X +{ +public: + Y(); +}; + +X::X() +{// ERROR - .* + cout << "X::X()" << endl; +} + +void X::f() +{ + cout << "X::f()" << endl; +} + +Y::Y() +{// ERROR - within this + cout << "Y::Y()" << endl; +} + + +int main() +{ + Y y; + y.f(); +} + + diff --git a/gcc/testsuite/g++.old-deja/g++.law/arm13.C b/gcc/testsuite/g++.old-deja/g++.law/arm13.C new file mode 100644 index 000000000000..565fbec3da87 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/arm13.C @@ -0,0 +1,16 @@ +// GROUPS passed ARM-compliance +#include <stdio.h> +#include <stdlib.h> + +inline void *operator new(size_t, void *place) { return place; } +void* malloc(size_t); +void free(void*); + +main() +{ + int* p = (int*) malloc(sizeof(int)); + (void) new (p) int(1); + p->int::~int(); + free(p); + printf ("PASS\n"); +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/arm14.C b/gcc/testsuite/g++.old-deja/g++.law/arm14.C new file mode 100644 index 000000000000..91674288935c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/arm14.C @@ -0,0 +1,24 @@ +// Build don't link: +// GROUPS passed ARM-compliance +// unsorted.2 file +// Message-Id: <BpBu19.GrF@math.waterloo.edu> +// Date: Thu, 4 Jun 1992 15:07:56 GMT +// Subject: access control +// From: gjditchf@plg.waterloo.edu (Glen Ditchfield) + + +class X { + private: + enum E1 {a1, b1}; + public: + enum E2 {a2, b2}; + }; + +void h(X* p) { + X::E2 e2; + int x2 = X::a2; + + X::E1 e1; // Should be rejected, but isn't.// ERROR - .* , XFAIL *-*-* + int x1 = X::a1; // ERROR - Should be rejected, and is. + } + diff --git a/gcc/testsuite/g++.old-deja/g++.law/arm15.C b/gcc/testsuite/g++.old-deja/g++.law/arm15.C new file mode 100644 index 000000000000..639c1fc5e8b1 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/arm15.C @@ -0,0 +1,53 @@ +// GROUPS passed ARM-compliance +// arm file +// From: Johan Bengtsson <jbn@lulea.trab.se> +// Date: Thu, 21 Oct 93 16:10:25 +0100 +// Subject: gcc 2.4.5 initializes base classes in mem-initializer order +// Message-ID: <9310211510.AA14943@holden.lulea.trab.se> + +#include <stdio.h> + +int state = 0; + +class A { public: + A() { + if (state == 0) + state = 1; + else { + printf ("FAIL\n"); + exit (1); + } + } +}; + +class B { public: + B() { + if (state == 1) + state = 2; + else { + printf ("FAIL\n"); + exit (1); + } + } +}; + +class AB : public A, public B { public: + AB() : B(), A() { + if (state == 2) + state = 3; + else { + printf ("FAIL\n"); + exit (1); + } + } +}; + +int main() +{ + AB ab; + if (state == 3) + printf("PASS\n"); + else + printf("FAIL\n"); + exit (state != 3); +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/arm16.C b/gcc/testsuite/g++.old-deja/g++.law/arm16.C new file mode 100644 index 000000000000..894c37c44e95 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/arm16.C @@ -0,0 +1,14 @@ +// Build don't link: +// Special g++ Options: -ansi -Wall -pedantic +// GROUPS passed ARM-compliance +// arm file +// From: Olaf.Weber@cwi.nl +// Date: Fri, 2 Dec 1994 09:14:25 +0100 +// Subject: Omitting & when obtaining a pointer to member function. +// Message-ID: <9412020814.AA00604=olaf@havik.cwi.nl> + +struct C { + void foo(); +}; + +void (C::*pfm)() = C::foo;// ERROR - .* diff --git a/gcc/testsuite/g++.old-deja/g++.law/arm2.C b/gcc/testsuite/g++.old-deja/g++.law/arm2.C new file mode 100644 index 000000000000..de8fe425bda1 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/arm2.C @@ -0,0 +1,17 @@ +// Build don't link: +// GROUPS passed ARM-compliance +// excess errors test - XFAIL *-*-* +// arm file +// Message-Id: <199301260140.AA13734@world.std.com> +// From: gparker@world.std.com (Glenn P Parker) +// Subject: gcc bug +// Date: Mon, 25 Jan 1993 20:40:44 -0500 + +int f() { return 1; } + +int main() +{ + int (&fr)() = f; // g++ cannot compile it + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/arm3.C b/gcc/testsuite/g++.old-deja/g++.law/arm3.C new file mode 100644 index 000000000000..3c888bafd7b7 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/arm3.C @@ -0,0 +1,20 @@ +// Build don't link: +// GROUPS passed ARM-compliance +// arm file +// Message-Id: <199301260139.AA13555@world.std.com> +// From: gparker@world.std.com (Glenn P Parker) +// Subject: gcc bug +// Date: Mon, 25 Jan 1993 20:39:19 -0500 + +class X { + enum S { blue, pink }; + int S; +public: + void f (enum S arg) ; +}; + +void X::f (enum S arg) +{ + S = arg; // g++ gives error on this line. +} + diff --git a/gcc/testsuite/g++.old-deja/g++.law/arm4.C b/gcc/testsuite/g++.old-deja/g++.law/arm4.C new file mode 100644 index 000000000000..2fa43c3fc174 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/arm4.C @@ -0,0 +1,28 @@ +// GROUPS passed ARM-compliance +// arm file +// Message-Id: <199301272139.AA25489@world.std.com> +// From: kol@world.std.com (Nikolay Yatsenko) +// Subject: g++ bug +// Date: Wed, 27 Jan 1993 16:39:10 -0500 + +extern "C" int printf(const char*,...); +int count = 0; + +struct S { + int i; + S(int b) { + i = b; + count++; } +}; + +int main(void) +{ + double a = 2.0; + + S x(int (a)); + if (count > 0) + printf ("FAIL\n"); + else + printf ("PASS\n"); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/arm5.C b/gcc/testsuite/g++.old-deja/g++.law/arm5.C new file mode 100644 index 000000000000..d39b476a840a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/arm5.C @@ -0,0 +1,24 @@ +// GROUPS passed ARM-compliance +// arm file +// Message-Id: <9212072127.AA24243@us-es.sel.de> +// From: dcb@us-es.sel.de +// Subject: page 78 of the ARM +// Date: Mon, 7 Dec 92 22:27:09 +0100 + +extern "C" int printf( const char *, ...); + +int & max( int & a, int & b) { + return (a < b) ? b : a; +} + +int main( void) { + int a = 1; + int b = 2; + int & c = max( a, b); + + if (&c == &b) + printf( "PASS\n"); + else + printf( "FAIL\n"); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/arm6.C b/gcc/testsuite/g++.old-deja/g++.law/arm6.C new file mode 100644 index 000000000000..e1715ee4beab --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/arm6.C @@ -0,0 +1,23 @@ +// Build don't link: +// GROUPS passed ARM-compliance +// arm file +// Message-Id: <9211231051.AA11287@us-es.sel.de> +// From: dcb@us-es.sel.de +// Subject: ARM page 87 +// Date: Mon, 23 Nov 92 11:51:38 +0100 + + +int main() { + int a; + + switch (a) { + case 1: + int v2 = 3;// ERROR - crosses.* + case 2:// ERROR - jump.* + if (v2 == 7) // error not flagged by 2.3.1 + ; + } + + return 0; +} + diff --git a/gcc/testsuite/g++.old-deja/g++.law/arm7.C b/gcc/testsuite/g++.old-deja/g++.law/arm7.C new file mode 100644 index 000000000000..1f3d43056ad6 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/arm7.C @@ -0,0 +1,41 @@ +// Special g++ Options: -w +// GROUPS passed ARM-compliance +// arm file (also in cvt file) +// Message-Id: <9303061246.AA09402@gjetost.cs.wisc.edu> +// From: solomon@cs.wisc.edu (Marvin Solomon) +// Subject: Incorrect resolution of conversion path +// Date: Sat, 6 Mar 93 06:46:27 -0600 + + +extern "C" void printf(const char *,...); + +class Base { +public: + int i; + Base(int ii) : i(ii) {} +}; + +class Derived : public Base { +public: + Derived(int ii) : Base(ii) {} + operator Base&(); +}; + +Derived::operator Base&() { + Base *b = new Base(100*i); + return *b; +} + +void f(Base &b) { + if (b.i == 99) + printf ("PASS\n"); + else + printf ("FAIL\n"); +} + +int main() { + Derived d(99); + f(d); + return 0; +} + diff --git a/gcc/testsuite/g++.old-deja/g++.law/arm8.C b/gcc/testsuite/g++.old-deja/g++.law/arm8.C new file mode 100644 index 000000000000..ef340c6b24e5 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/arm8.C @@ -0,0 +1,16 @@ +// Build don't link: +// GROUPS passed ARM-compliance +// arm file +// Message-Id: <9303161105.AA29336@slsvitt> +// From: dcb@us-es.sel.de (David Binderman 3841) +// Subject: Page 141 of the ARM +// Date: Tue, 16 Mar 93 12:05:24 +0100 + +struct K { + void f( int *p = 0); // ERROR - previous specification +}; + +extern int * q; + +void K::f( int *p = q);// ERROR - .* + diff --git a/gcc/testsuite/g++.old-deja/g++.law/arm9.C b/gcc/testsuite/g++.old-deja/g++.law/arm9.C new file mode 100644 index 000000000000..528478f9f3f1 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/arm9.C @@ -0,0 +1,33 @@ +// Build don't link: +// GROUPS passed ARM-compliance +#include <iostream.h> +enum f1 { + F1 +}; + +enum f2 { + F2 +}; + +class A { +public: + void set (f1 f); +}; +void A::set (f1 f) { cout << "called A f1\n";} + +class B : public A { +public: + void set (f2 f); +}; +void B::set (f2 f) { cout << "called B\n";} // ERROR - candidate + +main() { + B b; + b.set(F1); // ARM page 309: should call A.set(f1) and that what g++ does,// ERROR - .* + // but 13.1 of ARM clearly states that it should call B::set() + // or generate an error because overloading works only for + // functions within the same scope (first page of chapter 13) + // while member of derived and base classes are considered to + // belong to different scopes. Thus B::set() should have + // hidden (completely) the A::set() function. +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/array1.C b/gcc/testsuite/g++.old-deja/g++.law/array1.C new file mode 100644 index 000000000000..fc40bc581e01 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/array1.C @@ -0,0 +1,31 @@ +// GROUPS passed arrays +// array file +// Message-Id: <9204120353.AA06266@cs.rice.edu> +// From: dougm@cs.rice.edu (Doug Moore) +// Subject: constructors not called on new'ed array elements +// Date: Sat, 11 Apr 92 22:53:35 CDT + +#include <stdio.h> + +int i = 0; + +class foo +{ +private: + static foo *array; +public: + foo() + { + i++; + } +}; + +foo* foo::array = new foo [5]; + +main() +{ + if (i != 5) + printf ("FAIL\n"); + else + printf ("PASS\n"); +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/array2.C b/gcc/testsuite/g++.old-deja/g++.law/array2.C new file mode 100644 index 000000000000..0147a4a2baee --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/array2.C @@ -0,0 +1,11 @@ +// Build don't link: +// GROUPS passed arrays +// excess errors test - XFAIL *-*-* +// array file +// Message-Id: <"nac.no.188:05.10.92.14.37.45"@nac.no> +// From: frode@auticon.no +// Subject: prototype bug ? +// Date: Thu, 5 Nov 92 15:37:34 PST + + extern unsigned char * (*trt_def(int))[][2]; + extern unsigned char * (trt_rplst(unsigned char *(*)[][2])); diff --git a/gcc/testsuite/g++.old-deja/g++.law/bad-error1.C b/gcc/testsuite/g++.old-deja/g++.law/bad-error1.C new file mode 100644 index 000000000000..09a687885495 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/bad-error1.C @@ -0,0 +1,14 @@ +// Build don't link: +// GROUPS passed bad-errors +// bad-error file +// Message-Id: <9301081103.AA29469@jclark.com> +// From: jjc@jclark.com (James Clark) +// Subject: initializer for static class member array +// Date: Fri, 8 Jan 93 11:03:05 GMT + +struct A { + static int v[]; +}; + +int A::v[1] = { 1 }; + diff --git a/gcc/testsuite/g++.old-deja/g++.law/bad-error3.C b/gcc/testsuite/g++.old-deja/g++.law/bad-error3.C new file mode 100644 index 000000000000..c5ce1188d006 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/bad-error3.C @@ -0,0 +1,21 @@ +// Build don't link: +// GROUPS passed bad-errors +// bad-error file +// Date: Sun, 31 Jul 1994 11:37:43 +1000 (EST) +// From: Rohan LENARD <rjl@iassf.easams.com.au> +// Subject: g++-2.6.0 gives wrong warning for placement syntax new +// Message-Id: <0iCk1b0000000z0VY0@iassf.easams.com.au> + + +#include <stddef.h> + +void * operator new(size_t, int *); +void * operator new(size_t, void *); + +int *x = 0; +int foo(){ +new (x) int *; +new (&x) int *; +new (x) int *; // This is identical to line 8 !!! +return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/bad-error4.C b/gcc/testsuite/g++.old-deja/g++.law/bad-error4.C new file mode 100644 index 000000000000..09461c8db7cb --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/bad-error4.C @@ -0,0 +1,14 @@ +// Build don't link: +// GROUPS passed bad-errors +#include <stddef.h> + +void * operator new(size_t, int *); +void * operator new(size_t, void *); + +int *x = 0; +int foo(){ +new (x) int *; +new (&x) int *; +new (x) int *; // This is identical to line 8 !!! +return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/bad-error6.C b/gcc/testsuite/g++.old-deja/g++.law/bad-error6.C new file mode 100644 index 000000000000..a58a5fad2e42 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/bad-error6.C @@ -0,0 +1,26 @@ +// Build don't link: +// GROUPS passed bad-errors +typedef unsigned long size_t; + +class tt { + public: + tt(int); + + private: + void *operator new(size_t a); // Forbid object creation in heap memory. +}; + +void st(const tt&, int); + +void ff(int i, int j) +{ + if( i > 0 ) { + // This work ok. + tt a_tt(i); + st(a_tt, j); + } + else { + // This triggers an error because of private operator new ????. + st(tt(-i), j); + } +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/bad-error7.C b/gcc/testsuite/g++.old-deja/g++.law/bad-error7.C new file mode 100644 index 000000000000..479dbf575f1d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/bad-error7.C @@ -0,0 +1,24 @@ +// Build don't link: +// GROUPS passed bad-errors +#include <iostream.h> + +class ParX + { + public: + ParX() {} + }; + +class X : public ParX + { + public: + void fn2() { cout << "hi" << endl; } + }; + +main() + { + X x; + ParX* pParX = &x; + void (ParX::*p)() = (void (ParX::*)()) &X::fn2; // line 19 + + (pParX->*p)(); + } diff --git a/gcc/testsuite/g++.old-deja/g++.law/bit-fields1.C b/gcc/testsuite/g++.old-deja/g++.law/bit-fields1.C new file mode 100644 index 000000000000..ed100af3816e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/bit-fields1.C @@ -0,0 +1,9 @@ +// Build don't link: +// GROUPS passed bit-fields +typedef int A; + +struct B +{ + int A : 2; +} ; + diff --git a/gcc/testsuite/g++.old-deja/g++.law/bit-fields2.C b/gcc/testsuite/g++.old-deja/g++.law/bit-fields2.C new file mode 100644 index 000000000000..beb34d05ba19 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/bit-fields2.C @@ -0,0 +1,36 @@ +// GROUPS passed bit-fields +// bitfield file +// Message-Id: <92Oct29.191913est.62@jarvis.csri.toronto.edu> +// From: mdivax1!robinson@ai.mit.edu (Jim Robinson) +// Subject: gcc 2.2.2 C++ bug in handling :0 bit fields +// Date: Thu, 29 Oct 1992 19:18:28 -0500 +// +// Also applies to: +// bitfield file +// From: Jaimie Wilson/MSL <Jaimie_Wilson@msl.isis.org> +// Date: Fri, 28 Jan 1994 06:11:43 -0500 +// Subject: GCC bug report + + +#include <stdio.h> +#include <stddef.h> + +struct foo { + char a; + char b; + unsigned int : 0; /* force word alignment */ + char c; +}; + +int +main(int argc, char **argv) +{ + struct foo bar; + + if (offsetof (struct foo, c) > sizeof (unsigned int)) + printf ("FAIL\n"); + else + printf ("PASS\n"); + return 0; +} + diff --git a/gcc/testsuite/g++.old-deja/g++.law/bit-fields3.C b/gcc/testsuite/g++.old-deja/g++.law/bit-fields3.C new file mode 100644 index 000000000000..7c7e6940e825 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/bit-fields3.C @@ -0,0 +1,7 @@ +// Build don't link: +// GROUPS passed bit-fields + class t { + short :(sizeof(short)-2); + public: + t(); + }; diff --git a/gcc/testsuite/g++.old-deja/g++.law/builtin1.C b/gcc/testsuite/g++.old-deja/g++.law/builtin1.C new file mode 100644 index 000000000000..e9b465422cf1 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/builtin1.C @@ -0,0 +1,17 @@ +// GROUPS passed builtins +// Apparently not in g++ bug snapshot (was originally sent to bug-gcc) +// Message-Id: <m0p74Fh-0002fCC@neal.ctd.comsat.com> +// Date: Tue, 7 Dec 93 10:23 EST +// From: neal@ctd.comsat.com (Neal Becker) +// Subject: builtin_alloca on hpux (gcc-2.5.6) +// We have to avoid using -ansi, which results in a call to alloca instead of +// the use of __builtin_alloca, and thus ends up being unresolved. +// Special g++ Options: + +extern "C" void* alloca( __SIZE_TYPE__ ); +extern "C" int printf (const char *, ...); + +void* junk() { + return alloca(10); +} +main() { printf ("PASS\n");} diff --git a/gcc/testsuite/g++.old-deja/g++.law/casts1.C b/gcc/testsuite/g++.old-deja/g++.law/casts1.C new file mode 100644 index 000000000000..9cfeaa1a42d7 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/casts1.C @@ -0,0 +1,13 @@ +// Build don't link: +// GROUPS passed casts +// casts file +// From: dcb@us-es.sel.de (David Binderman 3841) +// Date: Thu, 18 Feb 93 14:42:48 +0100 +// Subject: Page 67 of the ARM +// Message-ID: <9302181342.AA14050@slsvitt> + +int main() { + (struct T { int b; } *) 0; // ERROR - + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/casts2.C b/gcc/testsuite/g++.old-deja/g++.law/casts2.C new file mode 100644 index 000000000000..11a36b9f5c22 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/casts2.C @@ -0,0 +1,39 @@ +// Build don't link: +// GROUPS passed casts +class VObject; + +typedef int boolean; + +typedef boolean (VObject::*method)(); +typedef boolean (VObject::*method0)(); +typedef boolean (VObject::*method1)(long); + +#define methodOf(o,m) (method)(&o::m) + + +class VObject { + public: + boolean perform(method ); + boolean perform(method , long); + void affectMethod(method ); + void dummy(){}; +}; + + +boolean VObject::perform(method m) +{ + method0 q = (method0)m; + return(this->*q)(); +} + + +boolean VObject::perform(method m, long param) +{ + method1 q = (method1)m; + return(this->*q)(param); + } + +void VObject::affectMethod(method m) +{ + m = methodOf(VObject, dummy); +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/casts3.C b/gcc/testsuite/g++.old-deja/g++.law/casts3.C new file mode 100644 index 000000000000..e76f61c998df --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/casts3.C @@ -0,0 +1,9 @@ +// Build don't link: +// Special g++ Options: -pedantic-errors +// GROUPS passed casts +// casts file +// From: fjh@cs.mu.oz.au +// Message-Id: <9310121939.29641@munta.cs.mu.OZ.AU> +// Subject: should emit diagnostic for `int *p = (void *)0;' +// Date: Wed, 13 Oct 93 5:39:35 EST + int *p = (void *)0;// ERROR - .* diff --git a/gcc/testsuite/g++.old-deja/g++.law/code-gen1.C b/gcc/testsuite/g++.old-deja/g++.law/code-gen1.C new file mode 100644 index 000000000000..b122e908988b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/code-gen1.C @@ -0,0 +1,20 @@ +// GROUPS passed code-generation +// code-gen file +// From: Jeffrey C. Gealow <jgealow@mtl.mit.edu> +// Date: Sun, 4 Jul 93 18:57:53 -0400 +// Subject: increment bug (0 + 1 + 1 = 3) +// Message-ID: <9307042257.AA23538@mtl.mit.edu> + +#include <stdio.h> + +main() +{ + int i = 0; + (++i)++; + if (i == 2) + printf ("PASS\n"); + else + printf ("FAIL\n"); +} + + diff --git a/gcc/testsuite/g++.old-deja/g++.law/code-gen2.C b/gcc/testsuite/g++.old-deja/g++.law/code-gen2.C new file mode 100644 index 000000000000..88dd13fd7ef0 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/code-gen2.C @@ -0,0 +1,34 @@ +// GROUPS passed code-generation +// code-gen file +// From: Gunther Seitz <Gunther.Seitz@regent.e-technik.tu-muenchen.dbp.de> +// Date: Thu, 18 Mar 1993 10:45:29 +0100 +// Message-ID: <93Mar18.104538met.1094@regatta.regent.e-technik.tu-muenchen.de> + + +#include <stdio.h> + +class X { + +public: + double x; + X () { x=3.5; } // Here we go. This assignment fails because + // of X::x being aligned on a doubleword + // boundary, not a quadword one. + }; + + +class A : public virtual X {}; // Only way to produce the +class B : public virtual X {}; // error is to use this +class C : public virtual X {}; // construct of virtual + // base classes. + +class Y : public A, public B, public C {}; + + +int main () +{ + Y y; // To call the constructor + printf ("PASS\n"); + } + + diff --git a/gcc/testsuite/g++.old-deja/g++.law/code-gen3.C b/gcc/testsuite/g++.old-deja/g++.law/code-gen3.C new file mode 100644 index 000000000000..0635d278197d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/code-gen3.C @@ -0,0 +1,33 @@ +// GROUPS passed code-generation +// execution test fails - +// code-gen file +// From: mscha@anne.wifo.uni-mannheim.de (Martin Schader) +// Date: Wed, 4 Aug 93 19:14:52 +0200 +// Message-ID: <9308041714.AA00752@anne.wifo.uni-mannheim.de> + +extern "C" int printf (const char *, ...); + +template<class T> struct Y { + Y* next; +}; + +template<class T> struct X { + X() { ptrY = 0; } + void f(); + Y<T>* ptrY; +}; + +template<class T> void X<T>::f() { + ptrY->next = ptrY = new Y<T>; +// +// Use two assignment statements and it works +// ptrY = new Y<T>; +// ptrY->next = ptrY; +} + +int main() { + X<int> x; + x.f(); + printf ("PASS\n"); + exit(0); +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/code-gen4.C b/gcc/testsuite/g++.old-deja/g++.law/code-gen4.C new file mode 100644 index 000000000000..a9070ed4ea8e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/code-gen4.C @@ -0,0 +1,30 @@ +// GROUPS passed code-generation +// code-gen file +// From: david.binderman@pmsr.philips.co.uk +// Date: Tue, 17 Aug 93 10:09:38 BST +// Subject: .* broken in 2.4.5 +// Message-ID: <9308170909.AA05509@pmsr.philips.co.uk> + +class A { +public: + char c; +}; + +typedef char A::*PMA; + +PMA pmA = &A::c; + +A oA; + +extern "C" int printf( const char *, ...); + +main() +{ + oA.c = 'q'; + + if ( (oA .* pmA)) + printf( "PASS\n"); + else + printf(" FAIL\n"); +} + diff --git a/gcc/testsuite/g++.old-deja/g++.law/code-gen5.C b/gcc/testsuite/g++.old-deja/g++.law/code-gen5.C new file mode 100644 index 000000000000..fa55dbe83020 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/code-gen5.C @@ -0,0 +1,283 @@ +// GROUPS passed code-generation +// code-gen file +// From: "David" <norman@pi14.arc.umn.edu> +// Date: Mon, 15 Nov 1993 20:59:14 -0600 (CST) +// Subject: An error! +// Message-ID: <9311160259.AA03353@pi14.arc.umn.edu> + +#include <stdlib.h> +#include <stdio.h> +#include <assert.h> +#include <fstream.h> +#include <iostream.h> +#include <math.h> + +#define ANSI_C + +typedef double VEC ; + +class Vector; + +class VectorInt +{ + public: + + /* Nothing public!! Only Vector can use this class */ + + private: + + VectorInt( int ); + VectorInt( int, double *, int = 0 ); + VectorInt( const VectorInt & ); + ~VectorInt(); + + VectorInt *refer(); + void unrefer(); + int count; /* Number of Vector's refering to me */ + + VEC *vec; + + friend class Vector; + friend class VecElem; +}; + +class VecElem +{ + public: + + operator double(); + double operator=( double ); + + private: + + VecElem( Vector &, int ); + VecElem( const VecElem & ); + + Vector &v; + int row; /* Row element refers to */ + + friend class Vector; +}; + +class Vector +{ + public: + + Vector(); // Must be assigned to before used + Vector( VectorInt * ); + Vector( int ); + Vector( int, double *, int beg = 0 ); + Vector( const Vector & ); + Vector &operator=( const Vector & ); + ~Vector() { if(r) r->unrefer(); }; + + int row() const { return 19; } + int dim() const { return 10; } + + double operator()( int ) const; + VecElem operator()( int ); + + double assign( int, double ); + + friend ostream& operator<<( ostream&, const Vector& m ); + + private: + + VectorInt *r; /* Reference to real data */ + + friend class VecElem; + friend class LUDecom; + friend class SVD; +}; + + +Vector:: +Vector() + : r(0) +{} + +Vector:: +Vector( VectorInt *vi ) + : r(vi) +{ + r->refer(); +} + +Vector:: +Vector( int row ) +{ + assert( row > 0 ); + + r = new VectorInt( row ); + + r->refer(); +} + +Vector:: +Vector( int row, double *d, int beg ) +{ + assert( row > 0 ); + + r = new VectorInt( row, d, beg ); + + r->refer(); +} + +Vector:: +Vector( const Vector &A ) + : r( A.r->refer() ) +{} + +Vector& Vector:: +operator=( const Vector &A ) +{ + if( r ) + r->unrefer(); + + r = A.r->refer(); + + return *this; +} + +double Vector:: +operator()( int row ) const +{ + assert( r ); + + return *r->vec; +} + +VecElem Vector:: +operator()( int r ) +{ + assert(r); + + return VecElem( *this, r ); +} + + /* assign changes the matrix, it does not create a new one! */ +double Vector:: +assign( int rownum, double d ) +{ + assert(r); + + if( rownum > row() || rownum <= 0 ) { + cerr << "Warning: trying to assign out of bounds" << endl; + cerr << "row " << rownum << endl; + cerr << "Vector size " << row() << endl; + abort(); + } + + if( r->count == 1 ) { + /* Don't need to create a new matrix, since we are the only */ + /* one pointing to ours */ + } + else { + VectorInt *vi = new VectorInt( *r ); + r->unrefer(); + r = vi->refer(); + } + + return d; +} + + +VectorInt:: +VectorInt( int sx ) + : vec( new double[sx] ), count(0) +{ } + +VectorInt:: +VectorInt( int sx, double *, int ) + : vec( new double[sx] ), count(0) +{ +} + +VectorInt:: +VectorInt( const VectorInt & ) + : vec( new double[10] ), count(0) +{ +} + +VectorInt * VectorInt:: +refer() +{ + count ++; + return this; + + // cout << "Refering vec" << endl; +} + +void VectorInt:: +unrefer() +{ + count--; + + if( count == 0 ) { + delete this; + } + + // cout << "Unrefering vec" << endl; +} + +VectorInt:: +~VectorInt() +{ + delete vec; + vec = 0; +} + +VecElem:: +VecElem( Vector &vec, int r ) + : v(vec), row(r) +{ + if( r < 1 || r > vec.row() ) { + cerr << "Trying to access vector element out of bounds" << endl; + abort(); + } +} + +VecElem:: +VecElem( const VecElem &elem ) + : v(elem.v), row(elem.row) +{} + +VecElem:: +operator double() +{ + assert( v.r->vec ); + return *v.r->vec; +}; + +double VecElem:: +operator=( double d ) +{ + return v.assign( row, d ); +} + + + + + +int makeforms( Vector cen, Vector **a, Vector **b ); + +main() +{ + Vector *a[8], *b[8], disp(3); + Vector cen(3), cen2(3); + int i, j; + + if (makeforms (cen,a,b) != 10) + printf ("FAIL\n"); + else + printf ("PASS\n"); + + +} + +int +makeforms( Vector cen, Vector **a, Vector **b) +{ + return 10; +} + diff --git a/gcc/testsuite/g++.old-deja/g++.law/copy1.C b/gcc/testsuite/g++.old-deja/g++.law/copy1.C new file mode 100644 index 000000000000..cd2370686284 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/copy1.C @@ -0,0 +1,66 @@ +// GROUPS passed copy-ctors +#include <stdio.h> + +int pass = 0; +class name { + int namestuff; +public: + name() { + namestuff = 111; + } + name(const name& subject); + + name & operator = (const name& right) { + this->namestuff = right.namestuff; + return *this; + } + + ~name() { + ; + } +}; + +name::name(const name& subject) { + pass = 1; +} + +class person { + int personstuff; + name personname; +public: + person() { + ; + personstuff = 222; + } + ~person() { + ; + } + void print() { + ; + } + +}; + +void +test(person argp) +{ + person testp; + + ; + argp.print(); + testp = argp; + argp.print(); + testp.print(); + ; +} + +main() +{ + person mainp; + test(mainp); + if (pass) + printf ("PASS\n"); + else + printf ("FAIL\n"); +} + diff --git a/gcc/testsuite/g++.old-deja/g++.law/copy2.C b/gcc/testsuite/g++.old-deja/g++.law/copy2.C new file mode 100644 index 000000000000..3935cfd557db --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/copy2.C @@ -0,0 +1,35 @@ +// Build don't link: +// GROUPS passed copy-ctors +// copy file +// From: Vivek Khera <khera@cs.duke.edu> +// Date: Mon, 15 Nov 1993 16:02:18 -0500 +// Subject: g++ 2.5.3 fails to automatically generate default initializer +// Message-ID: <9311152102.AA21248@thneed.cs.duke.edu> + +class String +{ + private: + char a[100]; + int len; + public: + String(); +}; + +String::String() +{ + len = 0; +} + + +struct List +{ + String item[100]; + int num_items; +// List(); // uncomment this line to let compile work +}; + +int +main(int argc, char **argv) +{ + List a; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/ctors1.C b/gcc/testsuite/g++.old-deja/g++.law/ctors1.C new file mode 100644 index 000000000000..79ca94aa9b91 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/ctors1.C @@ -0,0 +1,20 @@ +// Build don't link: +// GROUPS passed constructors +// ctor file +// From: rac@qedinc.com (Robert Clark) +// Date: Tue, 14 Dec 93 10:45:50 PST +// Subject: bug in g++ 2.5.7 Array of objects +// Message-ID: <9312141845.AA09188@annapurna.qedinc.com> + + +class POOL { +public: + POOL(); +}; + +struct VAL_LIST { + POOL pool[2]; +}; + +VAL_LIST baz; + diff --git a/gcc/testsuite/g++.old-deja/g++.law/ctors10.C b/gcc/testsuite/g++.old-deja/g++.law/ctors10.C new file mode 100644 index 000000000000..213b7988b489 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/ctors10.C @@ -0,0 +1,24 @@ +// Build don't link: +// GROUPS passed constructors +// ctor file +// Message-Id: <9302052351.AA10789@harvey> +// From: greg@qualcomm.com (Greg Noel) +// Subject: bug019.cc +// Date: Fri, 5 Feb 93 15:51:42 -0800 + +#include <iostream.h> + +class Class +{ + class Err : public ostream + { + public: + Err(void) : ostream() { } + ~Err(void) { } + }; +public: + //template<class T> Err& operator << (const T x) { return Err() << x; } + Err& operator << (const char *x) { return Err() << x; }// ERROR - .* +private: + char x; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.law/ctors11.C b/gcc/testsuite/g++.old-deja/g++.law/ctors11.C new file mode 100644 index 000000000000..8472fb89394e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/ctors11.C @@ -0,0 +1,21 @@ +// Build don't link: +// GROUPS passed constructors +// ctor file +// Message-Id: <9302081631.AA14744@tera.com> +// From: rrh@tera.com (Robert R. Henry) +// Date: Mon, 8 Feb 93 08:31:39 PST +extern "C" void printf(const char *,...); +class A{ +public: + inline A(int x){printf("constructing A with %d\n", x);} +}; + +class B:public A{ +private: +public: +}; // ERROR - non-default constructor + +main() +{ + B(10);// ERROR - B doesn't have a constructor taking int +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/ctors12.C b/gcc/testsuite/g++.old-deja/g++.law/ctors12.C new file mode 100644 index 000000000000..37d458843986 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/ctors12.C @@ -0,0 +1,33 @@ +// GROUPS passed constructors +#include <stdio.h> +#include <stdlib.h> +#include <iostream.h> + +#define MAGIC 7654 + +class complex { + double re; + double im; + int magic; + static int count; +public: + complex() { re=im=0; magic=MAGIC; } + complex(double d) { re=d; im=0; magic=MAGIC; } + complex(double d, double d2) {re=d; im=d2; magic=MAGIC; } + ~complex() {if(magic!=MAGIC) {printf("FAIL\n");exit(0);}} + friend ostream& operator << (ostream& o, const complex& c) + { return o << "(" << c.re << "," << c.im << ")"; } +}; + +int complex::count=0; + +main() +{ + complex v[6] = {1, complex(1,2), complex(), 2 }; // ARM Sect. 12.6.1 + int i; // page 289 + + for(i=0; i<6; i++) ; + printf ("PASS\n"); + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/ctors13.C b/gcc/testsuite/g++.old-deja/g++.law/ctors13.C new file mode 100644 index 000000000000..a0bb6f2008f4 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/ctors13.C @@ -0,0 +1,16 @@ +// Build don't link: +// GROUPS passed constructors +#include <iostream.h> + +class A { + A() {} // private constructor// ERROR - .* +}; // WARNING - all member functions are private + +main() { + A* a = new A();// ERROR - .* + if (a) { + cout << "a != NULL\n"; + } else { + cout << "a == NULL\n"; + } +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/ctors14.C b/gcc/testsuite/g++.old-deja/g++.law/ctors14.C new file mode 100644 index 000000000000..49abdf79edbe --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/ctors14.C @@ -0,0 +1,43 @@ +// Build don't link: +// GROUPS passed constructors +// ctor file +// Message-Id: <199301310203.AA22417@oak.ucsc.edu> +// From: "Dean R. E. Long" <dlong@cse.ucsc.edu> +// Subject: problems with default constructors +// Date: Sat, 30 Jan 1993 18:03:32 -0800 + +class A0 { +}; + +class A1 { +public: + A1(void) {} +}; + +class A2 { + A1 a; +}; + +class B0 : public A0 { +public: + B0(void) {} + B0(int) {} + B0(char) : A0() {} + B0(short) : A0() {} +}; + +class B1 : public A1 { +public: +}; + +class B2 : public A2 { +public: + B2(void) : A2() {} + B2(int) : A2() {} +}; + +class C : public B1 { +public: + C(void) : B1() {} + C(int) : B1() {} +}; diff --git a/gcc/testsuite/g++.old-deja/g++.law/ctors15.C b/gcc/testsuite/g++.old-deja/g++.law/ctors15.C new file mode 100644 index 000000000000..32da1418f3de --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/ctors15.C @@ -0,0 +1,26 @@ +// GROUPS passed constructors +// ctor file +// Message-Id: <9303270404.28207@munta.cs.mu.OZ.AU> +// From: fjh@cs.mu.oz.au +// Subject: bug with new/delete of multidimensional array +// Date: Sat, 27 Mar 93 14:04:52 EST + +#include <stdio.h> +#include <stdlib.h> + +int construct = 0; + +class Element { +public: + Element() { construct++; if (construct > 6) {printf ("FAIL\n"); exit(1);}} + ~Element() { } +}; + +typedef Element array[2]; + +int main() { + array *x; + x = new array[3]; + delete x; + printf ("PASS\n"); +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/ctors16.C b/gcc/testsuite/g++.old-deja/g++.law/ctors16.C new file mode 100644 index 000000000000..4da7f058b5a2 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/ctors16.C @@ -0,0 +1,49 @@ +// GROUPS passed constructors +// ctor file +// Message-Id: <9306021533.AA14347@icepick.jts.com> +// From: roland@jts.com (Roland Knight ) +// Subject: gcc 2.4.1 bug +// Date: Wed, 2 Jun 1993 11:33:34 -0400 + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +char stuff[50]; +char *p = stuff; + +class A { +public: + A() { *p++ = 'A';} +}; + +class B { +public: + B() { *p++ = 'B'; } +}; + +class C : public A, public B { +public: + C() : B(), A() { *p++ = 'C'; } +}; + +class D : public A, public B { +public: + D() : B() { *p++ = 'D'; } +}; + +class E : public A, public B { +public: + E() { *p++ = 'E'; } +}; + + +main() { + C c; + D d; + E e; + if (strncmp ("ABCABDABE", stuff, 9)) + printf ("FAIL\n"); + else + printf ("PASS\n"); +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/ctors17.C b/gcc/testsuite/g++.old-deja/g++.law/ctors17.C new file mode 100644 index 000000000000..41e3217faf99 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/ctors17.C @@ -0,0 +1,21 @@ +// Build don't link: +// GROUPS passed constructors +// ctor file +// Message-Id: <199306151813.gD28471@mail.Germany.EU.net> +// From: stephan@ifconnection.de (Stephan Muehlstrasser) +// Subject: gcc 2.4.3.1: illegal constructor call not rejected +// Date: Tue, 15 Jun 1993 18:34:14 +0200 (MET DST) + + +#include <fstream.h> + +class X : public ifstream { + public: + X(int a, char *b) {} // ERROR - candidate +}; // ERROR - candidate +main() +{ + X *y = new X(10, "123"); + // the compiler must reject this constructor call: + X *x = new X("abc");// ERROR - .* +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/ctors18.C b/gcc/testsuite/g++.old-deja/g++.law/ctors18.C new file mode 100644 index 000000000000..e7a666e3e80b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/ctors18.C @@ -0,0 +1,27 @@ +// Build don't link: +// GROUPS passed constructors +class test1 { +}; + +template<class T> +class GC_PTR { +public: + GC_PTR(T &a) {} +}; + + +void +gotPtrs(GC_PTR<test1> r1) +{ +} + +static void +short_alloc(int n) +{ + test1 here; + GC_PTR<test1> foo = here; // This works fine. + + gotPtrs(here); // Compile error from this + // No constructor named `GC_PTR` in visible scope + // conversion between incompatible aggregate types requested +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/ctors19.C b/gcc/testsuite/g++.old-deja/g++.law/ctors19.C new file mode 100644 index 000000000000..25c58d6954f5 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/ctors19.C @@ -0,0 +1,33 @@ +// Build don't link: +// GROUPS passed constructors +// ctor file +// From: mkohtala@vinkku.hut.fi +// Date: Tue, 5 Oct 1993 19:31:16 +0200 +// Message-Id: <199310051731.AA12260@lk-hp-11.hut.fi> +// Subject: Nested class constructor calling bug + +class X +{ + public: + class Y + { + public: + Y(int i) : a(i) {} + int a; + }; + static void f(Y y); +}; + +void X::f(X::Y y) +{ +} + +int +main() +{ + X::Y y = X::Y(1); // Tries to call ctor Y instead of X::Y + X::f(X::Y(2)); // Tries to call Y instead of X::Y + + return 0; +} + diff --git a/gcc/testsuite/g++.old-deja/g++.law/ctors2.C b/gcc/testsuite/g++.old-deja/g++.law/ctors2.C new file mode 100644 index 000000000000..8ceb5395f69e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/ctors2.C @@ -0,0 +1,69 @@ +// GROUPS passed constructors +// Message-Id: <m0p8Am6-0002fCC@neal.ctd.comsat.com> +// Date: Fri, 10 Dec 93 11:33 EST +// From: neal@ctd.comsat.com (Neal Becker) +// Subject: serious problems with static constructors + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#define CONST const + +class Sig { + +public: + + enum Type { Byte_t, Word_t, Long_t, Float_t, Double_t, Complex_t, ComplexLong_t, Bad_t }; + +private: + + Type T; + +public: + + static CONST char *ByteMagic, *WordMagic, *LongMagic, + *FloatMagic, *DoubleMagic, *ComplexMagic, *ComplexLongMagic, *BadMagic; + + struct SigTable { + Type T; + CONST char* Magic; + }; + + static CONST SigTable sigTable[]; + +}; + +CONST char +*Sig::ByteMagic = "BYTE", +*Sig::WordMagic = "WORD", +*Sig::LongMagic = "LONG", +*Sig::FloatMagic = "FLOA", +*Sig::DoubleMagic = "DOUB", +*Sig::ComplexMagic = "COMP", +*Sig::ComplexLongMagic = "CMPL", +*Sig::BadMagic = NULL; + + +CONST Sig::SigTable Sig::sigTable[] = { + { Byte_t, ByteMagic }, + { Word_t, WordMagic }, + { Long_t, LongMagic }, + { Float_t, FloatMagic }, + { Double_t, DoubleMagic }, + { Complex_t, ComplexMagic }, + { ComplexLong_t, ComplexLongMagic }, + { Bad_t, BadMagic } +}; + +main() { + if (strcmp (Sig::sigTable[0].Magic, "BYTE") + || strcmp (Sig::sigTable[1].Magic, "WORD") + || strcmp (Sig::sigTable[2].Magic, "LONG") + || strcmp (Sig::sigTable[3].Magic, "FLOA") + || strcmp (Sig::sigTable[4].Magic, "DOUB") + || strcmp (Sig::sigTable[5].Magic, "COMP")) + printf ("FAIL\n"); + else + printf ("PASS\n"); +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/ctors20.C b/gcc/testsuite/g++.old-deja/g++.law/ctors20.C new file mode 100644 index 000000000000..34dbf7bf023b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/ctors20.C @@ -0,0 +1,35 @@ +// Build don't link: +// GROUPS passed constructors +// ctor file +// Message-Id: <9311011758.AA25157@thneed.cs.duke.edu> +// From: Vivek Khera <khera@cs.duke.edu> +// Subject: g++ 2.5.0 fails to automatically generate default initializer +// Date: Mon, 01 Nov 1993 12:58:34 -0500 + +class String +{ + private: + char a[100]; + int len; + public: + String(); +}; + +String::String() +{ + len = 0; +} + + +struct List +{ + String item[100]; + int num_items; +// List(); // uncomment this line to let compile work +}; + +int +main(int argc, char **argv) +{ + List a; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/ctors21.C b/gcc/testsuite/g++.old-deja/g++.law/ctors21.C new file mode 100644 index 000000000000..3f3b3df522ab --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/ctors21.C @@ -0,0 +1,16 @@ +// Build don't link: +// GROUPS passed constructors +// ctor file +// From: mln@tera.com (Mark Niehaus) +// Subject: g++-2.5.2 -- private copy ctor hides public ctor +// Date: Mon, 8 Nov 93 10:14:50 PST + +class A { + A(A&); + public: + A(); +}; + +class B { + A a; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.law/ctors3.C b/gcc/testsuite/g++.old-deja/g++.law/ctors3.C new file mode 100644 index 000000000000..6658764fe47c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/ctors3.C @@ -0,0 +1,29 @@ +// Build don't link: +// GROUPS passed constructors +// ctor file +// Message-Id: <m0oxRi1-0002fPC@nesmith.pactitle.com> +// From: genehi@nesmith.pactitle.com (Gene Hightower) +// Subject: Apparent bug in g++ 2.5.2 +// Date: Wed, 10 Nov 93 18:24 PST + +class One { + public: + One() {} +}; + +template<class T> class Two : public One { +}; + +class Three { +}; + +class Four { + Two<Three> x[1]; +}; + +class Five { + Four y; + + public: + Five() {} +}; diff --git a/gcc/testsuite/g++.old-deja/g++.law/ctors4.C b/gcc/testsuite/g++.old-deja/g++.law/ctors4.C new file mode 100644 index 000000000000..dc1f08beaf26 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/ctors4.C @@ -0,0 +1,27 @@ +// Special g++ Options: -w +// GROUPS passed constructors +// ctors file +// Message-Id: <ACHILLES.92Nov25192123@i90s8.ira.uka.de> +// From: Alf-Christian Achilles <achilles@ira.uka.de> +// Subject: g++ 2.3.1 rejects initialization with object of derived class +// Date: 25 Nov 92 19:21:23 + +extern "C" int printf (const char *, ...); + +class A { +public: + virtual void foo() {}; +}; + +class B : public A { +public: + void foo() {}; +}; + +main () +{ + B b; + A a = b; //unjustified error: unexpected argument to constructor `A' + printf ("PASS\n"); +} + diff --git a/gcc/testsuite/g++.old-deja/g++.law/ctors5.C b/gcc/testsuite/g++.old-deja/g++.law/ctors5.C new file mode 100644 index 000000000000..3fc58041192a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/ctors5.C @@ -0,0 +1,33 @@ +// Build don't link: +// GROUPS passed constructors +// ctors file +// Subject: bug in handling static const object of the enclosing class +// Date: Tue, 1 Sep 92 10:38:44 EDT + +class X +{ + private: + int x; + public: + static const X x0; + X( int ); +}; // ERROR - candidate + +class Y +{ + private: + X xx; + public: + Y(); +} +X::X( int xi ) +{// ERROR - return.* + x = xi; +} + +const X X::x0( 0 ); + +Y::Y() +{// ERROR - no mat + xx = X::x0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/ctors6.C b/gcc/testsuite/g++.old-deja/g++.law/ctors6.C new file mode 100644 index 000000000000..a46f4e89bdbd --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/ctors6.C @@ -0,0 +1,15 @@ +// Build don't link: +// GROUPS passed constructors +#include <complex.h> + +double foo(double_complex *a) +{ + return 0.0; +} + + +double bar(void) +{ + double_complex v[10]; + return foo(v); +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/ctors7.C b/gcc/testsuite/g++.old-deja/g++.law/ctors7.C new file mode 100644 index 000000000000..4f056cc072c7 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/ctors7.C @@ -0,0 +1,35 @@ +// Build don't link: +// GROUPS passed constructors +// ctors file +// Message-Id: <3JUL199214462623@envmsa.eas.asu.edu> +// From: peckham@envmsa.eas.asu.edu (Bill) +// Subject: const constructor causes crash +// Date: Fri, 3 Jul 1992 21:46:00 GMT + +class base_t { +public: + virtual char *name () { return "base_t"; } + + base_t (); + virtual ~base_t (); +}; + +class d1_t : public base_t { +public: + virtual char *name () { return "d1_t"; } + + // The const keyword on this constructor is an error, but it shouldn't + // cause the compiler to crash. + + d1_t () const;// ERROR - .*const.* + virtual ~d1_t (); +}; + +class d2_t : public base_t { +public: + virtual char *name () { return "d2_t"; } + + d2_t (int); + virtual ~d2_t (); +}; + diff --git a/gcc/testsuite/g++.old-deja/g++.law/ctors8.C b/gcc/testsuite/g++.old-deja/g++.law/ctors8.C new file mode 100644 index 000000000000..f773d093633b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/ctors8.C @@ -0,0 +1,24 @@ +// GROUPS passed constructors +// ctor file +// Message-Id: <199212160609.AA18247@phecda.cs.sfu.ca> +// From: Taj Khattra <khattra@cs.sfu.ca> +// Subject: gcc 2.3.1 global ctor bug ? +// Date: Tue, 15 Dec 92 22:09:37 PST + +#include <stdio.h> + +struct foo { + foo() : index(-1) {} + int index; +}; + +foo *arr = new foo[2]; + +main() +{ + if (arr[0].index == -1 + && arr[1].index == -1) + printf ("PASS\n"); + else + printf ("FAIL\n"); +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/ctors9.C b/gcc/testsuite/g++.old-deja/g++.law/ctors9.C new file mode 100644 index 000000000000..280b429c352d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/ctors9.C @@ -0,0 +1,39 @@ +// Build don't link: +// Special g++ Options: -pedantic-errors +// GROUPS passed constructors +// ctors file +// Message-Id: <9301132030.AA05210@cs.rice.edu> +// From: dougm@cs.rice.edu (Doug Moore) +// Subject: 2.3.3: accepts ctor-less derived class of ctor-ful base class +// Date: Wed, 13 Jan 93 14:30:21 CST +// Note: It gives an error now. But not a very good one. + +struct Foo +{ + Foo(int aa); + int a; + const Foo* operator-> () const {return this;} +}; + +Foo::Foo(int aa) +:a(aa) +{ } + + +struct var_Foo: public Foo +{ + var_Foo* operator-> () {return this;} +};// ERROR - base.*// ERROR - in class.* + +int blort(Foo& f) +{ + return f->a; +}; + +main() +{ + var_Foo b(2);// ERROR - + b->a = 0; + int x = blort(b); + return x; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/cvt1.C b/gcc/testsuite/g++.old-deja/g++.law/cvt1.C new file mode 100644 index 000000000000..82641242b499 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/cvt1.C @@ -0,0 +1,12 @@ +// Build don't link: +// GROUPS passed conversions +// cvt file +// From: dak@pool.informatik.rwth-aachen.de +// Date: Sun, 21 Nov 93 17:40:32 +0100 +// Subject: g++ mixes up array dimensions with new +// Message-ID: <9311211640.AA11787@messua> + +main() +{ + int (*a)[5] = new int[6][5]; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/cvt10.C b/gcc/testsuite/g++.old-deja/g++.law/cvt10.C new file mode 100644 index 000000000000..01f1e8071486 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/cvt10.C @@ -0,0 +1,60 @@ +// Build don't link: +// GROUPS passed conversions +// cvt file +// Message-Id: <CC7oHn.B4F@izf.tno.nl> +// From: tom@izfcs.izf.tno.nl (Tom Vijlbrief) +// Subject: g++ 2.4.5 has problems with NON virtual shared base classes +// Date: Mon, 23 Aug 1993 12:10:34 GMT + + +#include <stdio.h> + +#define FAIL + +class Base { +public: + Base() { printf("Base::Base\n"); } + virtual ~Base() { printf("Base::~Base\n"); } + virtual void v() { printf("Base::v\n"); } +}; + +class Base2 { +public: + Base2() { printf("Base2::Base2\n"); } + virtual ~Base2() { printf("Base2::~Base2\n"); } + virtual void v() { printf("Base2::v\n"); } +}; + +class A: public Base { +public: + A() { printf("A::A\n"); } + ~A() { printf("A::~A\n"); } + virtual void va() { printf("A::va\n"); } +}; + +#ifdef FAIL +class B: public Base { +#else +class B: public Base2 { +#endif +public: + B() { printf("B::B\n"); } + ~B() { printf("B::~B\n"); } + virtual void vb() { printf("B::vb\n"); } +}; + +class C: public A, public B { +public: + C() { printf("C::C\n"); } + ~C() { printf("C::~C\n"); } + void va() { printf("C::va\n"); } +}; + + +main() +{ + C *cp= new C; + cp->va(); + delete cp; +} + diff --git a/gcc/testsuite/g++.old-deja/g++.law/cvt11.C b/gcc/testsuite/g++.old-deja/g++.law/cvt11.C new file mode 100644 index 000000000000..321368caa743 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/cvt11.C @@ -0,0 +1,30 @@ +// Build don't link: +// GROUPS passed conversions +// cvt file +// Date: Tue, 10 Nov 92 11:08:08 PST +// From: rrh@tera.com (Robert R. Henry) +// Message-Id: <9211101908.AA13557@tera.com> +// Subject: type cast of qualified const member breaks g++2.3.1 + +#include <stdio.h> + +class Thing{ +private: int x; + public: const int N = -1; // ERROR - bad initialization + Thing(int y); +}; + +class Bar{ public: void doit(void); }; + +void Bar::doit(void) +{ + int i, j; + i = Thing::N; + printf("i = %d\n", i); + + j = (int)Thing::N; + printf("i = %d\n", j); +} +Thing::Thing(int y) { x = y; } +main(){ Bar x; x.doit(); } + diff --git a/gcc/testsuite/g++.old-deja/g++.law/cvt12.C b/gcc/testsuite/g++.old-deja/g++.law/cvt12.C new file mode 100644 index 000000000000..cce2d9bcda09 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/cvt12.C @@ -0,0 +1,29 @@ +// GROUPS passed conversions +// cvt file +// Message-Id: <9301071708.AA03432@muresh.et.tudelft.nl> +// From: stravers@muresh.et.tudelft.nl (Paul Stravers) +// Subject: conversion method never called +// Date: Thu, 7 Jan 93 18:08:33 +0100 + +#include <stdio.h> + +class test +{ + double d; + int i; +public: + test(double dd,int ii) {d=dd; i=ii;} // constructor + operator int&() {return i;} // define a conversion from test to int& + int& geti() {return i;} // same thing, but different +}; + +main() +{ + test t(3.14, 5); // Create an object t of class "test" + int x = (int&)t; // This should call operator int&() but it does not ... + int y = t.geti(); // x and y should both be 5 ... + if (x == 5 && y == 5) + printf ("PASS\n"); + else + printf ("FAIL\n"); +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/cvt13.C b/gcc/testsuite/g++.old-deja/g++.law/cvt13.C new file mode 100644 index 000000000000..d2f04cc9ec67 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/cvt13.C @@ -0,0 +1,19 @@ +// Build don't link: +// GROUPS passed conversions +// cvt file +// Message-Id: <ISHAI.93Mar26102509@cs73.technion.ac.il> +// From: ishai@cs.technion.ac.il (& Ben-Aroya) +// Subject: Type conversion problem. +// Date: Fri, 26 Mar 1993 08:25:09 GMT + +typedef int array[10]; + +void f(array &arg) +{ +} + +main() +{ + array var; + f(var); +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/cvt14.C b/gcc/testsuite/g++.old-deja/g++.law/cvt14.C new file mode 100644 index 000000000000..2cf02359f4a8 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/cvt14.C @@ -0,0 +1,15 @@ +// Build don't link: +// GROUPS passed conversions +// cvt file +// Message-Id: <9303241504.AA25988@spock.orl.mmc.com> +// Subject: internal compiler error +// Date: Wed, 24 Mar 1993 10:04:06 -0500 +// From: "Malcolm C. Strickland" <chucks@orl.mmc.com> + + + main() + { + double *d; + d = new double(10); + return 1; + } diff --git a/gcc/testsuite/g++.old-deja/g++.law/cvt15.C b/gcc/testsuite/g++.old-deja/g++.law/cvt15.C new file mode 100644 index 000000000000..967cbb6a6a74 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/cvt15.C @@ -0,0 +1,18 @@ +// Build don't link: +// GROUPS passed conversions +// cvt file +// Message-Id: <9308051530.AA05922@NeoSoft.Com> +// From: daniels@sugar.neosoft.com (Brad Daniels) +// Subject: g++ 2.4.5: Conversion operators to complex types don't work either +// Date: Thu, 5 Aug 93 15:30:04 CDT + +class bar { int x; public: bar() : x(1){} }; + +class foo { + bar a, b; +public: + foo(bar i, bar j) : a(i),b(j) {} + operator const bar() const { return a; } + const bar f() { return *this; } + void g(foo &c) { b = c; } +}; diff --git a/gcc/testsuite/g++.old-deja/g++.law/cvt16.C b/gcc/testsuite/g++.old-deja/g++.law/cvt16.C new file mode 100644 index 000000000000..c539c96e5361 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/cvt16.C @@ -0,0 +1,29 @@ +// Build don't link: +// GROUPS passed conversions +// cvt file +// Message-Id: <9304121647.AA25819@tnt> +// From: mclaugh@tnt.acsys.com (Mark A. McLaughlin) +// Subject: g++ bug +// Date: Mon, 12 Apr 93 10:47:01 MDT + +#include <iostream.h> + +class B { +}; + +class A : public B { + short s; +public: + A(short _s = 0) { s = _s; } + operator const short &() const { return s; } +}; + + int +main() { + A a(37); + //cout << a << endl; + cout << (short)a << endl; + + return 0; +} // main + diff --git a/gcc/testsuite/g++.old-deja/g++.law/cvt17.C b/gcc/testsuite/g++.old-deja/g++.law/cvt17.C new file mode 100644 index 000000000000..6ddffe29d28a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/cvt17.C @@ -0,0 +1,20 @@ +// Build don't link: +// GROUPS passed conversions +// cvt file +// Message-Id: <9305210124.AA02409@kato.cs.brown.edu> +// From: pcm@cs.brown.edu (Peter C. McCluskey) +// Subject: illegal code compiles silently +// Date: Thu, 20 May 93 21:24:22 -0400 + + + +class Point {}; +class Line_Segment{ public: Line_Segment(const Point&){} }; +class Node { public: Point Location(){ Point p; return p; } }; + +main() +{ + Node** node1; + Line_Segment(node1->Location()); // intended (*node1)// ERROR - .* +} + diff --git a/gcc/testsuite/g++.old-deja/g++.law/cvt18.C b/gcc/testsuite/g++.old-deja/g++.law/cvt18.C new file mode 100644 index 000000000000..79ea67985d54 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/cvt18.C @@ -0,0 +1,24 @@ +// Build don't link: +// GROUPS passed conversions +// cvt file +// Message-Id: <9307090042.AA28565@uluru.Stanford.EDU> +// From: interran@uluru.stanford.edu (John Interrante) +// Subject: gcc 2.4.5 on sparc-sun-sunos4.1.2: automatic conversion functions +// Date: Thu, 8 Jul 93 17:42:12 PDT + +class Token { +public: + operator const void*() const; + int operator !=(int code) const; +private: + int code_; +}; + +extern Token next_token(); + +void foo(Token token) { + if (token && token != '{') {} + + const int inside_body = 1; + if (inside_body && (token = next_token())) {} +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/cvt19.C b/gcc/testsuite/g++.old-deja/g++.law/cvt19.C new file mode 100644 index 000000000000..b15bdfd705ab --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/cvt19.C @@ -0,0 +1,27 @@ +// Build don't link: +// GROUPS passed conversions +// cvt file +// Message-Id: <1166.9307131600@ace.eng.cam.ac.uk> +// From: ajp@eng.cam.ac.uk +// Date: Tue, 13 Jul 93 17:00:44 BST + + +class B {}; + +class A { + public: + operator const B*() const { + return b; + } + private: + B* b; +}; + + +main() +{ + A a; + if (a!=0) { + } +} + diff --git a/gcc/testsuite/g++.old-deja/g++.law/cvt2.C b/gcc/testsuite/g++.old-deja/g++.law/cvt2.C new file mode 100644 index 000000000000..3a5a1b94303e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/cvt2.C @@ -0,0 +1,42 @@ +// GROUPS passed conversions +#include <stdio.h> +#include <stdlib.h> +#include <iostream.h> +#include <fstream.h> + +extern "C" { +int strncmp (const char *, const char *, size_t); +} + +class cvec { +public: + ~cvec(){ delete s; } + cvec(const char*x) { s = new char[strlen(x)+1]; strcpy(s, x); } + cvec(const cvec& c) { s = new char[strlen(c.s)+1]; strcpy(s, c.s); } + operator const char*() { return s; } +private: + char *s; +}; + +cvec +B(const char* a) +{ + return a; +} + +void +A(const char* s) +{ + // s still ok here + ifstream inf(s); + if (strncmp ("aaa", s, 3)) + printf ("FAIL\n"); + else + printf ("PASS\n"); +} + +main() +{ + A(B("aaa")); +} + diff --git a/gcc/testsuite/g++.old-deja/g++.law/cvt20.C b/gcc/testsuite/g++.old-deja/g++.law/cvt20.C new file mode 100644 index 000000000000..72abbb74807b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/cvt20.C @@ -0,0 +1,20 @@ +// Build don't link: +// GROUPS passed conversions +// cvt file +// Message-Id: <9307152250.AA24812@volterra> +// From: rst@ai.mit.edu (Robert S. Thau) +// Subject: g++ won't convert char[] to char*& +// Date: Thu, 15 Jul 93 18:50:59 EDT + + +// Compiles fine with Sun CC 2.1 + +void f(char *& x) +{// ERROR - location of error + x++; +} + +main() +{ + f ("foo");// ERROR - init of non-const ref from char* +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/cvt21.C b/gcc/testsuite/g++.old-deja/g++.law/cvt21.C new file mode 100644 index 000000000000..c4516c85e265 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/cvt21.C @@ -0,0 +1,36 @@ +// Build don't link: +// GROUPS passed conversions +// cvt file +// Message-Id: <9307200528.AA02094@legolas> +// From: Mark Kuzmycz <kuzmycz@deakin.edu.au> +// Subject: int & conversion operator +// Date: Tue, 20 Jul 93 15:28:47 EST + +class Int +{ + public: + Int(void); + Int(int); + Int(const Int&); + + Int* copy(void) const; + + operator int&(); + + Int& operator ++(void); + Int& operator --(void); + + private: + int value; +}; + +main() +{ + Int data = 2; + Int test; + + test = data * 12; + data += 1; +} + +// UNKNOWN "FAIL" diff --git a/gcc/testsuite/g++.old-deja/g++.law/cvt22.C b/gcc/testsuite/g++.old-deja/g++.law/cvt22.C new file mode 100644 index 000000000000..9d72a6c4219e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/cvt22.C @@ -0,0 +1,14 @@ +// Build don't link: +// GROUPS passed conversions +// cvt file +// Message-Id: <93Aug2.163542pdt.26892@franklin.parc.xerox.com> +// From: Jesse Hull <jhull@parc.xerox.com> +// Subject: typedef bug +// Date: Mon, 2 Aug 1993 16:35:28 PDT + +typedef int A[10]; + +main() +{ + int* a1 = new A; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.law/cvt23.C b/gcc/testsuite/g++.old-deja/g++.law/cvt23.C new file mode 100644 index 000000000000..626d01c5932c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/cvt23.C @@ -0,0 +1,18 @@ +// Build don't link: +// GROUPS passed conversions +// cvt file +// Message-Id: <9308051209.AA15962@NeoSoft.Com> +// From: daniels@sugar.neosoft.com (Brad Daniels) +// Subject: Bug in g++ 2.4.5: Conversion operators to enumerated types don't wor +// Date: Thu, 5 Aug 93 12:09:09 CDT + +enum bar { AAA, BBB }; + +class foo { + bar a, b; +public: + foo(bar i, bar j) : a(i),b(j) {} + operator const bar() const { return a; } + bar f() { return *this; } + void g(foo &c) { b = c; } +}; diff --git a/gcc/testsuite/g++.old-deja/g++.law/cvt3.C b/gcc/testsuite/g++.old-deja/g++.law/cvt3.C new file mode 100644 index 000000000000..357dd32f2546 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/cvt3.C @@ -0,0 +1,16 @@ +// Build don't link: +// GROUPS passed conversions +// cvt file +// Message-Id: <9308122113.AA14119@tnt.acsys.com> +// From: mclaugh@tnt.acsys.com (Mark A. McLaughlin) +// Subject: g++ bug +// Date: Thu, 12 Aug 93 15:13:23 MDT + + +class C { }; + +void f(C) { } + +void g(const C & c) { f(c); } + +void h(const C & c) { f(C(c)); } diff --git a/gcc/testsuite/g++.old-deja/g++.law/cvt4.C b/gcc/testsuite/g++.old-deja/g++.law/cvt4.C new file mode 100644 index 000000000000..6863c8f74aea --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/cvt4.C @@ -0,0 +1,27 @@ +// GROUPS passed conversions +// cvt file +// Message-Id: <9308091213.AA11572@emmy.Mathematik.Uni-Dortmund.DE> +// From: Michael Strauch <strauch@emmy.mathematik.uni-dortmund.de> +// Subject: Bug in GCC 2.4.5 +// Date: Mon, 9 Aug 93 14:13:50 MESZ + +extern "C" int printf (const char *, ...); + +int destruct = 2; + + class Test{ + protected: + long x; + public: + Test(){;} + Test(long l) {x=l;} + ~Test() {if (--destruct == 0) printf ("PASS\n");} + }; + + main() + { + long i=1; + Test t; + + t=(Test)i; + } diff --git a/gcc/testsuite/g++.old-deja/g++.law/cvt5.C b/gcc/testsuite/g++.old-deja/g++.law/cvt5.C new file mode 100644 index 000000000000..d244b4f52251 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/cvt5.C @@ -0,0 +1,28 @@ +// Build don't link: +// GROUPS passed conversions +// cvt file +// Message-Id: <1992Jul31.142856.10082@ericsson.se> +// From: jonas@ericsson.se (Jonas Nygren) +// Subject: g++ bug +// Date: Fri, 31 Jul 1992 14:28:56 GMT + +class A {}; +class B : public A {}; + +B b; + +class R{ +public: + R() {} + operator B&() { return b; } +}; + +void f(A&) {} + +main(){ + R r; + + f(r); // problem to cast to B& and then to A& +} + + diff --git a/gcc/testsuite/g++.old-deja/g++.law/cvt6.C b/gcc/testsuite/g++.old-deja/g++.law/cvt6.C new file mode 100644 index 000000000000..85d5af80abda --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/cvt6.C @@ -0,0 +1,28 @@ +// Build don't link: +// GROUPS passed conversions +// cvt file +// Message-Id: <9208261851.AA16997@josquin.media.mit.edu> +// From: bilmes@media.mit.edu +// Subject: gcc (g++) 2.2.2 constructing nested class from external scope +// Date: Wed, 26 Aug 92 14:51:17 -0400 + + +class foo { + + class bar { + int i; + public: + bar(int j) { i = j; } + }; + + bar b; +public: + foo() : b(3) {} + void test(bar lb) { b = lb; } +}; + + +main() { + foo f; + f.test(34); // line 18 +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/cvt7.C b/gcc/testsuite/g++.old-deja/g++.law/cvt7.C new file mode 100644 index 000000000000..34cccd848e08 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/cvt7.C @@ -0,0 +1,74 @@ +// GROUPS passed conversions +// cvt file +// From: krste@icsi.berkeley.edu (Krste Asanovic) +// Date: Mon, 24 Aug 92 19:05:10 PDT +// Message-Id: <9208250205.AA26351@icsib43.ICSI.Berkeley.EDU> +// Subject: implicit int. convs. from member refs. in switch expressions + +#include <stream.h> +#include <stdio.h> + +class A +{ +public: + A(int j) { i = j; } + A(A& a) { i = a.i; } + operator int() { return i; } + + void assign(int v) { i = v; } + int i; +}; + +class B +{ +public: + B(A& inArg) : in(inArg), out(0) {} + + A& in; + A out; + + void run(); +}; + +void +B::run() +{ + // I get a "switch quantity not an integer" error for this statement. + switch (in) + // Replacing above with "switch (int(in))" removes the error. + { + case 0: + out = 1; + break; + default: + out = 0; + break; + } +} + +main() +{ + A a(1); + + A& ar = a; + + A& ar2 = ar; + + // ....but no errors for this switch statement. + switch (ar2) + { + case 1: + printf ("PASS\n"); + break; + default: + printf ("FAIL\n"); + } + + B b(a); + a.assign(3); + b.run(); + a.assign(0); + b.run(); + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/cvt8.C b/gcc/testsuite/g++.old-deja/g++.law/cvt8.C new file mode 100644 index 000000000000..031e76662a4b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/cvt8.C @@ -0,0 +1,35 @@ +// Build don't link: +// GROUPS passed conversions +// cvt file +// From: solomon@cs.wisc.edu (Marvin Solomon) +// Message-Id: <9209141509.AA23124@gjetost.cs.wisc.edu> +// Subject: g++ 2.2.2 seems to be forgetting a "const" +// Date: Mon, 14 Sep 92 10:09:58 -0500 + +extern "C" void printf(...); + +struct A { + int i; +}; + +struct B { + int i; + operator const A&() const; +}; + +B::operator const A&() const { + static A a; + a.i = i; + printf("convert B to A at %x\n", &a); + return a; +} + +void f(A &a) { // ERROR - in passing argument + printf("A at %x is %d\n", &a, a.i); +} + +main() { + B b; + b.i = 99; + f(b);// ERROR - .* +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/cvt9.C b/gcc/testsuite/g++.old-deja/g++.law/cvt9.C new file mode 100644 index 000000000000..e98508d84826 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/cvt9.C @@ -0,0 +1,17 @@ +// Build don't link: +// Special g++ Options: -pedantic-errors +// GROUPS passed conversions +// cvt file +// Message-Id: <m0mVSRj-0000cEC@mobius.veritas.com> +// From: joe@veritas.com (Joe Fasano) +// Subject: gcc-2.2.2 bug report +// Date: Thu, 17 Sep 92 13:27 PDT + +typedef int (*widget) (); + +class window { +public: + int Isopen (); +}; + +widget fp = (widget) &window::Isopen; // ERROR - // ERROR - diff --git a/gcc/testsuite/g++.old-deja/g++.law/dossier1.C b/gcc/testsuite/g++.old-deja/g++.law/dossier1.C new file mode 100644 index 000000000000..2977f156ecfc --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/dossier1.C @@ -0,0 +1,18 @@ +// Build don't link: +// Special g++ Options: -frtti +// GROUPS passed rtti +// dossier file +// Message-Id: <9212021501.AA02484@olympia.miro.com> +// From: rme@miro.com (Richard M. Emberson) +// Subject: bug +// Date: Wed, 2 Dec 92 07:01:30 PST + +class Vector { + int *p; + int sz; +public: + Vector(int ); + ~Vector(); + + int& operator[](int i); +}; diff --git a/gcc/testsuite/g++.old-deja/g++.law/dtors1.C b/gcc/testsuite/g++.old-deja/g++.law/dtors1.C new file mode 100644 index 000000000000..5c0999c17632 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/dtors1.C @@ -0,0 +1,13 @@ +// Build don't link: +// GROUPS passed destructors +// friends file +// From: offline!marc@ai.mit.edu (Marc Duponcheel) (Marc Duponcheel) +// Date: Sat, 6 Feb 93 23:31:22 PST +// Subject: some 2.2.2 bugs +// Message-ID: <9302070731.AA002jw@offline.UUCP> + +void f() +{ + int i; + i.i::~i();// ERROR - .* +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/dtors2.C b/gcc/testsuite/g++.old-deja/g++.law/dtors2.C new file mode 100644 index 000000000000..c1f2d423cc4d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/dtors2.C @@ -0,0 +1,40 @@ +// GROUPS passed destructors +#include <stdio.h> + +int destruct = 0; + +class bla { + +public: + + inline bla(char * jim) { ; }; + + inline ~bla() { destruct++; if (destruct == 2) printf ("PASS\n");}; +}; + +class ulk { + +public: + + inline ulk() {}; + inline ~ulk() {}; + + void funk(const bla & bob) { ;}; + // ^ interestingly, the code compiles right if + // this & is deleted (and therefore the parameter + // passed as value) +}; + +main() { + + ulk dumm; + + dumm.funk(bla("laberababa")); // this compiles correctly + + dumm.funk((bla)"laberababa"); // this produces incorrect code - + // the temporary instance of + // the class "bla" is constructed + // but never destructed... + + +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/dtors3.C b/gcc/testsuite/g++.old-deja/g++.law/dtors3.C new file mode 100644 index 000000000000..ce5aaf335f0c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/dtors3.C @@ -0,0 +1,37 @@ +// GROUPS passed destructors +// dtor file +// Message-Id: <9301242117.AA04053@cs.rice.edu> +// From: dougm@cs.rice.edu (Doug Moore) +// Subject: 2.3.3: premature dtor of temp? +// Date: Sun, 24 Jan 93 15:17:07 CST + +#include <stdio.h> +#include <stdlib.h> + +int killed = 0; + +class Foo +{ + int a; +public: + Foo() + :a(0) {;} + ~Foo() { killed++;} + Foo& operator << (int b) + { + a += b; + if (killed) + { + printf ("FAIL\n"); + exit (0); + } + return *this; + } +}; + +main() +{ + Foo() << 1 << 3 << 5 << 7; + printf ("PASS\n"); +} + diff --git a/gcc/testsuite/g++.old-deja/g++.law/dtors4.C b/gcc/testsuite/g++.old-deja/g++.law/dtors4.C new file mode 100644 index 000000000000..028839515b5d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/dtors4.C @@ -0,0 +1,22 @@ +// GROUPS passed destructors +#include <stdio.h> + +int destruct = 2; + +class a { + public: + char *p; + a(){ ; } + ~a(){ destruct--; if (! destruct) printf ("PASS\n");} +}; + +a test(){ + return a(); +} + +main(){ + a ai; + + ai = test(); +} + diff --git a/gcc/testsuite/g++.old-deja/g++.law/dtors5.C b/gcc/testsuite/g++.old-deja/g++.law/dtors5.C new file mode 100644 index 000000000000..9aa2e6d79ec9 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/dtors5.C @@ -0,0 +1,33 @@ +// GROUPS passed destructors +// dtor file: +// Message-Id: <1992Jun25.181845.18886@leland.Stanford.EDU> +// From: niz@leland.stanford.edu (Jim Nisbet) +// Subject: gcc 2.2.2 -- c++ bug: destructor called twice (example) +// Date: 25 Jun 92 18:18:45 GMT + +#include <stdio.h> + +int things = 0; + +class foo { +public: + foo() { things++; } + foo(const foo&) { things++; } + ~foo() { things--; } + + int i; +}; + +void +sub(foo f) { + ; +}; + + +main() { + sub(foo()); + if (things == 0) + printf ("PASS\n"); + else + printf ("FAIL\n"); +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/enum1.C b/gcc/testsuite/g++.old-deja/g++.law/enum1.C new file mode 100644 index 000000000000..c3ef73d5c4b1 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/enum1.C @@ -0,0 +1,14 @@ +// Build don't link: +// GROUPS passed enums +class X { + struct X1; + enum { A= sizeof(X1 *) }; //Causes a problem. + struct X1 { int i; }; + X1 *f(X1 *); +public: + X(void); +}; + +X::X1 *X::f(X1 *x) { + return x; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/enum2.C b/gcc/testsuite/g++.old-deja/g++.law/enum2.C new file mode 100644 index 000000000000..902d8ed56c5e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/enum2.C @@ -0,0 +1,27 @@ +// Build don't link: +// Special g++ Options: -fshort-enums +// GROUPS passed enums +// enum file +// From: Jeff Gehlhaar <jbg@qualcomm.com> +// Date: Mon, 4 Jan 1993 09:20:50 -0700 +// Subject: Enum bug, affects library +// Message-ID: <9301041720.AA17340@harvey> + +typedef unsigned long __fmtflags; +class ios { + public: + typedef __fmtflags fmtflags; + enum { skipws=01, left=02, right=04, internal=010, + dec=020, oct=040, hex=0100, + showbase=0200, showpoint=0400, uppercase=01000, showpos=02000, + scientific=04000, fixed=010000, unitbuf=020000, stdio=040000, + dont_close=0x80000000 //Don't delete streambuf on stream destruction + }; + + fmtflags setf (fmtflags, fmtflags); +}; + +// from <iostream.h> +inline ios& dec(ios& i) +{ i.setf(ios::dec, ios::dec|ios::hex|ios::oct); return i; } + diff --git a/gcc/testsuite/g++.old-deja/g++.law/enum3.C b/gcc/testsuite/g++.old-deja/g++.law/enum3.C new file mode 100644 index 000000000000..c7db587bd24d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/enum3.C @@ -0,0 +1,21 @@ +// Build don't link: +// GROUPS passed enums +// enum file +// From: frode@auticon.no +// Date: Wed, 13 Jan 93 9:24:50 PST +// Subject: enum trouble +// Message-ID: <"nac.no.001:13.00.93.18.40.52"@nac.no> + +typedef enum{on, off} TOGGLE; + +class field { +private: + TOGGLE toggle; +public: + virtual void on(void) { toggle = 3; };// ERROR - .* + virtual void off(void) { toggle = on; };// ERROR - .* +}; + +main() +{ +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/enum4.C b/gcc/testsuite/g++.old-deja/g++.law/enum4.C new file mode 100644 index 000000000000..f763656441f4 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/enum4.C @@ -0,0 +1,29 @@ +// Build don't link: +// GROUPS passed enums +// enum file +// From: dougm@cs.rice.edu (Doug Moore) +// Date: Thu, 18 Mar 93 00:14:57 CST +// Subject: 2.3.3:Inconsistent behavior for enum conversions +// Message-ID: <9303180614.AA12123@cs.rice.edu> + +enum Enum {enumerator1, enumerator2}; + +struct Struct +{ + int i; + int getI(Enum) {return i;} // ERROR - candidates +}; + +int funct (Enum) +{ + return 0; +} + +int main() +{ + Enum e = enumerator1; + Struct s; + int x = funct(e+1);// ERROR - .* + int y = s.getI(e+1);// ERROR - .* + return x+y; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/enum5.C b/gcc/testsuite/g++.old-deja/g++.law/enum5.C new file mode 100644 index 000000000000..7f86e2c0eb76 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/enum5.C @@ -0,0 +1,234 @@ +// Build don't link: +// GROUPS passed enums +// excess errors test - XFAIL *-*-* +// enum file +// From: Peter Samuelson <psamuels@osiris.ac.hmc.edu> +// Date: Tue, 2 Nov 1993 23:44:34 -0800 (PST) +// Subject: compiler error 192 +// Message-ID: <199311030744.XAA23409@osiris.ac.hmc.edu> + +#include <iostream.h> +#include <stdlib.h> +#include <string.h> + +/* My program to generate D&D characters +* 10/25/93 +*/ + +//prototypes +int rndshift(); +int dice(int times, int sides); +void initialize(struct Crctr &character); +void cleararray(char thearray[24]); +void input(struct Crctr &character); +void rollscores(struct Crctr &character); +void output(struct Crctr &character); + +int main() +{ + enum goopes + { + cleric, druid, fighter, knight, paladin, avenger, magicuser, thief, + dwarf, halfelf, elf, halfling, mystic, ranger, scout, monster, + immortal, special + }; + + enum alignments + { + lawful, neutral, chaotic + }; + + struct savingthrows + { + int psn_dth, wands, petr_paral, breath, rod_staff_spell; + }; + + struct abilities + { + int str, ite, wis, dex, con, cha; + }; + struct valuables + { + char type[16]; + int value; + }; + struct money + { + int pp, gp, ep, sp, cp; + valuables gems[24], jewelry[24]; + }; + + struct Crctr + { + char dm[24], campaign[24], name[24], player[24]; + goopes goop = fighter;// ERROR - .* + alignments alignment; + int level, maxhit, hitpoints, ac; + abitities scores;// ERROR - .* + savingthrows saves; + money wealth; + int experience; + float bonus; + }; + + Crctr character; + + cout << "The D&D Character generator!!" << endl; + + rndshift(); + + initialize(character);// ERROR - .* + input(character); + rollscores(character); + output(character); + + cout << "Thank you for using this program." << endl; + cout << "Copyright 1993, Chase Enterprises, Inc." << endl; + cout << "D&D and Dungeons and Dragons are registered trademarks" << endl; + cout << "of TSR, Inc." << endl; +} //end of main + + +void initialize(Crctr &character) +{ + cleararray(character.dm); + cleararray(character.campaign); + cleararray(character.name); + cleararray(character.player); + character.level = 0; + character.maxhit = 0; + character.hitpoints = 0; + character.ac = 9; + character.experience = 0; + character.bonus = 0.0; +} //end of initialize + +void cleararray(char thearray[]) +{ + for (int i = 0 ; i < 24 ; i++) + thearray[i] = 0; +} //end of cleararray + +void input(Crctr &character) +{ + cout << "Please input name of the Dungeon Master." << endl; + cin >> character.dm; + cout << endl << "Pleas input the name of the campaign." << endl; + cin >> character.campaign; + cout << endl << "Please input the name of the character." << endl; + cin >> character.name; + cout << endl << "Please input player name." << endl; + cin >> character.player; + cout << endl << "Enter desired goop." << endl; + cin >> character.goop; + cout << endl << "Enter desired alignment." << endl; +} //end of input + +void rollscores(Crctr &character) +{ + character.scores.str = dice(3,6); + character.scores.ite = dice(3,6); + character.scores.wis = dice(3,6); + character.scores.dex = dice(3,6); + character.scores.con = dice(3,6); + character.scores.cha = dice(3,6); + character.level = 1; + + switch (character.goop) + { + case fighter: + case dwarf: + case half-elf: + character.maxhit = dice(1,8); + character.hitpoints = character.maxhit; + break; + case cleric: + case elf: + case halfling: + case mystic: + case scout: + character.maxhit = dice(1,6); + character.hitpoints = character.maxhit; + break; + case magic-user: + case thief: + character.maxhit = dice(1,4); + character.hitpoints = character.maxhit; + break; + default: + character.maxhit = 1; + character.hitpoints = character.maxhit; + break; + } +} //end of rollscores + + +void output(Crctr &character) +{ + cout << "Your character is:" << endl; + cout << "Your DM:\t" << character.dm << "\t\t\t" << "Campaign: " + << character.campaign << endl; + cout << "Player's name:\t" << character.player << endl; + cout << "Character Name:\t" << character.name << endl; + cout << "goop:\t" << character.goop << "\t\t\t" << "Alignment:\t" + << character.alignment << endl; + cout << "level:\t" << character.level << endl; + cout << "Max. HP:\t" << character.maxhit << "\t\t\t" << "Current HP:\t" + << character.hitpoints << endl; + cout << "Abilities" << "\t\t\t" << "Saves" << endl; + cout << endl; + cout << "Str:\t" << character.scores.str << "\t\t" << "Poison/Death Ray:\t" + << character.saves.psn_dth << endl; + cout << "Int:\t" << character.scores.ite << "\t\t" << "Wands: \t" + << character.saves.wands << endl; + cout << "Wis:\t" << character.scores.wis << "\t\t" << "Petrification" + << "/Paralysis" << character.saves.petr_paral << endl; + +/* abitities scores; + savingthrows saves; + money wealth; + int experience; + float bonus; +*/ +} + + +int rndshift() +{ +//Chase Tsang 10/25/93 +//cheap way to shift the random number generator sequence +//because I can't change the randomseed +//requires <stdlib.h> and <iostream.h> + +int shiftnumber; +int date; +int luckynumber; + +cout << "Please input the date in 8 digits, no spaces, no other" << endl; +cout << "characters. (ex 10041974 for October 4, 1974)" << endl; +cin >> date; +cout << "Please input your lucky number for today (7 or less" << endl; +cout << "digits, and positive integer, please)" << endl; +cin >> luckynumber; + +shiftnumber = date / luckynumber; + +for (int i = 0; i < shiftnumber; i++) + rand(); +return 0; +} + + + +int dice(int times, int sides) +{ + //dice rolling function, Chase Tsang 10/25/93 + //requires #include <stdlib.h> + + int total = 0; + + for (int i = 0; i < times; i++) + total = total + (rand() % sides) + 1; + + return total; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/enum6.C b/gcc/testsuite/g++.old-deja/g++.law/enum6.C new file mode 100644 index 000000000000..65950e9ab0a8 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/enum6.C @@ -0,0 +1,19 @@ +// Build don't link: +// GROUPS passed enums +// enum file +// From: polstra!jdp@uunet.uu.net (John Polstra) +// Date: Mon, 15 Nov 93 12:14 PST +// Subject: GCC 2.5.3 Enum Bitfield Causes Bogus Warning +// Message-ID: <m0ozAJo-0001EgC@seattle.polstra.uucp> + + enum Color { Red, Green, Blue }; + + struct S { + Color c : 8; + } s; + + void foo() + { + s.c = Red; // <== This statement produces the warning message. + } + diff --git a/gcc/testsuite/g++.old-deja/g++.law/enum7.C b/gcc/testsuite/g++.old-deja/g++.law/enum7.C new file mode 100644 index 000000000000..444fa489b8b8 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/enum7.C @@ -0,0 +1,14 @@ +// Build don't link: +// GROUPS passed enums +// friends file +// From: offline!marc@ai.mit.edu (Marc Duponcheel) (Marc Duponcheel) +// Date: Sat, 6 Feb 93 23:31:22 PST +// Subject: some 2.2.2 bugs +// Message-ID: <9302070731.AA002jw@offline.UUCP> + +class X +{ + enum E { A, B }; +static enum E e; +}; +enum X::E X::e = A; diff --git a/gcc/testsuite/g++.old-deja/g++.law/enum8.C b/gcc/testsuite/g++.old-deja/g++.law/enum8.C new file mode 100644 index 000000000000..192a2b4c468e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/enum8.C @@ -0,0 +1,4 @@ +// Build don't link: +// Special g++ Options: -fshort-enums +// GROUPS passed enums + enum E { A = 0x80000000 }; diff --git a/gcc/testsuite/g++.old-deja/g++.law/enum9.C b/gcc/testsuite/g++.old-deja/g++.law/enum9.C new file mode 100644 index 000000000000..0a3531e1f3b2 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/enum9.C @@ -0,0 +1,14 @@ +// Special g++ Options: -fshort-enums +// GROUPS passed enums + extern "C" int printf (const char *, ...); + + enum E { A = 0x80000000, B = 0 }; + + main() + { + if (sizeof (E) != 4) + printf ("FAIL\n"); + else + printf ("PASS\n"); + return 0; + } diff --git a/gcc/testsuite/g++.old-deja/g++.law/except1.C b/gcc/testsuite/g++.old-deja/g++.law/except1.C new file mode 100644 index 000000000000..edfb85f7ce92 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/except1.C @@ -0,0 +1,29 @@ +// Build don't link: +// Special g++ Options: -fexceptions +// GROUPS passed exceptions +// except file +// Message-Id: <9207221230.AA08566@life.ai.mit.edu> +// From: EWALLACE@endvmtkl.vnet.ibm.com +// Subject: Bugs +// Date: Wed, 22 Jul 92 08:29:30 EDT + +extern "C" void puts(const char *); + +class foo { +public: + class error {}; + + void cause_error(void) { throw error(); } +}; + +int main(void) +{ + foo f; + try { + f.cause_error(); + } + catch (foo::error) { + puts("Caught it."); + } + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/except2.C b/gcc/testsuite/g++.old-deja/g++.law/except2.C new file mode 100644 index 000000000000..1bf7108146bd --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/except2.C @@ -0,0 +1,13 @@ +// Build don't link: +// Special g++ Options: -fexceptions -g +// GROUPS passed exceptions +// except file +// Message-Id: <9211061330.AA29334@ifad.dk> +// From: erik@ifad.dk (Erik Toubro Nielsen) +// Subject: g++-2.3.1 gets fatal signal with -g and -fhandle-exceptions +// Date: Fri, 6 Nov 92 14:30:33 +0100 + +int main() +{ + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/except3.C b/gcc/testsuite/g++.old-deja/g++.law/except3.C new file mode 100644 index 000000000000..553da6b6d685 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/except3.C @@ -0,0 +1,50 @@ +// Build don't link: +// Special g++ Options: -fexceptions +// GROUPS passed exceptions +// except file +// Message-Id: <9211301118.AA09810@ss670mp.geco.slb.com> +// From: willoch@ss670mp.oslo.sgp.slb.com (thorbjorn willoch) +// Subject: -fansi-exceptions bug +// Date: Mon, 30 Nov 92 11:18:05 GMT + +extern "C" int printf(const char *, ...); + +class Vector +{ + int* p; + int sz; + public: + Vector(int s) { p = new int[sz=s]; } + ~Vector() {delete [] p; } + int size() {return sz; } + class Range{}; + + + int& operator[](int i); +}; + +int& Vector::operator[](int i) +{ + if(0<=i && i<sz) return p[i]; + throw Range(); +} + +void do_something(Vector& v) +{ + int i = v[v.size()+10]; +} + +main() +{ + Vector v(10); + + try + { + do_something(v); + } + + catch (Vector::Range) + { + printf("Range error exception\n"); + } +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/except4.C b/gcc/testsuite/g++.old-deja/g++.law/except4.C new file mode 100644 index 000000000000..c108c48bf74b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/except4.C @@ -0,0 +1,34 @@ +// Build don't link: +// Special g++ Options: -fexceptions +// GROUPS passed exceptions +// except file +// Message-Id: <9307071456.AA05275@davinci.hio.hen.nl> +// From: akkersdi@hio.hen.nl +// Subject: exceptions broken +// Date: Wed, 7 Jul 1993 16:56:52 +0200 (MET DST) + +class ball { +public: int dummy; + ball() : dummy(0) { ; } +}; + +void pitcher() +{ + throw ball(); +} + +void catcher() +{ + try // <=== gcc 2.* fails here + { + pitcher(); + } + catch (ball) { + /* sleepy catcher doing nothing */ ; + } +} + +int main() +{ + catcher(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/except5.C b/gcc/testsuite/g++.old-deja/g++.law/except5.C new file mode 100644 index 000000000000..623d0d8587f4 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/except5.C @@ -0,0 +1,39 @@ +// Build don't link: +// Special g++ Options: -fexceptions +// GROUPS passed exceptions +// except file +// Message-Id: <199311101607.AA11803@hsi86.hsi.com> +// From: Grigory Tsipenyuk <grigory@hsi.com> +// Subject: exception's bug? +// Date: Wed, 10 Nov 1993 11:07:12 -0500 + +#include <stream.h> +class X { + int *a; + int sz; +public: + class range { }; // exception class + X(int s) { a=new int[sz=s]; } + int& operator[](int i); +}; + +int& X::operator[](int i) +{ + if (i < 0 || i >= sz) { + throw range(); + } + return a[i]; +} + +int +main() +{ + X c(10); + try { + for (int i = 0; i < 12; i++) + c[i] = 1; + } catch (X::range) { + cerr << "invalid range\n"; + } + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/except6.C b/gcc/testsuite/g++.old-deja/g++.law/except6.C new file mode 100644 index 000000000000..da09ae6bc1af --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/except6.C @@ -0,0 +1,27 @@ +// Build don't link: +// Special g++ Options: -fexceptions +// GROUPS passed exceptions +// except file +// From: GUSTAVO%DRAGON@orion.cpqd.ansp.br +// Date: 15 Dec 1993 09:33:30 +0000 (C) +// Subject: exception handling problem +// Message-ID: <01H6I5GEAF5UPBJ0UV@VENUS.CPQD.ANSP.BR> + +struct Exception + { + int v; + Exception(int i) { v = i; }; + }; + + inc(int &i) + { + try { + if (i == 0) + throw Exception(i); + else + i++; + } + catch (Exception v) { + i = v.v; + } + } diff --git a/gcc/testsuite/g++.old-deja/g++.law/friend1.C b/gcc/testsuite/g++.old-deja/g++.law/friend1.C new file mode 100644 index 000000000000..2c26ad675315 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/friend1.C @@ -0,0 +1,17 @@ +// Build don't link: +// GROUPS passed friends +// friends file +// From: rwave!myersn%rwave.roguewave@cs.orst.edu (Nathan Myers) +// Date: Thu, 17 Dec 92 16:33 PST +// Subject: 2.3.2: friend decl of new confuses constructor +// Message-ID: <m0n2Vec-0000GrC@rwave.roguewave.com> + +#include <stddef.h> +struct Foo { + friend void* operator new(size_t); + friend void operator delete(void*) throw (); + Foo(); + ~Foo(); +}; +Foo::Foo() { } +Foo::~Foo() { } diff --git a/gcc/testsuite/g++.old-deja/g++.law/friend4.C b/gcc/testsuite/g++.old-deja/g++.law/friend4.C new file mode 100644 index 000000000000..5502a002dc51 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/friend4.C @@ -0,0 +1,20 @@ +// Build don't link: +// GROUPS passed friends +// excess errors test - XFAIL *-*-* +// friends file +// From: osinski@cs.nyu.edu (Ed Osinski) +// Date: Fri, 05 Jun 92 20:47:37 -0400 +// Subject: parameter name forgotten in certain friends +// Message-ID: <9206060047.AA05594@MURRAY.CS.NYU.EDU> + +class T2; + +class T { + friend void f (int&); +}; + +class T2 { + friend void f (int& i) { // BOGUS - + i = 1; + }; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.law/friend5.C b/gcc/testsuite/g++.old-deja/g++.law/friend5.C new file mode 100644 index 000000000000..2ecc31347b17 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/friend5.C @@ -0,0 +1,23 @@ +// Build don't link: +// GROUPS passed friends + extern "C" int good_friend(int); + extern "C" int bad_friend(); + + class assembler { + friend int good_friend(int); + friend int bad_friend(); + void *parts; + }; + + assembler obj; + + int good_friend(int) + { + obj.parts = 0; + } // ERROR - non-void + + int bad_friend() + { + obj.parts = 0; + } // ERROR - non-void + diff --git a/gcc/testsuite/g++.old-deja/g++.law/global-init1.C b/gcc/testsuite/g++.old-deja/g++.law/global-init1.C new file mode 100644 index 000000000000..ce641254e627 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/global-init1.C @@ -0,0 +1,20 @@ +// GROUPS passed initialization +// global-init file +// Message-Id: <9212021756.AA12639@grumpy.pocs.com> +// From: wp@pocs.com (Wolfgang Polak) +// Subject: Initializers - gcc 2.2.2 (g++), Sparc, SunOS 4.1.1 +// Date: Wed, 2 Dec 92 09:56:01 PST + +#include <stdio.h> +struct S { int a; int c; }; +int i = 3; +S s = {6, i}; +S * the_s () { return &s; }; +main () +{ + S * cls = the_s (); + if (cls->a != 6) + printf ("FAIL\n"); + else + printf ("PASS\n"); +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/incdec1.C b/gcc/testsuite/g++.old-deja/g++.law/incdec1.C new file mode 100644 index 000000000000..ce5903c3c780 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/incdec1.C @@ -0,0 +1,47 @@ +// Build don't link: +// Special g++ Options: -w -O3 +// GROUPS passed incdec +typedef void* Pix; +class ndbArtPtrVec +{ +public: + ndbArtPtrVec (ndbArtPtrVec&); +}; +class intndbArtPtrVecMap +{ +protected: + int count; + ndbArtPtrVec def; + intndbArtPtrVecMap(ndbArtPtrVec& dflt); + virtual ndbArtPtrVec& operator [] (int key) = 0; + virtual void del(int key) = 0; +public: + virtual Pix first() = 0; + virtual void next(Pix& i) = 0; + virtual int& key(Pix i) = 0; + virtual ndbArtPtrVec& contents(Pix i) = 0; +}; +struct intndbArtPtrVecAVLNode +{ + ndbArtPtrVec cont; + intndbArtPtrVecAVLNode(int h, ndbArtPtrVec& c, + intndbArtPtrVecAVLNode* l=0, intndbArtPtrVecAVLNode* r=0); +}; +class intndbArtPtrVecAVLMap : intndbArtPtrVecMap +{ +protected: + intndbArtPtrVecAVLNode* root; +public: + ndbArtPtrVec& operator [] (int key); + intndbArtPtrVecAVLMap(intndbArtPtrVecAVLMap&); +}; +ndbArtPtrVec& intndbArtPtrVecAVLMap::operator [] (int item) +{ + ++count; + root = new intndbArtPtrVecAVLNode(item, def); +} +intndbArtPtrVecAVLMap::intndbArtPtrVecAVLMap(intndbArtPtrVecAVLMap& b) :intndbArtPtrVecMap(b.def) +{ + for (Pix i = b.first(); i != 0; b.next(i)) + (*this)[b.key(i)] = b.contents(i); +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/init1.C b/gcc/testsuite/g++.old-deja/g++.law/init1.C new file mode 100644 index 000000000000..1f23d78936d7 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/init1.C @@ -0,0 +1,25 @@ +// Build don't link: +// GROUPS passed initialization +class foo { +public: + int data; + foo(int dat) { data = dat; } +}; + +class bar { +public: + foo f[3] = { 1, 2, 3 }; // works: f[0] = 1, f[1] = 2, f[2] = 3 // ERROR - ANSI C++ forbids initialization of member f; +}; + +class bar2 { +public: + foo f[3] = { foo(1), foo(2), foo(3) }; // ERROR - ANSI C++ forbids initialization of member f; + // does not compile -- error: field initializer is not constant +}; + +int main(void) +{ + foo f[3] = { foo(1), foo(2), foo(3) }; + // standard C++ ... and it works too! :) + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/init10.C b/gcc/testsuite/g++.old-deja/g++.law/init10.C new file mode 100644 index 000000000000..b6f2085bfc52 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/init10.C @@ -0,0 +1,26 @@ +// Build don't link: +// GROUPS passed initialization +// init file +// From: Ingo Donasch <ingo@specs.de> +// Date: Wed, 16 Jun 93 13:28:55 +01:00 +// Subject: g++-2.4.2 bug report +// Message-ID: <199306161128.AA22079@opamp.specs.de> + +class b; + +class a { +public: + a(const b*); // needs this parameter +}; + +class b { +private: + a three[3]; +public: + b(); +}; + +b::b() : three(this) +{ // ERROR - bad array initializer +} + diff --git a/gcc/testsuite/g++.old-deja/g++.law/init11.C b/gcc/testsuite/g++.old-deja/g++.law/init11.C new file mode 100644 index 000000000000..d5c4e769e4fb --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/init11.C @@ -0,0 +1,24 @@ +// GROUPS passed initialization +// init file +// From: hansen@srd.ull.rdc.toshiba.co.jp +// Date: Mon, 13 Dec 93 18:27:51 +0900 +// Subject: g++ Bug +// Message-ID: <9312130927.AA08192@VLCS151.noname> + +#include <stdio.h> + +int X = 7; + +struct foo { + int a,b,c; +}; + +struct foo Ack = {5, X, 3}; + +main() +{ + if (Ack.a == 5 && Ack.b == 7 && Ack.c == 3) + printf ("PASS\n"); + else + printf ("FAIL\n"); +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/init13.C b/gcc/testsuite/g++.old-deja/g++.law/init13.C new file mode 100644 index 000000000000..40917c8917de --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/init13.C @@ -0,0 +1,19 @@ +// GROUPS passed initialization +// init file +// Message-Id: <9306280834.AA20921@slsvitt.us-es.sel.de> +// From: David Binderman 3841 <dcb@us-es.sel.de> +// Subject: Page 289 of the ARM +// Date: Mon, 28 Jun 93 10:34:37 +0200 + +struct T { + int m; + + T( int g):m(g){} +}; + +// T s1[2][2] = {1,2,3,4}; + +int main() { + T s1[2][2] = {1,2,3,4}; + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/init14.C b/gcc/testsuite/g++.old-deja/g++.law/init14.C new file mode 100644 index 000000000000..a65dc68af59c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/init14.C @@ -0,0 +1,26 @@ +// GROUPS passed initialization +// init file +// From: hansen@srd.ull.rdc.toshiba.co.jp +// Message-Id: <9312130927.AA08192@VLCS151.noname> +// Subject: g++ Bug +// Date: Mon, 13 Dec 93 18:27:51 +0900 + +#include <stdio.h> + +int X = 7; + +struct foo { + int a,b,c; +}; + +struct foo Ack = {5, X, 3}; + +main() +{ + if (Ack.a != 5 + || Ack.b != 7 + || Ack.c != 3) + printf ("FAIL\n"); + else + printf ("PASS\n"); +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/init2.C b/gcc/testsuite/g++.old-deja/g++.law/init2.C new file mode 100644 index 000000000000..bfc9014acd66 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/init2.C @@ -0,0 +1,9 @@ +// Build don't link: +// GROUPS passed initialization +// init file +// From: lupine!segfault!rfg@uunet.UU.NET +// Date: Sun, 27 Sep 92 14:06:22 MDT +// Subject: Bug in g++ (920220) handling reference initializers. +// Message-ID: <15409.717627982@segfault> + +int * const & fiddle = 0; diff --git a/gcc/testsuite/g++.old-deja/g++.law/init3.C b/gcc/testsuite/g++.old-deja/g++.law/init3.C new file mode 100644 index 000000000000..de0473ec5a14 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/init3.C @@ -0,0 +1,12 @@ +// Build don't link: +// GROUPS passed initialization +// init file +// From: thayer@moose.cs.columbia.edu (Charles Thayer) +// Date: Wed, 30 Sep 92 02:38:17 EDT +// Subject: small bug +// Message-ID: <9209300638.AA22334@moose.cs.columbia.edu> + +main() { +int offset; +char buf[offset]=""; // ERROR - ansi forbids variable arrays +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/init4.C b/gcc/testsuite/g++.old-deja/g++.law/init4.C new file mode 100644 index 000000000000..084876296d1d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/init4.C @@ -0,0 +1,13 @@ +// Build don't link: +// Special g++ Options: -pedantic-errors +// GROUPS passed initialization +class Time; +class TimeNote; + +class SvTime +{ +public: + static TimeNote *time_events = 0;// ERROR - .* +}; + +SvTime CurrentTime = {0};// ERROR - diff --git a/gcc/testsuite/g++.old-deja/g++.law/init5.C b/gcc/testsuite/g++.old-deja/g++.law/init5.C new file mode 100644 index 000000000000..e5882341afb5 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/init5.C @@ -0,0 +1,18 @@ +// Build don't link: +// Special g++ Options: -pedantic-errors +// GROUPS passed initialization +// init file +// From: dcb@us-es.sel.de +// Date: Mon, 12 Oct 92 07:51:52 +0100 +// Subject: G++, ARM Page 141 +// Message-ID: <9210120651.AA15257@us-es.sel.de> + +extern int fred( int); + +class X { + public : + void f( int = fred( 0) ) ; // ERROR - previous spec +} ; + +void X::f( int x = fred( 0) ) {// ERROR - .* +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/init6.C b/gcc/testsuite/g++.old-deja/g++.law/init6.C new file mode 100644 index 000000000000..bcebd6cef8a8 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/init6.C @@ -0,0 +1,13 @@ +// Build don't link: +// GROUPS passed initialization +class Vector { + double *v; + int size; + +public: + Vector(int n); + ~Vector(); +}; + +exmpl() { Vector x(8)[16]; }// ERROR - .* + diff --git a/gcc/testsuite/g++.old-deja/g++.law/init7.C b/gcc/testsuite/g++.old-deja/g++.law/init7.C new file mode 100644 index 000000000000..2ec97c4fd115 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/init7.C @@ -0,0 +1,11 @@ +// Build don't link: +// GROUPS passed initialization +class test + { + public: + int x; + int y; + test (int val) { x = val; y = 0;} + }; + +test ar(34)[5];// ERROR - .* diff --git a/gcc/testsuite/g++.old-deja/g++.law/init8.C b/gcc/testsuite/g++.old-deja/g++.law/init8.C new file mode 100644 index 000000000000..6b52bdcdeea2 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/init8.C @@ -0,0 +1,22 @@ +// Build don't link: +// GROUPS passed initialization +// init file +// From: kol@world.std.com (Nikolay Yatsenko) +// Date: Wed, 27 Jan 1993 16:39:13 -0500 +// Subject: g++ bug +// Message-ID: <199301272139.AA25514@world.std.com> + + +const int ic = 1; +void f(int& arg) +{ // ERROR - argument 1 + if (arg) ; +} +const int& icr = ic; + +int main(void) +{ + f(icr); // g++ does not give error here// ERROR - .* + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/init9.C b/gcc/testsuite/g++.old-deja/g++.law/init9.C new file mode 100644 index 000000000000..baad1396a926 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/init9.C @@ -0,0 +1,35 @@ +// GROUPS passed initialization +// init file +// From: Richard Speed <speed@cs.montana.edu> +// Date: Sun, 6 Jun 1993 15:19:41 -0600 (MDT) +// Subject: excess elements in aggr initzer +// Message-ID: <Pine.3.07.9306061541.A10267-b100000@fubar.cs.montana.edu> + +extern "C" void printf (char *, ...); + +class samp { + int a; +public: + samp(int n) { a = n; } + int get_a() { return a; } +}; + +main() { + samp ob[4] [2] = { // Generated Error + 1, 2, + 3, 4, + 5, 6, + 7, 8, + }; + int i; + + if (ob[0][0].get_a() == 1 && ob[0][1].get_a() == 2 + && ob[1][0].get_a() == 3 && ob[1][1].get_a() == 4 + && ob[2][0].get_a() == 5 && ob[2][1].get_a() == 6 + && ob[3][0].get_a() == 7 && ob[3][1].get_a() == 8) + printf ("PASS\n"); + else + printf ("FAIL\n"); + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/inline1.C b/gcc/testsuite/g++.old-deja/g++.law/inline1.C new file mode 100644 index 000000000000..11e8d0a6c5db --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/inline1.C @@ -0,0 +1,3598 @@ +// Build don't link: +// Special g++ Options: -fno-for-scope +// GROUPS passed inlining +# 1 "NISTImages.cc" +# 1 "Vision.h" 1 + + + + + + + + + +extern "C" { +# 1 "/sym/gnu/lib/g++-include/stdio.h" 1 3 + + + + + + + + + + + + + + + + + + + + +#pragma interface + + + + + + + + + + + +# 1 "/sym/gnu/lib/g++-include/_G_config.h" 1 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# 33 "/sym/gnu/lib/g++-include/stdio.h" 2 3 + + +extern "C" { + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# 1 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/stdio.h" 1 3 + +# 1 "/sym/gnu/lib/g++-include/stdarg.h" 1 3 +extern "C" { +# 1 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/stdarg.h" 1 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# 1 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/va-sparc.h" 1 3 + + + + + + + + + + + +typedef char * __gnuc_va_list; + + + + + + + + + +# 79 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/va-sparc.h" 3 + + +# 32 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/stdarg.h" 2 3 + +# 77 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/stdarg.h" 3 + + + + + + +# 140 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/stdarg.h" 3 + + + + + +# 2 "/sym/gnu/lib/g++-include/stdarg.h" 2 3 + +} +# 2 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/stdio.h" 2 3 + + + + + + +extern struct _iobuf { + int _cnt; + unsigned char *_ptr; + unsigned char *_base; + int _bufsiz; + short _flag; + char _file; +} _iob[]; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +extern struct _iobuf *__hide_fopen (); +extern struct _iobuf *__hide_fdopen (); +extern struct _iobuf *__hide_freopen (); +extern struct _iobuf *__hide_popen (); +extern struct _iobuf *tmpfile(); +extern long __hide_ftell (); +extern char *fgets(); +extern char *gets(); +extern char *__hide_sprintf (); +extern char *ctermid(); +extern char *cuserid(); +extern char *__hide_tempnam (); +extern char *tmpnam(); + + + + + + +# 69 "/sym/gnu/lib/g++-include/stdio.h" 2 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +} + +extern "C" { + +int fclose(struct _iobuf *); +struct _iobuf * fdopen(int, const char*); +int fflush(struct _iobuf *); +int fgetc(struct _iobuf *); +char* fgets(char*, int, struct _iobuf *); +struct _iobuf * fopen(const char*, const char*); +int fprintf(struct _iobuf *, const char* ...); +int fputc(int, struct _iobuf *); +int fputs(const char*, struct _iobuf *); +int fread(void*, int , int , struct _iobuf *); + + + +struct _iobuf * freopen(const char*, const char*, struct _iobuf *); + +int fscanf(struct _iobuf *, const char* ...); +int fseek(struct _iobuf *, long, int); +long ftell(struct _iobuf *); +int fwrite(const void*, int , int , struct _iobuf *); +char* gets(char*); +int getw(struct _iobuf *); +int pclose(struct _iobuf *); +void perror(const char*); +struct _iobuf * popen(const char*, const char*); +int printf(const char* ...); +int puts(const char*); +int putw(int, struct _iobuf *); +int rewind(struct _iobuf *); +int scanf(const char* ...); +void setbuf(struct _iobuf *, char*); +void setbuffer(struct _iobuf *, char*, int); +int setlinebuf(struct _iobuf *); +int setvbuf(struct _iobuf *, char*, int, int ); +int sscanf(char*, const char* ...); +struct _iobuf * tmpfile(); +int ungetc(int, struct _iobuf *); +int vfprintf (...) ; +int vprintf (...) ; +char* sprintf (...) ; +char* vsprintf (...) ; + +extern int _filbuf (...) ; +extern int _flsbuf (...) ; + +} + + + + + + + + + + + + + + + + + + +# 11 "Vision.h" 2 + +# 1 "/usr/include/floatingpoint.h" 1 3 + + + + + + + + + + + + + + + + + +# 1 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/sys/ieeefp.h" 1 3 + + + + + + + + + + + + + + + + + +enum fp_direction_type + { + fp_nearest = 0, + fp_tozero = 1, + fp_positive = 2, + fp_negative = 3 + } ; + +# 34 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/sys/ieeefp.h" 3 + +# 43 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/sys/ieeefp.h" 3 + + +# 53 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/sys/ieeefp.h" 3 + +enum fp_precision_type + { + fp_extended = 0, + fp_single = 1, + fp_double = 2, + fp_precision_3 = 3 + } ; + + +# 73 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/sys/ieeefp.h" 3 + +enum fp_exception_type + { + fp_inexact = 0, + fp_division = 1, + fp_underflow = 2, + fp_overflow = 3, + fp_invalid = 4 + } ; + + +enum fp_class_type + { + fp_zero = 0, + fp_subnormal = 1, + fp_normal = 2, + fp_infinity = 3, + fp_quiet = 4, + fp_signaling = 5 + } ; + + +# 18 "/usr/include/floatingpoint.h" 2 3 + + + + +typedef float single; +typedef unsigned long extended[3]; + +typedef long double quadruple; + + + + + + + + +typedef unsigned fp_exception_field_type; + + + + +typedef int sigfpe_code_type; + +typedef void (*sigfpe_handler_type) (); + + + + + + + + +extern enum fp_direction_type fp_direction; + + + + +extern enum fp_precision_type fp_precision; + + + + +extern fp_exception_field_type fp_accrued_exceptions; + + + + + + + + + + + +typedef char decimal_string[512 ]; + + +typedef struct { + enum fp_class_type fpclass; + int sign; + int exponent; + decimal_string ds; + + + int more; + + + int ndigits; + + +} + decimal_record; + +enum decimal_form { + fixed_form, + + + + floating_form + +}; + +typedef struct { + enum fp_direction_type rd; + + enum decimal_form df; + int ndigits; +} + decimal_mode; + +enum decimal_string_form { + invalid_form, + whitespace_form, + fixed_int_form, + fixed_intdot_form, + fixed_dotfrac_form, + fixed_intdotfrac_form, + floating_int_form, + floating_intdot_form, + floating_dotfrac_form, + floating_intdotfrac_form, + inf_form, + infinity_form, + nan_form, + nanstring_form +}; + + + +extern void double_to_decimal(); +extern void quadruple_to_decimal(); +extern char *econvert(); +extern char *fconvert(); +extern char *gconvert(); +extern char *qeconvert(); +extern char *qfconvert(); +extern char *qgconvert(); + + + + + +extern sigfpe_handler_type ieee_handlers[5 ]; + + + + + + + +extern sigfpe_handler_type sigfpe(); + +extern void single_to_decimal(); +extern void extended_to_decimal(); + +extern void decimal_to_single(); +extern void decimal_to_double(); +extern void decimal_to_extended(); +extern void decimal_to_quadruple(); + +extern char *seconvert(); +extern char *sfconvert(); +extern char *sgconvert(); + +extern void string_to_decimal(); +extern void file_to_decimal(); +extern void func_to_decimal(); + + + +extern double atof(); + + + +extern int errno; + +extern double strtod(); + + +# 12 "Vision.h" 2 + +# 1 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/malloc.h" 1 3 + + + + + + + + + + + + + + + + +struct mallinfo { + int arena; + int ordblks; + int smblks; + int hblks; + int hblkhd; + int usmblks; + int fsmblks; + int uordblks; + int fordblks; + int keepcost; + + int mxfast; + int nlblks; + int grain; + int uordbytes; + int allocated; + int treeoverhead; +}; + +typedef void * malloc_t; + +extern malloc_t calloc( ); +extern void free( ); +extern malloc_t malloc( ); +extern malloc_t realloc( ); +extern int mallopt(); +extern struct mallinfo mallinfo(); + + +# 13 "Vision.h" 2 + +long time(long *); +int ieee_handler(); +} + +# 1 "/sym/gnu/lib/g++-include/std.h" 1 3 + + + + + + + + + + + + + + + + + + + + + + + +# 1 "/sym/gnu/lib/g++-include/stddef.h" 1 3 + + +extern "C" { + + + +# 1 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/stddef.h" 1 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + +# 41 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/stddef.h" 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef int ptrdiff_t; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef __wchar_t wchar_t; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# 7 "/sym/gnu/lib/g++-include/stddef.h" 2 3 + + + + +} + +# 24 "/sym/gnu/lib/g++-include/std.h" 2 3 + +# 1 "/sym/gnu/lib/g++-include/stdlib.h" 1 3 + + + + + + + +extern "C" { + +int abs(int); + + +void abort(void); + + + + +double atof(const char*); +int atoi(const char*); +long atol(const char*); + +int atexit(auto void (*p) (void)); +int bsearch (const void *, const void *, int , + int , auto int (*ptf)(const void*, const void*)); +void* calloc(int , int ); +void cfree(void*); + + +void exit(int); + + + + +char* fcvt(double, int, int*, int*); +void free(void*); +char* getenv(const char*); +int getopt(int, char * const *, const char*); +int getpw(int, char*); +char* gcvt(double, int, char*); +char* ecvt(double, int, int*, int*); +extern char** environ; + +long labs(long); +void* malloc(int ); +int malloc_usable_size(void*); +int putenv(const char*); +extern char* optarg; +extern int opterr; +extern int optind; +void qsort(void*, int , int , auto int (*ptf)(void*,void*)); +int rand(void); +void* realloc(void*, int ); +int setkey(const char*); +int srand(unsigned int); +double strtod(const char*, char**); +long strtol(const char*, char**, int); +unsigned long stroul(const char**, int); +int system(const char*); + +long random(void); +void srandom(int); +char* setstate(char*); +char* initstate(unsigned, char*, int); + +double drand48(void); +void lcong48(short*); +long jrand48(short*); +long lrand48(void); +long mrand48(void); +long nrand48(short*); +short* seed48(short*); +void srand48(long); + +char* ctermid(char*); +char* cuserid(char*); +char* tempnam(const char*, const char*); +char* tmpnam(char*); + +} + +# 25 "/sym/gnu/lib/g++-include/std.h" 2 3 + +# 1 "/sym/gnu/lib/g++-include/string.h" 1 3 + + + + + + + + + + + + + + +extern "C" { + +char* strcat(char*, const char*); +char* strchr(const char*, int); +int strcmp(const char*, const char*); +int strcoll(const char*, const char*); +char* strcpy(char*, const char*); +int strcspn(const char*, const char*); +char* strdup(const char*); + + + + +char* strncat(char*, const char*, int ); +int strncmp(const char*, const char*, int ); +char* strncpy(char*, const char*, int ); +char* strpbrk(const char*, const char*); +char* strrchr(const char*, int); +int strspn(const char*, const char*); +char* strstr(const char*, const char *); +char* strtok(char*, const char*); +int strxfrm(char*, const char*, int ); + +char* index(const char*, int); +char* rindex(const char*, int); +} + +# 1 "/sym/gnu/lib/g++-include/memory.h" 1 3 + + + + + + + +extern "C" { + +void* memalign (...) ; +void* memccpy (...) ; +void* memchr (...) ; +int memcmp (...) ; +void* memcpy (...) ; +void* memmove (...) ; +void* memset (...) ; +int ffs (...) ; +int getpagesize (...) ; +void* valloc (...) ; + +void bcopy (...) ; +int bcmp (...) ; +void bzero (...) ; +} + + + + + + + + + + + + + + +# 43 "/sym/gnu/lib/g++-include/string.h" 2 3 + + + +# 26 "/sym/gnu/lib/g++-include/std.h" 2 3 + + +# 1 "/sym/gnu/lib/g++-include/unistd.h" 1 3 + + + + + +extern "C" { + + + + + + + + + + + + + + + + + + +# 1 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/unistd.h" 1 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# 1 "/sym/gnu/lib/g++-include/sys/types.h" 1 3 + + +extern "C" +{ + + + + + + + + + + +# 1 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/sys/types.h" 1 3 + + + + + + + + + + + + + + + +# 1 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/sys/stdtypes.h" 1 3 + + + + + + + + + + + + + +typedef int sigset_t; + +typedef unsigned int speed_t; +typedef unsigned long tcflag_t; +typedef unsigned char cc_t; +typedef int pid_t; + +typedef unsigned short mode_t; +typedef short nlink_t; + +typedef long clock_t; +typedef long time_t; + + + + + + + + + + + + + + + + +# 16 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/sys/types.h" 2 3 + + + +# 1 "/usr/include/sys/sysmacros.h" 1 3 + + + + + + + + + + + + + + + + + + + +# 19 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/sys/types.h" 2 3 + + + + + +typedef unsigned char u_char; +typedef unsigned short u_short; +typedef unsigned int u_int; +typedef unsigned long u_long; +typedef unsigned short ushort; +typedef unsigned int uint; + + + + + + + + + + + + + + + +typedef struct _physadr_t { int r[1]; } *physadr_t; +typedef struct label_t { + int val[2]; +} label_t; + + + + + + + +typedef struct _quad_t { long val[2]; } quad_t; +typedef long daddr_t; +typedef char * caddr_t; +typedef unsigned long ino_t; +typedef short dev_t; +typedef long off_t; +typedef unsigned short uid_t; +typedef unsigned short gid_t; +typedef long key_t; +typedef char * addr_t; + + + + + + + + + + + + + + +typedef long fd_mask; + + + + + + + + + +typedef struct fd_set { + fd_mask fds_bits[(((256 )+(( (sizeof (fd_mask) * 8 ) )-1))/( (sizeof (fd_mask) * 8 ) )) ]; +} fd_set; + + + + + + + +# 113 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/sys/types.h" 3 + + + +# 15 "/sym/gnu/lib/g++-include/sys/types.h" 2 3 + + + + + + +} + + + + +# 73 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/unistd.h" 2 3 + + +extern int access( ); +extern unsigned alarm( ); +extern int chdir( ); +extern int __hide_chmod ( ); +extern int __hide_chown ( ); +extern int close( ); +extern char *ctermid( ); +extern char *cuserid( ); +extern int dup( ); +extern int dup2( ); +extern int __hide_execl ( ); +extern int __hide_execle ( ); +extern int __hide_execlp ( ); +extern int execv( ); +extern int execve( ); +extern int execvp( ); +extern pid_t fork( ); +extern long fpathconf( ); +extern char *getcwd( ); +extern gid_t getegid( ); +extern uid_t geteuid( ); +extern gid_t getgid( ); +extern int getgroups( ); +extern char *getlogin( ); +extern pid_t getpgrp( ); +extern pid_t getpid( ); +extern pid_t getppid( ); +extern uid_t getuid( ); +extern int isatty( ); +extern int link( ); +extern off_t lseek( ); +extern long pathconf( ); +extern int pause( ); +extern int pipe( ); +extern int read( ); +extern int rmdir( ); +extern int __hide_setgid ( ); +extern int setpgid( ); +extern pid_t setsid( ); +extern int __hide_setuid ( ); +extern unsigned sleep( ); +extern long sysconf( ); +extern pid_t tcgetpgrp( ); +extern int tcsetpgrp( ); +extern char *ttyname( ); +extern int unlink( ); +extern int write( ); + + + +# 25 "/sym/gnu/lib/g++-include/unistd.h" 2 3 + + + + + + + + + + + + + + + +# 59 "/sym/gnu/lib/g++-include/unistd.h" 3 + + + +extern void _exit(int); + + + + +extern unsigned alarm (...) ; +extern int brk (...) ; +extern int chdir (...) ; +extern int chmod (...) ; +extern int chown (const char*, unsigned short , unsigned short ); +extern int close (...) ; +extern char* crypt (...) ; +extern int dup (...) ; +extern int dup2 (...) ; +extern void encrypt (...) ; +extern int execl (const char*, const char *, ...); +extern int execle (const char*, const char *, ...); +extern int execlp (const char*, const char*, ...); +extern int exect (...) ; +extern int execv (...) ; +extern int execve (...) ; +extern int execvp (...) ; +extern int fchown (int, unsigned short , unsigned short ); +extern int fork (...) ; +extern int fsync (...) ; +extern int ftruncate (...) ; +extern char* getcwd (...) ; +extern int getdomainname (...) ; +extern int getdtablesize (...) ; +extern int getgroups (...) ; +extern unsigned short geteuid (...) ; +extern unsigned short getegid (...) ; +extern unsigned short getgid (...) ; +extern long gethostid (...) ; +extern int gethostname (...) ; +extern int getpgrp (...) ; +extern int getpid (...) ; +extern int getppid (...) ; +extern char* getlogin (...) ; +extern char* getpass (...) ; +extern unsigned short getuid (...) ; +extern int ioctl (int, int, ... ); +extern int isatty (...) ; +extern int link (...) ; +extern int mkstemp (...) ; +extern char* mktemp (...) ; +extern int nice (...) ; +extern int pause (...) ; +extern int pipe (...) ; +extern int readlink (...) ; +extern int rename (...) ; +extern int rmdir (...) ; +extern void* sbrk (...) ; +extern int syscall (...) ; +extern int setgid (unsigned short ); +extern int sethostname (...) ; + + + + +extern int setpgrp (...) ; + +extern int setregid (...) ; +extern int setreuid (...) ; +extern int setuid (unsigned short ); +extern unsigned sleep (...) ; +extern void swab (...) ; +extern int symlink (...) ; +extern long sysconf (...) ; +extern int truncate (...) ; +extern char* ttyname (...) ; +extern int ttyslot (...) ; + +extern int unlink (...) ; +extern int vfork (...) ; +extern int vadvise (...) ; +extern int vhangup (...) ; +extern long lseek (...) ; +extern int read (...) ; +extern int write (...) ; +extern int access (...) ; + +extern int flock (...) ; + + +} + + +# 28 "/sym/gnu/lib/g++-include/std.h" 2 3 + +# 1 "/sym/gnu/lib/g++-include/stdio.h" 1 3 + + + + + + + + + + + + + + + + + + +# 174 "/sym/gnu/lib/g++-include/stdio.h" 3 + +# 29 "/sym/gnu/lib/g++-include/std.h" 2 3 + +# 1 "/sym/gnu/lib/g++-include/errno.h" 1 3 + + +extern "C" { + + + + + +# 1 "/usr/include/errno.h" 1 3 + + + + + + + + + +# 1 "/usr/include/sys/errno.h" 1 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# 10 "/usr/include/errno.h" 2 3 + +extern int errno; + + +# 9 "/sym/gnu/lib/g++-include/errno.h" 2 3 + + + + +extern char* sys_errlist[]; +extern int sys_nerr; + +extern int errno; + +void perror(const char*); +char* strerr(int); + + +} + + +# 30 "/sym/gnu/lib/g++-include/std.h" 2 3 + +# 1 "/sym/gnu/lib/g++-include/fcntl.h" 1 3 + + +extern "C" { + + + + + + + + + + +# 1 "/usr/include/fcntl.h" 1 3 + + + + + +# 1 "/usr/include/sys/fcntlcom.h" 1 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +struct flock { + short l_type; + short l_whence; + long l_start; + long l_len; + short l_pid; + short l_xxx; +}; + + + +struct eflock { + short l_type; + short l_whence; + long l_start; + long l_len; + short l_pid; + short l_xxx; + long l_rpid; + long l_rsys; +}; + + + +# 1 "/sym/gnu/lib/g++-include/sys/stat.h" 1 3 + + +extern "C" +{ + + + + + + + + + +# 1 "/usr/include/sys/stat.h" 1 3 + + + + + + + + + + + +struct stat { + dev_t st_dev; + ino_t st_ino; + mode_t st_mode; + short st_nlink; + uid_t st_uid; + gid_t st_gid; + dev_t st_rdev; + off_t st_size; + time_t st_atime; + int st_spare1; + time_t st_mtime; + int st_spare2; + time_t st_ctime; + int st_spare3; + long st_blksize; + long st_blocks; + long st_spare4[2]; +}; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +int __hide_chmod ( ); +int fstat( ); +int mkdir( ); +int mkfifo( ); +int stat( ); +mode_t umask( ); + + + +# 14 "/sym/gnu/lib/g++-include/sys/stat.h" 2 3 + + + + + + +extern int chmod (...) ; +extern int stat (...) ; +extern int lstat (...) ; +extern int fstat (...) ; + + + + + + + + + + + + + + + + + + +} + + +# 149 "/usr/include/sys/fcntlcom.h" 2 3 + + +int __hide_open ( ); +int __hide_creat ( ); +int __hide_fcntl ( ); + + +# 6 "/usr/include/fcntl.h" 2 3 + + + + + +# 14 "/sym/gnu/lib/g++-include/fcntl.h" 2 3 + + + + + + + + +int fcntl(int, int, ...); +int creat (...) ; + +int open (...) ; + + +} + +# 31 "/sym/gnu/lib/g++-include/std.h" 2 3 + + +extern "C" { +int strcasecmp (...) ; +} + + +# 18 "Vision.h" 2 + +# 1 "/sym/gnu/lib/g++-include/math.h" 1 3 + + + + + + + + + + + + + + + + + + + + + +#pragma interface + + + + + + + + + + + +# 64 "/sym/gnu/lib/g++-include/math.h" 3 + +extern "C" { + +double acos(double); +double acosh(double); +double asin(double); +double asinh(double); +double atan(double); +double atan2(double, double); +double atanh(double); +double cbrt(double); +double ceil(double); +double copysign(double,double); +double cos(double); +double cosh(double); +double drem(double,double); +double erf(double); +double erfc(double); +double exp(double); +double expm1(double); +double fabs(double); +double finite(double); +double floor(double); +double fmod(double, double); +double frexp(double, int*); +double gamma(double); +double hypot(double,double); +double infnan(int); + + +int isinf(double); +int isnan(double); + +double j0(double); +double j1(double); +double jn(int, double); +double ldexp(double, int); +double lgamma(double); +double log(double); +double log10(double); +double log1p(double); +double logb(double); +double modf(double, double*); +double pow(double, double); +double rint(double); +double scalb(double, int); +double sin(double); +double sinh(double); +double sqrt(double); +double tan(double); +double tanh(double); +double y0(double); +double y1(double); +double yn(int, double); + +double aint(double); +double anint(double); +int irint(double); +int nint(double); +} + + + + + + + + +struct libm_exception +{ + int type; + char* name; + double arg1, arg2, retval; +}; + + + + + + + + +extern "C" int matherr(libm_exception*); + + + +# 1 "/sym/gnu/lib/g++-include/values.h" 1 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# 57 "/sym/gnu/lib/g++-include/values.h" 3 + + + + + + + + + + + + + + + +# 166 "/sym/gnu/lib/g++-include/values.h" 3 + + + + + + + + + +# 150 "/sym/gnu/lib/g++-include/math.h" 2 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# 19 "Vision.h" 2 + + +# 1 "MiscUtilities.h" 1 + + + + + +# 1 "/sym/gnu/lib/g++-include/std.h" 1 3 + + + + + + + + + + + + + + + + + + + +# 37 "/sym/gnu/lib/g++-include/std.h" 3 + +# 6 "MiscUtilities.h" 2 + + + + + + + + + +inline int used_mem() { + struct mallinfo mi = mallinfo(); + return mi.usmblks+mi.uordblks; +} +inline void abort(void) { + fprintf((&_iob[2]) ,"abort\n"); + exit(1); +} + +inline volatile void error(char *s) { + fprintf((&_iob[2]) ,"FATAL ERROR: "); + fprintf((&_iob[2]) ,"%s\n",s); + exit(1); +} +template <class Y> +struct NameValuePair { + char *name; + Y y; +}; + +template <class Y> +Y lookup(NameValuePair<Y> *data,char *name) { + while(data->name) { + if(!strcmp(data->name,name)) return data->y; + data++; + } + abort(); + return data->y; +} + +template <class T> +void swap(T &x,T &y) { + T temp = x; + x = y; + y = temp; +} + + +# 21 "Vision.h" 2 + +# 1 "Counted.h" 1 + + + + + +# 1 "/sym/gnu/lib/g++-include/std.h" 1 3 + + + + + + + + + + + + + + + + + + + +# 37 "/sym/gnu/lib/g++-include/std.h" 3 + +# 6 "Counted.h" 2 + + +template <class T> +struct Counted { + private: + int *count; + T *object; + T *operator&() { + return object; + } + void dec_count() { + if(!count) return; + (*count)--; + if(*count<=0) { + delete count; + delete object; + count=0; + object=0; + } + } + void inc_count() { + if(!count) return; + (*count)++; + } + public: + Counted() { + count=0; + object=0; + } + Counted(T *object):object(object) { + count = new int(1); + } + ~Counted() { + dec_count(); + } + Counted(Counted &other) { + count=other.count; + object=other.object; + inc_count(); + } + Counted &operator=(Counted &other) { + other.inc_count(); + dec_count(); + count=other.count; + object=other.object; + return *this; + } + + T &operator*() {if(!object) abort(); else return *object; return *object;} + T *operator->() {if(!object) abort(); else return object; return object;} + operator T&() {if(!object) abort(); else return *object; return *object;} + + +}; + + +# 22 "Vision.h" 2 + +# 1 "Art.h" 1 + + + + + + +extern "C" { void abort(); } + + + + + + + + + + + + +template <class X> +inline void art_initialize(X *,int) {} + +# 39 "Art.h" + + + + + + +template <class T> +class Art { +protected: + int mark_temp; + T *data; + int dims[1]; + void constructor(int d) { + if(d<0) abort() ; + mark_temp=0; + dims[0]=d; + if(d>0) { + data=new T[d]; + if(!data) abort() ; + } else data=0; + art_initialize(data,d); + } + void destructor() { + if(!data) return; + delete [] data; + mark_temp=0; + data=0; + dims[0]=0; + } + void copy(Art &other) { + int d0=dims[0]<?other.dims[0]; + for(int i=0;i<d0;i++) data[i]=other.data[i]; + } +public: + void copyclear(Art &other) { + dims[0]=other.dims[0]; + data=other.data; + other.dims[0]=0; + other.data=0; + } +private: + void copyconstructor(Art &other) { + mark_temp=0; + if(other.mark_temp) { + copyclear(other); + } else { + constructor(other.dims[0]); + copy(other); + } + } + public: + Art() {constructor(0);} + Art(int d) {constructor(d);} + Art(Art &other) {copyconstructor(other);} + ~Art() {destructor();} + + Art &operator=(Art &other) { + destructor(); + copyconstructor(other); + return *this; + } + int dim(int i) {return dims[i];} + T &operator()(int i) { + if(unsigned(i)>=unsigned(dims[0])) abort() ; + return data[i]; + } + T &sub(int i) {return data[i];} + void resize(int nd) { + if(nd<0) abort() ; + Art t(nd); + int limit=nd<?dims[0]; + for(int i=0;i<limit;i++) t.data[i]=data[i]; + t.mark_temp=1; + *this=t; + } + Art &temp() { mark_temp=1; return *this; } + T *pointer() {return data;} + void fill(T value) {for(int i=0;i<dims[0];i++) data[i]=value;} + + int length() {return dims[0];} + T &operator[](int i) {return operator()(i);} +}; + + + + + + + + +template <class T> +class Stk { +protected: + Art<T> stack; + int fill; +public: + Stk() {stack.resize(4); fill=0;} + Stk(Stk &other) { + stack=other.stack; + fill=other.fill; + } + int dim(int i) {return stack.dim(i);} + void push(const T &element) { + if(fill>=stack.dim(0)) stack.resize(2*fill); + stack.sub(fill++)=element; + } + T &tos() { + return stack(fill-1); + } + T &pop() { + return stack(--fill); + } + T &operator()(int i) {return stack(i);} + T &sub(int i) {return stack.sub(i);} + void clear() { + stack.resize(0); + stack.resize(4); + fill=0; + } + void compact() { + stack.resize(fill+1); + } + Stk temp() { stack.temp(); return *this; } + T *pointer() {return stack.pointer();} + operator Art<T>&() {return stack;} + + int length() {return fill;} + T &operator[](int i) {return operator()(i);} +}; + + + + + +template <class T> +class Art2 { +protected: + int mark_temp; + T **data; + int dims[2]; + int total_length; + void constructor(int d0,int d1) { + if(d0<0||d1<0) abort() ; + mark_temp=0; + dims[0]=d0; + dims[1]=d1; + total_length=dims[0]*dims[1]; + if(d0>0) { + data=new T*[d0]; + if(!data) abort() ; + } else data=0; + if(d0>0&&d1>0) { + T *p=new T[d0*d1]; + if(!p) abort() ; + for(int i=0;i<d0;i++) data[i]=p+i*d1; + art_initialize(data[0],d0*d1); + } + } + void destructor() { + if(dims[0]<1) return; + if(!data) return; + delete [] data[0]; + delete [] data; + mark_temp=0; + data=0; + dims[0]=0; + dims[1]=0; + } + void copy(Art2 &other) { + int d0=dims[0]<?other.dims[0]; + int d1=dims[1]<?other.dims[1]; + for(int i=0;i<d0;i++) for(int j=0;j<d1;j++) + data[i][j]=other.data[i][j]; + } +public: + void copyclear(Art2 &other) { + dims[0]=other.dims[0]; + dims[1]=other.dims[1]; + total_length=dims[0]*dims[1]; + data=other.data; + other.dims[0]=0; + other.dims[1]=0; + other.total_length=0; + other.data=0; + } +private: + void copyconstructor(Art2 &other) { + mark_temp=0; + if(other.mark_temp) { + copyclear(other); + } else { + constructor(other.dims[0],other.dims[1]); + copy(other); + } + } + public: + Art2() {constructor(0,0);} + Art2(int d0,int d1) {constructor(d0,d1);} + Art2(const Art2 &other) {copyconstructor((Art2&)other);} + ~Art2() {destructor();} + + Art2 &operator=(Art2 &other) { + destructor(); + copyconstructor(other); + return *this; + } + int dim(int i) {return dims[i];} + T &operator()(int i,int j) { + if(unsigned(i)>=unsigned(dims[0])||unsigned(j)>=unsigned(dims[1])) + abort() ; + return data[i][j]; + } + T &sub(int i,int j) {return data[i][j];} + void resize(int nd0,int nd1) { + if(nd0<0||nd1<0) abort() ; + Art2 t(nd0,nd1); + int limit0=nd0<?dims[0]; + int limit1=nd1<?dims[1]; + for(int i=0;i<limit0;i++) for(int j=0;j<limit1;j++) t.data[i][j]=data[i][j]; + t.mark_temp=1; + *this=t; + } + Art2 &temp() { mark_temp=1; return *this; } + T **pointer() {return data;} + void fill(T value) { + for(int i=0;i<dims[0];i++) for(int j=0;j<dims[1];j++) + data[i][j]=value; + } + + + + int length() {return total_length;} + T &sub(int i) {return data[0][i];} + T &operator()(int i) { + if(unsigned(i)>=total_length) abort() ; + return data[0][i]; + } +}; + +template <class T> +inline void art_swap(T &x,T &y) { + T temp = x; + x = y; + y = temp; +} + +template <class T> +inline void reverse(Art<T> &a) { + int i; + for(i=a.length()/2;i>=0;i--) art_swap(a.sub(i),a.sub(a.length()-i-1)); +} + +template <class T> +inline void reverse(Stk<T> &a) { + reverse(a.stack); +} + +template <class T> +inline void bag_remove(Stk<T> &a,T &element) { + for(int i=0;i<a.length()-1;i++) { + if(a(i)==element) { + a.sub(i)=a.tos(); + a.pop(); + } + } + if(i<a.length()&&a.sub(i)==element) a.pop(); +} + +template <class T> +inline void ordered_remove(Stk<T> &a,T &element) { + int source=0,dest=0; + while(source<a.length()) { + if(a(source)!=element) { + a(dest)=a(source); + dest++; + } + source++; + } + a.stack.resize(dest); +} + +template <class T> +inline Art<T> concatenate(Art<T> &a,Art<T> &b) { + int i,k; + k=a.length(); + Art<T> result(k+b.length()); + for(i=0;i<a.length();i++) result.sub(i)=a.sub(i); + for(i=0;i<b.length();i++) result.sub(i+k)=b.sub(i); + return result.temp(); +} + +template <class T> +inline Stk<T> concatenate(Stk<T> &a,Stk<T> &b) { + int i; + Stk<T> result; + for(i=0;i<a.length();i++) result.push(a.sub(i)); + for(i=0;i<b.length();i++) result.push(b.sub(i)); + return result.temp(); +} + + +# 23 "Vision.h" 2 + +# 1 "Geo.h" 1 + + + + + +# 1 "/sym/gnu/lib/g++-include/math.h" 1 3 + + + + + + + + + + + + + + + + + + + +# 215 "/sym/gnu/lib/g++-include/math.h" 3 + +# 6 "Geo.h" 2 + + +extern "C" { +void abort(void); +} + + + + + + + + + + + + + + +template <class T,int n> +class vec { +protected: + T v[n]; +public: + int length() {return n;} + int dim(int) {return n;} + vec() {} + vec(T v0) { v[0]=v0; } + vec(T v0,T v1) { v[0]=v0; v[1]=v1; } + vec(T v0,T v1,T v2) { v[0]=v0; v[1]=v1; v[2]=v2; } + vec(T v0,T v1,T v2,T v3) { v[0]=v0; v[1]=v1; v[2]=v2; v[3]=v3; } + vec(T v0,T v1,T v2,T v3,T v4) { v[0]=v0; v[1]=v1; v[2]=v2; v[3]=v3; v[4]=v4; } + + T &operator[](int i) {return v[i];} + T &sub(int i) {return v[i];} + T &operator()(int i) { + if(unsigned(i)>=n) abort(); + return v[i]; + } + + + + + + + + + + + + + T operator*(vec &other) { + T result=0; + for(int i=0;i<n;i++) result=result+sub(i)*other.sub(i); + return result; + } + + + vec operator-() { + vec result; + for(int i=0;i<n;i++) result.sub(i)= -sub(i); + return result; + } + vec operator*(T other) { + vec result; + for(int i=0;i<n;i++) result.sub(i)=sub(i)*other; + return result; + } + vec operator/(T other) { + vec result; + for(int i=0;i<n;i++) result.sub(i)=sub(i)/other; + return result; + } + vec operator+(vec &other) { + vec result; + for(int i=0;i<n;i++) result.sub(i)=sub(i)+other.sub(i); + return result; + } + vec operator-(vec &other) { + vec result; + for(int i=0;i<n;i++) result.sub(i)=sub(i)-other.sub(i); + return result; + } + vec operator<?(vec &other) { + vec result; + for(int i=0;i<n;i++) result.sub(i)=sub(i)<?other.sub(i); + return result; + } + vec operator>?(vec &other) { + vec result; + for(int i=0;i<n;i++) result.sub(i)=sub(i)>?other.sub(i); + return result; + } + + + int operator==(vec &other) { + for(int i=0;i<n;i++) if(sub(i)!=other.sub(i)) return 0; + return 1; + } + int operator!=(vec &other) { + for(int i=0;i<n;i++) if(sub(i)!=other.sub(i)) return 1; + return 0; + } + int operator<(vec &other) { + for(int i=0;i<n;i++) if(sub(i)>=other.sub(i)) return 0; + return 1; + } + int operator>(vec &other) { + for(int i=0;i<n;i++) if(sub(i)<=other.sub(i)) return 0; + return 1; + } + int operator<=(vec &other) { + for(int i=0;i<n;i++) if(sub(i)>other.sub(i)) return 0; + return 1; + } + int operator>=(vec &other) { + for(int i=0;i<n;i++) if(sub(i)<other.sub(i)) return 0; + return 1; + } +}; + +template <class T> +inline float euclidean_norm(T &v) { + float total=0.0; + for(int i=0;i<v.dim(0);i++) total+=v(i)*v(i); + return sqrt(total); +} + +template <class T> +inline float euclidean_distance(T &u,T &v) { + float total=0.0; + for(int i=0;i<u.dim(0);i++) { + float d=u(i)-v(i); + total+=d*d; + } + return sqrt(total); +} + + + + + +template <class T,int n> +class mat:vec<T,n*n> { +protected: +public: + int dim(int) {return n;} + T &operator[](int i) {return v[i];} + T &sub(int i,int j) {return v[i*n+j];} + T &operator()(int i,int j) { + if(unsigned(i)>=n||unsigned(j)>=n) abort(); + return sub(i,j); + } + mat operator*(mat &other) { + mat result; + for(int i=0;i<n;i++) for(int j=0;j<n;j++) { + T total=0; + for(int k=0;k<n;k++) total=total+sub(i,k)*other.sub(k,j); + result.sub(i,j)=total; + } + return result; + } + vec<T,n> operator*(vec<T,n> &other) { + vec<T,n> result; + for(int i=0;i<n;i++) { + T total=0; + for(int k=0;k<n;k++) total=total+sub(i,k)*other.sub(k); + result.sub(i)=total; + } + return result; + } +}; + + + + + +typedef vec<float,2> vec2; +typedef vec<float,3> vec3; +typedef vec<float,4> vec4; + +typedef mat<float,2> mat2; +typedef mat<float,3> mat3; +typedef mat<float,4> mat4; + +typedef vec<int,2> ivec2; + + + + + + + +inline float norm_angle(float p) { + while(p<0) p+=2* 3.14159265358979323846 ; while(p>=2* 3.14159265358979323846 ) p-=2* 3.14159265358979323846 ; return p; +} +inline float norm_angle0(float p) { + while(p<- 3.14159265358979323846 ) p+=2* 3.14159265358979323846 ; while(p>= 3.14159265358979323846 ) p-=2* 3.14159265358979323846 ; return p; +} +inline float norm_orientation(float p) { + while(p<0) p+= 3.14159265358979323846 ; while(p>= 3.14159265358979323846 ) p-= 3.14159265358979323846 ; return p; +} +inline float norm_orientation0(float p) { + while(p<- 3.14159265358979323846 /2) p+= 3.14159265358979323846 ; while(p>= 3.14159265358979323846 /2) p-= 3.14159265358979323846 ; return p; +} +inline float orientation_difference(float p,float q) { + fabs(norm_orientation0(p-q)); +} + + + + + + + + + + + + + + +inline vec2 cmul(vec2 &p,vec2 &q) { + return vec2(p.sub(0)*q.sub(0)-p.sub(1)*q.sub(1), + p.sub(0)*q.sub(1)+p.sub(1)*q.sub(0)); +} + +inline vec2 cdiv(vec2 &p,vec2 &q) { + float n=q*q; + return vec2((p.sub(0)*q.sub(0)+p.sub(1)*q.sub(1))/n, + (p.sub(1)*q.sub(0)-p.sub(0)*q.sub(1))/n); +} + +inline vec2 csqrt(vec2 &x) { + if (x.sub(0)==0.0&&x.sub(1)==0.0) + return vec2(0.0,0.0); + else { + float a=sqrt((fabs(x.sub(0))+hypot(x.sub(0),x.sub(1)))*0.5); + float b=0.5*(x.sub(1)/a); + if(x.sub(0)>0.0) return vec2(a, b); + else if(x.sub(1)>=0.0) return vec2(a,b); + else return vec2(-a,-b); + } +} +inline vec2 cpow(vec2& x, double p) { + float h=hypot(x.sub(0),x.sub(1)); + if (h<=0.0) abort(); + float lr=pow(h,p); + float a=atan2(x.sub(1),x.sub(0)); + float li=p*a; + return vec2(lr*cos(li),lr*sin(li)); +} + + + +inline float cross(vec2 p,vec2 q) { + return p.sub(0)*q.sub(1)-p.sub(1)*q.sub(0); +} + + + + + +struct TRS2 { + vec2 t; + vec2 r; + TRS2(vec2 t=vec2(0.0,0.0),vec2 r=vec2(1.0,0.0)):t(t),r(r) { + } + vec2 operator()(vec2 &arg) { + return cmul(r,arg)+t; + } + float rotation() { + return atan2(r(1),r(0)); + } +}; + + + +# 24 "Vision.h" 2 + + + + +# 1 "VisionTypes.h" 1 + + + + +typedef Art2<float> FImage; +typedef Art2<int> IImage; +typedef Art2<unsigned char> CImage; + +struct FImageOp {virtual FImage operator()(FImage &) = 0;}; +struct FImageOp2 {virtual FImage operator()(FImage &,FImage &) = 0;}; +struct CImageOp {virtual CImage operator()(CImage &) = 0;}; +struct CImageOp2 {virtual CImage operator()(CImage &,CImage &) = 0;}; + + + + + +struct PFeature { + ivec2 p; + float a; + short group; + short type; + PFeature() {} + PFeature(ivec2 p,float a,int group,int type):p(p),a(a),group(group),type(type) {} +}; + +typedef Stk<PFeature> PFeatureStk; + +struct FIExtractor {virtual PFeatureStk operator()(FImage &) = 0;}; +struct CIExtractor {virtual PFeatureStk operator()(CImage &) = 0;}; +# 28 "Vision.h" 2 + +# 1 "ImageDatabase.h" 1 + + + + + +# 1 "Art.h" 1 + + +# 339 "Art.h" + +# 6 "ImageDatabase.h" 2 + + +typedef Art2<unsigned char> CImage; + + + + + + + + +struct ImageDatabase { + + + + + virtual int length() = 0; + virtual int nclassifications() = 0; + virtual int nusers() = 0; + + + + + virtual int classification(int offset) = 0; + virtual int user(int offset) = 0; + + virtual CImage cimage(int offset) {abort();} + virtual PFeatureStk features(int offset) {abort();} + + + + + + + virtual int user_offset(int user) = 0; + virtual int user_length(int user) = 0; +}; + +ImageDatabase *make_NISTDigitImages(); + + + + + +struct ImageDatabaseIterator { + virtual int done() = 0; + virtual void next() = 0; + virtual operator int() = 0; + virtual void mark_upto_here() {} +}; + +ImageDatabaseIterator *make_IDI_Sequential(ImageDatabase *digits,int current,int stride); +ImageDatabaseIterator *make_IDI_OnePerUser(ImageDatabase *digits,int current); +ImageDatabaseIterator *make_IDI_FromFile(char *name); + + +# 29 "Vision.h" 2 + + + +# 1 "NISTImages.cc" 2 + + + + + + + + + + +# 1 "/sym/gnu/lib/g++-include/std.h" 1 3 + + + + + + + + + + + + + + + + + + + +# 37 "/sym/gnu/lib/g++-include/std.h" 3 + +# 11 "NISTImages.cc" 2 + +# 1 "Art.h" 1 + + +# 339 "Art.h" + +# 12 "NISTImages.cc" 2 + + +extern "C" { +# 1 "./nist/ihead.h" 1 + + + + + + + + + + + + + + +typedef struct ihead{ + char id[ 80 ]; + char created[ 26 ]; + char width[ 8 ]; + char height[ 8 ]; + char depth[ 8 ]; + char density[ 8 ]; + char compress[ 8 ]; + char complen[ 8 ]; + char align[ 8 ]; + char unitsize[ 8 ]; + char sigbit; + char byte_order; + char pix_offset[ 8 ]; + char whitepix[ 8 ]; + char issigned; + char rm_cm; + char tb_bt; + char lr_rl; + char parent[ 80 ]; + char par_x[ 8 ]; + char par_y[ 8 ]; +}IHEAD; + + + + + + + + + + + + + + + + + + + + + +# 15 "NISTImages.cc" 2 + +int readihdrfile(); + +} + +typedef Art2<unsigned char> CImage; + +Stk<char*> mis_files; + +extern "C" { + char *re_comp(char *); + int re_exec(char *); +} + +struct NISTCharFile { + private: + NISTCharFile(NISTCharFile &); + void operator=(NISTCharFile &); + public: + IHEAD *bit_header; + int bit_w,bit_h; + char *bit_data; + int field_w,field_h; + Stk<int> classes; + + static void maybe_read_mis_files() { + if(mis_files.length()>0) return; + struct _iobuf *stream = fopen("/com/nist/mis-files" ,"r"); + if(!stream) abort() ; + char buf[1024]; + while(fgets(buf,sizeof buf,stream)) { + buf[strlen(buf)-1]='\0'; + mis_files.push(strdup(buf)); + } + fclose(stream); + } + + static char *find_matching_mis_file_prefix(char *pattern) { + if(re_comp(pattern)) abort() ; + int i; + for(i=0;i<mis_files.length();i++) { + if(re_exec(mis_files(i))) break; + } + if(i<mis_files.length()) return mis_files(i); + else return 0; + } + + static int part_of_user(int user) { + int part; + if(user<500) part=0; + else if(user<1000) part=1; + else if(user<1500) part=2; + else part=3; + return part; + } + + static char type_of_itype(int itype) { + char type; + switch(itype) { + case 0: type='d'; break; + case 1: type='u'; break; + case 2: type='l'; break; + default: abort() ; + }; + return type; + } + + NISTCharFile(int user,char itype) { + maybe_read_mis_files(); + int type = type_of_itype(itype); + int part = part_of_user(user); + + char buf[512]; + sprintf(buf,"/com/nist3/data/" "hsf_%d/f%04d_.*/%c%04d_.*",part,user,type,user); + char *prefix = find_matching_mis_file_prefix(buf); + ; + + if(!prefix) { + bit_w = 0; + bit_h = 0; + field_w = 0; + field_h = 0; + return; + } + + char file[512]; + + strcpy(file,prefix); strcat(file,".mis"); + if(!readihdrfile(file,&bit_header,&bit_data,&bit_w,&bit_h)) + abort() ; + field_w=atoi(bit_header->par_x); + field_h=atoi(bit_header->par_y); + + strcpy(file,prefix); strcat(file,".cls"); + struct _iobuf *stream = fopen(file,"r"); + if(!stream) + abort() ; + int total=atoi(fgets(buf,sizeof buf,stream)); + if(total!=bit_h/field_h) + abort() ; + while(fgets(buf,sizeof buf,stream)) classes.push(strtol(buf,0,16)); + fclose(stream); + } + + ~NISTCharFile() { + free(bit_header); + free(bit_data); + } + + int length() { + return bit_h/field_h; + } + + CImage image(int i0) { + ; + CImage result(field_w,field_h); + int bit_w8=bit_w/8; + int offset=i0*field_h; + if(offset>=bit_h) abort() ; + int i,j; + + + for(i=0;i<field_w;i++) for(j=0;j<field_h;j++) { + int jj=j+offset; + result(i,field_h-j-1)=(!!(bit_data[bit_w8*jj+(i>>3)]&(1<<(7-i&7)))) ; + } + + return result.temp(); + } + + int classification(int i) { + return classes(i); + } +}; + +int *NISTDigitImages_table; + +struct NISTDigitImages:ImageDatabase { + private: + NISTDigitImages(NISTDigitImages&); + void operator=(NISTDigitImages&); + public: + enum {table_size=2101}; + + int nclassifications() {return 10;} + int nusers() {return 2200;} + + static void init_table() { + struct _iobuf *stream=fopen("/com/nist/nist-digits" ,"r"); + NISTDigitImages_table = new int[table_size]; + if(!stream) abort() ; + int i=1; + while(fscanf(stream,"%d",&NISTDigitImages_table[i])==1) i++; + if(i!=table_size) abort() ; + fclose(stream); + int total=0; + for(i=1;i<table_size;i++) NISTDigitImages_table[i]+=NISTDigitImages_table[i-1]; + } + + static int locate(int v) { + int low=0; + int high=table_size; + if(v>=NISTDigitImages_table[table_size-1]) abort() ; + while(low+1<high) { + int mid=(low+high)/2; + if(NISTDigitImages_table[mid]<=v) low=mid; + else high=mid; + } + while(low<table_size-1&&NISTDigitImages_table[low+1]<=v) low++; + return low; + } + + int user_offset(int user) { + if(unsigned(user)>=2100) abort() ; + return NISTDigitImages_table[user]; + } + + int user_length(int user) { + if(unsigned(user)>=2100) abort() ; + return NISTDigitImages_table[user+1]-NISTDigitImages_table[user]; + } + + int current_user; + NISTCharFile *current_file; + + private: + void get_cache(int user) { + if(user!=current_user) { + delete current_file; + current_file = new NISTCharFile(user,0); + current_user = user; + } + } + + public: + NISTDigitImages() { + ; + if(!NISTDigitImages_table) init_table(); + current_user=0; + current_file=new NISTCharFile(0,0); + ; + } + + ~NISTDigitImages() { + delete current_file; + } + + int length() {return NISTDigitImages_table[table_size-1];} + + int user(int i) { + return locate(i); + } + + CImage image(int i) { + int user = locate(i); + get_cache(user); + int offset = i-NISTDigitImages_table[user]; + return current_file->image(offset); + } + + int classification(int i) { + int user = locate(i); + get_cache(user); + int offset = i-NISTDigitImages_table[user]; + return current_file->classification(offset); + } +}; + +ImageDatabase *make_NISTDigitImages() { + return new NISTDigitImages(); +} + diff --git a/gcc/testsuite/g++.old-deja/g++.law/inline2.C b/gcc/testsuite/g++.old-deja/g++.law/inline2.C new file mode 100644 index 000000000000..2eb5b38f7e7e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/inline2.C @@ -0,0 +1,3601 @@ +// excess errors test - XFAIL - *-*-* +// Build don't link: +// Special g++ Options: -O2 +// GROUPS passed inlining +# 1 "NISTImages.cc" +# 1 "Vision.h" 1 + + + + + + + + + +extern "C" { +# 1 "/sym/gnu/lib/g++-include/stdio.h" 1 3 + + + + + + + + + + + + + + + + + + + + +#pragma interface + + + + + + + + + + + +# 1 "/sym/gnu/lib/g++-include/_G_config.h" 1 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# 33 "/sym/gnu/lib/g++-include/stdio.h" 2 3 + + +extern "C" { + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# 1 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/stdio.h" 1 3 + +# 1 "/sym/gnu/lib/g++-include/stdarg.h" 1 3 +extern "C" { +# 1 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/stdarg.h" 1 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# 1 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/va-sparc.h" 1 3 + + + + + + + + + + + +typedef char * __gnuc_va_list; + + + + + + + + + +# 79 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/va-sparc.h" 3 + + +# 32 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/stdarg.h" 2 3 + +# 77 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/stdarg.h" 3 + + + + + + +# 140 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/stdarg.h" 3 + + + + + +# 2 "/sym/gnu/lib/g++-include/stdarg.h" 2 3 + +} +# 2 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/stdio.h" 2 3 + + + + + + +extern struct _iobuf { + int _cnt; + unsigned char *_ptr; + unsigned char *_base; + int _bufsiz; + short _flag; + char _file; +} _iob[]; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +extern struct _iobuf *__hide_fopen (); +extern struct _iobuf *__hide_fdopen (); +extern struct _iobuf *__hide_freopen (); +extern struct _iobuf *__hide_popen (); +extern struct _iobuf *tmpfile(); +extern long __hide_ftell (); +extern char *fgets(); +extern char *gets(); +extern char *__hide_sprintf (); +extern char *ctermid(); +extern char *cuserid(); +extern char *__hide_tempnam (); +extern char *tmpnam(); + + + + + + +# 69 "/sym/gnu/lib/g++-include/stdio.h" 2 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +} + +extern "C" { + +int fclose(struct _iobuf *); +struct _iobuf * fdopen(int, const char*); +int fflush(struct _iobuf *); +int fgetc(struct _iobuf *); +char* fgets(char*, int, struct _iobuf *); +struct _iobuf * fopen(const char*, const char*); +int fprintf(struct _iobuf *, const char* ...); +int fputc(int, struct _iobuf *); +int fputs(const char*, struct _iobuf *); +int fread(void*, int , int , struct _iobuf *); + + + +struct _iobuf * freopen(const char*, const char*, struct _iobuf *); + +int fscanf(struct _iobuf *, const char* ...); +int fseek(struct _iobuf *, long, int); +long ftell(struct _iobuf *); +int fwrite(const void*, int , int , struct _iobuf *); +char* gets(char*); +int getw(struct _iobuf *); +int pclose(struct _iobuf *); +void perror(const char*); +struct _iobuf * popen(const char*, const char*); +int printf(const char* ...); +int puts(const char*); +int putw(int, struct _iobuf *); +int rewind(struct _iobuf *); +int scanf(const char* ...); +void setbuf(struct _iobuf *, char*); +void setbuffer(struct _iobuf *, char*, int); +int setlinebuf(struct _iobuf *); +int setvbuf(struct _iobuf *, char*, int, int ); +int sscanf(char*, const char* ...); +struct _iobuf * tmpfile(); +int ungetc(int, struct _iobuf *); +int vfprintf (...) ; +int vprintf (...) ; +char* sprintf (...) ; +char* vsprintf (...) ; + +extern int _filbuf (...) ; +extern int _flsbuf (...) ; + +} + + + + + + + + + + + + + + + + + + +# 11 "Vision.h" 2 + +# 1 "/usr/include/floatingpoint.h" 1 3 + + + + + + + + + + + + + + + + + +# 1 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/sys/ieeefp.h" 1 3 + + + + + + + + + + + + + + + + + +enum fp_direction_type + { + fp_nearest = 0, + fp_tozero = 1, + fp_positive = 2, + fp_negative = 3 + } ; + +# 34 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/sys/ieeefp.h" 3 + +# 43 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/sys/ieeefp.h" 3 + + +# 53 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/sys/ieeefp.h" 3 + +enum fp_precision_type + { + fp_extended = 0, + fp_single = 1, + fp_double = 2, + fp_precision_3 = 3 + } ; + + +# 73 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/sys/ieeefp.h" 3 + +enum fp_exception_type + { + fp_inexact = 0, + fp_division = 1, + fp_underflow = 2, + fp_overflow = 3, + fp_invalid = 4 + } ; + + +enum fp_class_type + { + fp_zero = 0, + fp_subnormal = 1, + fp_normal = 2, + fp_infinity = 3, + fp_quiet = 4, + fp_signaling = 5 + } ; + + +# 18 "/usr/include/floatingpoint.h" 2 3 + + + + +typedef float single; +typedef unsigned long extended[3]; + +typedef long double quadruple; + + + + + + + + +typedef unsigned fp_exception_field_type; + + + + +typedef int sigfpe_code_type; + +typedef void (*sigfpe_handler_type) (); + + + + + + + + +extern enum fp_direction_type fp_direction; + + + + +extern enum fp_precision_type fp_precision; + + + + +extern fp_exception_field_type fp_accrued_exceptions; + + + + + + + + + + + +typedef char decimal_string[512 ]; + + +typedef struct { + enum fp_class_type fpclass; + int sign; + int exponent; + decimal_string ds; + + + int more; + + + int ndigits; + + +} + decimal_record; + +enum decimal_form { + fixed_form, + + + + floating_form + +}; + +typedef struct { + enum fp_direction_type rd; + + enum decimal_form df; + int ndigits; +} + decimal_mode; + +enum decimal_string_form { + invalid_form, + whitespace_form, + fixed_int_form, + fixed_intdot_form, + fixed_dotfrac_form, + fixed_intdotfrac_form, + floating_int_form, + floating_intdot_form, + floating_dotfrac_form, + floating_intdotfrac_form, + inf_form, + infinity_form, + nan_form, + nanstring_form +}; + + + +extern void double_to_decimal(); +extern void quadruple_to_decimal(); +extern char *econvert(); +extern char *fconvert(); +extern char *gconvert(); +extern char *qeconvert(); +extern char *qfconvert(); +extern char *qgconvert(); + + + + + +extern sigfpe_handler_type ieee_handlers[5 ]; + + + + + + + +extern sigfpe_handler_type sigfpe(); + +extern void single_to_decimal(); +extern void extended_to_decimal(); + +extern void decimal_to_single(); +extern void decimal_to_double(); +extern void decimal_to_extended(); +extern void decimal_to_quadruple(); + +extern char *seconvert(); +extern char *sfconvert(); +extern char *sgconvert(); + +extern void string_to_decimal(); +extern void file_to_decimal(); +extern void func_to_decimal(); + + + +extern double atof(); + + + +extern int errno; + +extern double strtod(); + + +# 12 "Vision.h" 2 + +# 1 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/malloc.h" 1 3 + + + + + + + + + + + + + + + + +struct mallinfo { + int arena; + int ordblks; + int smblks; + int hblks; + int hblkhd; + int usmblks; + int fsmblks; + int uordblks; + int fordblks; + int keepcost; + + int mxfast; + int nlblks; + int grain; + int uordbytes; + int allocated; + int treeoverhead; +}; + +typedef void * malloc_t; + +extern malloc_t calloc( ); +extern void free( ); +extern malloc_t malloc( ); +extern malloc_t realloc( ); +extern int mallopt(); +extern struct mallinfo mallinfo(); + + +# 13 "Vision.h" 2 + +long time(long *); +int ieee_handler(); +} + +# 1 "/sym/gnu/lib/g++-include/std.h" 1 3 + + + + + + + + + + + + + + + + + + + + + + + +# 1 "/sym/gnu/lib/g++-include/stddef.h" 1 3 + + +extern "C" { + + + +# 1 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/stddef.h" 1 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + +# 41 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/stddef.h" 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef int ptrdiff_t; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef int int ; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef __wchar_t wchar_t; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# 7 "/sym/gnu/lib/g++-include/stddef.h" 2 3 + + + + +} + +# 24 "/sym/gnu/lib/g++-include/std.h" 2 3 + +# 1 "/sym/gnu/lib/g++-include/stdlib.h" 1 3 + + + + + + + +extern "C" { + +int abs(int); + + +void volatile abort(void); + + + + +double atof(const char*); +int atoi(const char*); +long atol(const char*); + +int atexit(auto void (*p) (void)); +int bsearch (const void *, const void *, int , + int , auto int (*ptf)(const void*, const void*)); +void* calloc(int , int ); +void cfree(void*); + + +void volatile exit(int); + + + + +char* fcvt(double, int, int*, int*); +void free(void*); +char* getenv(const char*); +int getopt(int, char * const *, const char*); +int getpw(int, char*); +char* gcvt(double, int, char*); +char* ecvt(double, int, int*, int*); +extern char** environ; + +long labs(long); +void* malloc(int ); +int malloc_usable_size(void*); +int putenv(const char*); +extern char* optarg; +extern int opterr; +extern int optind; +void qsort(void*, int , int , auto int (*ptf)(void*,void*)); +int rand(void); +void* realloc(void*, int ); +int setkey(const char*); +int srand(unsigned int); +double strtod(const char*, char**); +long strtol(const char*, char**, int); +unsigned long stroul(const char**, int); +int system(const char*); + +long random(void); +void srandom(int); +char* setstate(char*); +char* initstate(unsigned, char*, int); + +double drand48(void); +void lcong48(short*); +long jrand48(short*); +long lrand48(void); +long mrand48(void); +long nrand48(short*); +short* seed48(short*); +void srand48(long); + +char* ctermid(char*); +char* cuserid(char*); +char* tempnam(const char*, const char*); +char* tmpnam(char*); + +} + +# 25 "/sym/gnu/lib/g++-include/std.h" 2 3 + +# 1 "/sym/gnu/lib/g++-include/string.h" 1 3 + + + + + + + + + + + + + + +extern "C" { + +char* strcat(char*, const char*); +char* strchr(const char*, int); +int strcmp(const char*, const char*); +int strcoll(const char*, const char*); +char* strcpy(char*, const char*); +int strcspn(const char*, const char*); +char* strdup(const char*); + + + + +int strlen(const char*); +char* strncat(char*, const char*, int ); +int strncmp(const char*, const char*, int ); +char* strncpy(char*, const char*, int ); +char* strpbrk(const char*, const char*); +char* strrchr(const char*, int); +int strspn(const char*, const char*); +char* strstr(const char*, const char *); +char* strtok(char*, const char*); +int strxfrm(char*, const char*, int ); + +char* index(const char*, int); +char* rindex(const char*, int); +} + +# 1 "/sym/gnu/lib/g++-include/memory.h" 1 3 + + + + + + + +extern "C" { + +void* memalign (...) ; +void* memccpy (...) ; +void* memchr (...) ; +int memcmp (...) ; +void* memcpy (...) ; +void* memmove (...) ; +void* memset (...) ; +int ffs (...) ; +int getpagesize (...) ; +void* valloc (...) ; + +void bcopy (...) ; +int bcmp (...) ; +void bzero (...) ; +} + + + + + + + + + + + + + + +# 43 "/sym/gnu/lib/g++-include/string.h" 2 3 + + + +# 26 "/sym/gnu/lib/g++-include/std.h" 2 3 + + +# 1 "/sym/gnu/lib/g++-include/unistd.h" 1 3 + + + + + +extern "C" { + + + + + + + + + + + + + + + + + + +# 1 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/unistd.h" 1 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# 1 "/sym/gnu/lib/g++-include/sys/types.h" 1 3 + + +extern "C" +{ + + + + + + + + + + +# 1 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/sys/types.h" 1 3 + + + + + + + + + + + + + + + +# 1 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/sys/stdtypes.h" 1 3 + + + + + + + + + + + + + +typedef int sigset_t; + +typedef unsigned int speed_t; +typedef unsigned long tcflag_t; +typedef unsigned char cc_t; +typedef int pid_t; + +typedef unsigned short mode_t; +typedef short nlink_t; + +typedef long clock_t; +typedef long time_t; + + + + + + + + + + + + + + + + +# 16 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/sys/types.h" 2 3 + + + +# 1 "/usr/include/sys/sysmacros.h" 1 3 + + + + + + + + + + + + + + + + + + + +# 19 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/sys/types.h" 2 3 + + + + + +typedef unsigned char u_char; +typedef unsigned short u_short; +typedef unsigned int u_int; +typedef unsigned long u_long; +typedef unsigned short ushort; +typedef unsigned int uint; + + + + + + + + + + + + + + + +typedef struct _physadr_t { int r[1]; } *physadr_t; +typedef struct label_t { + int val[2]; +} label_t; + + + + + + + +typedef struct _quad_t { long val[2]; } quad_t; +typedef long daddr_t; +typedef char * caddr_t; +typedef unsigned long ino_t; +typedef short dev_t; +typedef long off_t; +typedef unsigned short uid_t; +typedef unsigned short gid_t; +typedef long key_t; +typedef char * addr_t; + + + + + + + + + + + + + + +typedef long fd_mask; + + + + + + + + + +typedef struct fd_set { + fd_mask fds_bits[(((256 )+(( (sizeof (fd_mask) * 8 ) )-1))/( (sizeof (fd_mask) * 8 ) )) ]; +} fd_set; + + + + + + + +# 113 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/sys/types.h" 3 + + + +# 15 "/sym/gnu/lib/g++-include/sys/types.h" 2 3 + + + + + + +} + + + + +# 73 "/sym/gnu/lib/gcc-lib/sparc-sun-sunos4.1/2.3.1/include/unistd.h" 2 3 + + +extern void _exit( ); +extern int access( ); +extern unsigned alarm( ); +extern int chdir( ); +extern int __hide_chmod ( ); +extern int __hide_chown ( ); +extern int close( ); +extern char *ctermid( ); +extern char *cuserid( ); +extern int dup( ); +extern int dup2( ); +extern int __hide_execl ( ); +extern int __hide_execle ( ); +extern int __hide_execlp ( ); +extern int execv( ); +extern int execve( ); +extern int execvp( ); +extern pid_t fork( ); +extern long fpathconf( ); +extern char *getcwd( ); +extern gid_t getegid( ); +extern uid_t geteuid( ); +extern gid_t getgid( ); +extern int getgroups( ); +extern char *getlogin( ); +extern pid_t getpgrp( ); +extern pid_t getpid( ); +extern pid_t getppid( ); +extern uid_t getuid( ); +extern int isatty( ); +extern int link( ); +extern off_t lseek( ); +extern long pathconf( ); +extern int pause( ); +extern int pipe( ); +extern int read( ); +extern int rmdir( ); +extern int __hide_setgid ( ); +extern int setpgid( ); +extern pid_t setsid( ); +extern int __hide_setuid ( ); +extern unsigned sleep( ); +extern long sysconf( ); +extern pid_t tcgetpgrp( ); +extern int tcsetpgrp( ); +extern char *ttyname( ); +extern int unlink( ); +extern int write( ); + + + +# 25 "/sym/gnu/lib/g++-include/unistd.h" 2 3 + + + + + + + + + + + + + + + +# 59 "/sym/gnu/lib/g++-include/unistd.h" 3 + + + +extern void volatile _exit(int); + + + + +extern unsigned alarm (...) ; +extern int brk (...) ; +extern int chdir (...) ; +extern int chmod (...) ; +extern int chown (const char*, unsigned short , unsigned short ); +extern int close (...) ; +extern char* crypt (...) ; +extern int dup (...) ; +extern int dup2 (...) ; +extern void encrypt (...) ; +extern int execl (const char*, const char *, ...); +extern int execle (const char*, const char *, ...); +extern int execlp (const char*, const char*, ...); +extern int exect (...) ; +extern int execv (...) ; +extern int execve (...) ; +extern int execvp (...) ; +extern int fchown (int, unsigned short , unsigned short ); +extern int fork (...) ; +extern int fsync (...) ; +extern int ftruncate (...) ; +extern char* getcwd (...) ; +extern int getdomainname (...) ; +extern int getdtablesize (...) ; +extern int getgroups (...) ; +extern unsigned short geteuid (...) ; +extern unsigned short getegid (...) ; +extern unsigned short getgid (...) ; +extern long gethostid (...) ; +extern int gethostname (...) ; +extern int getpgrp (...) ; +extern int getpid (...) ; +extern int getppid (...) ; +extern char* getlogin (...) ; +extern char* getpass (...) ; +extern unsigned short getuid (...) ; +extern int ioctl (int, int, ... ); +extern int isatty (...) ; +extern int link (...) ; +extern int mkstemp (...) ; +extern char* mktemp (...) ; +extern int nice (...) ; +extern int pause (...) ; +extern int pipe (...) ; +extern int readlink (...) ; +extern int rename (...) ; +extern int rmdir (...) ; +extern void* sbrk (...) ; +extern int syscall (...) ; +extern int setgid (unsigned short ); +extern int sethostname (...) ; + + + + +extern int setpgrp (...) ; + +extern int setregid (...) ; +extern int setreuid (...) ; +extern int setuid (unsigned short ); +extern unsigned sleep (...) ; +extern void swab (...) ; +extern int symlink (...) ; +extern long sysconf (...) ; +extern int truncate (...) ; +extern char* ttyname (...) ; +extern int ttyslot (...) ; + +extern int unlink (...) ; +extern int vfork (...) ; +extern int vadvise (...) ; +extern int vhangup (...) ; +extern long lseek (...) ; +extern int read (...) ; +extern int write (...) ; +extern int access (...) ; + +extern int flock (...) ; + + +} + + +# 28 "/sym/gnu/lib/g++-include/std.h" 2 3 + +# 1 "/sym/gnu/lib/g++-include/stdio.h" 1 3 + + + + + + + + + + + + + + + + + + +# 174 "/sym/gnu/lib/g++-include/stdio.h" 3 + +# 29 "/sym/gnu/lib/g++-include/std.h" 2 3 + +# 1 "/sym/gnu/lib/g++-include/errno.h" 1 3 + + +extern "C" { + + + + + +# 1 "/usr/include/errno.h" 1 3 + + + + + + + + + +# 1 "/usr/include/sys/errno.h" 1 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# 10 "/usr/include/errno.h" 2 3 + +extern int errno; + + +# 9 "/sym/gnu/lib/g++-include/errno.h" 2 3 + + + + +extern char* sys_errlist[]; +extern int sys_nerr; + +extern int errno; + +void perror(const char*); +char* strerr(int); + + +} + + +# 30 "/sym/gnu/lib/g++-include/std.h" 2 3 + +# 1 "/sym/gnu/lib/g++-include/fcntl.h" 1 3 + + +extern "C" { + + + + + + + + + + +# 1 "/usr/include/fcntl.h" 1 3 + + + + + +# 1 "/usr/include/sys/fcntlcom.h" 1 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +struct flock { + short l_type; + short l_whence; + long l_start; + long l_len; + short l_pid; + short l_xxx; +}; + + + +struct eflock { + short l_type; + short l_whence; + long l_start; + long l_len; + short l_pid; + short l_xxx; + long l_rpid; + long l_rsys; +}; + + + +# 1 "/sym/gnu/lib/g++-include/sys/stat.h" 1 3 + + +extern "C" +{ + + + + + + + + + +# 1 "/usr/include/sys/stat.h" 1 3 + + + + + + + + + + + +struct stat { + dev_t st_dev; + ino_t st_ino; + mode_t st_mode; + short st_nlink; + uid_t st_uid; + gid_t st_gid; + dev_t st_rdev; + off_t st_size; + time_t st_atime; + int st_spare1; + time_t st_mtime; + int st_spare2; + time_t st_ctime; + int st_spare3; + long st_blksize; + long st_blocks; + long st_spare4[2]; +}; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +int __hide_chmod ( ); +int fstat( ); +int mkdir( ); +int mkfifo( ); +int stat( ); +mode_t umask( ); + + + +# 14 "/sym/gnu/lib/g++-include/sys/stat.h" 2 3 + + + + + + +extern int chmod (...) ; +extern int stat (...) ; +extern int lstat (...) ; +extern int fstat (...) ; + + + + + + + + + + + + + + + + + + +} + + +# 149 "/usr/include/sys/fcntlcom.h" 2 3 + + +int __hide_open ( ); +int __hide_creat ( ); +int __hide_fcntl ( ); + + +# 6 "/usr/include/fcntl.h" 2 3 + + + + + +# 14 "/sym/gnu/lib/g++-include/fcntl.h" 2 3 + + + + + + + + +int fcntl(int, int, ...); +int creat (...) ; + +int open (...) ; + + +} + +# 31 "/sym/gnu/lib/g++-include/std.h" 2 3 + + +extern "C" { +int strcasecmp (...) ; +} + + +# 18 "Vision.h" 2 + +# 1 "/sym/gnu/lib/g++-include/math.h" 1 3 + + + + + + + + + + + + + + + + + + + + + +#pragma interface + + + + + + + + + + + +# 64 "/sym/gnu/lib/g++-include/math.h" 3 + +extern "C" { + +double acos(double); +double acosh(double); +double asin(double); +double asinh(double); +double atan(double); +double atan2(double, double); +double atanh(double); +double cbrt(double); +double ceil(double); +double copysign(double,double); +double cos(double); +double cosh(double); +double drem(double,double); +double erf(double); +double erfc(double); +double exp(double); +double expm1(double); +double fabs(double); +double finite(double); +double floor(double); +double fmod(double, double); +double frexp(double, int*); +double gamma(double); +double hypot(double,double); +double infnan(int); + + +int isinf(double); +int isnan(double); + +double j0(double); +double j1(double); +double jn(int, double); +double ldexp(double, int); +double lgamma(double); +double log(double); +double log10(double); +double log1p(double); +double logb(double); +double modf(double, double*); +double pow(double, double); +double rint(double); +double scalb(double, int); +double sin(double); +double sinh(double); +double sqrt(double); +double tan(double); +double tanh(double); +double y0(double); +double y1(double); +double yn(int, double); + +double aint(double); +double anint(double); +int irint(double); +int nint(double); +} + + + + + + + + +struct libm_exception +{ + int type; + char* name; + double arg1, arg2, retval; +}; + + + + + + + + +extern "C" int matherr(libm_exception*); + + + +# 1 "/sym/gnu/lib/g++-include/values.h" 1 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# 57 "/sym/gnu/lib/g++-include/values.h" 3 + + + + + + + + + + + + + + + +# 166 "/sym/gnu/lib/g++-include/values.h" 3 + + + + + + + + + +# 150 "/sym/gnu/lib/g++-include/math.h" 2 3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# 19 "Vision.h" 2 + + +# 1 "MiscUtilities.h" 1 + + + + + +# 1 "/sym/gnu/lib/g++-include/std.h" 1 3 + + + + + + + + + + + + + + + + + + + +# 37 "/sym/gnu/lib/g++-include/std.h" 3 + +# 6 "MiscUtilities.h" 2 + + + + + + + + + +inline int used_mem() { + struct mallinfo mi = mallinfo(); + return mi.usmblks+mi.uordblks; +} +inline volatile void abort() { + fprintf((&_iob[2]) ,"abort\n"); + exit(1); +} + +inline volatile void error(char *s) { + fprintf((&_iob[2]) ,"FATAL ERROR: "); + fprintf((&_iob[2]) ,"%s\n",s); + exit(1); +} +template <class Y> +struct NameValuePair { + char *name; + Y y; +}; + +template <class Y> +Y lookup(NameValuePair<Y> *data,char *name) { + while(data->name) { + if(!strcmp(data->name,name)) return data->y; + data++; + } + abort(); + return data->y; +} + +template <class T> +void swap(T &x,T &y) { + T temp = x; + x = y; + y = temp; +} + + +# 21 "Vision.h" 2 + +# 1 "Counted.h" 1 + + + + + +# 1 "/sym/gnu/lib/g++-include/std.h" 1 3 + + + + + + + + + + + + + + + + + + + +# 37 "/sym/gnu/lib/g++-include/std.h" 3 + +# 6 "Counted.h" 2 + + +template <class T> +struct Counted { + private: + int *count; + T *object; + T *operator&() { + return object; + } + void dec_count() { + if(!count) return; + (*count)--; + if(*count<=0) { + delete count; + delete object; + count=0; + object=0; + } + } + void inc_count() { + if(!count) return; + (*count)++; + } + public: + Counted() { + count=0; + object=0; + } + Counted(T *object):object(object) { + count = new int(1); + } + ~Counted() { + dec_count(); + } + Counted(Counted &other) { + count=other.count; + object=other.object; + inc_count(); + } + Counted &operator=(Counted &other) { + other.inc_count(); + dec_count(); + count=other.count; + object=other.object; + return *this; + } + + T &operator*() {if(!object) abort(); else return *object; return *object;} + T *operator->() {if(!object) abort(); else return object; return object;} + operator T&() {if(!object) abort(); else return *object; return *object;} + + +}; + + +# 22 "Vision.h" 2 + +# 1 "Art.h" 1 + + + + + + +extern "C" { void abort(); } + + + + + + + + + + + + +template <class X> +inline void art_initialize(X *,int) {} + +# 39 "Art.h" + + + + + + +template <class T> +class Art { +protected: + int mark_temp; + T *data; + int dims[1]; + void constructor(int d) { + if(d<0) abort() ; + mark_temp=0; + dims[0]=d; + if(d>0) { + data=new T[d]; + if(!data) abort() ; + } else data=0; + art_initialize(data,d); + } + void destructor() { + if(!data) return; + delete [] data; + mark_temp=0; + data=0; + dims[0]=0; + } + void copy(Art &other) { + int d0=dims[0]<?other.dims[0]; + for(int i=0;i<d0;i++) data[i]=other.data[i]; + } +public: + void copyclear(Art &other) { + dims[0]=other.dims[0]; + data=other.data; + other.dims[0]=0; + other.data=0; + } +private: + void copyconstructor(Art &other) { + mark_temp=0; + if(other.mark_temp) { + copyclear(other); + } else { + constructor(other.dims[0]); + copy(other); + } + } + public: + Art() {constructor(0);} + Art(int d) {constructor(d);} + Art(Art &other) {copyconstructor(other);} + ~Art() {destructor();} + + Art &operator=(Art &other) { + destructor(); + copyconstructor(other); + return *this; + } + int dim(int i) {return dims[i];} + T &operator()(int i) { + if(unsigned(i)>=unsigned(dims[0])) abort() ; + return data[i]; + } + T &sub(int i) {return data[i];} + void resize(int nd) { + if(nd<0) abort() ; + Art t(nd); + int limit=nd<?dims[0]; + for(int i=0;i<limit;i++) t.data[i]=data[i]; + t.mark_temp=1; + *this=t; + } + Art &temp() { mark_temp=1; return *this; } + T *pointer() {return data;} + void fill(T value) {for(int i=0;i<dims[0];i++) data[i]=value;} + + int length() {return dims[0];} + T &operator[](int i) {return operator()(i);} +}; + + + + + + + + +template <class T> +class Stk { +protected: + Art<T> stack; + int fill; +public: + Stk() {stack.resize(4); fill=0;} + Stk(Stk &other) { + stack=other.stack; + fill=other.fill; + } + int dim(int i) {return stack.dim(i);} + void push(T &element) { + if(fill>=stack.dim(0)) stack.resize(2*fill); + stack.sub(fill++)=element; + } + T &tos() { + return stack(fill-1); + } + T &pop() { + return stack(--fill); + } + T &operator()(int i) {return stack(i);} + T &sub(int i) {return stack.sub(i);} + void clear() { + stack.resize(0); + stack.resize(4); + fill=0; + } + void compact() { + stack.resize(fill+1); + } + Stk temp() { stack.temp(); return *this; } + T *pointer() {return stack.pointer();} + operator Art<T>&() {return stack;} + + int length() {return fill;} + T &operator[](int i) {return operator()(i);} +}; + + + + + +template <class T> +class Art2 { +protected: + int mark_temp; + T **data; + int dims[2]; + int total_length; + void constructor(int d0,int d1) { + if(d0<0||d1<0) abort() ; + mark_temp=0; + dims[0]=d0; + dims[1]=d1; + total_length=dims[0]*dims[1]; + if(d0>0) { + data=new T*[d0]; + if(!data) abort() ; + } else data=0; + if(d0>0&&d1>0) { + T *p=new T[d0*d1]; + if(!p) abort() ; + for(int i=0;i<d0;i++) data[i]=p+i*d1; + art_initialize(data[0],d0*d1); + } + } + void destructor() { + if(dims[0]<1) return; + if(!data) return; + delete [] data[0]; + delete [] data; + mark_temp=0; + data=0; + dims[0]=0; + dims[1]=0; + } + void copy(Art2 &other) { + int d0=dims[0]<?other.dims[0]; + int d1=dims[1]<?other.dims[1]; + for(int i=0;i<d0;i++) for(int j=0;j<d1;j++) + data[i][j]=other.data[i][j]; + } +public: + void copyclear(Art2 &other) { + dims[0]=other.dims[0]; + dims[1]=other.dims[1]; + total_length=dims[0]*dims[1]; + data=other.data; + other.dims[0]=0; + other.dims[1]=0; + other.total_length=0; + other.data=0; + } +private: + void copyconstructor(Art2 &other) { + mark_temp=0; + if(other.mark_temp) { + copyclear(other); + } else { + constructor(other.dims[0],other.dims[1]); + copy(other); + } + } + public: + Art2() {constructor(0,0);} + Art2(int d0,int d1) {constructor(d0,d1);} + Art2(Art2 &other) {copyconstructor(other);} + ~Art2() {destructor();} + + Art2 &operator=(Art2 &other) { + destructor(); + copyconstructor(other); + return *this; + } + int dim(int i) {return dims[i];} + T &operator()(int i,int j) { + if(unsigned(i)>=unsigned(dims[0])||unsigned(j)>=unsigned(dims[1])) + abort() ; + return data[i][j]; + } + T &sub(int i,int j) {return data[i][j];} + void resize(int nd0,int nd1) { + if(nd0<0||nd1<0) abort() ; + Art2 t(nd0,nd1); + int limit0=nd0<?dims[0]; + int limit1=nd1<?dims[1]; + for(int i=0;i<limit0;i++) for(int j=0;j<limit1;j++) t.data[i][j]=data[i][j]; + t.mark_temp=1; + *this=t; + } + Art2 &temp() { mark_temp=1; return *this; } + T **pointer() {return data;} + void fill(T value) { + for(int i=0;i<dims[0];i++) for(int j=0;j<dims[1];j++) + data[i][j]=value; + } + + + + int length() {return total_length;} + T &sub(int i) {return data[0][i];} + T &operator()(int i) { + if(unsigned(i)>=total_length) abort() ; + return data[0][i]; + } +}; + +template <class T> +inline void art_swap(T &x,T &y) { + T temp = x; + x = y; + y = temp; +} + +template <class T> +inline void reverse(Art<T> &a) { + int i; + for(i=a.length()/2;i>=0;i--) art_swap(a.sub(i),a.sub(a.length()-i-1)); +} + +template <class T> +inline void reverse(Stk<T> &a) { + reverse(a.stack); +} + +template <class T> +inline void bag_remove(Stk<T> &a,T &element) { + for(int i=0;i<a.length()-1;i++) { + if(a(i)==element) { + a.sub(i)=a.tos(); + a.pop(); + } + } + if(i<a.length()&&a.sub(i)==element) a.pop(); +} + +template <class T> +inline void ordered_remove(Stk<T> &a,T &element) { + int source=0,dest=0; + while(source<a.length()) { + if(a(source)!=element) { + a(dest)=a(source); + dest++; + } + source++; + } + a.stack.resize(dest); +} + +template <class T> +inline Art<T> concatenate(Art<T> &a,Art<T> &b) { + int i,k; + k=a.length(); + Art<T> result(k+b.length()); + for(i=0;i<a.length();i++) result.sub(i)=a.sub(i); + for(i=0;i<b.length();i++) result.sub(i+k)=b.sub(i); + return result.temp(); +} + +template <class T> +inline Stk<T> concatenate(Stk<T> &a,Stk<T> &b) { + int i; + Stk<T> result; + for(i=0;i<a.length();i++) result.push(a.sub(i)); + for(i=0;i<b.length();i++) result.push(b.sub(i)); + return result.temp(); +} + + +# 23 "Vision.h" 2 + +# 1 "Geo.h" 1 + + + + + +# 1 "/sym/gnu/lib/g++-include/math.h" 1 3 + + + + + + + + + + + + + + + + + + + +# 215 "/sym/gnu/lib/g++-include/math.h" 3 + +# 6 "Geo.h" 2 + + +extern "C" { +void abort(); +} + + + + + + + + + + + + + + +template <class T,int n> +class vec { +protected: + T v[n]; +public: + int length() {return n;} + int dim(int) {return n;} + vec() {} + vec(T v0) { v[0]=v0; } + vec(T v0,T v1) { v[0]=v0; v[1]=v1; } + vec(T v0,T v1,T v2) { v[0]=v0; v[1]=v1; v[2]=v2; } + vec(T v0,T v1,T v2,T v3) { v[0]=v0; v[1]=v1; v[2]=v2; v[3]=v3; } + vec(T v0,T v1,T v2,T v3,T v4) { v[0]=v0; v[1]=v1; v[2]=v2; v[3]=v3; v[4]=v4; } + + T &operator[](int i) {return v[i];} + T &sub(int i) {return v[i];} + T &operator()(int i) { + if(unsigned(i)>=n) abort(); + return v[i]; + } + + + + + + + + + + + + + T operator*(vec &other) { + T result=0; + for(int i=0;i<n;i++) result=result+sub(i)*other.sub(i); + return result; + } + + + vec operator-() { + vec result; + for(int i=0;i<n;i++) result.sub(i)= -sub(i); + return result; + } + vec operator*(T other) { + vec result; + for(int i=0;i<n;i++) result.sub(i)=sub(i)*other; + return result; + } + vec operator/(T other) { + vec result; + for(int i=0;i<n;i++) result.sub(i)=sub(i)/other; + return result; + } + vec operator+(vec &other) { + vec result; + for(int i=0;i<n;i++) result.sub(i)=sub(i)+other.sub(i); + return result; + } + vec operator-(vec &other) { + vec result; + for(int i=0;i<n;i++) result.sub(i)=sub(i)-other.sub(i); + return result; + } + vec operator<?(vec &other) { + vec result; + for(int i=0;i<n;i++) result.sub(i)=sub(i)<?other.sub(i); + return result; + } + vec operator>?(vec &other) { + vec result; + for(int i=0;i<n;i++) result.sub(i)=sub(i)>?other.sub(i); + return result; + } + + + int operator==(vec &other) { + for(int i=0;i<n;i++) if(sub(i)!=other.sub(i)) return 0; + return 1; + } + int operator!=(vec &other) { + for(int i=0;i<n;i++) if(sub(i)!=other.sub(i)) return 1; + return 0; + } + int operator<(vec &other) { + for(int i=0;i<n;i++) if(sub(i)>=other.sub(i)) return 0; + return 1; + } + int operator>(vec &other) { + for(int i=0;i<n;i++) if(sub(i)<=other.sub(i)) return 0; + return 1; + } + int operator<=(vec &other) { + for(int i=0;i<n;i++) if(sub(i)>other.sub(i)) return 0; + return 1; + } + int operator>=(vec &other) { + for(int i=0;i<n;i++) if(sub(i)<other.sub(i)) return 0; + return 1; + } +}; + +template <class T> +inline float euclidean_norm(T &v) { + float total=0.0; + for(int i=0;i<v.dim(0);i++) total+=v(i)*v(i); + return sqrt(total); +} + +template <class T> +inline float euclidean_distance(T &u,T &v) { + float total=0.0; + for(int i=0;i<u.dim(0);i++) { + float d=u(i)-v(i); + total+=d*d; + } + return sqrt(total); +} + + + + + +template <class T,int n> +class mat:vec<T,n*n> { +protected: +public: + int dim(int) {return n;} + T &operator[](int i) {return v[i];} + T &sub(int i,int j) {return v[i*n+j];} + T &operator()(int i,int j) { + if(unsigned(i)>=n||unsigned(j)>=n) abort(); + return sub(i,j); + } + mat operator*(mat &other) { + mat result; + for(int i=0;i<n;i++) for(int j=0;j<n;j++) { + T total=0; + for(int k=0;k<n;k++) total=total+sub(i,k)*other.sub(k,j); + result.sub(i,j)=total; + } + return result; + } + vec<T,n> operator*(vec<T,n> &other) { + vec<T,n> result; + for(int i=0;i<n;i++) { + T total=0; + for(int k=0;k<n;k++) total=total+sub(i,k)*other.sub(k); + result.sub(i)=total; + } + return result; + } +}; + + + + + +typedef vec<float,2> vec2; +typedef vec<float,3> vec3; +typedef vec<float,4> vec4; + +typedef mat<float,2> mat2; +typedef mat<float,3> mat3; +typedef mat<float,4> mat4; + +typedef vec<int,2> ivec2; + + + + + + + +inline float norm_angle(float p) { + while(p<0) p+=2* 3.14159265358979323846 ; while(p>=2* 3.14159265358979323846 ) p-=2* 3.14159265358979323846 ; return p; +} +inline float norm_angle0(float p) { + while(p<- 3.14159265358979323846 ) p+=2* 3.14159265358979323846 ; while(p>= 3.14159265358979323846 ) p-=2* 3.14159265358979323846 ; return p; +} +inline float norm_orientation(float p) { + while(p<0) p+= 3.14159265358979323846 ; while(p>= 3.14159265358979323846 ) p-= 3.14159265358979323846 ; return p; +} +inline float norm_orientation0(float p) { + while(p<- 3.14159265358979323846 /2) p+= 3.14159265358979323846 ; while(p>= 3.14159265358979323846 /2) p-= 3.14159265358979323846 ; return p; +} +inline float orientation_difference(float p,float q) { + fabs(norm_orientation0(p-q)); +} + + + + + + + + + + + + + + +inline vec2 cmul(vec2 &p,vec2 &q) { + return vec2(p.sub(0)*q.sub(0)-p.sub(1)*q.sub(1), + p.sub(0)*q.sub(1)+p.sub(1)*q.sub(0)); +} + +inline vec2 cdiv(vec2 &p,vec2 &q) { + float n=q*q; + return vec2((p.sub(0)*q.sub(0)+p.sub(1)*q.sub(1))/n, + (p.sub(1)*q.sub(0)-p.sub(0)*q.sub(1))/n); +} + +inline vec2 csqrt(vec2 &x) { + if (x.sub(0)==0.0&&x.sub(1)==0.0) + return vec2(0.0,0.0); + else { + float a=sqrt((fabs(x.sub(0))+hypot(x.sub(0),x.sub(1)))*0.5); + float b=0.5*(x.sub(1)/a); + if(x.sub(0)>0.0) return vec2(a, b); + else if(x.sub(1)>=0.0) return vec2(a,b); + else return vec2(-a,-b); + } +} +inline vec2 cpow(vec2& x, double p) { + float h=hypot(x.sub(0),x.sub(1)); + if (h<=0.0) abort(); + float lr=pow(h,p); + float a=atan2(x.sub(1),x.sub(0)); + float li=p*a; + return vec2(lr*cos(li),lr*sin(li)); +} + + + +inline float cross(vec2 p,vec2 q) { + return p.sub(0)*q.sub(1)-p.sub(1)*q.sub(0); +} + + + + + +struct TRS2 { + vec2 t; + vec2 r; + TRS2(vec2 t=vec2(0.0,0.0),vec2 r=vec2(1.0,0.0)):t(t),r(r) { + } + vec2 operator()(vec2 &arg) { + return cmul(r,arg)+t; + } + float rotation() { + return atan2(r(1),r(0)); + } +}; + + + +# 24 "Vision.h" 2 + + + + +# 1 "VisionTypes.h" 1 + + + + +typedef Art2<float> FImage; +typedef Art2<int> IImage; +typedef Art2<unsigned char> CImage; + +struct FImageOp {virtual FImage operator()(FImage &) = 0;}; +struct FImageOp2 {virtual FImage operator()(FImage &,FImage &) = 0;}; +struct CImageOp {virtual CImage operator()(CImage &) = 0;}; +struct CImageOp2 {virtual CImage operator()(CImage &,CImage &) = 0;}; + + + + + +struct PFeature { + ivec2 p; + float a; + short group; + short type; + PFeature() {} + PFeature(ivec2 p,float a,int group,int type):p(p),a(a),group(group),type(type) {} +}; + +typedef Stk<PFeature> PFeatureStk; + +struct FIExtractor {virtual PFeatureStk operator()(FImage &) = 0;}; +struct CIExtractor {virtual PFeatureStk operator()(CImage &) = 0;}; +# 28 "Vision.h" 2 + +# 1 "ImageDatabase.h" 1 + + + + + +# 1 "Art.h" 1 + + +# 339 "Art.h" + +# 6 "ImageDatabase.h" 2 + + +typedef Art2<unsigned char> CImage; + + + + + + + + +struct ImageDatabase { + + + + + virtual int length() = 0; + virtual int nclassifications() = 0; + virtual int nusers() = 0; + + + + + virtual int classification(int offset) = 0; + virtual int user(int offset) = 0; + + virtual CImage cimage(int offset) {abort();} + virtual PFeatureStk features(int offset) {abort();} + + + + + + + virtual int user_offset(int user) = 0; + virtual int user_length(int user) = 0; +}; + +ImageDatabase *make_NISTDigitImages(); + + + + + +struct ImageDatabaseIterator { + virtual int done() = 0; + virtual void next() = 0; + virtual operator int() = 0; + virtual void mark_upto_here() {} +}; + +ImageDatabaseIterator *make_IDI_Sequential(ImageDatabase *digits,int current,int stride); +ImageDatabaseIterator *make_IDI_OnePerUser(ImageDatabase *digits,int current); +ImageDatabaseIterator *make_IDI_FromFile(char *name); + + +# 29 "Vision.h" 2 + + + +# 1 "NISTImages.cc" 2 + + + + + + + + + + +# 1 "/sym/gnu/lib/g++-include/std.h" 1 3 + + + + + + + + + + + + + + + + + + + +# 37 "/sym/gnu/lib/g++-include/std.h" 3 + +# 11 "NISTImages.cc" 2 + +# 1 "Art.h" 1 + + +# 339 "Art.h" + +# 12 "NISTImages.cc" 2 + + +extern "C" { +# 1 "./nist/ihead.h" 1 + + + + + + + + + + + + + + +typedef struct ihead{ + char id[ 80 ]; + char created[ 26 ]; + char width[ 8 ]; + char height[ 8 ]; + char depth[ 8 ]; + char density[ 8 ]; + char compress[ 8 ]; + char complen[ 8 ]; + char align[ 8 ]; + char unitsize[ 8 ]; + char sigbit; + char byte_order; + char pix_offset[ 8 ]; + char whitepix[ 8 ]; + char issigned; + char rm_cm; + char tb_bt; + char lr_rl; + char parent[ 80 ]; + char par_x[ 8 ]; + char par_y[ 8 ]; +}IHEAD; + + + + + + + + + + + + + + + + + + + + + +# 15 "NISTImages.cc" 2 + +int readihdrfile(); + +} + +typedef Art2<unsigned char> CImage; + +Stk<char*> mis_files; + +extern "C" { + char *re_comp(char *); + int re_exec(char *); +} + +struct NISTCharFile { + private: + NISTCharFile(NISTCharFile &); + void operator=(NISTCharFile &); + public: + IHEAD *bit_header; + int bit_w,bit_h; + char *bit_data; + int field_w,field_h; + Stk<int> classes; + + static void maybe_read_mis_files() { + if(mis_files.length()>0) return; + struct _iobuf *stream = fopen("/com/nist/mis-files" ,"r"); + if(!stream) abort() ; + char buf[1024]; + while(fgets(buf,sizeof buf,stream)) { + buf[strlen(buf)-1]='\0'; + mis_files.push(strdup(buf)); + } + fclose(stream); + } + + static char *find_matching_mis_file_prefix(char *pattern) { + if(re_comp(pattern)) abort() ; + for(int i=0;i<mis_files.length();i++) { + if(re_exec(mis_files(i))) break; + } + if(i<mis_files.length()) return mis_files(i); + else return 0; + } + + static int part_of_user(int user) { + int part; + if(user<500) part=0; + else if(user<1000) part=1; + else if(user<1500) part=2; + else part=3; + return part; + } + + static char type_of_itype(int itype) { + char type; + switch(itype) { + case 0: type='d'; break; + case 1: type='u'; break; + case 2: type='l'; break; + default: abort() ; + }; + return type; + } + + NISTCharFile(int user,char itype) { + maybe_read_mis_files(); + int type = type_of_itype(itype); + int part = part_of_user(user); + + char buf[512]; + sprintf(buf,"/com/nist3/data/" "hsf_%d/f%04d_.*/%c%04d_.*",part,user,type,user); + char *prefix = find_matching_mis_file_prefix(buf); + ; + + if(!prefix) { + bit_w = 0; + bit_h = 0; + field_w = 0; + field_h = 0; + return; + } + + char file[512]; + + strcpy(file,prefix); strcat(file,".mis"); + if(!readihdrfile(file,&bit_header,&bit_data,&bit_w,&bit_h)) + abort() ; + field_w=atoi(bit_header->par_x); + field_h=atoi(bit_header->par_y); + + strcpy(file,prefix); strcat(file,".cls"); + struct _iobuf *stream = fopen(file,"r"); + if(!stream) + abort() ; + int total=atoi(fgets(buf,sizeof buf,stream)); + if(total!=bit_h/field_h) + abort() ; + while(fgets(buf,sizeof buf,stream)) classes.push(strtol(buf,0,16)); + fclose(stream); + } + + ~NISTCharFile() { + free(bit_header); + free(bit_data); + } + + int length() { + return bit_h/field_h; + } + + CImage image(int i) { + ; + CImage result(field_w,field_h); + int bit_w8=bit_w/8; + int offset=i*field_h; + if(offset>=bit_h) abort() ; + int i,j; + + + for(i=0;i<field_w;i++) for(j=0;j<field_h;j++) { + int jj=j+offset; + result(i,field_h-j-1)=(!!(bit_data[bit_w8*jj+(i>>3)]&(1<<(7-i&7)))) ; + } + + return result.temp(); + } + + int classification(int i) { + return classes(i); + } +}; + +int *NISTDigitImages_table; + +struct NISTDigitImages:ImageDatabase { + private: + NISTDigitImages(NISTDigitImages&); + void operator=(NISTDigitImages&); + public: + enum {table_size=2101}; + + int nclassifications() {return 10;} + int nusers() {return 2200;} + + static void init_table() { + struct _iobuf *stream=fopen("/com/nist/nist-digits" ,"r"); + NISTDigitImages_table = new int[table_size]; + if(!stream) abort() ; + int i=1; + while(fscanf(stream,"%d",&NISTDigitImages_table[i])==1) i++; + if(i!=table_size) abort() ; + fclose(stream); + int total=0; + for(i=1;i<table_size;i++) NISTDigitImages_table[i]+=NISTDigitImages_table[i-1]; + } + + static int locate(int v) { + int low=0; + int high=table_size; + if(v>=NISTDigitImages_table[table_size-1]) abort() ; + while(low+1<high) { + int mid=(low+high)/2; + if(NISTDigitImages_table[mid]<=v) low=mid; + else high=mid; + } + while(low<table_size-1&&NISTDigitImages_table[low+1]<=v) low++; + return low; + } + + int user_offset(int user) { + if(unsigned(user)>=2100) abort() ; + return NISTDigitImages_table[user]; + } + + int user_length(int user) { + if(unsigned(user)>=2100) abort() ; + return NISTDigitImages_table[user+1]-NISTDigitImages_table[user]; + } + + int current_user; + NISTCharFile *current_file; + + private: + void get_cache(int user) { + if(user!=current_user) { + delete current_file; + current_file = new NISTCharFile(user,0); + current_user = user; + } + } + + public: + NISTDigitImages() { + ; + if(!NISTDigitImages_table) init_table(); + current_user=0; + current_file=new NISTCharFile(0,0); + ; + } + + ~NISTDigitImages() { + delete current_file; + } + + int length() {return NISTDigitImages_table[table_size-1];} + + int user(int i) { + return locate(i); + } + + CImage image(int i) { + int user = locate(i); + get_cache(user); + int offset = i-NISTDigitImages_table[user]; + return current_file->image(offset); + } + + int classification(int i) { + int user = locate(i); + get_cache(user); + int offset = i-NISTDigitImages_table[user]; + return current_file->classification(offset); + } +}; + +ImageDatabase *make_NISTDigitImages() { + return new NISTDigitImages(); +} + diff --git a/gcc/testsuite/g++.old-deja/g++.law/inline4.C b/gcc/testsuite/g++.old-deja/g++.law/inline4.C new file mode 100644 index 000000000000..c6a15a9ad8f5 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/inline4.C @@ -0,0 +1,20 @@ +// GROUPS passed inlining +// inline file +// Message-Id: <9306020823.AA14027@joker> +// From: stefan@mpi-sb.mpg.de +// Subject: gcc-2.4.2 template function bug (1) +// Date: Wed, 2 Jun 93 10:23:14 +0200 + +extern "C" int printf (const char *, ...); + +template <class T> inline T func(const T& x) { return x; } + +inline int func(const int& x) { return x; } + + +main() +{ int x; + func(x); + printf ("PASS\n"); + } + diff --git a/gcc/testsuite/g++.old-deja/g++.law/inline6.C b/gcc/testsuite/g++.old-deja/g++.law/inline6.C new file mode 100644 index 000000000000..f5306798bdec --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/inline6.C @@ -0,0 +1,17 @@ +// Build don't link: +// GROUPS passed inlining +// inline file +// Message-Id: <199307162240.AA04019@world.std.com> +// From: kol@world.std.com (Nikolay Yatsenko) +// Subject: g++ bug: crash with extern C friend +// Date: Fri, 16 Jul 1993 18:40:48 -0400 + +inline void Ignore(){} + +extern "C" void foo() {} // but without extern C g++ compiles it + +struct A +{ + void f() {Ignore();} + friend void foo (); +}; diff --git a/gcc/testsuite/g++.old-deja/g++.law/inline7.C b/gcc/testsuite/g++.old-deja/g++.law/inline7.C new file mode 100644 index 000000000000..0a1d373d44e7 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/inline7.C @@ -0,0 +1,13 @@ +// Build don't link: +// GROUPS passed inlining + template <class Type> +struct A { + typedef int X; + A() {} + virtual ~A() { } +}; + template <class Type> +struct B : public A<Type> { + B() { } +}; +B<int>::X x; diff --git a/gcc/testsuite/g++.old-deja/g++.law/memoized1.C b/gcc/testsuite/g++.old-deja/g++.law/memoized1.C new file mode 100644 index 000000000000..16e63e2161fd --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/memoized1.C @@ -0,0 +1,28 @@ +// Build don't link: +// Special g++ Options: -fsave-memoized +// GROUPS passed memoized +class CArray +{ +public: + CArray(); +}; +class CBTree : public CArray +{ +}; +class CData +{ +public: + virtual ~CData(); +}; +class CStr : public CData +{ + inline int Read(); + inline int Write() const; +}; +class CResource : private CBTree +{ + struct SResourceNode + { + CStr xKey; + }; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.law/mentor1.C b/gcc/testsuite/g++.old-deja/g++.law/mentor1.C new file mode 100644 index 000000000000..a9362e07da84 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/mentor1.C @@ -0,0 +1,21 @@ +// Build don't link: +// Special g++ Options: -O +// GROUPS passed mentor +struct Word { + struct S1 *p1; +}; +struct S1 { + Word o; + void shift_left(int delta, int ct); +}; +inline void S1::shift_left(int delta, int ct) +{ + int cnt = ct; + for (S1 *to_p = this, *from_p = to_p + delta; cnt--;) *to_p++ = *from_p++; +} + +void dispose_t(S1 *tp, int from_index, int ct, const int d_last_t) +{ + int new_ct = d_last_t + 1 - ct; + tp[0].o.p1[from_index].shift_left(ct, new_ct - from_index); +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/missed-error1.C b/gcc/testsuite/g++.old-deja/g++.law/missed-error1.C new file mode 100644 index 000000000000..50accb55440f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/missed-error1.C @@ -0,0 +1,11 @@ +// Build don't link: +// GROUPS passed missed-error +// missed-error file +// From: John Carr <jfc@Athena.MIT.EDU> +// Date: Tue, 02 Feb 1993 07:38:53 EST +// Subject: Re: g++ ignores language context of function pointers +// Message-ID: <9302021238.AA01513@Achates.MIT.EDU> + + typedef void (*pfv2)(double, double); + extern "C" { typedef void (*pfv3)(double, double); }// ERROR - , XFAIL *-*-* + diff --git a/gcc/testsuite/g++.old-deja/g++.law/missed-error2.C b/gcc/testsuite/g++.old-deja/g++.law/missed-error2.C new file mode 100644 index 000000000000..c8768055d933 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/missed-error2.C @@ -0,0 +1,26 @@ +// Build don't link: +// GROUPS passed missed-error +// missed-error file +// From: ndc!don@csvax.cs.caltech.edu (Don Erway) +// Date: Thu, 21 May 92 15:40:45 PDT +// Subject: More on [g++ 2.1 : overloaded function selection incorrect] +// Message-ID: <9205212240.AA17934@ndc.com> + +#include <iostream.h> + +inline int max(int a, int b) {return a > b ? a : b;}; // ERROR - candidate +inline double max(double a, double b) {return a > b ? a : b;}; // ERROR - candidate + +main() { + static void foo(int i, int j, double x, double y) ;// ERROR - .* + + foo(4, -37, 14.39, 14.38); +} + +static void foo(int i, int j, double x, double y) { // ERROR - extern + + cout << "Max(int): " << max(i,j) << " Max(double): " << +max(x,y) << '\n'; + cout << "Max(int, double): " << max(i, y) << '\n';// ERROR - +} + diff --git a/gcc/testsuite/g++.old-deja/g++.law/missed-error3.C b/gcc/testsuite/g++.old-deja/g++.law/missed-error3.C new file mode 100644 index 000000000000..017ce5dd4200 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/missed-error3.C @@ -0,0 +1,124 @@ +// Build don't link: +// GROUPS passed missed-error +// missed-error file +// From: Neil Wilson <csf004@cch.coventry.ac.uk> +// Date: Tue, 28 Apr 92 13:53:54 WET DST +// Subject: g++ version 2.1 bugs +// Message-ID: <15717.9204281253@cch.coventry.ac.uk> + + +// enum bool { FALSE = 0, TRUE = 1 }; + +typedef int T; + +class Traversable { +public: + virtual const T item() const = 0; + virtual const bool off() const = 0; + virtual ~Traversable() { }; +}; + +class Chain : public Traversable { +public: + virtual const int count() const = 0; + virtual const bool empty() const = 0; + virtual void forth() const = 0; + virtual const bool isfirst() const = 0; + virtual const bool islast() const = 0; + virtual const int position() const = 0; + virtual const T first() const = 0; + virtual const T last() const = 0; + virtual const T i_th(const int index) const = 0; + virtual void start() const = 0; + virtual void back() const = 0; + virtual void finish() const = 0; + virtual void move(const int index) const = 0; + virtual void go(const int index) const = 0; + virtual void put(const T value) = 0; + virtual void put_i_th(const T value, const int index) = 0; + virtual void swap(const int index) = 0; + virtual void wipe_out() = 0; +}; +class List : public Chain { +protected: + int item_count; + int cursor_position; + virtual void go_offleft() const = 0; + virtual void go_offright() const = 0; + virtual void copy(const List& other) = 0; +public: + List() : item_count(0), cursor_position(0) { }; + virtual const int count() const; + virtual const bool empty() const; + virtual const bool isfirst() const; + virtual const bool islast() const; + virtual const bool offleft() const; + virtual const bool offright() const; + virtual const bool off() const; + virtual const int position() const; + virtual const T first() const; + virtual const T last() const; + virtual const T i_th(const int index) const; + virtual void start() const; + virtual void forth() const; + virtual void back() const; + virtual void finish() const; + virtual void move(const int index) const; + virtual void go(const int index) const; + friend const bool operator==(const List& left, + const List& right); + friend const bool operator!=(const List& left, + const List& right); + virtual void put_i_th(const T value, const int index); + virtual void swap(const int index); +}; +typedef int T; +class Array { +private: + int lower_index; + int upper_index; + T *array; +protected: + virtual void allocate(const int minindex, const int maxindex); + virtual void copy(const Array&other); +public: + Array(const int minindex, const int maxindex); + Array(const Array& other); + virtual const int count() const; + virtual const int lower() const; + virtual const int upper() const; + virtual const T item(const int index) const; + const T Array::operator[](const int index); // ERROR - qualification ignored + virtual const bool valid_index(const int index) const; + virtual const bool empty() const; + friend const bool operator==(const Array& left, const Array& right); + friend const bool operator!=(const Array& left, const Array& right); + virtual void put(const T value, const int index); + virtual void wipe_out(); + Array& operator=(const Array& other); + virtual ~Array(); +}; +class Fixed_List: public List, private Array { +protected: + virtual void go_offleft() const; + virtual void go_offright() const; + virtual void copy(const List& other); +public: + Fixed_List(const List& other); + Fixed_List(const int size): Array(1, size) { }; + virtual const bool empty() const; + virtual const int count() const; + virtual const T item() const; + virtual const T i_th(const int index) const; + virtual void move(const int index) const; + virtual void put(const T value); + virtual void put_i_th(const T value, const int index); + virtual void wipe_out() { }; + Fixed_List& operator=(const List& other); +}; + +void Fixed_List::go_offleft() const +{ + cursor_position = 0;// ERROR - +}; + diff --git a/gcc/testsuite/g++.old-deja/g++.law/missing1.C b/gcc/testsuite/g++.old-deja/g++.law/missing1.C new file mode 100644 index 000000000000..e6505f578a52 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/missing1.C @@ -0,0 +1,12 @@ +// Build don't link: +// GROUPS passed missing +// missing file +// Message-Id: <9207100259.AA11702@quaestor> +// From: adam@inference.com (David Adam) +// Subject: G++ does not allow parens around declarators. +// Date: Thu, 9 Jul 92 19:59:51 PDT + +void foo() +{ + long (bar)[5]; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/nest1.C b/gcc/testsuite/g++.old-deja/g++.law/nest1.C new file mode 100644 index 000000000000..e8fa80ca9f44 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/nest1.C @@ -0,0 +1,15 @@ +// Build don't link: +// GROUPS passed nest +// nest file +// From: gs4t@virginia.edu (Gnanasekaran Swaminathan) +// Date: Wed, 30 Dec 1992 20:38:07 GMT +// Subject: Local type names bug in g++ 2.3.3 +// Message-ID: <1992Dec30.203807.17504@murdoch.acc.Virginia.EDU> + +typedef char* T; // ERROR - previous declaration + +struct Y { + T a; + typedef long T; // error. See ARM p189-191 for details// ERROR - + T b; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.law/nest2.C b/gcc/testsuite/g++.old-deja/g++.law/nest2.C new file mode 100644 index 000000000000..adc055683323 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/nest2.C @@ -0,0 +1,13 @@ +// Build don't link: +// GROUPS passed nest +struct B +{ + class B_I { }; +}; + +struct D : public B +{ + B_I foo; + class I : public B_I { }; +}; + diff --git a/gcc/testsuite/g++.old-deja/g++.law/nest3.C b/gcc/testsuite/g++.old-deja/g++.law/nest3.C new file mode 100644 index 000000000000..405a1604250a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/nest3.C @@ -0,0 +1,25 @@ +// Build don't link: +// GROUPS passed nest +#include <iostream.h> + +struct inner { + static void f() { cout << "inner::f()\n";} +}; + +struct outer { + + struct inner { + static void f() { cout << "outer::inner::f()\n";} + }; + + static void f() { + inner::f(); //call of outer::inner::f() + ::inner::f(); //(try to) call inner::f() => parse error + } +}; + +main() { + outer::f(); + cout << endl; + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/nest4.C b/gcc/testsuite/g++.old-deja/g++.law/nest4.C new file mode 100644 index 000000000000..183442d61db8 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/nest4.C @@ -0,0 +1,20 @@ +// Build don't link: +// GROUPS passed nest +// nest file +// From: Neal Young <ney@princeton.edu> +// Date: Mon, 11 Oct 93 17:03:59 EDT +// Subject: g++ 2.4.5 bug report: local class decl can't access local static var +// Message-ID: <9310112103.AA06326@cs> + +void f() +{ + static int s; + + struct local { + int j() { return s; } // should be okay, see 1991 ref. man. r.9.8 + }; +} + +main() +{ +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/nest5.C b/gcc/testsuite/g++.old-deja/g++.law/nest5.C new file mode 100644 index 000000000000..99e8508e852c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/nest5.C @@ -0,0 +1,17 @@ +// Build don't link: +// GROUPS passed nest +// nest file +// From: tal@vlsi.cs.caltech.edu +// Date: Mon, 11 Oct 93 16:26:02 -0700 +// Subject: Serious bug: g++2.4.5 -Doesn't support local classes +// Message-ID: <9310112325.AA13386@vlsi.cs.caltech.edu> + +void foo() { + class Wrapper { + public: + void F (void * Wrapperptr) + { + Wrapper * wrapptr = ( Wrapper *) Wrapperptr; + } + }; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/operators1.C b/gcc/testsuite/g++.old-deja/g++.law/operators1.C new file mode 100644 index 000000000000..fa4c10cf3b92 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/operators1.C @@ -0,0 +1,27 @@ +// GROUPS passed operators +// opr-conv file +// Message-Id: <199301040217.AA04377@cypress.ucsc.edu> +// From: "Dean R. E. Long" <dlong@cse.ucsc.edu> +// Subject: conversion operator bug? +// Date: Sun, 3 Jan 1993 18:17:20 -0800 + +#include <stdio.h> +class B {}; + +class A { + B *p; +public: + A() { p = 0; } + operator B * () { return p; } + operator B & () { return *p; } +}; + +main() +{ + A a; + B &b = (B &)a; + B *bp = (B *)a; + B &br = a.operator B&(); +// What's the right test? + printf ("FAIL\n"); +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/operators10.C b/gcc/testsuite/g++.old-deja/g++.law/operators10.C new file mode 100644 index 000000000000..fe4f13d4b991 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/operators10.C @@ -0,0 +1,23 @@ +// Build don't link: +// GROUPS passed operators +// opr-eq file +// Message-Id: <9306040324.AA22954@balder.cs.wisc.edu> +// From: so@cs.wisc.edu (Bryan So) +// Subject: g++ bug +// Date: Thu, 3 Jun 93 22:24:13 -0500 + +template <class T> +struct Test { + int data; + Test& operator=(int i) { data = i; return *this; } +}; + + +main() +{ + Test<int> i, j; + + i = j; + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/operators11.C b/gcc/testsuite/g++.old-deja/g++.law/operators11.C new file mode 100644 index 000000000000..16eccea6e40c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/operators11.C @@ -0,0 +1,36 @@ +// Build don't link: +// GROUPS passed operators +// opr-eq file +// Message-Id: <CCJrut.9M7@csc.ti.com> +// From: rowlands@hc.ti.com (Jon Rowlands) +// Subject: g++ 2.4.5: assignment operator in base class +// Date: Mon, 30 Aug 1993 00:54:29 GMT + +class B { +public: + B & operator = (B); // delete this line and problem goes away +}; + +class D : public B { +public: + D(); + D(int); + D(B); +}; + +int +main() { + B b; + D d; + + d = d; + + d = 0; // t.cxx:20: assignment not defined for type `D' + d = D(0); + + d = b; // t.cxx:23: assignment not defined for type `D' + d = D(b); + + return(0); +} + diff --git a/gcc/testsuite/g++.old-deja/g++.law/operators12.C b/gcc/testsuite/g++.old-deja/g++.law/operators12.C new file mode 100644 index 000000000000..cd5312bc0938 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/operators12.C @@ -0,0 +1,20 @@ +// Build don't link: +// GROUPS passed operators +// opr-eq file +// Message-Id: <199311181618.AA27761@oil.cs.columbia.edu> +// From: Sam Fenster <fenster@cs.columbia.edu> +// Subject: g++ 2.5.3 can't disable assignment +// Date: Thu, 18 Nov 1993 11:18:18 -0500 + +class B + { + B &operator = (const B &); //Disable assignment! + public: + virtual ~B () {} + }; + +class D: public B + { + public: + D () {} + }; diff --git a/gcc/testsuite/g++.old-deja/g++.law/operators13.C b/gcc/testsuite/g++.old-deja/g++.law/operators13.C new file mode 100644 index 000000000000..3675d50b7fb5 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/operators13.C @@ -0,0 +1,24 @@ +// Build don't link: +// GROUPS passed operators +// opr-eq file +// Message-Id: <1993Nov18.210502.28842@midway.uchicago.edu> +// From: mps@dent.uchicago.edu (Michael Spertus) +// Subject: g++ 2.5.4 bug : operator= +// Date: Thu, 18 Nov 1993 21:05:02 GMT + +class T { +}; + +class EP { +public: + void operator=(T *); +}; + + +void EP::operator=(T *) { } + +main() +{ + EP ep1, ep2; + ep1 = ep2; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/operators14.C b/gcc/testsuite/g++.old-deja/g++.law/operators14.C new file mode 100644 index 000000000000..191266fe4a28 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/operators14.C @@ -0,0 +1,10 @@ +// Build don't link: +// GROUPS passed operators +void foo (int * a, int * b, int * c) {} + +main() { + int a,b,c; + foo (&a, &b, &c); + (a = b) = c; +} + diff --git a/gcc/testsuite/g++.old-deja/g++.law/operators15.C b/gcc/testsuite/g++.old-deja/g++.law/operators15.C new file mode 100644 index 000000000000..08d952de82c8 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/operators15.C @@ -0,0 +1,27 @@ +// GROUPS passed operators +// opr-del file +// Message-Id: <199301272137.AA25213@world.std.com> +// From: kol@world.std.com (Nikolay Yatsenko) +// Subject: bug report +// Date: Wed, 27 Jan 1993 16:37:30 -0500 + +extern "C" int printf(const char* ...); + +int delete_counter = -1; + +struct T{ + void operator delete (void * p) {delete_counter ++; ::delete p;} +}; + +int main(void) +{ + T * ps1 = new T; + + ::delete ps1; // Wrong T::operator delete() is called here + + if (delete_counter != -1) + printf ("FAIL\n"); + else + printf ("PASS\n"); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/operators16.C b/gcc/testsuite/g++.old-deja/g++.law/operators16.C new file mode 100644 index 000000000000..384c4e9c2867 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/operators16.C @@ -0,0 +1,29 @@ +// GROUPS passed operators +// copy file +// From: gfm@mencon.mencon.oz.au (Graham Menhennitt) +// Date: Thu, 29 Apr 93 20:53:07 EST +// Subject: 4 bugs in g++ 2.3.3 +// Message-ID: <9304291053.AA00090@mencon> + +#include <stdio.h> + +int pass = 0; +struct A { + A(void) {} + A(const A& a) { ; } + A& operator = (const A& a) { pass = 1; } +}; + +struct B { + B(const A& aa) { B::a = aa; } + A a; +}; + +main(void) +{ + B(A()); + if (pass) + printf ("PASS\n"); + else + printf ("FAIL\n"); +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/operators17.C b/gcc/testsuite/g++.old-deja/g++.law/operators17.C new file mode 100644 index 000000000000..e652d9cdd790 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/operators17.C @@ -0,0 +1,12 @@ +// Build don't link: +// Special g++ Options: -Wall -pedantic-errors +// GROUPS passed operators +// copy file +// From: gfm@mencon.mencon.oz.au (Graham Menhennitt) +// Date: Thu, 29 Apr 93 20:53:07 EST +// Subject: 4 bugs in g++ 2.3.3 +// Message-ID: <9304291053.AA00090@mencon> + + struct A { + A& operator = (const A& a) {}// ERROR - + }; diff --git a/gcc/testsuite/g++.old-deja/g++.law/operators18.C b/gcc/testsuite/g++.old-deja/g++.law/operators18.C new file mode 100644 index 000000000000..74ea15915f57 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/operators18.C @@ -0,0 +1,17 @@ +// Build don't link: +// GROUPS passed operators +// opr-ampr file +// From: mecklen@oops.cs.utah.edu (Robert Mecklenburg) +// Date: Thu, 8 Oct 92 16:33:08 -0600 +// Subject: Type conversion and overloading bugs in 2.2.2 +// Message-ID: <9210082233.AA28203@hellgate.utah.edu> + + enum E { a, b, c }; + struct Estr { + E value; + Estr() {} + Estr( int i ) : value( (E)i ) {} + operator E() { return value; } + }; + extern Estr baz(); + int bazz() { return baz() & 2; } diff --git a/gcc/testsuite/g++.old-deja/g++.law/operators19.C b/gcc/testsuite/g++.old-deja/g++.law/operators19.C new file mode 100644 index 000000000000..375604111519 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/operators19.C @@ -0,0 +1,19 @@ +// Build don't link: +// GROUPS passed operators +// opr-ampr file +// From: Jarkko Sonninen <Jarkko.Sonninen@lut.fi> +// Date: Thu, 7 Oct 1993 08:25:26 +0200 +// Subject: type of base class member +// Message-ID: <199310070625.AA18653@kaisa.it.lut.fi> + +class A { + public: + int j; +}; + +class B: public A { + public: + B () { + !(A::j); + }; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.law/operators2.C b/gcc/testsuite/g++.old-deja/g++.law/operators2.C new file mode 100644 index 000000000000..82954ff7abeb --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/operators2.C @@ -0,0 +1,15 @@ +// Build don't link: +// GROUPS passed operators +// opr-conv file +// Message-Id: <199301260142.AA13995@world.std.com> +// From: gparker@world.std.com (Glenn P Parker) +// Subject: gcc bug +// Date: Mon, 25 Jan 1993 20:42:35 -0500 + +int main(void) +{ + int i = int(); // g++ 2.3.3 cannot compile it. + + return 0; +} + diff --git a/gcc/testsuite/g++.old-deja/g++.law/operators21.C b/gcc/testsuite/g++.old-deja/g++.law/operators21.C new file mode 100644 index 000000000000..c1f8b8be1333 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/operators21.C @@ -0,0 +1,16 @@ +// Build don't link: +// GROUPS passed operators + +struct A { + int x; +}; + +int operator()(A x,float y) {// ERROR - .* + return 1; +} + +main() { + A x; + x(1.0); // ERROR - no match +} + diff --git a/gcc/testsuite/g++.old-deja/g++.law/operators22.C b/gcc/testsuite/g++.old-deja/g++.law/operators22.C new file mode 100644 index 000000000000..e550dac48a7e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/operators22.C @@ -0,0 +1,15 @@ +// Build don't link: +// GROUPS passed operators +template <class T> +class t { +public: + t() {} +}; + +class m { + t<int> c; +public: + m() : c() {} +}; + +m *p() {return new m;} diff --git a/gcc/testsuite/g++.old-deja/g++.law/operators23.C b/gcc/testsuite/g++.old-deja/g++.law/operators23.C new file mode 100644 index 000000000000..640365509346 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/operators23.C @@ -0,0 +1,35 @@ +// GROUPS passed operators +// opr-new file +// From: (The Crossjammer) <xjam@cork.cs.berkeley.edu> +// Date: Mon, 23 Nov 92 23:35:26 PST +// Subject: g++-2.3.1 : Incorrectly calls overloaded operator new +// Message-ID: <9211240735.AA06872@cork.CS.Berkeley.EDU> + + +#include <stdio.h> +#include <stdlib.h> + +class blah { + int j; + public: + blah(); + void *operator new(size_t size); +}; + +inline blah::blah() : j(0) { + +} + + +void *blah::operator new(size_t size) { + printf ("FAIL\n"); + exit (1); + return NULL; +} + +int main(int arg, char** argv) { + blah* blahPtr; + + blahPtr = new blah[100]; + printf ("PASS\n"); +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/operators24.C b/gcc/testsuite/g++.old-deja/g++.law/operators24.C new file mode 100644 index 000000000000..46346e5942c5 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/operators24.C @@ -0,0 +1,14 @@ +// Build don't link: +// GROUPS passed operators +// opr-new file +// From: rwave!myersn%rwave.roguewave@cs.orst.edu (Nathan Myers) +// Date: Wed, 16 Dec 92 11:55 PST +// Subject: 2.3.2: friend decl breaks member op new +// Message-ID: <m0n24qP-0000GmC@rwave.roguewave.com> + +#include <stddef.h> +struct Link { + void* operator new(size_t, int); + friend void* __builtin_new(size_t); // This declaration triggers the bug +}; +void f() { new(2) Link; } diff --git a/gcc/testsuite/g++.old-deja/g++.law/operators25.C b/gcc/testsuite/g++.old-deja/g++.law/operators25.C new file mode 100644 index 000000000000..4b701b6136fe --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/operators25.C @@ -0,0 +1,16 @@ +// Build don't link: +// GROUPS passed operators +// opr-new file +// From: gparker@world.std.com (Glenn P Parker) +// Date: Mon, 25 Jan 1993 20:43:43 -0500 +// Subject: gcc bug +// Message-ID: <199301260143.AA14133@world.std.com> + +typedef int (**PPF)(int); + +int main(void) +{ + PPF pf2 = new (int (*) (int)); // internal compiler error on this line. + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/operators27.C b/gcc/testsuite/g++.old-deja/g++.law/operators27.C new file mode 100644 index 000000000000..f8ca9d173178 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/operators27.C @@ -0,0 +1,33 @@ +// GROUPS passed operators +// opr-new file +// From: David Binderman 3841 <dcb@us-es.sel.de> +// Date: Mon, 21 Jun 93 11:42:11 +0200 +// Subject: G++ 2.4.3 and operator new +// Message-ID: <9306210942.AA10276@slsvitt.us-es.sel.de> + +int FLAG=0; + +#include <new> + +extern "C" int printf( const char *, ...); + +void * operator new(size_t, const nothrow_t&) throw() { FLAG=1; return 0; } + +class K { +private: + int i; +public: + K( int j) { + i = j; + } +}; + +int main(void) +{ + K * pK = new (nothrow) K( 10); + if ( FLAG != 1 ) + printf ("FAIL\n"); + else + printf ("PASS\n"); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/operators28.C b/gcc/testsuite/g++.old-deja/g++.law/operators28.C new file mode 100644 index 000000000000..c0d1ecdad2db --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/operators28.C @@ -0,0 +1,30 @@ +// Build don't link: +// GROUPS passed operators +#include <sys/types.h> +#include <stdio.h> + +class new_test +{ + int type; +public: + void* operator new(size_t sz, int count, int type); +}; + +void* new_test::operator new(size_t sz, int count, int type) +{ + void *p; + + printf("%d %d %d\n", sz, count, type); + + p = new char[sz * count]; + ((new_test *)p)->type = type; + return p; +}; + +main() +{ + new_test *test; + int count = 13; + + test = new(count, 1) new_test; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.law/operators29.C b/gcc/testsuite/g++.old-deja/g++.law/operators29.C new file mode 100644 index 000000000000..ec0d47c3dc46 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/operators29.C @@ -0,0 +1,24 @@ +// Build don't link: +// GROUPS passed operators +// excess errors test - XFAIL *-*-* +// (Message bugs/opr-del:4) +// From: jamshid@ses.com (Jamshid Afshar) +// Date: Fri, 25 Feb 94 18:44:01 CST +// Subject: Re: delete on "smart pointers" +// Message-ID: <9402262328.AA16321@pancake> +// +// Who was apparently replying to kuhlins@hawk.wifo.uni-mannheim.de + + +template<class T> class Ptr { +public: + Ptr(T*); + operator T*(); +}; + +int main() { + Ptr<int> ip = new int(2); + delete ip; + operator delete(ip); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/operators3.C b/gcc/testsuite/g++.old-deja/g++.law/operators3.C new file mode 100644 index 000000000000..e4a8341cca93 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/operators3.C @@ -0,0 +1,22 @@ +// Build don't link: +// GROUPS passed operators +// opr-pl file +// Message-Id: <9212010409.AA24967@zeus.research.otc.com.au> +// From: grahamd@zeus.research.otca.oz.au (Graham Dumpleton) +// Subject: Failure to use conversion operator. +// Date: Tue, 1 Dec 92 15:11:18 EST + +class BUG1 +{ + public: + + operator char*() const { return myData; } + char* myData; +}; + +void bug1() +{ + BUG1 bug1; + bug1.myData = "0123456789"; + char* s = bug1 + 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/operators30.C b/gcc/testsuite/g++.old-deja/g++.law/operators30.C new file mode 100644 index 000000000000..3c23a060a2d2 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/operators30.C @@ -0,0 +1,25 @@ +// GROUPS passed operators +// opr-mm file +// Date: Thu, 2 Jun 94 10:00:29 +0200 +// From: chatty@cenatls.cena.dgac.fr (Stephane Chatty) +// Message-Id: <9406020800.AA14201@geant.cenatls.cena.dgac.fr> +// Subject: result of operator -- with g++-2.5.8 + +#include <stdio.h> + +nop() +{ +} // ERROR - non-void + +main () +{ + int a = 2; + + if (----a == 0) + nop (); + + if (a == 0) + printf("PASS\n"); + else + printf("FAIL\n"); +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/operators31.C b/gcc/testsuite/g++.old-deja/g++.law/operators31.C new file mode 100644 index 000000000000..a2ba7201d6b9 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/operators31.C @@ -0,0 +1,19 @@ +// Build don't link: +// GROUPS passed operators +// opr-del file +// From: Eberhard Mattes <mattes@azu.informatik.uni-stuttgart.de> +// Date: Thu, 4 Aug 94 08:19:20 +0200 +// Subject: delete [] A::s +// Message-ID: <9408040619.AA27602@azu.informatik.uni-stuttgart.de> + +class A +{ + char *s; +public: + void f (); +}; + +void A::f () +{ + delete [] A::s; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/operators32.C b/gcc/testsuite/g++.old-deja/g++.law/operators32.C new file mode 100644 index 000000000000..bb6f8c902ae7 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/operators32.C @@ -0,0 +1,55 @@ +// Build don't link: +// GROUPS passed operators +#include <iostream.h> + +// +// frees space allocated for N-D array +// + +template <class T> +void free(long rows, T** array) +{ +for( long i = 0; i < rows; i++ ) + delete [] array[i]; // delete row +delete [] array; // delete outer array +} + +template <class T> +T* allocate1d(long size, T*& array) +{ +return array = new T[size]; +} + +template <class T> +T** allocate2d(long d1, long d2, T**& array) +{ +if( allocate1d(d1, array) != 0 ) + { + for( long i = 0; i < d1; i++ ) + { + if( allocate1d(d2, array[i]) == 0 ) + { + free(i,array); + return array; + } + } + } +return array; +} + +main() +{ +long d1 = 3, d2 = 4; +class foo +{ +public: +foo() {cout << "foo created" << endl; } + +~foo() {cout << "foo deleted" << endl; } +}; + +foo **f2; +allocate2d(d1, d2, f2);// ERROR - type.*// ERROR - trying to.* +free(d1, f2);// ERROR - type.*// ERROR - trying to.* + +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/operators33.C b/gcc/testsuite/g++.old-deja/g++.law/operators33.C new file mode 100644 index 000000000000..bdf5147b875a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/operators33.C @@ -0,0 +1,28 @@ +// Build don't link: +// GROUPS passed operators +// opr-new file +// From: flisakow@cae.wisc.edu +// Date: Thu, 1 Sep 94 18:21:09 CDT +// Subject: g++ bug? +// Message-ID: <9409012321.AA05346@hprisc-19.cae.wisc.edu> + +#include <stdio.h> + + +struct fcell { + FILE *fd; + struct fcell *next; +}; + + +class FStack { +public: + struct fcell *top; + FStack() { top = NULL ; } ; + inline void push(FILE * fd1, int line_num, char *fname = NULL) { + struct fcell *tmp = new struct fcell; + tmp->fd = fd1; + tmp->next = top; + top = tmp ; + } +}; diff --git a/gcc/testsuite/g++.old-deja/g++.law/operators34.C b/gcc/testsuite/g++.old-deja/g++.law/operators34.C new file mode 100644 index 000000000000..316500e5841e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/operators34.C @@ -0,0 +1,12 @@ +// Build don't link: +// GROUPS passed operators +class A { + public: + A() { + } +}; + +static class A *A_new_() { + return new class A; +} + diff --git a/gcc/testsuite/g++.old-deja/g++.law/operators4.C b/gcc/testsuite/g++.old-deja/g++.law/operators4.C new file mode 100644 index 000000000000..259d3e53f21a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/operators4.C @@ -0,0 +1,30 @@ +// GROUPS passed operators +// opr-del file +// From: rollins@bart.ee.queensu.ca (Mark Rollins) +// Date: Thu, 3 Sep 1992 22:01:03 -0400 Fri, 4 Sep 1992 02:00:25 GMT +// Subject: delete [size] pointer; Problem +// Message-ID: <92Sep3.220137edt.30@jarvis.csri.toronto.edu> + +#include <Complex.h> +#include <stdio.h> + +class Vector { + int size; + Complex *v; + public: + Vector(int s=1) { size = s; v = new Complex[size];}; + ~Vector() { delete [size] v;}// ERROR - warning +}; + +void foo(int s) +{ + Vector junk(s); +} + +main() +{ + Vector* test; + for (int i=0;i<40;i++) // was 100000 + foo(1000); + printf ("PASS\n"); +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/operators6.C b/gcc/testsuite/g++.old-deja/g++.law/operators6.C new file mode 100644 index 000000000000..f66f6496f39f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/operators6.C @@ -0,0 +1,24 @@ +// Build don't link: +// GROUPS passed operators +// opr-as file +// From: Klaus Ahrens <ahrens@informatik.hu-berlin.de> +// Date: Fri, 26 Mar 93 12:50:37 mez +// Subject: no default assignment +// Message-ID: <199303261149.TA23114@mail.Germany.EU.net> + +class A { +public: + A(int){} + A& operator=(const A&){return *this;} +}; + +class B: public A { +public: + B(int i): A(i) {} +}; + +int main() +{ + B b=1; + b=1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/operators7.C b/gcc/testsuite/g++.old-deja/g++.law/operators7.C new file mode 100644 index 000000000000..7d00bd7c2bae --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/operators7.C @@ -0,0 +1,44 @@ +// GROUPS passed operators +// opr-as file +// From: amichail@lambert.waterloo.edu (Amir Michail) +// Date: Mon, 15 Jun 1992 19:41:37 GMT +// Subject: inheretance bug +// Message-ID: <AMICHAIL.92Jun15144137@lambert.waterloo.edu> + +#include <stdio.h> +class window { + public: + int k; + virtual void inc() {} +}; + +class window_border : public virtual window { + public: + void inc () { k++; } +}; + +class container { + public: + window_border c; +#if 0 + container& operator = (const container& o) { + this->c = o.c; + return *this; + } +#endif +}; + +int main() { + container test, *test2; + void *vp; + test2 = new container; + test.c.k = 34; + vp = (window *)&test2->c; + *test2 = test; + test.c.k = 60; + if (test2->c.k == 35 + && test.c.k == 60) + printf ("PASS\n"); + else + printf ("FAIL\n"); +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/operators8.C b/gcc/testsuite/g++.old-deja/g++.law/operators8.C new file mode 100644 index 000000000000..0b59d3cd1b5d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/operators8.C @@ -0,0 +1,49 @@ +// GROUPS passed operators +#include <stdio.h> + +class shape { + public: + virtual void vDisplay(void) const = 0; + protected: + int X; + int Y; +}; + +class square :public shape { + public: + square(int x, int y, int width_) { + X = x; + Y = y; + width = width_; + } + void vDisplay(void) const { + printf ("PASS\n"); + } + protected: + int width; +}; + + +class triangle :public shape { + public: + triangle(int x, int y, int width_, int height_) { + X = x; + Y = y; + width = width_; + height = height_; + } + void vDisplay(void) const { + printf ("FAIL\n"); + } + protected: + int width; + int height; +}; + +main() { + shape* s1 = new square(4,4,5); + shape* s2 = new triangle(6,6,2,3); + *s1 = *s2; + s1->vDisplay(); +} + diff --git a/gcc/testsuite/g++.old-deja/g++.law/operators9.C b/gcc/testsuite/g++.old-deja/g++.law/operators9.C new file mode 100644 index 000000000000..8aeac843b7b2 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/operators9.C @@ -0,0 +1,19 @@ +// Build don't link: +// GROUPS passed operators +// opr-eq file +// Message-Id: <9301141514.AA05925@mi.el.utwente.nl> +// From: klamer@mi.el.utwente.nl (Klamer Schutte) +// Subject: 2.3.3: failed to detect error +// Date: Thu, 14 Jan 93 16:14:21 +0100 + +class B +{ +public: + operator=(B &); // ERROR - no type or storage class +}; + +void +test(B &b1, const B &b2) +{ + b1 = b2;// ERROR - .* +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/parsing1.C b/gcc/testsuite/g++.old-deja/g++.law/parsing1.C new file mode 100644 index 000000000000..7b032e3eb575 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/parsing1.C @@ -0,0 +1,21 @@ +// Build don't link: +// GROUPS passed parsing +// parsing folder +// From: hendrik%vedge.UUCP@iro.umontreal.ca +// Date: Wed, 23 Sep 92 17:10:28 -0400 +// Subject: parenthesized method +// Message-ID: <9209232110.AA02533@.> + + +class goo{ +public: + void noo_bloo(); +}; + +void choo(goo* too) +{ (too->noo_bloo)(); +} + +void choo_too(goo* too) +{ too->noo_bloo(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/parsing10.C b/gcc/testsuite/g++.old-deja/g++.law/parsing10.C new file mode 100644 index 000000000000..9fee9ebc808e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/parsing10.C @@ -0,0 +1,32 @@ +// Build don't link: +// GROUPS passed parsing +// parsing folder +// From: Eirik Fuller <eirik@elf.ithaca.ny.us> +// Date: Wed, 15 Dec 1993 17:06:11 -0500 +// Subject: parse error +// Message-ID: <199312152206.AA06584@tonttu.TC.Cornell.EDU> + + +class s; + +template <class T> +class t +{ +public: + void f(T *t); +}; + +class l +{ +public: + void s() {}; +}; + +extern t<l> g; + +class p +{ +public: + void *h; + s *a() {return (s *) h;}; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.law/parsing2.C b/gcc/testsuite/g++.old-deja/g++.law/parsing2.C new file mode 100644 index 000000000000..5570ad938324 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/parsing2.C @@ -0,0 +1,11 @@ +// Build don't link: +// GROUPS passed parsing +// parsing folder +// From: jonathan@Pescadero.Stanford.EDU +// Date: Tue, 15 Sep 92 14:15:29 PDT +// Subject: Function taking as argument a pointer to a pointer to a function +// that returns int causes coredump in cc1plus +// Message-ID: <9209152115.AA07423@Pescadero.Stanford.EDU> + + unsigned char FindMdc ( int (**)() ); + unsigned char FindMdc2 ( int (**funcname)() ); diff --git a/gcc/testsuite/g++.old-deja/g++.law/parsing3.C b/gcc/testsuite/g++.old-deja/g++.law/parsing3.C new file mode 100644 index 000000000000..85b7932f209b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/parsing3.C @@ -0,0 +1,15 @@ +// Build don't link: +// GROUPS passed parsing +// parsing folder +// From: tll@cco.caltech.edu (Tal Lewis Lancaster) +// Date: 18 Mar 1993 17:09:43 GMT +// Subject: Re: unexpected difference between gcc and g++ (both 2.3.3) +// Message-ID: <1oaacnINNt20@gap.caltech.edu> + +/* Notice that that this case parses fine */ +int (* volatile y)[10]; + +void foo2() { + /* The parser can't handle it now */ + int (* volatile x)[10]; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/parsing4.C b/gcc/testsuite/g++.old-deja/g++.law/parsing4.C new file mode 100644 index 000000000000..e834d6f939e1 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/parsing4.C @@ -0,0 +1,10 @@ +// Build don't link: +// GROUPS passed parsing +// parsing folder +// From: Glenn Engel <glenne@lsid.hp.com> +// Date: Fri, 29 Jan 93 18:42:03 PST +// Subject: Parse Error +// Message-ID: <9301300242.AA15550@hplslk.lsid.hp.com> + +int test1(void (**roc)(int,int)); // parse error +int test2(int id,void (**orc)(int,int)); // works diff --git a/gcc/testsuite/g++.old-deja/g++.law/parsing5.C b/gcc/testsuite/g++.old-deja/g++.law/parsing5.C new file mode 100644 index 000000000000..f3f847302c45 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/parsing5.C @@ -0,0 +1,11 @@ +// Build don't link: +// GROUPS passed parsing +// From: Teemu Torma <Teemu.Torma@frend.fi> +// Date: Mon, 15 Jun 92 18:42:25 +0300 +// Subject: G++ 2.2.2: Strange parse error +// Message-ID: <"relay.fren.501:15.05.92.15.42.30"@frend.fi> + +long (*foo1 ()) (); // This is ok. + +typedef long INT; +INT (*foo2 ()) (); // This is not, g++ says "parse error before `('" diff --git a/gcc/testsuite/g++.old-deja/g++.law/parsing6.C b/gcc/testsuite/g++.old-deja/g++.law/parsing6.C new file mode 100644 index 000000000000..7fcc13c5071d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/parsing6.C @@ -0,0 +1,15 @@ +// Build don't link: +// GROUPS passed parsing +// parsing folder +// From: "James S. Vera" <vera@fanaraaken.stanford.edu> +// Date: Thu, 01 Jul 1993 16:36:32 -0700 +// Subject: Mildly complicated type not understood, 2.4.5 +// Message-ID: <9307012336.AA13841@fanaraaken.Stanford.EDU> + +typedef int (*cow[3])(...); + +main() { + cow fs; + int (*pig[3])(...); // line 5 + +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/parsing7.C b/gcc/testsuite/g++.old-deja/g++.law/parsing7.C new file mode 100644 index 000000000000..1b73c951dd4a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/parsing7.C @@ -0,0 +1,24 @@ +// Build don't link: +// GROUPS passed parsing +// parsing folder +// From: szahn%Robinie@goesser.sie.siemens.co.at (Hr. Zahn) +// Date: Mon, 5 Jul 93 10:45:51 +0200 +// Subject: Bug report g++ 2.4.5, unexpected syntax errors +// Message-ID: <9307050845.AA00499@ets5.uebemc.siemens.de> + +int f1( + int (**a1)() + ); + +int f2( + int (**a1)() + ); + + +int f3( + int (**a1)( int a, int b ) + ); + +int f4( + int (**a1)( int a, int b ) + ); diff --git a/gcc/testsuite/g++.old-deja/g++.law/parsing8.C b/gcc/testsuite/g++.old-deja/g++.law/parsing8.C new file mode 100644 index 000000000000..9a714a354935 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/parsing8.C @@ -0,0 +1,31 @@ +// Build don't link: +// GROUPS passed parsing +// parsing folder +// From: nag@soft.flab.fujitsu.co.jp +// Date: Thu, 08 Jul 1993 10:54:59 +0900 +// Subject: g++ cannot understand `void (**f)()' +// Message-ID: <9307080155.AA00496@kumade.soft.flab.fujitsu.co.jp> + + void + func() { + int ( * * i )[ 2 ]; + } + +// Looks like this is probably the same problem +// parsing folder +// From: nag@soft.flab.fujitsu.co.jp +// Date: Thu, 08 Jul 1993 10:54:59 +0900 +// Subject: g++ cannot understand `void (**f)()' +// Message-ID: <9307080155.AA00496@kumade.soft.flab.fujitsu.co.jp> +main() +{ + void (**f)(); +} + + +// Same as +// From: Chris Dodd <dodd@csl.sri.com> +// Date: Fri, 16 Jul 93 17:05:04 -0700 +// Subject: bug in declaration parsing in g++ 2.4.5 +// Message-ID: <9307170005.AA03857@pekoe.csl.sri.com> + diff --git a/gcc/testsuite/g++.old-deja/g++.law/parsing9.C b/gcc/testsuite/g++.old-deja/g++.law/parsing9.C new file mode 100644 index 000000000000..13138ed9fce2 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/parsing9.C @@ -0,0 +1,32 @@ +// Build don't link: +// GROUPS passed parsing +// From: Jason Merrill <jason@cygnus.com> +// Date: Fri, 13 Aug 93 12:49:11 PDT +// Subject: 2.4.5 won't compile array of pointers to functions returning T +// Message-ID: <9308131949.AA26348@cygnus.com> +// From: "Robert M. Keller" <keller@jarthur.Claremont.EDU> +// Subject: g++ bug +// Date: Fri, 13 Aug 93 10:09:27 PDT + +/* Testing declaration of "array of pointers to functions returning T" */ + +typedef int T; + +T foo() +{ return 10; } + +T bar() +{ return 20; } + +T baz() +{ return 30; } + +main() +{ +T (*apfrt[10])(); + +apfrt[0] = foo; +apfrt[1] = bar; +apfrt[2] = baz; + +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/patches1.C b/gcc/testsuite/g++.old-deja/g++.law/patches1.C new file mode 100644 index 000000000000..e151a33fa246 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/patches1.C @@ -0,0 +1,24 @@ +// Build don't link: +// GROUPS passed patches +// patches file +// From: david.binderman@pmsr.philips.co.uk +// Date: Wed, 6 Oct 93 17:05:54 BST +// Subject: Reno 1.2 bug fix +// Message-ID: <9310061605.AA04160@pmsr.philips.co.uk> + +int type(float) { return 1; } +int type(double) { return 2; } +int type(long double) { return 3; } + +extern "C" int printf( const char *, ...); + +main() +{ + int i = 0; + if (type(0.0) != 2) + ++i; + if (i > 0) + printf ("FAIL\n"); + else + printf ("PASS\n"); +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/pic1.C b/gcc/testsuite/g++.old-deja/g++.law/pic1.C new file mode 100644 index 000000000000..818d3d0dd82a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/pic1.C @@ -0,0 +1,9 @@ +// Build don't link: +// GROUPS passed operators +// pic file +// Message-Id: <199406132030.NAA23508@dewitt.eecs.berkeley.edu> +// Subject: gcc-2.5.8 -fpic fails to compile extern const char static initializer +// Date: Mon, 13 Jun 1994 13:30:14 -0700 +// From: Christopher Hylands <cxh@dewitt.eecs.berkeley.edu> + +extern const char SDFdomainName[] = "SDF"; diff --git a/gcc/testsuite/g++.old-deja/g++.law/profile1.C b/gcc/testsuite/g++.old-deja/g++.law/profile1.C new file mode 100644 index 000000000000..7c602a0fb20d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/profile1.C @@ -0,0 +1,9 @@ +// Special g++ Options: -pg +// GROUPS passed profiling +// Skip if not native +// excess errors test - XFAIL mips*-*-* alpha*-*-* i[3456]86-*-sco3.2v5* +#include <stdio.h> +main() +{ + printf ("PASS\n"); +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/refs1.C b/gcc/testsuite/g++.old-deja/g++.law/refs1.C new file mode 100644 index 000000000000..f0b7f118a0f4 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/refs1.C @@ -0,0 +1,42 @@ +// GROUPS passed references +// (Message bugs/refs:1) +// From: tal@vlsi.cs.caltech.edu +// Date: Fri, 25 Feb 94 23:55:50 -0800 +// Subject: g++-2.5.8 produces incorrect code for references +// Message-ID: <9402260755.AA27693@vlsi.cs.caltech.edu> + +#include <stdio.h> + +class C { +private: + char** list; +public: + C(char** ); + void count (int&); +}; + +C::C (char** l) { + list = l; +} + +void C::count (int& total) { + if (*list == NULL) + return; + else { + list++; + count (++total); // THIS IS WHERE THE TROUBLE STARTS + } +} + +char * foo[] = { + "one", "two", "three", NULL}; + +main() { + C c(foo); + int i = 0; + c.count(i); + if (i == 3) + printf ("PASS\n"); + else + printf ("FAIL\n"); +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/refs2.C b/gcc/testsuite/g++.old-deja/g++.law/refs2.C new file mode 100644 index 000000000000..b310bf633174 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/refs2.C @@ -0,0 +1,11 @@ +// Build don't link: +// GROUPS passed references +int func(int& i) +{ + static int& v = i; + return v; +} + +int main() +{ +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/refs3.C b/gcc/testsuite/g++.old-deja/g++.law/refs3.C new file mode 100644 index 000000000000..e77dd7fad493 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/refs3.C @@ -0,0 +1,6 @@ +// Build don't link: +// GROUPS passed references +const int& min(const int& n, const int& m) +{ + return n < m ? n : m; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/refs4.C b/gcc/testsuite/g++.old-deja/g++.law/refs4.C new file mode 100644 index 000000000000..a73c078ce981 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/refs4.C @@ -0,0 +1,21 @@ +// GROUPS passed references +extern "C" void printf (char *, ...); + +const int& min(const int& tX, const int& tY) +{ + return tX < tY ? tX : tY; +} + +void foo(const int m, const int n) +{ + if (m == 1 && n == 100) + printf("PASS\n"); + else + printf("FAIL\n"); +} + +main() +{ + foo(min(2, 1), min(100, 200)); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/scope1.C b/gcc/testsuite/g++.old-deja/g++.law/scope1.C new file mode 100644 index 000000000000..aa70fde059cb --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/scope1.C @@ -0,0 +1,20 @@ +// Build don't link: +// GROUPS passed scoping +// scoping file +// From: kol@world.std.com (Nikolay Yatsenko) +// Date: Fri, 16 Jul 1993 18:48:32 -0400 +// Subject: g++ gives wrong error for local structure +// Message-ID: <199307162248.AA05360@world.std.com> + +int main(void) +{ + struct A{ + public: int i; + void set (int i) + {A::i = i;} // g++ gives wrong error + }; + + A a; + a.set(17); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/scope2.C b/gcc/testsuite/g++.old-deja/g++.law/scope2.C new file mode 100644 index 000000000000..f8b90529d73f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/scope2.C @@ -0,0 +1,44 @@ +// GROUPS passed scoping +// scoping file +// From: svkakkad@cs.utexas.edu (Sheetal V. Kakkad) +// Date: Tue, 5 Oct 93 12:38:49 -0500 +// Subject: G++ 2.4.5 - global delete operator not called when using "::delete" +// Message-ID: <9310051738.AA14586@boogie.cs.utexas.edu> + +#include <stdio.h> +#include <stddef.h> +#include <stdlib.h> + +class foo +{ + public: + foo () { ; } + ~foo () { ; } + void *operator new (size_t); + void operator delete (void *); +}; + +void *foo::operator new (size_t size) +{ + return malloc (size); +} + +int overloaded_delete = 0; + +void foo::operator delete (void *data) +{ + free ((char *) data); + overloaded_delete++; +} + +main () +{ + foo *f = new foo; + foo *ff = ::new foo; + ::delete ff; // should call the default delete operator + delete f; + if (overloaded_delete == 1) + printf ("PASS\n"); + else + printf ("FAIL\n"); +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/scope3.C b/gcc/testsuite/g++.old-deja/g++.law/scope3.C new file mode 100644 index 000000000000..0f36e1b16e8c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/scope3.C @@ -0,0 +1,22 @@ +// Build don't link: +// GROUPS passed scoping +// local-class file +// From: dcb@us-es.sel.de +// Date: Fri, 27 Nov 92 15:34:28 +0100 +// Subject: GNU G++ 2.3.1 bug report +// Message-ID: <9211271434.AA15612@us-es.sel.de> + + +void f() +{ + { + struct A { + A() {}; + } a; + }; + { + struct A { + A() {}; + } a ; + }; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/scope4.C b/gcc/testsuite/g++.old-deja/g++.law/scope4.C new file mode 100644 index 000000000000..1cfb54e9c34a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/scope4.C @@ -0,0 +1,16 @@ +// Build don't link: +// GROUPS passed scoping +// local-class file +// From: daniels@sugar.neosoft.com (Brad Daniels) +// Date: Thu, 5 Aug 93 15:36:36 CDT +// Subject: Bug in g++ 2.4.5: Can't touch nested class identifier inside its members +// Message-ID: <9308051536.AA06115@NeoSoft.Com> + +void f() { + class foo { + int x; + public: + foo() : x(1) {} + int bar() { foo p; return p.x; } + }; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/scope5.C b/gcc/testsuite/g++.old-deja/g++.law/scope5.C new file mode 100644 index 000000000000..2aea15bd94c2 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/scope5.C @@ -0,0 +1,25 @@ +// Build don't link: +// GROUPS passed scoping +// local-class file +// From: schlaege@methusalix.ert.rwth-aachen.de (Chris Schlaeger H Zivojnovic) +// Date: Tue, 10 Aug 93 16:50:33 +0200 +// Subject: Bug report +// Message-ID: <9308101450.AA28016@methusalix.ert.rwth-aachen.de> + +main() +{ + class foo + { + int i; + } ; + class bar + { + public: + bar() { y = 0; } + void f() { foo x; } + private: + int y; + } ; + + bar c; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/shadow1.C b/gcc/testsuite/g++.old-deja/g++.law/shadow1.C new file mode 100644 index 000000000000..5338bea3c98e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/shadow1.C @@ -0,0 +1,28 @@ +// Build don't link: +// Special g++ Options: -Wshadow +// GROUPS passed shadow-warnings +// shadow file +// Message-Id: <9211061827.AA03517@harvey> +// From: Jeff Gehlhaar <jbg@qualcomm.com> +// Subject: GCC Bug.. +// Date: Fri, 6 Nov 1992 10:27:10 -0700 + +class Class +{ +public: + Class(void); // constructor + int Shadow(void); // member function +private: + long value; +}; + +Class::Class(void) +{ + value = 0; +} + +static inline unsigned char +Function(int Shadow) +{ + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/shadow2.C b/gcc/testsuite/g++.old-deja/g++.law/shadow2.C new file mode 100644 index 000000000000..899fe9386403 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/shadow2.C @@ -0,0 +1,28 @@ +// Build don't link: +// Special g++ Options: -Wshadow +// GROUPS passed shadow-warnings +// (Message bugs/shadow:2) +// From: michael@utex.rni.sub.org (Michael Utech) +// Date: Sat, 22 Jan 1994 04:28:00 +0100 +// Subject: very minor problem/bug in gcc-2.5.4, -Wshadow +// Message-ID: <m0pNZ1T-0008QUC@utex.rni.sub.org> + +class X +{ + int count; +public: + X() {} // necessary to produce the `count' warning +}; + +template <class T> +class Y +{ + T t; +public: + int f (int count) { return (count); } +}; + +main () +{ + Y<char> y; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/static-mem2.C b/gcc/testsuite/g++.old-deja/g++.law/static-mem2.C new file mode 100644 index 000000000000..3a4489e618fd --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/static-mem2.C @@ -0,0 +1,27 @@ +// Build don't link: +// GROUPS passed static-mem + +class desc; + +class a_desc { + public: + + static desc the_desc; + + virtual desc *get_desc(); +}; + +class desc : public a_desc { + public: + + static desc the_desc; + + desc(int); + + desc *get_desc(); +}; + + +desc desc::the_desc(1); + +desc a_desc::the_desc(0); diff --git a/gcc/testsuite/g++.old-deja/g++.law/static-mem3.C b/gcc/testsuite/g++.old-deja/g++.law/static-mem3.C new file mode 100644 index 000000000000..39e4fc2d4541 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/static-mem3.C @@ -0,0 +1,23 @@ +// Build don't link: +// GROUPS passed static-mem +// static-mem file +// Message-Id: <9406021639.AA00789@oz.NeXT.COM> +// From: Sumana Srinivasan <Sumana_Srinivasan@next.com> +// Date: Thu, 2 Jun 94 09:39:09 -0700 +// Subject: static members function pointers + +class CRTFooBar; + +class CRTFoo { +public: + static const CRTFooBar & defaultFooBar( ); + + CRTFoo( const CRTFoo & ); + CRTFoo( ); + CRTFoo( const char *, + const CRTFooBar &tp = CRTFoo::defaultFooBar(), + int = 0 ); + CRTFoo &setFoo( double, + const CRTFooBar & = CRTFoo::defaultFooBar() ); + +}; diff --git a/gcc/testsuite/g++.old-deja/g++.law/static-mem4.C b/gcc/testsuite/g++.old-deja/g++.law/static-mem4.C new file mode 100644 index 000000000000..4e026478e555 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/static-mem4.C @@ -0,0 +1,13 @@ +// Build don't link: +// GROUPS passed static-mem +struct test { + void test_member() { + static test& ds = *this; // FIX: static test* ds = this; + } +}; + + +main() +{ + test t; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/static-mem5.C b/gcc/testsuite/g++.old-deja/g++.law/static-mem5.C new file mode 100644 index 000000000000..2ce0df16f3e1 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/static-mem5.C @@ -0,0 +1,23 @@ +// Build don't link: +// Special g++ Options: -w +// GROUPS passed static-mem +// static-mem file +// From: bunch@tazboy.jpl.nasa.gov (Walt Bunch) +// Date: Thu, 23 Jun 94 14:58:35 UNI +// Subject: bug report +// Message-ID: <9406232258.AA03897@tazboy.JPL.NASA.GOV> + + +class A +{ +public: + static void F (int i) {} + static void A::G (int i) {} +}; + +main () +{ + A::F (17); + A::G (42); +} + diff --git a/gcc/testsuite/g++.old-deja/g++.law/template1.C b/gcc/testsuite/g++.old-deja/g++.law/template1.C new file mode 100644 index 000000000000..809e5090c889 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/template1.C @@ -0,0 +1,30 @@ +// Build don't link: +// GROUPS passed templates + +class String { + char s[100]; +}; + +template <class Element> +class Art { +public: + Element *data; + Art() { data=new Element[100]; } +}; + +template <class Key,class Value> +class Assoc { +public: + struct KeyValue { + Key key; + Value value; + int filled; + }; + + Art<KeyValue> data; + int fill; +}; + +main() { + Assoc<String,String> table; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/template2.C b/gcc/testsuite/g++.old-deja/g++.law/template2.C new file mode 100644 index 000000000000..7e5e108a7281 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/template2.C @@ -0,0 +1,16 @@ +// GROUPS passed templates +extern "C" void printf (char *, ...); + +template<class T> T max(T a, T b) { return a > b ? a : b; } + +int max(int, int); + +main() +{ + int j; + + j = max(1,2); + j = max (1, 'c'); + printf ("PASS\n"); +} + diff --git a/gcc/testsuite/g++.old-deja/g++.law/template3.C b/gcc/testsuite/g++.old-deja/g++.law/template3.C new file mode 100644 index 000000000000..7523824864ef --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/template3.C @@ -0,0 +1,17 @@ +// Build don't link: +// GROUPS passed templates +template< class R, class T1 = R, class T2 = T1 > +struct plus + { + R operator()( const T1& x, const T2& y ) const + { + return x + y; + } + }; + +int +main() + { + plus< int > p; + return 0; + } diff --git a/gcc/testsuite/g++.old-deja/g++.law/temps1.C b/gcc/testsuite/g++.old-deja/g++.law/temps1.C new file mode 100644 index 000000000000..aa3e8e83bbe0 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/temps1.C @@ -0,0 +1,18 @@ +// Build don't link: +// GROUPS passed temps +// temps file +// Date: Mon, 07 Sep 1992 13:12:28 EDT +// From: richard@ttt.kth.se +struct foo +{ + char *s; + foo(char *x) { s=x; } +}; + +struct cookie +{ + foo * v; + cookie ( foo * x) { v=x; } +}; + +cookie cat(&foo("apabepa"));// ERROR - .* diff --git a/gcc/testsuite/g++.old-deja/g++.law/temps2.C b/gcc/testsuite/g++.old-deja/g++.law/temps2.C new file mode 100644 index 000000000000..d96848143684 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/temps2.C @@ -0,0 +1,54 @@ +// GROUPS passed temps +// temps file +// Message-Id: <9212181914.AA05066@sparc1.cnm.us.es> +// From: juando@cnm.us.es (Juan Domingo Martin Gomez) +// Subject: Temporaries destroyed too soon +// Date: Fri, 18 Dec 92 20:14:45 +0100 + +#include <stdio.h> + +int status = 0; +int fail = 0; + +class Foo +{ +public: + Foo(); + ~Foo(); + + Foo &method(); +}; + +Foo f1() +{ + return Foo(); +} + +Foo::Foo() +{ +} + +Foo::~Foo() +{ + if (status == 2) + fail = 0; + else + fail = 1; +} + +Foo &Foo::method() +{ + status++; + return *this; +} + +main() +{ + // f1() returns a temporary object. The member function + // method() returns a reference to the same object. + f1().method().method(); + if (fail) + printf ("FAIL\n"); + else + printf ("PASS\n"); +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/temps3.C b/gcc/testsuite/g++.old-deja/g++.law/temps3.C new file mode 100644 index 000000000000..7b092844c5cd --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/temps3.C @@ -0,0 +1,28 @@ +// GROUPS passed temps +// temps file +// Message-Id: <9308231535.AA19432@geant.cenatls.cena.dgac.fr> +// From: chatty@geant.cenatls.cena.dgac.fr (Stephane CHATTY) +// Subject: g++ 2.4.5 does not destroy temporaries +// Date: Mon, 23 Aug 93 17:35:34 +0200 + +#include <stdio.h> + +class A { +public: + int a; + A (int i) : a (i) { ;} + A (const A& aa) : a (aa.a) { ;} + ~A () { printf ("PASS\n");; } +}; + +A +foo () +{ + return A (10); +} + +main () +{ + int x = foo ().a; +} + diff --git a/gcc/testsuite/g++.old-deja/g++.law/temps4.C b/gcc/testsuite/g++.old-deja/g++.law/temps4.C new file mode 100644 index 000000000000..2abf56d8214c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/temps4.C @@ -0,0 +1,38 @@ +// Special g++ Options: -felide-constructors +// GROUPS passed temps +// temps file +// Message-Id: <9311102043.AA22871@ses.com> +// From: jamshid@ses.com (Jamshid Afshar) +// Subject: elide-constructors (aka return value optimization) +// Date: Wed, 10 Nov 93 14:43:54 CST + +#include <stdio.h> + +class X { + int i; + public: + X(); + X(const X&); + X(int); + ~X(); +}; + +int did_it = 0; + +X::X() { ; } +X::X(const X&) { did_it = 1; } +X::X(int) { ; } +X::~X() { ; } + +X foo() { + X x(1); + return x; +} + +main() { + X x = foo(); + if (did_it) + printf ("FAIL\n"); + else + printf ("PASS\n"); +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/temps5.C b/gcc/testsuite/g++.old-deja/g++.law/temps5.C new file mode 100644 index 000000000000..7c591a409e9e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/temps5.C @@ -0,0 +1,41 @@ +// GROUPS passed temps +// temps file +// Message-Id: <9311171029.AA00592@mencon> +// From: gfm@mencon.mencon.oz.au (Graham Menhennitt) +// Subject: gcc 2.5.3 - bug deleting object that is still referred to +// Date: Wed, 17 Nov 93 21:29:23 EST + +#include <stdio.h> + +class C { +public: + C(int i) : val(i) { ; } + C(const C& c) : val(c.val) { ; } + ~C(void) { val = 999; } + C& operator = (const C& c) { val = c.val; return *this; } + + C& inc(int i) { val += i; return *this; } + + int val; +}; + +C +f(void) +{ + return C(3); +} + +C +f(int i) +{ + return f().inc(i); +} + +int +main(void) +{ + if (f (2).val != 5) + printf ("FAIL\n"); + else + printf ("PASS\n"); +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/temps6.C b/gcc/testsuite/g++.old-deja/g++.law/temps6.C new file mode 100644 index 000000000000..e228ce8ea75a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/temps6.C @@ -0,0 +1,24 @@ +// GROUPS passed temps +// Date: Tue, 22 Mar 94 12:46:28 +0100 +// From: dak@pool.informatik.rwth-aachen.de +// Message-Id: <9403221146.AA07815@messua> +// Subject: Bad code for pointer to member use as reference in g++ 2.5.8 + +#include <stdio.h> +struct str { + int i; +} xxx = {0}; + +int& test(str *arg1, int str::*arg2) +{ + return (arg1->*arg2); +} + +main() +{ + test(&xxx, &str::i) = 5; + if (xxx.i == 0) + printf ("FAIL\n"); + else + printf ("PASS\n"); +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/temps7.C b/gcc/testsuite/g++.old-deja/g++.law/temps7.C new file mode 100644 index 000000000000..ed1af55ce22c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/temps7.C @@ -0,0 +1,12 @@ +// Build don't link: +// GROUPS passed temps +// excess errors test - XFAIL *-*-* + +template <class B > +class A { +public: + class C {}; +}; + +template class A<int>::C; + diff --git a/gcc/testsuite/g++.old-deja/g++.law/typeck1.C b/gcc/testsuite/g++.old-deja/g++.law/typeck1.C new file mode 100644 index 000000000000..2fabfe9db833 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/typeck1.C @@ -0,0 +1,18 @@ +// Build don't link: +// GROUPS passed typeck +// typeck file +// From: vern@daffy.ee.lbl.gov (Vern Paxson) +// Date: 24 Sep 1992 23:11:22 GMT +// Subject: 2.2.2 type-checking error (?) when comparing pointers +// Message-ID: <26475@dog.ee.lbl.gov> + + + class a { }; + class foo : a { }; + class bar : a { }; + + test( const foo* f, const bar* b ) + { + return f == b;// ERROR - + } + diff --git a/gcc/testsuite/g++.old-deja/g++.law/typeck2.C b/gcc/testsuite/g++.old-deja/g++.law/typeck2.C new file mode 100644 index 000000000000..485a92918664 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/typeck2.C @@ -0,0 +1,16 @@ +// Build don't link: +// GROUPS passed typeck +// typeck file +// From: Jutta Degener <jutta@cs.tu-berlin.de> +// Date: Wed, 9 Jun 1993 17:58:35 +0200 (MET DST) +// Subject: 2.4.3: Type of new <typedef'ed array> +// Message-ID: <199306091558.AA19075@mail.cs.tu-berlin.de> + + typedef int arr[10]; + main() + { + int * p = new int[10]; + int * q = new arr; /* g++ complains, but shouldn't */ + int (* r)[10] = new arr; /* g++ doesn't complain, but should */// ERROR - + } + diff --git a/gcc/testsuite/g++.old-deja/g++.law/typeck3.C b/gcc/testsuite/g++.old-deja/g++.law/typeck3.C new file mode 100644 index 000000000000..76c36843fd60 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/typeck3.C @@ -0,0 +1,23 @@ +// Build don't link: +// GROUPS passed typeck +// typeck file +// From: Dror Caspi <dror@fibronics.co.il> +// Date: Wed, 9 Jun 1993 17:43:48 +0300 +// Subject: function typedefs in classes +// Message-ID: <199306091443.AA03735@zorba.fibronics.co.il> + +class a +{ + public: + typedef void (X)(); + + X x; // Member function of type X +}; + +class b +{ + public: + typedef void (X)(); //!!!!!! g++ says : syntax error before `;' + + X x; // Member function of type X +}; diff --git a/gcc/testsuite/g++.old-deja/g++.law/typeck4.C b/gcc/testsuite/g++.old-deja/g++.law/typeck4.C new file mode 100644 index 000000000000..9b510c057259 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/typeck4.C @@ -0,0 +1,21 @@ +// Build don't link: +// GROUPS passed typeck +class A { + public: + const int &operator[]( int i ); + private: + int k; +}; + +const int& A::operator[]( int i ) +{ + return k; +} + + +void ff( A &anA ) +{ + int &ani = anA[0];// ERROR - + + ani = 7; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/union1.C b/gcc/testsuite/g++.old-deja/g++.law/union1.C new file mode 100644 index 000000000000..5ab9c9055839 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/union1.C @@ -0,0 +1,30 @@ +// Build don't link: +// GROUPS passed unions +// excess errors test - XFAIL *-*-* +// anon-union file +// From: "Terry R. Coley" <terry@wag.caltech.edu> +// Date: Tue, 25 Aug 1992 17:33:29 -0700 +// Subject: possible bug in gcc/g++ +// Message-ID: <199208260033.AA19417@brahms.wag.caltech.edu> + +typedef enum { BADBINOP = 0, PLUS, MINUS, MULT, DIV, POWR } binoptype; +typedef enum { BADUNOP = 0, NEG = POWR+1, SIN, COS, TAN } unoptype; + +typedef struct { + char *s; + union { + binoptype bop; + unoptype uop; + }; +} +op_to_charp; + +op_to_charp BINOPS[] = { {"+", PLUS}, + {"-", MINUS}, + {"*", MULT}, + {"/", DIV}, + {"^", POWR} }; + +main() { + int dummy; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/union2.C b/gcc/testsuite/g++.old-deja/g++.law/union2.C new file mode 100644 index 000000000000..9f812d762e8b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/union2.C @@ -0,0 +1,25 @@ +// Build don't link: +// GROUPS passed unions +// anon-union file +// From: gerlek@dat.cse.ogi.edu (Michael Gerlek) +// Date: Tue, 8 Dec 92 12:56 PST +// Subject: private anonymous unions have public members? (gcc-2.3.1) +// Message-ID: <m0mzByL-0000hoC@dat.cse.ogi.edu> + +class A { +public: + int x; +private: + int y; + union { + int z; + }; +}; + +void f() { + A a; + + a.x = 0; + a.y = 1;// ERROR - .* + a.z = 2;// ERROR - +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/union3.C b/gcc/testsuite/g++.old-deja/g++.law/union3.C new file mode 100644 index 000000000000..62e894727dfb --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/union3.C @@ -0,0 +1,13 @@ +// Build don't link: +// GROUPS passed unions +// anon-union file +// From: dcb@us-es.sel.de (David Binderman 3841) +// Date: Tue, 30 Mar 93 09:06:15 +0200 +// Subject: Page 183 of the ARM +// Message-ID: <9303300706.AA17079@slsvitt> + +static union { + char* uC; +private: + int uI;// ERROR - +}; diff --git a/gcc/testsuite/g++.old-deja/g++.law/union4.C b/gcc/testsuite/g++.old-deja/g++.law/union4.C new file mode 100644 index 000000000000..2178697f8ec3 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/union4.C @@ -0,0 +1,13 @@ +// Build don't link: +// GROUPS passed unions +// anon-union file +// From: hossein@veritas.com (Hossein Raassi) +// Date: Wed, 15 Dec 93 13:52 PST +// Subject: Internal Error +// Message-ID: <m0pA49A-0000LdC@piano.veritas.com> + +static union { + struct SS { + int ss; + }; +};// ERROR - .* diff --git a/gcc/testsuite/g++.old-deja/g++.law/unsorted1.C b/gcc/testsuite/g++.old-deja/g++.law/unsorted1.C new file mode 100644 index 000000000000..eae69e8e94e4 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/unsorted1.C @@ -0,0 +1,31 @@ +// Build don't link: +// Special g++ Options: -O +// GROUPS passed unsorted +// unsorted.2 file +// From: skipnyc!skipsun!skip@fsg.com (Skip Gilbrech) +// Date: Wed, 10 Jun 92 6:55:18 EDT +// Subject: Problem with derived class access adjustment and -O +// Message-ID: <9206101055.AA20593@skipsun.UUCP> + + +class A { + public: + virtual void func() = 0; +}; + +class B : public A { + public: + void func() {} +}; + +class C : private B { + public: + B::func; +}; + +class D { + C c; + public: + void func() { c.func(); } +}; + diff --git a/gcc/testsuite/g++.old-deja/g++.law/unsorted2.C b/gcc/testsuite/g++.old-deja/g++.law/unsorted2.C new file mode 100644 index 000000000000..3b81431233d6 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/unsorted2.C @@ -0,0 +1,26 @@ +// Build don't link: +// GROUPS passed unsorted +// code-gen file +// From: klaus@steinitz.mathematik.uni-dortmund.de +// Date: Mon, 15 Nov 1993 16:51:11 +0100 +// Message-ID: <9311151551.AA17761@steinitz.mathematik.uni-dortmund.de> + +template <int A,int B> +class X +{ +}; + +template <int A,int B,int C> +X<A,C> f(X<A,B>,X<B,C>) +{ + X<A,C> result; + return result; +} + +main() +{ + X<1,3> x; + X<1,2> y; + X<2,3> z; + x=f(y,z); +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/vbase1.C b/gcc/testsuite/g++.old-deja/g++.law/vbase1.C new file mode 100644 index 000000000000..a68c3b143b5e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/vbase1.C @@ -0,0 +1,28 @@ +// Build don't link: +// GROUPS passed vbase +// vbase file +// From: pino@hubble.eecs.berkeley.edu (Jose Luis Pino) +// Date: 28 Jul 1994 05:17:39 GMT +// Subject: g++ 2.6 bug: virtual base class & protected methods +// Message-ID: <317f1j$o9c@agate.berkeley.edu> + + +#include <iostream.h> + +class a { +protected: + virtual void foo() { cout << "Class A\n";} +}; + +class b : public virtual a {}; + +class c : public b { +public: + void bar() { b::foo();} +}; + +main() { + c test; + test.bar(); +} + diff --git a/gcc/testsuite/g++.old-deja/g++.law/virtual1.C b/gcc/testsuite/g++.old-deja/g++.law/virtual1.C new file mode 100644 index 000000000000..8192273f0a3d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/virtual1.C @@ -0,0 +1,21 @@ +// Build don't link: +// Special g++ Options: -Woverloaded-virtual +// GROUPS passed virtual-warnings +// copy file +// From: gfm@mencon.mencon.oz.au (Graham Menhennitt) +// Date: Thu, 29 Apr 93 20:53:07 EST +// Subject: 4 bugs in g++ 2.3.3 +// Message-ID: <9304291053.AA00090@mencon> + + struct A { + virtual ~A(void); + }; + + struct B { + friend class A; + virtual void f(void); + }; + + struct C : public A { + virtual void f(void); + }; diff --git a/gcc/testsuite/g++.old-deja/g++.law/virtual2.C b/gcc/testsuite/g++.old-deja/g++.law/virtual2.C new file mode 100644 index 000000000000..fa9bb69a4a39 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/virtual2.C @@ -0,0 +1,31 @@ +// GROUPS passed virtual-functions +// Not in g++ bugs snapshot +// From: grande@isi.edu (Jim Grande) +// Subject: g++ 2.3.3 (HPPA) virt class definition dumps core +// Date: 5 Mar 1993 22:51:14 -0500 +// Message-ID: <23611@venera.isi.edu> + +#include <stdio.h> + +class doubleclass +{ + public: + double d; + doubleclass(double x = 0) { d = x; }; +}; + +class test +{ + doubleclass doublec; +}; + +class vderived : virtual public test +{ +}; + +int main() +{ + vderived v; + + printf ("PASS\n"); +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/virtual3.C b/gcc/testsuite/g++.old-deja/g++.law/virtual3.C new file mode 100644 index 000000000000..d141f87ecb1b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/virtual3.C @@ -0,0 +1,47 @@ +// GROUPS passed virtual-functions +// virtual file +// From: allan@ramjet.multinet.DE (Allan Brighton) +// Subject: pos. bug in gcc-2.5.2 on hp +// Date: 4 Nov 1993 22:57:36 -0500 +// Message-ID: <9311041820.AA05942@ramjet.multinet.DE> + +#include <iostream.h> +#include <strstream.h> + + +class BugStream : public ostrstream { +public: + BugStream() {} + BugStream& eval(); +}; + + +static struct Eval_ { } eval; +BugStream& operator<<(ostream& os, Eval_); + +BugStream& BugStream::eval() +{ + // make sure str is null terminated + *this << ends; + + // eval the command and set the status + char* s = str(); + cerr << s << endl; + + // reset the stream for the next command + clear(0); + rdbuf()->freeze(0); + seekp(0); + + return *this; +} + +BugStream& operator<<(ostream& os, Eval_) +{ + return ((BugStream&)os).eval(); +} + +main() { + BugStream bs; + bs << "PASS" << eval; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/virtual4.C b/gcc/testsuite/g++.old-deja/g++.law/virtual4.C new file mode 100644 index 000000000000..f6310d35fa16 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/virtual4.C @@ -0,0 +1,31 @@ +// GROUPS passed virtual-functions +#include <stdio.h> +#include <stdlib.h> + +int aset = 0; +class A +{ + public: + void Set() { SetProp(); } + virtual void SetProp() { aset++;} +}; + +class B:public A +{ + public: + void SetProp() { if (!aset) { printf ("FAIL\n"); exit (0);} aset--;} +}; + +main() +{ + A a; + B b; + A *c=new A; + A *d=new B; + + a.Set(); + b.Set(); + c->Set(); + d->Set(); + printf ("PASS\n"); +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/visibility10.C b/gcc/testsuite/g++.old-deja/g++.law/visibility10.C new file mode 100644 index 000000000000..14dfa333dea0 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/visibility10.C @@ -0,0 +1,21 @@ +// Build don't link: +// GROUPS passed visibility + +#include <iostream.h> + +class base { +public: + void f1 () { cout << "f1" << endl; }; + void f2 () { cout << "f2" << endl; }; +}; + +class deriv : public base { + void base :: f1();// ERROR - .* +}; + +int main () +{ + deriv d; + + d.f2(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/visibility11.C b/gcc/testsuite/g++.old-deja/g++.law/visibility11.C new file mode 100644 index 000000000000..9fa31dc3163e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/visibility11.C @@ -0,0 +1,48 @@ +// Build don't link: +// Special g++ Options: -w +// GROUPS passed visibility +// visibility file +// From: Alan Shepherd <a.shepherd@nexor.co.uk> +// Date: Tue, 22 Jun 1993 14:53:23 +0100 +// Subject: bug with MI in gcc-2.4.5 +// Message-ID: <9659.740757203@nexor.co.uk> + +class A +{ + int a; + +protected: + + virtual void State(int b) { a = b; } + +}; + +class B : public A +{ + char* foo; + +public: + + B(const char*); +}; + +class C : public A +{ + char* foo2; + +public: + + C(const char*); +}; + +class D : public B, public C +{ + +protected: + + virtual void State(int a) + { + B::State(a); + C::State(a); + } +}; diff --git a/gcc/testsuite/g++.old-deja/g++.law/visibility12.C b/gcc/testsuite/g++.old-deja/g++.law/visibility12.C new file mode 100644 index 000000000000..c3a9963f9943 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/visibility12.C @@ -0,0 +1,18 @@ +// Build don't link: +// GROUPS passed visibility +// visibility file +// From: Mark Rawling <Mark.Rawling@mel.dit.csiro.au> +// Date: Wed, 30 Jun 93 15:28:34 +1000 +// Subject: member access rule bug +// Message-ID: <9306300528.AA17185@coda.mel.dit.CSIRO.AU> +struct a { + int aa; + }; + +class b : private a { + }; + +class c : public b { + int xx(void) { return (aa); } // aa should be invisible// ERROR - .* + }; + diff --git a/gcc/testsuite/g++.old-deja/g++.law/visibility13.C b/gcc/testsuite/g++.old-deja/g++.law/visibility13.C new file mode 100644 index 000000000000..f1f4684553f7 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/visibility13.C @@ -0,0 +1,108 @@ +// Build don't link: +// GROUPS passed visibility +// visibility file +// From: dinh@cs.ucla.edu (Dinh Le) +// Date: Mon, 12 Jul 93 22:21:06 -0700 +// Subject: class, template and their scoping problem +// Message-ID: <9307130521.AA18312@oahu.cs.ucla.edu> + +#include <iostream.h> +#include <assert.h> + +// --------------- Array.h && Array.cc ------------------ + +const int ArraySize = 12; + +template <class Type> +class Array { +friend class Array_RC; +public: + Array(const Type *ar, int sz) { init(ar,sz); } + virtual ~Array() { delete [] ia; } + virtual void print(ostream& = cout); + virtual Type& operator[](int ix) { return ia[ix]; } +private: + void init(const Type*, int); + int size; + int *ia; +}; + +template <class Type> +ostream& operator<<( ostream& os, Array<Type>& ar ) +{ + ar.print(os); + return os; +} + +template <class Type> +void Array<Type>::print(ostream& os) +{ + const lineLength = 12; + + os << "( " << size << " )< "; + for (int ix = 0; ix < size; ++ix) { + if (ix % lineLength == 0 && ix) os << "\n\t"; + os << ia[ ix ]; + + if (ix % lineLength != lineLength-1 && + ix != size-1) + os << ", "; + } + os << " >\n"; +} + +template <class Type> +void Array<Type>::init(const Type *array, int sz) +{ + ia = new Type[size = sz]; + + for (int ix = 0; ix < size; ++ix) + ia[ix] = (array!=0) ? array[ix] : (Type)0; +} + +// --------------- Array_RC.h && Array_RC.cc ---------------- + +template <class Type> +class Array_RC : public Array<Type> {// ERROR - previous declaration.* +public: + Array_RC(const Type *ar, int sz); + Type& operator[](int ix); +}; + +template <class Type> +Array_RC<Type>::Array_RC(const Type *ar, int sz) : Array<Type>(ar, sz) {} + +template <class Type> +Type &Array_RC<Type>::operator[](int ix) { + assert(ix >= 0 && ix < size);// ERROR - member .size.* + return ia[ix];// ERROR - member .ia.* +} + +// ------------------- Test routine ---------------------- + +template <class Type> +void try_array( Array<Type> &iA ) +{ + cout << "try_array: initial array values:\n"; + cout << iA << endl; +} + +template <class Type> +inline void +try_array( Array_RC<Type> &rc ) +{ + try_array( ((Array<Type>&)rc) ); +} + +main() +{ + static int ia[10] = { 12, 7, 14, 9, 128, 17, 6, 3, 27, 5 }; + Array_RC<int> iA(ia, 10);// ERROR - .struct Array_RC redecl.* + + cout << "template Array_RC class" << endl; + try_array(iA); + + return 0; +} + +template class Array_RC<int>; diff --git a/gcc/testsuite/g++.old-deja/g++.law/visibility14.C b/gcc/testsuite/g++.old-deja/g++.law/visibility14.C new file mode 100644 index 000000000000..7f2251bdf4b4 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/visibility14.C @@ -0,0 +1,21 @@ +// Build don't link: +// GROUPS passed visibility +// visibility file +// From: ajp@eng.cam.ac.uk +// Date: Tue, 13 Jul 93 17:15:11 BST +// Message-ID: <1171.9307131615@ace.eng.cam.ac.uk + +class A { + static A* list; + + protected: + struct AA { + AA(); + ~AA(); + }; +}; + +A::AA::~AA() +{ + A* d=list; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/visibility15.C b/gcc/testsuite/g++.old-deja/g++.law/visibility15.C new file mode 100644 index 000000000000..9371eec798c3 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/visibility15.C @@ -0,0 +1,25 @@ +// Build don't link: +// GROUPS passed visibility +// visibility file +// From: wpsun4!xinforms!johnjo@uunet.uu.net (John D. Johnson) +// Date: Wed, 4 Aug 93 13:25:25 MDT +// Subject: Access to private 'operator new()' +// Message-ID: <9308041925.AA09825@xinforms.wpunix +#include <stdio.h> +#include <sys/types.h> + +class X { +private: + void* operator new(size_t) {// ERROR - .* + printf("Inside private new().\n"); + return NULL; + } +public: + X() {} +}; + + +int main(void) +{ + X* p = new X;// ERROR - .* +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/visibility16.C b/gcc/testsuite/g++.old-deja/g++.law/visibility16.C new file mode 100644 index 000000000000..b5d87ef363d6 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/visibility16.C @@ -0,0 +1,35 @@ +// Build don't link: +// GROUPS passed visibility +// visibility file +// From: Marie Trapp <Marie.Trapp@analog.com> +// Date: Thu, 5 Aug 93 11:55:15 EDT +// Subject: access of protected members +// Message-ID: <9308051553.AA07639@nwd2sun1.analog.com> +class A { + protected: + int astuff; + A() { + astuff = 3; + } +}; + +class B : public A { + int bstuff; + public: + B( A *p) { + bstuff = p->astuff;// ERROR - .* + } +}; + +class C : public A { + int cstuff; + public: + C() { + cstuff = 5; + } +}; + +main() { + C cvar; + B bvar(&cvar); +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/visibility17.C b/gcc/testsuite/g++.old-deja/g++.law/visibility17.C new file mode 100644 index 000000000000..ae198b0bc830 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/visibility17.C @@ -0,0 +1,63 @@ +// Build don't link: +// GROUPS passed visibility +// visibility file +// From: Sandeep Shroff <ss@caere.com> +// Date: Thu, 05 Aug 1993 17:23:20 -0700 +// Subject: Access to private constructor. +// Message-ID: <9308060023.AA10283@neptune.caere.com> +#include <iostream.h> + +class Base +{ +public: + char* getName() {return name_;} + +private: + Base(); + Base(char* str); + + char* name_; +}; + +class Derived : public Base +{ +public: + Derived(int n, char* str); + Derived(int n); + + getNum() {return num_;} +private: + int num_; +}; + +Base::Base() +{ // ERROR - private + name_ = strcpy(new char[strlen(" ") + 1], " "); +} + +Base::Base(char* str) +{ // ERROR - private + if(str != NULL) + name_ = strcpy(new char[strlen(str) + 1], str); +} + +Derived::Derived(int n, char* str) : Base(str) +{// ERROR - .* + num_ = n; +} + +Derived::Derived(int n) : Base() +{// ERROR - .* + num_ = n; +} + + + +int main() +{ + // Derived* d = new Derived(10, "test"); + Derived* d = new Derived(10); + + cerr << d->getNum() << "\t" << d->getName() << endl; +} + diff --git a/gcc/testsuite/g++.old-deja/g++.law/visibility18.C b/gcc/testsuite/g++.old-deja/g++.law/visibility18.C new file mode 100644 index 000000000000..a294f13edf92 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/visibility18.C @@ -0,0 +1,20 @@ +// Build don't link: +// GROUPS passed visibility +// visibility file +// From: cmwang@iis.sinica.edu.tw (Chien-Min Wang) +// Date: Fri, 6 Aug 93 19:42:31 CST +// Subject: A bug in g++ 2.4.5 +// Message-ID: <9308061142.AA08533@iiserv> +struct T1 { int i; }; + +struct T2 { int j; }; + +struct T3 : public T1, private T2 { +} x; + +int main () +{ + x.i = 1; + x.j = 2; // error: x.j is private// ERROR - .* + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/visibility19.C b/gcc/testsuite/g++.old-deja/g++.law/visibility19.C new file mode 100644 index 000000000000..0f22d6568b71 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/visibility19.C @@ -0,0 +1,40 @@ +// Build don't link: +// GROUPS passed visibility +// visibility file +// From: mclaugh@tnt.acsys.com (Mark A. McLaughlin) +// Date: Wed, 25 Aug 93 14:30:47 MDT +// Subject: g++ bug +// Message-ID: <9308252030.AA02352@tnt.acsys.com> +class B { +protected: + int i; +}; + +class D1 : public B { +}; + +class D2 : public B { + friend void fr(B*,D1*,D2*); + void mem(B*,D1*); +}; + +void fr(B* pb, D1* p1, D2* p2) +{ + pb->i = 1; // illegal// ERROR - .* + p1->i = 2; // illegal// ERROR - .* + p2->i = 3; // ok (access through D2) +} + +void D2::mem(B* pb, D1* p1) +{ + pb->i = 1; // illegal// ERROR - .* + p1->i = 2; // illegal// ERROR - .* + i = 3; // ok (access through `this') +} + +void g(B* pb, D1* p1, D2* p2) +{ + pb->i = 1; // illegal// ERROR - .* + p1->i = 2; // illegal// ERROR - .* + p2->i = 3; // illegal// ERROR - .* +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/visibility20.C b/gcc/testsuite/g++.old-deja/g++.law/visibility20.C new file mode 100644 index 000000000000..011abef44c92 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/visibility20.C @@ -0,0 +1,36 @@ +// Build don't link: +// GROUPS passed visibility +// visibility file +// From: doug@foxtrot.ccmrc.ucsb.edu (Douglas Scott) +// Date: Tue, 10 Aug 93 10:06:33 PDT +// Subject: G++ 2.4.5 allows access to protected base members +// Message-ID: <9308101706.AA04485@foxtrot.ccmrc.ucsb.edu> + +class Base { +protected: + void protectedBaseFunction() {} // ERROR - protected +public: + Base() {} +}; + + +class Derived : public Base { +public: + Derived() {} + void noticeThisFunction(Base *); +}; + + +void +Derived::noticeThisFunction(Base *b) { + b->protectedBaseFunction(); // ARM says this is not allowed// ERROR - .* + // since it is not called on 'this' +} + +main() { + Base b; + Derived d; + d.noticeThisFunction(&b); + printf("gpptest run\n");// ERROR - .* +} + diff --git a/gcc/testsuite/g++.old-deja/g++.law/visibility21.C b/gcc/testsuite/g++.old-deja/g++.law/visibility21.C new file mode 100644 index 000000000000..845854029bfe --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/visibility21.C @@ -0,0 +1,17 @@ +// Build don't link: +// GROUPS passed visibility +// visibility file +// From: klamer@mi.el.utwente.nl (Klamer Schutte) +// Date: Thu, 12 Aug 93 12:03:09 +0200 +// Subject: g++ 2.4.5 failed to report a bug +// Message-ID: <9308121003.AA02294@mi.el.utwente.nl> +class A { +protected: + void foo(); // ERROR - protected +}; + +class B : public A +{ + void bar(A &a) + { a.foo(); }// ERROR - .* +}; diff --git a/gcc/testsuite/g++.old-deja/g++.law/visibility22.C b/gcc/testsuite/g++.old-deja/g++.law/visibility22.C new file mode 100644 index 000000000000..4007769a1369 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/visibility22.C @@ -0,0 +1,26 @@ +// Build don't link: +// GROUPS passed visibility +// excess errors test - XFAIL *-*-* +// visibility file +// From: Robert Carden <carden@thoth.ics.uci.edu> +// Date: Thu, 12 Aug 1993 13:48:05 -0700 +// Subject: bug 8/12/93 -- #5 +// Message-ID: <9308121348.aa26256@Paris.ics.uci.edu> + +// 5.cc +#include <stream.h> + +class A { + int x; +public: + void f(int); + void f(float); + void g(void *); +}; + +class B : private A { +protected: + A::f; +public: + A::g; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.law/visibility23.C b/gcc/testsuite/g++.old-deja/g++.law/visibility23.C new file mode 100644 index 000000000000..31cd26c1fc29 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/visibility23.C @@ -0,0 +1,27 @@ +// Build don't link: +// GROUPS passed visibility +// excess errors test - XFAIL *-*-* +// visibility file +// From: Robert Carden <carden@thoth.ics.uci.edu> +// Date: Thu, 12 Aug 1993 13:47:11 -0700 +// Subject: bug 8/12/93 -- #4 +// Message-ID: <9308121347.aa26185@Paris.ics.uci.edu> +// +// 4.cc +// +#include <stream.h> + +class A { + int x; +public: + void f(int); + void f(float); + void g(void *); +}; + + +class B : public A { +private: + A::f; + A::g;// ERROR - .* , XFAIL *-*-* +}; diff --git a/gcc/testsuite/g++.old-deja/g++.law/visibility24.C b/gcc/testsuite/g++.old-deja/g++.law/visibility24.C new file mode 100644 index 000000000000..b40075fdbe17 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/visibility24.C @@ -0,0 +1,40 @@ +// Build don't link: +// GROUPS passed visibility +// visibility file +// From: joe@consolve.com (Joe Shapiro) +// Date: Fri, 20 Aug 93 17:18:18 EDT +// Subject: Template classes seem to allow users to get at private members +// Message-ID: <9308202118.AA25599@ghana.consolve> +/* + * private.cc + */ +extern "C" void printf(...); + +template <class T> +class A +{ +public: + void Fun() { printf( "Fun fun fun!\n" ); } // ERROR - private +}; + + +template <class T> +class B: private A<T> +{ +}; + + +class C +{ +public: + C() { _b.Fun(); }// ERROR - .* + +private: + B<int> _b; +}; + + +main() +{ + C c; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/visibility25.C b/gcc/testsuite/g++.old-deja/g++.law/visibility25.C new file mode 100644 index 000000000000..76ca8d8b402b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/visibility25.C @@ -0,0 +1,26 @@ +// Build don't link: +// GROUPS passed visibility +// visibility file +// From: gfm@mencon.mencon.oz.au (Graham Menhennitt) +// Date: Wed, 17 Nov 93 21:30:32 EST +// Subject: gcc 2.5.3 - can't privately inherit and contain same class +// Message-ID: <9311171030.AA00604@mencon> +#include <iostream.h> + +class A { +public: + A(void); +}; + +class B : private A { +public: + B(void) : A() {} +}; + +class C : public B { +public: + C(void) : B(), a() {} + +private: + A a; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.law/visibility26.C b/gcc/testsuite/g++.old-deja/g++.law/visibility26.C new file mode 100644 index 000000000000..54fc43e2053b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/visibility26.C @@ -0,0 +1,18 @@ +// Build don't link: +// GROUPS passed visibility +// visibility file +// From: jamshid@ses.com (Jamshid Afshar) +// Date: Sun, 12 Dec 93 03:09:15 CST +// Subject: Missed access declaration error +// Message-ID: <9312120909.AA22135@ses.com> + +class X { + public: + void f(); +}; + +class Y : private X { + public: + void f(int);// ERROR - because.* + X::f; // g++ 2.5.5 doesn't flag this misuse +};// ERROR - cannot adjust.* diff --git a/gcc/testsuite/g++.old-deja/g++.law/visibility27.C b/gcc/testsuite/g++.old-deja/g++.law/visibility27.C new file mode 100644 index 000000000000..4092624f7125 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/visibility27.C @@ -0,0 +1,19 @@ +// Build don't link: +// GROUPS passed visibility +// visibility file +// From: jbuck@synopsys.com (Joe Buck) +// Date: 3 Aug 1994 01:52:04 GMT +// Subject: 2.6.0 bug with protected members and virtual baseclasses +// Message-ID: <31mt84$lfq@hermes.synopsys.com> + +struct R { +protected: + virtual void foo(); +}; + +struct A : public R { +}; + +struct B : virtual public A { + void bletch() { foo();} +}; diff --git a/gcc/testsuite/g++.old-deja/g++.law/visibility28.C b/gcc/testsuite/g++.old-deja/g++.law/visibility28.C new file mode 100644 index 000000000000..e92c299960fc --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/visibility28.C @@ -0,0 +1,24 @@ +// Build don't link: +// GROUPS passed visibility +extern "C" int printf( const char *, ...); + +class B { +public: + B() { }; + virtual ~B() { printf( "B::~B\n"); }; +}; + +class D : public B { +public: + virtual ~D() { printf( "D::~D\n"); }; + void operator = ( int i) { this->~B(); }// ERROR - D has no ~B part to it +}; + +int +main() +{ + D * pd = new D; + B * pb = pd; + delete pb; + return 0; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.law/visibility3.C b/gcc/testsuite/g++.old-deja/g++.law/visibility3.C new file mode 100644 index 000000000000..1e02a4bd9e58 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/visibility3.C @@ -0,0 +1,22 @@ +// Build don't link: +// GROUPS passed visibility +// visibility file +// From: kol@world.std.com (Nikolay Yatsenko) +// Date: Wed, 27 Jan 1993 16:39:00 -0500 +// Subject: g++ bug +// Message-ID: <199301272139.AA25442@world.std.com> + +int x; + +int main(void) +{ + static int s; + int x; // ERROR - declared + extern int g(); + + struct local { + int g() { return x; } // illegal (non-static x); g++ does not give error// ERROR - + int h() { return s; } // ok, but g++ give error + }; + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/visibility4.C b/gcc/testsuite/g++.old-deja/g++.law/visibility4.C new file mode 100644 index 000000000000..5a92c6c07941 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/visibility4.C @@ -0,0 +1,25 @@ +// Build don't link: +// GROUPS passed visibility +// visibility file +// From: dcb@us-es.sel.de (David Binderman 3841) +// Date: Tue, 30 Mar 93 15:48:47 +0200 +// Subject: page 242 of the ARM +// Message-ID: <9303301348.AA20751@slsvitt> + +class A { +public: + int b; +}; + +class C : private A { // NOTE WELL. private, not public +public: + int d; +}; + +extern "C" int printf( const char *, ...); + +class E : public C { + void f() { + printf( "%d\n", b);// ERROR - .* + }; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.law/visibility5.C b/gcc/testsuite/g++.old-deja/g++.law/visibility5.C new file mode 100644 index 000000000000..a68e360026dd --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/visibility5.C @@ -0,0 +1,17 @@ +// Build don't link: +// GROUPS passed visibility + +class a { + +private: + a (int i);// ERROR - .* + +public: + a (); +}; + +void test () +{ + a *ap = new a; + a *ap2 = new a (3);// ERROR - .* +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/visibility6.C b/gcc/testsuite/g++.old-deja/g++.law/visibility6.C new file mode 100644 index 000000000000..7e8b7c744f8d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/visibility6.C @@ -0,0 +1,23 @@ +// Build don't link: +// GROUPS passed visibility +// visibility file +// From: Rob Hasker <hasker@sparc0a.cs.uiuc.edu> +// Date: Sat, 3 Apr 1993 13:19:05 -0600 +// Subject: no privacy +// Message-ID: <199304031919.AA20554@sparc17.cs.uiuc.edu +class Top { +public: + Top() {} + void val() {} // ERROR - private base class +}; + +class Derived : private Top { +public: + Derived() {} +}; + +class Unrelated { + Derived derived; +public: + void oops() { derived.val(); }// ERROR - .* +}; diff --git a/gcc/testsuite/g++.old-deja/g++.law/visibility7.C b/gcc/testsuite/g++.old-deja/g++.law/visibility7.C new file mode 100644 index 000000000000..26d172bcf819 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/visibility7.C @@ -0,0 +1,71 @@ +// Build don't link: +// GROUPS passed visibility +// visibility file +// From: Gordon Joly <G.Joly@cs.ucl.ac.uk> +// Date: Wed, 21 Apr 93 09:42:07 +0100 +// Subject: /*** BUG REPORT : THE MYTH OF PRIVATE INHERITANCE ***/ +// Message-ID: <9304210842.AA01815@life.ai.mit.edu> +#include <iostream.h> + +class A { + private: + int number; + public: + A(int i) : number(i) + {} + virtual ~A() + {} + virtual void Number(int c) + { number = c; } // ERROR - private + virtual int Number() + { return number; } // ERROR - private +}; + +class B : private A { + private: + int second_number; + public: + B(int c, int i) : second_number(c), A(i) + {} + virtual ~B() + {} + + virtual void firstNumber(int b) // renames member function Number(int) of class A + { A::Number(b); } + virtual int firstNumber() // renames member function Number() of class A + { return A::Number(); } +}; + + + + +class C { + private: + B* bobject; + public: + C(B* bp) : bobject(bp) + {} + virtual ~C() + {} + // + // the following two functions access + // private member functions of class B + // and they should not be able to do so + // + virtual void setBValue(int i) + { if (bobject) bobject->Number(i); }// ERROR - .* + virtual int getBValue() + { if (bobject) { return bobject->Number(); } return 0; }// ERROR - .* +}; + + +main() +{ + B* bobject = new B(2, 1); + C* cobject = new C(bobject); + cobject->setBValue(8); + cout << cobject->getBValue() << endl; + delete bobject; + delete cobject; +} + diff --git a/gcc/testsuite/g++.old-deja/g++.law/visibility8.C b/gcc/testsuite/g++.old-deja/g++.law/visibility8.C new file mode 100644 index 000000000000..3e5178c6c012 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/visibility8.C @@ -0,0 +1,26 @@ +// Build don't link: +// GROUPS passed visibility +// visibility file +// From: roland@jts.com (Roland Knight ) +// Date: Thu, 29 Apr 1993 16:17:00 -0400 +// Subject: gcc 2.3.3 bug +// Message-ID: <m0nof3E-0021ifC@jts.com +class t1 { +protected: + int a; +}; + + +class t2 : private t1 { +public: + int b; +}; + + +class t3 : public t2 { +public: + int ttt(); +}; + + +int t3::ttt() { return a; }// ERROR - .* diff --git a/gcc/testsuite/g++.old-deja/g++.law/visibility9.C b/gcc/testsuite/g++.old-deja/g++.law/visibility9.C new file mode 100644 index 000000000000..df98640c90d6 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/visibility9.C @@ -0,0 +1,22 @@ +// Build don't link: +// GROUPS passed visibility +// visibility file +// rom: roland@jts.com (Roland Knight ) +// Date: Sat, 8 May 1993 17:27:35 -0400 +// Subject: gcc 2.3.3 protected member access bug +// Message-ID: <9305082127.AA19577@icepick.jts.com> + +class A { +protected: + int a; +}; + +class B : public A { +public: + void f1(A* pa); +}; + + +void B::f1(A* pa) { + pa->a = 1; // illegal but allowed by gcc// ERROR - .* +} diff --git a/gcc/testsuite/g++.old-deja/g++.law/vtable1.C b/gcc/testsuite/g++.old-deja/g++.law/vtable1.C new file mode 100644 index 000000000000..c788c1790546 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/vtable1.C @@ -0,0 +1,27 @@ +// Build don't link: +// GROUPS passed vtable +// excess errors test - XFAIL *-*-* +// vtable file +// From: mrs@cygnus.com (Mike Stump) +// Date: Wed, 20 Apr 1994 17:46:11 -0700 +// Subject: vtable name generation is wrong +// Message-ID: <199404210046.RAA25652@rtl.cygnus.com> + +// prepare_fresh_vtable doesn't build the names of +// vtables very well. + +struct B { + virtual void vf() { } +}; + +struct Main { + virtual void vf() { } +}; + +struct Other : public Main, public B { + virtual void vf() { } +}; + +struct D : public Main, public B, public Other { + virtual void vf() { } +} a; diff --git a/gcc/testsuite/g++.old-deja/g++.law/vtable2.C b/gcc/testsuite/g++.old-deja/g++.law/vtable2.C new file mode 100644 index 000000000000..bbc8074de913 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/vtable2.C @@ -0,0 +1,19 @@ +// Build don't link: +// Special g++ Options: -fvtable-thunks +// GROUPS passed vtable +struct C1 +{ + virtual ~C1(); +}; + +struct C2 : public virtual C1 +{ + virtual ~C2(); +}; + +struct C3 : public virtual C2 +{ + virtual ~C3(); +}; + +C3::~C3() {} diff --git a/gcc/testsuite/g++.old-deja/g++.law/vtable3.C b/gcc/testsuite/g++.old-deja/g++.law/vtable3.C new file mode 100644 index 000000000000..5759026331db --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.law/vtable3.C @@ -0,0 +1,24 @@ +// GROUPS passed vtable +// vtable file +// From: Pete Bevin <pete@deng.icl.co.uk> +// Date: Mon, 28 Nov 1994 19:57:53 +0000 (GMT) +// Subject: g++-2.6.2: Virtual inheritance causes incorrect padding +// Message-ID: <Pine.SOL.3.91.941128194453.7510A-100000@gabriel> + +extern "C" void printf (char *, ...); + +struct A { +}; + + +struct B : virtual A { + public: + int b; +}; + + +main() +{ + B blist[10]; + printf ("PASS\n"); +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/.cvsignore b/gcc/testsuite/g++.old-deja/g++.mike/.cvsignore new file mode 100644 index 000000000000..7abff1dbead4 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/.cvsignore @@ -0,0 +1,2 @@ +Makefile +config.status diff --git a/gcc/testsuite/g++.old-deja/g++.mike/align1.C b/gcc/testsuite/g++.old-deja/g++.mike/align1.C new file mode 100644 index 000000000000..e26d398e0a9e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/align1.C @@ -0,0 +1,56 @@ +// Check to make sure we align virtual base classes properly + +class eel_base { +public: +}; + +class markable_eel_base : public eel_base { +private: + int mark; +}; + +class eel_edge : public markable_eel_base { +public: +private: + int foo; +}; + +class edge : public virtual eel_edge { +public: + edge() { + _weight = 0.0; + } +private: + double _weight; +}; +class eel_branch_edge : public virtual edge { +}; +class branch_edge : public eel_branch_edge { +}; + +class eel_interproc_branch_edge : public branch_edge { +}; + +class interproc_edge : public virtual edge { +}; + +class eel_jump_edge : public virtual edge { +protected: +}; + +class jump_edge : public eel_jump_edge { +public: +}; + +class eel_interproc_jump_edge : public jump_edge { +protected: +}; + +class interproc_jump_edge : public eel_interproc_jump_edge, + public interproc_edge { +public: +}; + +main () { + void *vp = new interproc_jump_edge(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/align2.C b/gcc/testsuite/g++.old-deja/g++.mike/align2.C new file mode 100644 index 000000000000..36791fed8031 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/align2.C @@ -0,0 +1,16 @@ +class Foo { +}; + +class Bar : virtual Foo { +public: + int b; +} x; + +main() +{ + // printf("Foo offset %d\n", (int)(Foo*)&x - (int)&x); + // printf("b offset %d\n", (int)&x.b - (int)&x); + // printf("sizeof is %d\n", sizeof(Bar)); + // This core dumps on a SPARC is alignment is wrong. + Bar blist[10]; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/ambig1.C b/gcc/testsuite/g++.old-deja/g++.mike/ambig1.C new file mode 100644 index 000000000000..5f67b7431099 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/ambig1.C @@ -0,0 +1,32 @@ +extern "C" int printf(const char *, ...); + +struct VB { + virtual void f() { + printf("VB\n"); + } +}; + +class M : public virtual VB { +public: + int i; + void f() { + printf("M(%d)\n", i); + } +}; + +class lM : public M { +}; + +class rM : public M { +}; + +class D : public lM, rM { +} d; // ERROR - ambiguous function + +main() { + ((lM*)&d)->i = 1; + ((rM*)&d)->i = 2; + ((rM*)&d)->f(); + ((lM*)&d)->f(); + ((VB*)&d)->f(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/asm1.C b/gcc/testsuite/g++.old-deja/g++.mike/asm1.C new file mode 100644 index 000000000000..f6c4fe5feff1 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/asm1.C @@ -0,0 +1,9 @@ +// Build don't link: +// Special g++ Options: + +struct A { + static void foo() asm("_my_routine"); +}; + +void A::foo() { +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/asm2.C b/gcc/testsuite/g++.old-deja/g++.mike/asm2.C new file mode 100644 index 000000000000..59771d6c6a3e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/asm2.C @@ -0,0 +1,27 @@ +// Compile with -S, there should be no references to +// LTRAMP in the output. + +extern "C" +{ + int printf (char *, ...); +} + +void +sub2 (void (*func) ()) +{ + (*func) (); +} + +int +main(void) +{ + extern void sub (void); + + sub2 (sub); +} + +void +sub (void) +{ + printf ("hello world\n"); +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/bool1.C b/gcc/testsuite/g++.old-deja/g++.mike/bool1.C new file mode 100644 index 000000000000..c8ff0e8416ac --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/bool1.C @@ -0,0 +1,16 @@ +// bool test case + +// Build don't link: + +void foo(int i) { + foo (true); +} + +struct C { + void foo(int i) { + foo(true); + } + void bar(bool b) { + bar(0); + } +}; diff --git a/gcc/testsuite/g++.old-deja/g++.mike/bool2.C b/gcc/testsuite/g++.old-deja/g++.mike/bool2.C new file mode 100644 index 000000000000..ce2a1f860245 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/bool2.C @@ -0,0 +1,57 @@ +// Special g++ Options: +class A { +public: + operator bool () { + return true; + } +} a; +class A1 { +public: + operator int () { + return true; + } +} a1; +class A2 { +public: + operator char * () { + return ""; + } +} a2; +class A3 { +public: + operator unsigned long long int () { + return true; + } +} a3; +class A4 { +public: + operator char * () { + return ""; + } + operator unsigned long long int () { + return true; + } +} a4; +class A5 { +public: + operator double () { + return 256.0e0*256.0e0*256.0e0*256.0e0*256.0e0*256.0e0*256.0e0*256.0e0 + *256.0e0*256.0e0*256.0e0*256.0e0*256.0e0*256.0e0*256.0e0*256.0e0 + *256.0e0*256.0e0*256.0e0*256.0e0*256.0e0*256.0e0*256.0e0*256.0e0 + *256.0e0*256.0e0*256.0e0*256.0e0*256.0e0*256.0e0*256.0e0*256.0e0; + } +} a5; +int i = true; +bool b = true; +bool c = (bool)(void (A::*)())0; +bool d = 256; +main() { + if (!d) return 1; + if (!a) return 1; + if (!(bool)a) return 1; + // if (!(long long)a) return 1; + if (!a1) return 1; + if (!a2) return 1; + if (!a3) return 1; + if (!a5) return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/bool4.C b/gcc/testsuite/g++.old-deja/g++.mike/bool4.C new file mode 100644 index 000000000000..96e4a6c2a52b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/bool4.C @@ -0,0 +1,3 @@ +// Build don't link: + +void foo(bool arg = (1==0)) {} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/conv1.C b/gcc/testsuite/g++.old-deja/g++.mike/conv1.C new file mode 100644 index 000000000000..b67ecbb0e6f9 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/conv1.C @@ -0,0 +1,10 @@ +enum E { C }; + +E foo() { + return C; +} + +main() { + if (foo() != C) + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/debug1.C b/gcc/testsuite/g++.old-deja/g++.mike/debug1.C new file mode 100644 index 000000000000..9f7bc39a3ba0 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/debug1.C @@ -0,0 +1,14 @@ +// Build don't link: +// Special g++ Options: -g -O -fkeep-inline-functions + +class c { +public: + ~c () { }; +}; + +int +foo (const c& lhs) +{ + c str (lhs); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/dyncast1.C b/gcc/testsuite/g++.old-deja/g++.mike/dyncast1.C new file mode 100644 index 000000000000..31b332bd9189 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/dyncast1.C @@ -0,0 +1,22 @@ +// Special g++ Options: -fexceptions -w +// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe powerpc-*-eabi + +#include <typeinfo> + +struct B { + virtual f() { } +}; + +struct D { + virtual f() { } +}; + +main() { + B b; + try { + (void)dynamic_cast<D&>(b); + } catch (bad_cast) { + return 0; + } + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/dyncast2.C b/gcc/testsuite/g++.old-deja/g++.mike/dyncast2.C new file mode 100644 index 000000000000..e6b10d70f8db --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/dyncast2.C @@ -0,0 +1,25 @@ +// Special g++ Options: -fexceptions -w +// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe powerpc-*-eabi + +// Ensure reference handling works. + +#include <typeinfo> + +struct B { + virtual f() { } +} ob; + +struct D : public B { + virtual f() { } +} od; + +main() { + B *b=&ob; + try { + void *vp = &dynamic_cast<D&>(*b); + return 1; + } catch (bad_cast) { + return 0; + } + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/dyncast3.C b/gcc/testsuite/g++.old-deja/g++.mike/dyncast3.C new file mode 100644 index 000000000000..ee775d043f19 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/dyncast3.C @@ -0,0 +1,19 @@ +// Special g++ Options: -fexceptions -w +// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-* +// Ensure that the return type of dynamic_cast is the real type. + +struct B { + virtual f() { } +}; + +struct D : public B { + virtual f() { } + int i; +} od; + +main() { + B *b=&od; + if (dynamic_cast<D*>(b)->i) + return 1; + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/dyncast4.C b/gcc/testsuite/g++.old-deja/g++.mike/dyncast4.C new file mode 100644 index 000000000000..43cb6ef52924 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/dyncast4.C @@ -0,0 +1,4 @@ +int main() { + int* d; + dynamic_cast<void*>(d); // ERROR - +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/dyncast5.C b/gcc/testsuite/g++.old-deja/g++.mike/dyncast5.C new file mode 100644 index 000000000000..f46d81e49357 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/dyncast5.C @@ -0,0 +1,71 @@ +#include <stddef.h> + +void *p; +int fail; + +class HeapTracked { +public: + virtual ~HeapTracked() = 0; + void *operator new(size_t size); + void operator delete(void *ptr); + static bool isObjectAllocation(const HeapTracked *ptr); +}; + +HeapTracked::~HeapTracked(){} +void * HeapTracked::operator new(size_t size) +{ + void * memPtr = ::operator new(size); + p = memPtr; + return memPtr; +} + +void HeapTracked::operator delete(void *ptr) +{ + if (p != ptr) + fail = 1; + ::operator delete(ptr); +} + +bool HeapTracked::isObjectAllocation(const HeapTracked *ptr) +{ + if (p != const_cast<void*>(dynamic_cast<const void*>(ptr))) + fail = 1; + return false; +} + +class Mumble1: public virtual HeapTracked { + double d; +public: + virtual ~Mumble1(){} +}; + +class Mumble2: public virtual HeapTracked { + double d; +public: + virtual ~Mumble2(){} +}; + +class Foo: virtual public HeapTracked, + virtual public Mumble1, + virtual public Mumble2 { +public: + ~Foo(){} +}; + +int main() +{ + Foo *pf = new Foo; + pf->isObjectAllocation(pf); + + Mumble1 *pm1 = pf; + pm1->isObjectAllocation(pm1); + + Mumble2 *pm2 = pf; + pm2->isObjectAllocation(pm2); + + // delete pf; + // delete pm1; + delete pm2; + + return fail; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/dyncast6.C b/gcc/testsuite/g++.old-deja/g++.mike/dyncast6.C new file mode 100644 index 000000000000..546561dda502 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/dyncast6.C @@ -0,0 +1,12 @@ +#include <typeinfo> + +class A { +public: + virtual void j () {} +}; + +class B : public A { }; + +void x (A& a) { + const B& b1 = dynamic_cast<B&>((const A&)a); // ERROR - opps +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/dyncast7.C b/gcc/testsuite/g++.old-deja/g++.mike/dyncast7.C new file mode 100644 index 000000000000..1373d0f5f6e4 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/dyncast7.C @@ -0,0 +1,28 @@ +// Special g++ Options: -fexceptions + +#include <typeinfo> +#include <stdexcept> + +class A { +public: + virtual void j () {} +}; + +class B : public A { }; + +void x (A& a) { + // These should all work. + const B& b2 = dynamic_cast<B&>(a); + const B& b3 = dynamic_cast<const B&>((const A&)a); + const B& b4 = dynamic_cast<const B&>(a); +} + +int main() { + try { + B b; + x (b); + } catch (exception& e) { + // If we get a bad_cast, it is wrong. + return 1; + } +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/dyncast8.C b/gcc/testsuite/g++.old-deja/g++.mike/dyncast8.C new file mode 100644 index 000000000000..5addfe07e731 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/dyncast8.C @@ -0,0 +1,18 @@ +#include <typeinfo> + +class Base +{ +public: + virtual ~Base() { } +}; + +class Derived : public Base { }; + +int main() +{ + const Derived b; + const Base* ap = &b; + + const Derived* p1 = dynamic_cast<const Derived*>(ap); + return p1 == 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/dyncast9.C b/gcc/testsuite/g++.old-deja/g++.mike/dyncast9.C new file mode 100644 index 000000000000..23db8c912bc3 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/dyncast9.C @@ -0,0 +1,16 @@ +class S1 { int i; }; +class S2 { int i; }; +class VB { +public: + virtual void foo() { } +}; + +class D : public S1, virtual public VB { +} d; + +class E : public S2, public D { +} e; + +int main() { + return (char *)&e - (char *)dynamic_cast<E*>((D*)&e); +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh1.C b/gcc/testsuite/g++.old-deja/g++.mike/eh1.C new file mode 100644 index 000000000000..faa48eedbee1 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh1.C @@ -0,0 +1,37 @@ +// Build don't link: +// Special g++ Options: -fexceptions -O -S + +extern "C" void printf (char *, ...); +extern "C" int atoi (const char *); + +struct Exception + { + int v; + Exception(int i) { v = i; }; + }; + + inc(int &i) + { + try { + if (i == 0) + throw Exception(i); + else + i++; + } + catch (Exception v) { + i = v.v; + } + } + +main (int argc, const char *argv[]) +{ + if (argc != 2) + { + printf ("usage: a.out <num>\n"); + exit (1); + } + int count = atoi (argv[1]); + inc (count); + printf ("success\n"); + exit (0); +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh10.C b/gcc/testsuite/g++.old-deja/g++.mike/eh10.C new file mode 100644 index 000000000000..a6ada1fedb73 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh10.C @@ -0,0 +1,28 @@ +// Special g++ Options: -fexceptions +// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-* + +void foo() { + int i; + i = 42; + throw i; +} + +void ee(int *); + +bar() { + int i = 2; + ee(&i); +} + +void ee(int *) { } + +main() { + try { + foo(); + return 3; + } catch (int& i) { + bar(); + return i != 42; + } + return 2; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh11.C b/gcc/testsuite/g++.old-deja/g++.mike/eh11.C new file mode 100644 index 000000000000..781521f8feeb --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh11.C @@ -0,0 +1,15 @@ +// Special g++ Options: -fexceptions +// Build don't link: + +struct A { + ~A(); +}; + +int main(int argc, char** argv) { + A a; + return 0; +} + + +A::~A() { +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh12.C b/gcc/testsuite/g++.old-deja/g++.mike/eh12.C new file mode 100644 index 000000000000..1a42e52c82c5 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh12.C @@ -0,0 +1,14 @@ +// Special g++ Options: -fexceptions +// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-* + +class MyError { }; + +int main (int argc, char **argv) { + try { + throw MyError(); + } + catch (MyError x) { + } + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh13.C b/gcc/testsuite/g++.old-deja/g++.mike/eh13.C new file mode 100644 index 000000000000..841202f349c5 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh13.C @@ -0,0 +1,6 @@ +// Special g++ Options: -fexceptions +// excess errors test - XFAIL a29k-*-* sh-*-* arm-*-pe**-* + +#include <string> + +main() { } diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh14.C b/gcc/testsuite/g++.old-deja/g++.mike/eh14.C new file mode 100644 index 000000000000..e7c321397a20 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh14.C @@ -0,0 +1,25 @@ +// Special g++ Options: -fexceptions +// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-* + +class arghh { +public: + int n; + arghh (int v) { n = v; } +}; + +int main () { + try { + throw arghh (11); + } + catch (arghh& a) { + if (a.n != 11) + return 1; + } + try { + throw arghh (22); + } + catch (arghh& a) { + if (a.n != 22) + return 2; + } +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh15.C b/gcc/testsuite/g++.old-deja/g++.mike/eh15.C new file mode 100644 index 000000000000..9ed673fc87df --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh15.C @@ -0,0 +1,6 @@ +// Build don't link: +// Special g++ Options: -fexceptions + +struct A { + A() throw (int); +}; diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh16.C b/gcc/testsuite/g++.old-deja/g++.mike/eh16.C new file mode 100644 index 000000000000..2a986d544663 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh16.C @@ -0,0 +1,26 @@ +// Special g++ Options: -fexceptions +// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-* + +int err = 1; + +struct A { + ~A() { + --err; + } +}; + +struct B { + A a; + B() { + throw 1; + } +}; + +main() { + try { + B b; + } catch (...) { + return err; + } + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh17.C b/gcc/testsuite/g++.old-deja/g++.mike/eh17.C new file mode 100644 index 000000000000..482ea0434f96 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh17.C @@ -0,0 +1,25 @@ +// Special g++ Options: -fexceptions +// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-* + +int err = 1; + +struct A { + ~A() { + --err; + } +}; + +struct B : public A { + B() { + throw 1; + } +}; + +main() { + try { + B b; + } catch (...) { + return err; + } + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh18.C b/gcc/testsuite/g++.old-deja/g++.mike/eh18.C new file mode 100644 index 000000000000..cf98bce49024 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh18.C @@ -0,0 +1,63 @@ +// Special g++ Options: -fexceptions +// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-* + +class VB { +public: + int n; + VB (int v) { n = v; } + VB (const VB& o) { + n = o.n; +// printf("copying VB from %d to %d\n", &o, this); + } +}; + +class D : public virtual VB { + int j; +public: + D(int i1, int i2) : VB(i2) { j = i1; } + VB& vb() { return *(VB*)this; } + const VB& vb() const { return *(const VB*)this; } +}; + +class pD : private virtual VB { + int j; +public: + pD(int i1, int i2) : VB(i2) { j = i1; } + VB& vb() { return *(VB*)this; } + const VB& vb() const { return *(const VB*)this; } +}; + + +int main () { + D d(1943, 4279); + pD pd(3621, 9527); + VB *vb = &d.vb(); + VB *pvb = &pd.vb(); + + // A catch of a public virtual base. + try { +// printf("Throwing D at %d (VB at %d)\n", &d, vb); + throw d; + } + catch (VB& vb) { +// printf("Catching VB at %d\n", &vb); + if (vb.n != 4279) + return 1; + } + catch (...) { + return 1; + } + + // A catch of a private virtual base. + try { +// printf("Throwing D at %d (VB at %d)\n", &pd, pvb); + throw pd; + } + catch (VB& vb) { +// printf("Catching VB at %d\n", &vb); + // This was a private base of the throw object, don't catch it. + return 1; + } + catch (...) { + } +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh19.C b/gcc/testsuite/g++.old-deja/g++.mike/eh19.C new file mode 100644 index 000000000000..3d9aee14ecee --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh19.C @@ -0,0 +1,23 @@ +// Special g++ Options: -fexceptions +// Build don't link: + +class test1 { +public: + class fehler{public:fehler(){};}; + func(int a) { + if( a == 0 ) + throw fehler(); + } +}; + +main() { + test1 var; + + try { + var.func(1); + var.func(0); + } catch(test1::fehler()) // ERROR - cannot have function type + { + ; + } +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh2.C b/gcc/testsuite/g++.old-deja/g++.mike/eh2.C new file mode 100644 index 000000000000..d808a65d1355 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh2.C @@ -0,0 +1,71 @@ +// Special g++ Options: -fexceptions +// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-* + +#include <stdlib.h> +#include <iostream.h> + +class Vector { +private: + int *p; + int sz; + +public: + // Exception class + class Range { + private: + int value_i; + + public: + Range( int i ) { value_i = i; }; + int value() { return value_i; }; + }; + + Vector( int s ); + ~Vector(); + int size() { return sz; }; + int& operator []( int i ); +}; + +Vector::Vector(int s) { + sz = s; + p = new int[sz]; +} + +Vector::~Vector() { + delete [] p; +} + +int& +Vector::operator [](int i) { + if (0<=i && i<sz) { + return p[i]; + } else { + throw Range( i ); + } +} + +void crash(Vector& v ) { + v[v.size()+10]; // Triggers range error! +} + +void do_something(Vector& v) { + crash( v ); +} + +void +f(Vector& v) { + try { + do_something( v ); + } catch (Vector::Range& r) { + cout << "Invalid vector range " << r.value() + << " caught in f()" << endl; + exit(0); + } +} + +main() { + Vector v(10); + + f( v ); + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh20.C b/gcc/testsuite/g++.old-deja/g++.mike/eh20.C new file mode 100644 index 000000000000..31f3c6f928a1 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh20.C @@ -0,0 +1,6 @@ +// Build don't link: +// Special g++ Options: -fexceptions -Wall + +main() { + throw 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh21.C b/gcc/testsuite/g++.old-deja/g++.mike/eh21.C new file mode 100644 index 000000000000..261e6ea5c6e7 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh21.C @@ -0,0 +1,14 @@ +// Special g++ Options: -fexceptions +// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-* + +int main () { + try { + try { + throw 1; + } catch ( char * ) { + } + } catch ( int ) { + return 0; + } + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh23.C b/gcc/testsuite/g++.old-deja/g++.mike/eh23.C new file mode 100644 index 000000000000..17a9669388f3 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh23.C @@ -0,0 +1,46 @@ +// Special g++ Options: -fexceptions +// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-* + +#include <exception> + +struct double_fault { }; +int fault_now; + +class E { +public: + E() { } + E(const E&) { + if (fault_now) + throw double_fault(); + } +}; + +void foo() { + try { + throw E(); + } catch (...) { + fault_now = 1; + throw; + } +} + +void bar() { + try { + foo(); + } catch (E e) { // double fault here + } +} + +void my_terminate() { + exit (0); // double faults should call terminate +} + +main() { + set_terminate (my_terminate); + try { + bar(); + } catch (...) { + return 1; + } + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh24.C b/gcc/testsuite/g++.old-deja/g++.mike/eh24.C new file mode 100644 index 000000000000..c9dd382f4697 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh24.C @@ -0,0 +1,33 @@ +// Special g++ Options: -fexceptions +// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-* + +int fail = 0; + +struct A { + int ok; + A() { + ok = 1; + } + ~A() { + if (! ok) + fail = 1; + ok = 0; + } +}; + +main() { + try { + try { + A a; + throw 1.0; + } catch (double i) { + A a1; + throw 1; // make sure both a1 and a2 are not destroyed when we throw! + } catch (int i) { + A a2; + throw 1.0; + } + } catch (int i) { + } + return fail; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh25.C b/gcc/testsuite/g++.old-deja/g++.mike/eh25.C new file mode 100644 index 000000000000..66045b1cf56f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh25.C @@ -0,0 +1,30 @@ +// Special g++ Options: -fexceptions +// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-* + +#include <exception> + +void my_terminate() { + exit (0); // Double faults should call terminate +} + +struct A { + A() { } + ~A() { + set_terminate (my_terminate); + throw 1; // This throws from EH dtor, should call my_terminate + } +}; + +main() { + try { + try { + throw 1; + } catch (int i) { + A a; // A hit on this EH dtor went to the wrong place + throw 1; + } + } catch (...) { + return 1; + } + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh26.C b/gcc/testsuite/g++.old-deja/g++.mike/eh26.C new file mode 100644 index 000000000000..35cafa4286a6 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh26.C @@ -0,0 +1,15 @@ +// Special g++ Options: -fexceptions +// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-* + +class MyExceptionHandler { }; + +main() { + try { + throw MyExceptionHandler(); + } catch(const MyExceptionHandler& eh) { + return 0; + } catch(...) { + return 1; + } + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh27.C b/gcc/testsuite/g++.old-deja/g++.mike/eh27.C new file mode 100644 index 000000000000..bd07138c7531 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh27.C @@ -0,0 +1,17 @@ +// Special g++ Options: -fexceptions +// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-* + +#include <typeinfo> + +class MyExceptionHandler { }; + +main() { + try { + throw MyExceptionHandler(); + } catch(const MyExceptionHandler& eh) { + return 0; + } catch(...) { + return 1; + } + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh28.C b/gcc/testsuite/g++.old-deja/g++.mike/eh28.C new file mode 100644 index 000000000000..3f2d0a6d68be --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh28.C @@ -0,0 +1,17 @@ +// Special g++ Options: -fexceptions +// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-* + +#include <typeinfo> + +int fail = 1; + +class X { public: virtual void p() { } }; +class Y : public X { public: virtual void p() { fail = 0; } }; + +main() +{ + try { Y y; throw y; } + catch (X& x) { x.p(); } + catch (...) { } + return fail; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh29.C b/gcc/testsuite/g++.old-deja/g++.mike/eh29.C new file mode 100644 index 000000000000..58c1f0b3f82c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh29.C @@ -0,0 +1,27 @@ +// Special g++ Options: -fexceptions +// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-* + +int count; + +class A { +public: + A() { +// printf("ctor %x\n", (int)this); + if (count==3) + throw 1; + ++count; + } + ~A() { + --count; +// printf("dtor %x\n", (int)this); + } +}; + +main() { + try { + A a[5]; + } catch (...) { + return count; + } + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh3.C b/gcc/testsuite/g++.old-deja/g++.mike/eh3.C new file mode 100644 index 000000000000..e8b87bf30f7e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh3.C @@ -0,0 +1,21 @@ +// Special g++ Options: -fexceptions +// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-* + +class foo { +public: + class error {}; + + void cause_error(void) { throw error(); } +}; + +int main(void) +{ + foo f; + try { + f.cause_error(); + } + catch (foo::error&) { + return 0; + } + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh30.C b/gcc/testsuite/g++.old-deja/g++.mike/eh30.C new file mode 100644 index 000000000000..61a30c8ddda0 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh30.C @@ -0,0 +1,5 @@ +// Build don't link: +// Skip if not native +// Special g++ Options: -fexceptions -fPIC -S + +main() { throw 1; } diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh31.C b/gcc/testsuite/g++.old-deja/g++.mike/eh31.C new file mode 100644 index 000000000000..65e683cf8fdd --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh31.C @@ -0,0 +1,23 @@ +// Special g++ Options: -fexceptions +// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-* + +int count; + +class Foo { +public: + Foo() { ++count; } + Foo(const Foo&) { ++count; } + ~Foo() { --count; } +}; + + +main() { + try { + throw Foo(); + } + catch (Foo& object) { + if (count == 1) + return 0; + } + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh32.C b/gcc/testsuite/g++.old-deja/g++.mike/eh32.C new file mode 100644 index 000000000000..12d601c883f7 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh32.C @@ -0,0 +1,20 @@ +// Build don't link: +// Special g++ Options: -fexceptions + +class Base { +public: + virtual ~Base() throw(); +}; + +Base::~Base() throw() +{ +} + +class Foo : public Base { +public: + virtual ~Foo() throw(); +}; + +Foo::~Foo() throw() +{ +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh33.C b/gcc/testsuite/g++.old-deja/g++.mike/eh33.C new file mode 100644 index 000000000000..e3a234e06ebc --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh33.C @@ -0,0 +1,19 @@ +// Special g++ Options: -fexceptions +// excess errors test - XFAIL hppa*-*-* a29k-*-* sparc64-*-elf sh-*-* z8k-*-* arm-*-pe**-* + +void my_unexpected() { + throw 42; +} + +foo() throw (int) { throw "Hi"; } + +main() { + set_unexpected (my_unexpected); + try { + foo(); + } catch (int i) { + if (i == 42) + return 0; + } + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh34.C b/gcc/testsuite/g++.old-deja/g++.mike/eh34.C new file mode 100644 index 000000000000..a1be275af472 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh34.C @@ -0,0 +1,14 @@ +// Special g++ Options: -fexceptions +// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-* + +void my_unexpected() { + exit (0); +} + +foo() throw () { throw "Hi"; } + +main() { + set_unexpected (my_unexpected); + foo(); + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh35.C b/gcc/testsuite/g++.old-deja/g++.mike/eh35.C new file mode 100644 index 000000000000..d9bd34c58e6c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh35.C @@ -0,0 +1,17 @@ +// Special g++ Options: -fexceptions +// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-* + +main() { + try { + throw 'a'; + } catch (char a) { + try { + throw 'a'; + } catch (int i) { + return 1; + } catch (char c) { + return 0; + } + } + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh36.C b/gcc/testsuite/g++.old-deja/g++.mike/eh36.C new file mode 100644 index 000000000000..fbb639204a73 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh36.C @@ -0,0 +1,29 @@ +// Special g++ Options: -fexceptions +// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-* + +#include <typeinfo> + +class A { + int space; +}; +class B { +public: + int data; + B(int i) : data(i) { + } +}; +class D : public A, public B { +public: + D(int i) : B(i) { + } +} d(42); + +main() { + try { + throw &d; + } catch (B* b) { + if (b->data == 42) + return 0; + } + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh37.C b/gcc/testsuite/g++.old-deja/g++.mike/eh37.C new file mode 100644 index 000000000000..75f6523a3a85 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh37.C @@ -0,0 +1,21 @@ +// Special g++ Options: -fexceptions +// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-* + +#include <typeinfo> + +class B { +public: + int data; + B(int i) : data(i) { + } +} b(42); + +main() { + try { + throw &b; + } catch (B* b) { + if (b->data == 42) + return 0; + } + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh38.C b/gcc/testsuite/g++.old-deja/g++.mike/eh38.C new file mode 100644 index 000000000000..915ef4c89e42 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh38.C @@ -0,0 +1,28 @@ +// Special g++ Options: -fexceptions +// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-* + +#include <typeinfo> + +class B { +public: + int data; + B(int i) : data(i) { + } +} b(42); + +main() { + try { + throw &b; + } catch (const B* bptr) { + if (bptr->data == 42) + { + try { + throw &b; + } catch (void *bptr) { + if (((B*)bptr)->data == 42) + return 0; + } + } + } + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh39.C b/gcc/testsuite/g++.old-deja/g++.mike/eh39.C new file mode 100644 index 000000000000..54d10959a572 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh39.C @@ -0,0 +1,28 @@ +// Special g++ Options: -fexceptions +// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-* + +int fail = 1; +class B { +public: + B() { throw 1; } +}; +class D : public B { +public: + D(); +}; + +D::D() try : B() { + fail = 1; +} catch (...) { + fail = 0; + throw; +} + +main() { + try { + D d; + fail = 1; + } catch (...) { + } + return fail; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh4.C b/gcc/testsuite/g++.old-deja/g++.mike/eh4.C new file mode 100644 index 000000000000..5de9b03ffe67 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh4.C @@ -0,0 +1,6 @@ +// Build don't link: +// Special g++ Options: -fexceptions + +foo() { + throw 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh40.C b/gcc/testsuite/g++.old-deja/g++.mike/eh40.C new file mode 100644 index 000000000000..16badc2d9116 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh40.C @@ -0,0 +1,29 @@ +// Special g++ Options: -fexceptions +// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-* + +int fail = 1; +class B { +public: + B() { throw 1; } +}; +class D : public B { +public: + D() try : B() { + fail = 1; + } catch (char c) { + fail = 1; + throw; + } catch (...) { + fail = 0; + throw; + } +}; + +main() { + try { + D d; + fail = 1; + } catch (...) { + } + return fail; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh41.C b/gcc/testsuite/g++.old-deja/g++.mike/eh41.C new file mode 100644 index 000000000000..4127402d09e6 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh41.C @@ -0,0 +1,29 @@ +// Special g++ Options: -fexceptions +// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-* + +int fail = 0; + +struct A { + A () { a = 'a'; b = 'b'; c = 'c'; } + ~ A () { + if ( a != 'a' ) fail = 1; + if ( b != 'b' ) fail = 1; + if ( c != 'c' ) fail = 1; + } + char a, b, c; +}; + +void some_init () { throw 1; } + +struct C : A { + C () { some_init (); } +}; + +int main () { + try { + C c; + } catch (int i) { + return 0; + } + return 1; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh42.C b/gcc/testsuite/g++.old-deja/g++.mike/eh42.C new file mode 100644 index 000000000000..6da9bd51c96e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh42.C @@ -0,0 +1,18 @@ +// Special g++ Options: -fexceptions +// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-* + +struct none { int i[50]; }; + +class my_ex { } a; + +none throw_it() { + throw 1; +} + +int main() { + try { + none n = throw_it(); + } catch (int ex) { + return 0; + } +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh43.C b/gcc/testsuite/g++.old-deja/g++.mike/eh43.C new file mode 100644 index 000000000000..c5fbde939d0f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh43.C @@ -0,0 +1,741 @@ +// Build don't link: +// Special g++ Options: -fexceptions + +// testcase to check obstack allocation for cleanups + +typedef unsigned char byte; +typedef unsigned short word16; +typedef unsigned long word32; +typedef unsigned char boolean; +enum {FALSE, TRUE}; +extern "C" { +extern void __eprintf (const char *, const char *, unsigned, const char *); +} +extern "C" { +typedef unsigned int size_t; +extern void *memccpy(void *, const void *, int, size_t); +extern void *memchr(const void *, int, size_t); +extern void *memset(void *, int, size_t); +} +template <class T> struct SecBlock +{ +public: + SecBlock(unsigned int size) + : size(size), ptr((new T [( size )]) ) {} + ~SecBlock() + {(memset(( ptr ), 0, ( size )*sizeof(*( ptr ))), delete [] ( ptr )) ;} + operator T *() const + {return ptr;} + T *operator +(unsigned int offset) + {return ptr+offset;} + T& operator[](int index) + {((void) (( index<size ) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "misc.h" , 31 , "index<size" ), 0) )) ; return ptr[index];} + const T& operator[](int index) const + {((void) (( index<size ) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "misc.h" , 33 , "index<size" ), 0) )) ; return ptr[index];} + const unsigned int size; + T *const ptr; +}; +typedef SecBlock<byte> SecByteBlock; +void xorbuf(byte *buf, const byte *mask, unsigned int count); +void byteReverse(word16 *out, const word16 *in, unsigned int byteCount); +void byteReverse(word32 *out, const word32 *in, unsigned int byteCount); +inline word16 Invert(const word16 value) +{ + return (value << 8) | (value >> 8); +} +inline word32 Invert(const word32 value) +{ + word32 work = ((value & 0xFF00FF00L) >> 8) | ((value & 0x00FF00FFL) << 8); + return (work << 16) | (work >> 16); +} +template <class T> inline T min (const T t1, const T t2) +{ + return (t1 < t2 ? t1 : t2); +} +template <class T> inline T max (const T t1, const T t2) +{ + return (t1 > t2 ? t1 : t2); +} +template <class T> inline void swap (T &a, T &b) +{ + T temp = a; + a = b; + b = temp; +} +template <class T> inline T rotl(T x, unsigned int y) +{ + return ((x<<y) | (x>>(sizeof(T)*8-y))); +} +template <class T> inline T rotr(T x, unsigned int y) +{ + return ((x>>y) | (x<<(sizeof(T)*8-y))); +} +int BytePrecision(unsigned long); +int BitPrecision(unsigned long); +unsigned long Crop(unsigned long, int size); +enum CipherDir {ENCRYPTION, DECRYPTION}; +class BlockTransformation +{ +public: + virtual ~BlockTransformation() {} + virtual void ProcessBlock(byte *inoutBlock) =0; + virtual void ProcessBlock(const byte *inBlock, byte *outBlock) =0; + virtual unsigned int BlockSize() const =0; +}; +class StreamCipher +{ +public: + virtual ~StreamCipher() {} + virtual byte ProcessByte(byte input) =0; + virtual void ProcessString(byte *outString, const byte *inString, unsigned int length); + virtual void ProcessString(byte *inoutString, unsigned int length); +}; +class RandomAccessStreamCipher : public StreamCipher +{ +public: + virtual ~RandomAccessStreamCipher() {} + virtual void Seek(unsigned long position) =0; +}; +class RandomNumberGenerator +{ +public: + virtual ~RandomNumberGenerator() {} + virtual byte GetByte() =0; + virtual int GetBit(); + virtual word32 GetLong(word32 min=0, word32 max=0xffffffffL); + virtual word16 GetShort(word16 min=0, word16 max=0xffff) + {return (word16)GetLong(min, max);} + virtual void GetBlock(byte *output, unsigned int size); +}; +template <class T> void Shuffle(RandomNumberGenerator &rng, T *array, unsigned int size) +{ + while (--size) + swap(array[size], array[(unsigned int)rng.GetLong(0, size)]); +} +class HashModule +{ +public: + virtual ~HashModule() {} + virtual void Update(const byte *input, unsigned int length) =0; + virtual void Final(byte *digest) =0; + virtual int DigestSize() const =0; + virtual void CalculateDigest(byte *digest, const byte *input, int length) + {Update(input, length); Final(digest);} +}; +class BufferedTransformation +{ +public: + virtual ~BufferedTransformation() {} + virtual unsigned long MaxRetrieveable() =0; + virtual void TransferTo(BufferedTransformation &target); + virtual boolean Attachable() {return FALSE;} + virtual void Detach(BufferedTransformation *) {} + virtual void Attach(BufferedTransformation *) {} + virtual void Close() {InputFinished();} + virtual void Put(byte inByte) =0; + virtual void Put(const byte *inString, unsigned int length) =0; + virtual void InputFinished() {} + void PutShort(word16 value, boolean highFirst=TRUE); + void PutLong(word32 value, boolean highFirst=TRUE); + virtual int Get(byte &outByte) =0; + virtual unsigned int Get(byte *outString, unsigned int getMax) =0; + int GetShort(word16 &value, boolean highFirst=TRUE); + int GetLong(word32 &value, boolean highFirst=TRUE); + unsigned int Skip(unsigned int skipMax); +}; +class PK_CryptoSystem +{ +public: + virtual ~PK_CryptoSystem() {}; + virtual unsigned int MaxPlainTextLength() const =0; + virtual unsigned int CipherTextLength() const =0; +}; +class PK_Encryptor : public PK_CryptoSystem +{ +public: + virtual void Encrypt(RandomNumberGenerator &rng, const byte *plainText, unsigned int plainTextLength, byte *cipherText) =0; +}; +class PK_Decryptor : public PK_CryptoSystem +{ +public: + virtual unsigned int Decrypt(const byte *cipherText, byte *plainText) =0; +}; +class PK_SignatureSystem +{ +public: + virtual ~PK_SignatureSystem() {}; + virtual unsigned int MaxMessageLength() const =0; + virtual unsigned int SignatureLength() const =0; +}; +class PK_Signer : public PK_SignatureSystem +{ +public: + virtual void Sign(RandomNumberGenerator &rng, const byte *message, unsigned int messageLen, byte *signature) =0; +}; +class PK_Verifier : public PK_SignatureSystem +{ +public: + virtual boolean Verify(const byte *message, unsigned int messageLen, const byte *signature) =0; +}; +class ByteQueueNode; +class ByteQueue : public BufferedTransformation +{ +public: + ByteQueue(); + ~ByteQueue(); + unsigned long CurrentSize() const; + unsigned long MaxRetrieveable() + {return CurrentSize();} + void Put(byte inByte); + void Put(const byte *inString, unsigned int length); + int Get(byte &outByte); + unsigned int Get(byte *outString, unsigned int getMax); +private: + ByteQueueNode *head, *tail; +}; +enum ASNTag {INTEGER=0x02, BIT_STRING=0x03, SEQUENCE=0x10}; +enum ASNIdFlag {CONSTRUCTED = 0x20}; +unsigned int DERLengthEncode(unsigned int length, byte *output); +unsigned int DERLengthEncode(unsigned int length, BufferedTransformation &); +class BERDecodeErr {}; +boolean BERLengthDecode(BufferedTransformation &, unsigned int &); +class BERSequenceDecoder : public BufferedTransformation +{ +public: + BERSequenceDecoder(BufferedTransformation &inQueue); + ~BERSequenceDecoder(); + void Put(byte inByte) {} + void Put(const byte *, unsigned int) {} + unsigned long MaxRetrieveable() + {return inQueue.MaxRetrieveable();} + int Get(byte &outByte) + {return inQueue.Get(outByte);} + unsigned int Get(byte *outString, unsigned int getMax) + {return inQueue.Get(outString, getMax);} +private: + BufferedTransformation &inQueue; + boolean definiteLength; + unsigned int length; +}; +class DERSequenceEncoder : public ByteQueue +{ +public: + DERSequenceEncoder(BufferedTransformation &outQueue); + ~DERSequenceEncoder(); +private: + BufferedTransformation &outQueue; +}; +extern "C" { +} +extern "C" { +extern void *memmove(void *, const void *, size_t); +extern char *strcpy(char *, const char *); +extern char *strncpy(char *, const char *, size_t); +extern char *strcat(char *, const char *); +extern char *strncat(char *, const char *, size_t); +extern int strcmp(const char *, const char *); +extern int strcoll(const char *, const char *); +extern int strncmp(const char *, const char *, size_t); +extern size_t strxfrm(char *, const char *, size_t); +extern void * __hide_memchr (const void *, int, size_t); +extern char * __hide_strchr (const char *, int); +extern size_t strcspn(const char *, const char *); +extern char * __hide_strpbrk (const char *, const char *); +extern char * __hide_strrchr (const char *, int); +extern size_t strspn(const char *, const char *); +extern char * __hide_strstr (const char *, const char *); +extern char *strtok(char *, const char *); +extern void *memset(void *, int, size_t); +extern char *strerror(int); +extern void *memccpy(void *, const void *, int, size_t); +extern char *strdup(const char *); +extern char *strsignal(int); +extern int ffs(const int); +extern int strcasecmp(const char *, const char *); +extern int strncasecmp(const char *, const char *, size_t); +} +typedef int ptrdiff_t; +extern "C" const char *strchr (const char *, int); +inline char * +strchr (char *s, int c) +{ + return (char*) strchr ((const char *) s, c); +} +extern "C" const char *strpbrk (const char *, const char *); +inline char * +strpbrk (char *s1, const char *s2) +{ + return (char *) strpbrk ((const char *) s1, s2); +} +extern "C" const char *strrchr (const char *, int); +inline char * +strrchr (char *s, int c) +{ + return (char *) strrchr ((const char *) s, c); +} +extern "C" const char *strstr (const char *, const char *); +inline char * +strstr (char *s1, const char *s2) +{ + return (char *) strstr ((const char *) s1, s2); +} +extern "C" void *memchr (const void *, int, size_t); +inline void * +memchr (void *s, int c, size_t n) +{ + return (void *) memchr ((const void *) s, c, n); +} +typedef word16 unit; +typedef short signedunit; +typedef unit *unitptr; +extern short global_precision; +boolean mp_addc + (register unitptr r1,const unit * r2,register boolean carry); +boolean mp_subb + (register unitptr r1,const unit * r2,register boolean borrow); +boolean mp_rotate_left(register unitptr r1,register boolean carry); +void mp_shift_right_bits(register unitptr r1,register short bits); +short mp_compare(const unit * r1,const unit * r2); +boolean mp_inc(register unitptr r); +boolean mp_dec(register unitptr r); +void mp_neg(register unitptr r); +void mp_init(register unitptr r, word16 value); +short significance(const unit * r); +int mp_udiv(register unitptr remainder,register unitptr quotient, + const unit * dividend,const unit * divisor); +int mp_recip(register unitptr quotient,const unit * divisor); +int mp_div(register unitptr remainder,register unitptr quotient, + unit * dividend, unit * divisor); +word16 mp_shortdiv(register unitptr quotient, + const unit * dividend,register word16 divisor); +int mp_mod(register unitptr remainder, + const unit * dividend,const unit * divisor); +word16 mp_shortmod(register unitptr dividend,register word16 divisor); +int mp_mult(register unitptr prod, + const unit * multiplicand,const unit * multiplier); +int countbits(const unit * r); +int stage_peasant_modulus(const unit * n); +int stage_merritt_modulus(const unit * n); +int stage_upton_modulus(const unit * n); +int stage_smith_modulus(const unit * n); +int peasant_modmult(register unitptr prod, + const unit * multiplicand,const unit * multiplier); +int merritt_modmult(register unitptr prod, + const unit * multiplicand,const unit * multiplier); +int upton_modmult(register unitptr prod, + const unit * multiplicand,const unit * multiplier); +int smith_modmult(register unitptr prod, + const unit * multiplicand,const unit * multiplier); +void peasant_burn(); +void merritt_burn(); +void upton_burn(); +void smith_burn(); +int mp_modexp(register unitptr expout,const unit * expin, + const unit * exponent,const unit * modulus); +int mp_modexp_crt(unitptr expout, const unit * expin, + const unit * p, const unit * q, const unit * ep, const unit * eq, const unit * u); +word16 fetch_word16(byte *buf); +byte *put_word16(word16 w, byte *buf); +word32 fetch_word32(byte *buf); +byte *put_word32(word32 w, byte *buf); +int string_length(const char *s); +int str2reg(unit * reg,const char* digitstr); +int reg2str(char * s,const unit * n,short radix); +void mp_display(char * s,unitptr r); +word16 checksum(register byte * buf, register word16 count); +void cbc_xor(register unitptr dst, register unitptr src, word16 bytecount); +void hiloswap(byte * r1,short numbytes); +short mpi2reg(register unitptr r, register byte * buf); +short reg2mpi(register byte * buf, register unitptr r); +enum RandomNumberType {ANY, ODD, PRIME, BLUMINT}; +class MPIRegister : public SecBlock<unit> +{ +public: + MPIRegister() : SecBlock<unit>((2048 / 16 ) ) {} +}; +class ostream; +class bignum +{ +public: + bignum() + {} + bignum(unsigned long value); + bignum(const char *str) + {str2reg(reg, str);} + enum Signedness{UNSIGNED, SIGNED}; + bignum(const byte *encodedBignum, unsigned int byteCount, Signedness s=UNSIGNED) + {Decode(encodedBignum, byteCount, s);} + bignum(const byte *BEREncodedInteger) + {BERDecode(BEREncodedInteger);} + bignum(BufferedTransformation &bt) + {BERDecode(bt);} + bignum(RandomNumberGenerator &rng, unsigned int bitcount) + {Randomize(rng, bitcount);} + bignum(RandomNumberGenerator &rng, const bignum &min, const bignum &max, RandomNumberType rnType=ANY) + {Randomize(rng, min, max, rnType);} + bignum(const bignum& t) + {memcpy(reg, t.reg, (2048 /8) );} + unsigned int Encode(byte *output) const; + unsigned int Encode(byte *output, unsigned int outputLen) const; + void Decode(const byte *input, unsigned int inputLen, Signedness=UNSIGNED); + unsigned int DEREncode(byte *output) const; + unsigned int DEREncode(BufferedTransformation &bt) const; + void BERDecode(const byte *input); + void BERDecode(BufferedTransformation &bt); + void Randomize(RandomNumberGenerator &rng, unsigned int bitcount); + void Randomize(RandomNumberGenerator &rng, const bignum &min, const bignum &max); + void Randomize(RandomNumberGenerator &rng, const bignum &min, const bignum &max, RandomNumberType rnType); + unsigned int ByteCount() const + { + return ((countbits( reg )+7)>>3) ; + } + int BitCount() const + { + return countbits(reg); + } + bignum& operator++() + { + mp_inc(reg); + return *this; + } + bignum& operator--() + { + mp_dec(reg); + return *this; + } + int operator!() const + { + return ( ((* (( reg.ptr )+( global_precision )-1) ) ==( 0 )) && (significance( reg.ptr )<=1) ) ; + } + bignum& operator=(const bignum& t) + { + memcpy(reg, t.reg, (2048 /8) ); + return *this; + } + bignum& operator+=(const bignum& t) + { + mp_addc( reg , t.reg ,(boolean)0) ; + return *this; + } + bignum& operator-=(const bignum& t) + { + mp_subb( reg , t.reg ,(boolean)0) ; + return *this; + } + bignum& operator*=(const bignum& t) + { + *this = (*this) * t; + return *this; + } + bignum& operator/=(const bignum& t) + { + *this = (*this) / t; + return *this; + } + bignum& operator%=(const bignum& t) + { + *this = (*this) % t; + return *this; + } + bignum& operator<<=(unsigned int); + bignum& operator>>=(unsigned int); + unsigned MaxBitPrecision() const {return 2048 ;} + int operator[](unsigned int n) const; + friend bignum operator+(bignum a, const bignum &b) + { + return (a+=b); + } + friend bignum operator-(bignum a, const bignum &b) + { + return (a-=b); + } + friend bignum operator*(const bignum &a, const bignum &b); + friend bignum operator/(const bignum &a, const bignum &b); + friend bignum operator%(const bignum &a, const bignum &b); + friend bignum operator/(const bignum &a, word16 b); + friend word16 operator%(const bignum &a, word16 b); + friend bignum operator>>(bignum a, unsigned int n) + {return (a>>=n);} + friend bignum operator<<(bignum a, unsigned int n) + {return (a<<=n);} + void Negate() {mp_neg(reg);} + friend bignum operator-(bignum a) + { + a.Negate(); + return a; + } + friend int operator==(const bignum &a, const bignum &b) + { + return (memcmp(a.reg.ptr, b.reg.ptr, (2048 /8) )==0); + } + friend int operator!=(const bignum& a, const bignum& b) + { + return (memcmp(a.reg.ptr, b.reg.ptr, (2048 /8) )!=0); + } + friend int operator>(const bignum& a, const bignum& b) + { + return (mp_compare(a.reg, b.reg)>0); + } + friend int operator>=(const bignum& a, const bignum& b) + { + return (mp_compare(a.reg, b.reg)>=0); + } + friend int operator<(const bignum& a, const bignum& b) + { + return (mp_compare(a.reg, b.reg)<0); + } + friend int operator<=(const bignum& a, const bignum& b) + { + return (mp_compare(a.reg, b.reg)<=0); + } + friend bignum a_times_b_mod_c(const bignum &x, const bignum& y, const bignum& m); + friend bignum a_exp_b_mod_c(const bignum &x, const bignum& e, const bignum& m); + class DivideErr {}; + friend void Divide(bignum &r, bignum &q, + const bignum &a, const bignum &d, + Signedness s=SIGNED); + friend boolean Negative(const bignum &a) + { + return ((signedunit) (* ( a.reg.ptr ) ) < 0) ; + } + friend bignum Abs(bignum a) + { + (((signedunit) (* ( a.reg.ptr ) ) < 0) ? (mp_neg( a.reg.ptr ),TRUE) : FALSE) ; + return a; + } + friend ostream& operator<<(ostream& out, const bignum &a); + unit lsUnit() {return (* (( reg.ptr )+( global_precision )-1) ) ;} +private: + MPIRegister reg; +}; +class RSAPublicKey : public PK_Encryptor, public PK_Decryptor, + public PK_Verifier +{ +public: + RSAPublicKey(const bignum &n, const bignum &e); + RSAPublicKey(BufferedTransformation &bt); + void DEREncode(BufferedTransformation &bt) const; + void Encrypt(RandomNumberGenerator &rng, const byte *plainText, unsigned int plainTextLength, byte *cipherText); + unsigned int Decrypt(const byte *cipherText, byte *plainText); + boolean Verify(const byte *message, unsigned int messageLen, const byte *signature); + unsigned int MaxPlainTextLength() const {return modulusLen-11;} + unsigned int CipherTextLength() const {return modulusLen;} + unsigned int MaxMessageLength() const {return modulusLen-11;} + unsigned int SignatureLength() const {return modulusLen;} + const bignum& Exponent() const {return e;} + const bignum& Modulus() const {return n;} +protected: + void RawEncrypt(const bignum &in, bignum &out) const; +private: + friend class RSAPrivateKey; + RSAPublicKey() {} + bignum n; + bignum e; + unsigned int modulusLen; +}; +class RSAPrivateKey : public RSAPublicKey, public PK_Signer +{ +public: + RSAPrivateKey(const bignum &n, const bignum &e, const bignum &d, + const bignum &p, const bignum &q, const bignum &dp, const bignum &dq, const bignum &u); + RSAPrivateKey(RandomNumberGenerator &rng, int keybits, bignum eStart=17); + RSAPrivateKey(BufferedTransformation &bt); + void DEREncode(BufferedTransformation &bt) const; + void Encrypt(const byte *plainText, unsigned int plainTextLength, byte *cipherText); + unsigned int Decrypt(const byte *cipherText, byte *plainText); + void Encrypt(RandomNumberGenerator &, const byte *plainText, unsigned int plainTextLength, byte *cipherText) + {Encrypt(plainText, plainTextLength, cipherText);} + void Sign(const byte *message, unsigned int messageLen, byte *signature) + {Encrypt(message, messageLen, signature);} + void Sign(RandomNumberGenerator &, const byte *message, unsigned int messageLen, byte *signature) + {Encrypt(message, messageLen, signature);} + unsigned int MaxMessageLength() const {return modulusLen-11;} + unsigned int SignatureLength() const {return modulusLen;} +protected: + void RawEncrypt(const bignum &in, bignum &out) const; +private: + bignum d; + bignum p; + bignum q; + bignum dp; + bignum dq; + bignum u; +}; +bignum Gcd(const bignum &a, const bignum &b); +bignum Inverse(const bignum &a, const bignum &m); +boolean IsSmallPrime(const bignum &p); +boolean SmallDivisorsTest(const bignum &p); +boolean FermatTest(const bignum &p, unsigned int rounds); +boolean RabinMillerTest(RandomNumberGenerator &rng, const bignum &w, unsigned int rounds); +inline boolean IsPrime(const bignum &p) +{ + return (IsSmallPrime(p) || (SmallDivisorsTest(p) && FermatTest(p, 2))); +} +boolean NextPrime(bignum &p, const bignum &max, boolean blumInt=FALSE); +bignum a_exp_b_mod_pq(const bignum &a, const bignum &ep, const bignum &eq, + const bignum &p, const bignum &q, const bignum &u); +class PrimeAndGenerator +{ +public: + PrimeAndGenerator(RandomNumberGenerator &rng, unsigned int pbits); + PrimeAndGenerator(RandomNumberGenerator &rng, unsigned int pbits, unsigned qbits); + const bignum& Prime() const {return p;} + const bignum& SubPrime() const {return q;} + const bignum& Generator() const {return g;} +private: + bignum p, q, g; +}; +extern "C" { +extern void __eprintf (const char *, const char *, unsigned, const char *); +} +RSAPublicKey::RSAPublicKey(const bignum &n, const bignum &e) + : n(n), e(e), modulusLen(n.ByteCount()) +{ +} +RSAPublicKey::RSAPublicKey(BufferedTransformation &bt) +{ + BERSequenceDecoder seq(bt); + n.BERDecode(seq); + modulusLen = n.ByteCount(); + e.BERDecode(seq); +} +void RSAPublicKey::DEREncode(BufferedTransformation &bt) const +{ + DERSequenceEncoder seq(bt); + n.DEREncode(seq); + e.DEREncode(seq); +} +void RSAPublicKey::Encrypt(RandomNumberGenerator &rng, const byte *input, unsigned int inputLen, byte *output) +{unsigned int i; + ((void) (( inputLen <= MaxPlainTextLength() ) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "rsa.cpp" , 30 , "inputLen <= MaxPlainTextLength()" ), 0) )) ; + SecByteBlock pkcsBlock(modulusLen); + pkcsBlock[0] = 0; + pkcsBlock[1] = 2; + for (i = 2; i < modulusLen - inputLen - 1; i++) + { + do + pkcsBlock[i] = rng.GetByte(); + while (pkcsBlock[i] == 0); + } + pkcsBlock[i++] = 0; + memcpy(pkcsBlock+i, input, inputLen); + bignum c; + RawEncrypt(bignum(pkcsBlock, modulusLen), c); + c.Encode(output, modulusLen); +} +unsigned int RSAPublicKey::Decrypt(const byte *input, byte *output) +{unsigned int i; + bignum m; + RawEncrypt(bignum(input, modulusLen), m); + SecByteBlock pkcsBlock(modulusLen); + m.Encode(pkcsBlock, modulusLen); + if ((pkcsBlock[0] != 0) || (pkcsBlock[1] != 1)) + return 0; + for (i = 2; i < modulusLen-1; i++) + if (pkcsBlock[i] != 0xff) + break; + if (pkcsBlock[i++] != 0) + return 0; + unsigned int outputLen = modulusLen - i; + if (outputLen > MaxPlainTextLength()) + return 0; + memcpy (output, pkcsBlock+i, outputLen); + return outputLen; +} +boolean RSAPublicKey::Verify(const byte *message, unsigned int messageLen, const byte *signature) +{ + ((void) (( messageLen <= MaxMessageLength() ) ? 0 : (__eprintf ("%s:%u: failed assertion `%s'\n", "rsa.cpp" , 83 , "messageLen <= MaxMessageLength()" ), 0) )) ; + SecByteBlock m(MaxMessageLength()); + unsigned int mLen = RSAPublicKey::Decrypt(signature, m); + return (mLen==messageLen && memcmp(message, m, mLen)==0); +} +void RSAPublicKey::RawEncrypt(const bignum &in, bignum &out) const +{ + out = a_exp_b_mod_c(in, e, n); +} +RSAPrivateKey::RSAPrivateKey(const bignum &nIn, const bignum &eIn, const bignum &dIn, + const bignum &pIn, const bignum &qIn, + const bignum &dpIn, const bignum &dqIn, const bignum &uIn) + : RSAPublicKey(nIn, eIn) +{ + d=dIn; + if (pIn < qIn) + { + p=pIn; + q=qIn; + dp=dpIn; + dq=dqIn; + } + else + { + p=qIn; + q=pIn; + dp=dqIn; + dq=dpIn; + } + u=uIn; +} +RSAPrivateKey::RSAPrivateKey(RandomNumberGenerator &rng, int keybits, bignum eStart) +{ + p = bignum(rng, keybits/2, PRIME); + const bignum minQ = ((bignum(1) << (keybits-1)) / p) + 1; + const bignum maxQ = (bignum(1) << keybits) / p; + do + { + bignum temp(rng, minQ, maxQ, PRIME); + if (p>temp && p.BitCount()-(p-temp).BitCount() < 7) + { + q=p; + p=temp; + break; + } + if (p<temp && temp.BitCount()-(temp-p).BitCount() < 7) + { + q=temp; + break; + } + } while (1); + bignum phi = (p-1)*(q-1); + for (e = eStart; Gcd(e, phi)!=1; ++e, ++e); + d = Inverse(e, phi/Gcd(p-1, q-1)); + dp = d % (p-1); + dq = d % (q-1); + u = Inverse(p, q); + n = p * q; + modulusLen = n.ByteCount(); +} +RSAPrivateKey::RSAPrivateKey(BufferedTransformation &bt) +{ + BERSequenceDecoder seq(bt); + bignum version(seq); + if (!!version) + throw BERDecodeErr() ; + n.BERDecode(seq); + modulusLen = n.ByteCount(); + e.BERDecode(seq); + d.BERDecode(seq); + p.BERDecode(seq); + q.BERDecode(seq); + dp.BERDecode(seq); + dq.BERDecode(seq); + u.BERDecode(seq); + if (p>q) + { + swap(p, q); + swap(dp, dq); + } +} +void RSAPrivateKey::DEREncode(BufferedTransformation &bt) const +{ + DERSequenceEncoder seq(bt); + byte version[] = {INTEGER, 1, 0}; + seq.Put(version, sizeof(version)); + n.DEREncode(seq); + e.DEREncode(seq); + d.DEREncode(seq); + q.DEREncode(seq); + p.DEREncode(seq); + dq.DEREncode(seq); + dp.DEREncode(seq); + u.DEREncode(seq); +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh44.C b/gcc/testsuite/g++.old-deja/g++.mike/eh44.C new file mode 100644 index 000000000000..e612aeb793bf --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh44.C @@ -0,0 +1,36 @@ +// Special g++ Options: -fexceptions +// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-* +// prms-id: 9159 + +static unsigned int iCounter = 0; +static unsigned int iMax; +int fail = 0; + +class ca { +public: + ca(int) { + if (iCounter++ == iMax) + throw (const char*)"iCounter"; + } + virtual ~ca() { + } +}; + +class cc { +public: + cc(const ca &rca1, const ca &rca2) { + } + virtual ~cc() { + fail = 1; + } +}; + + +int main(int argc, char **argv) { + iMax = 1; + try { + cc sc(ca(1), ca(1)); + } catch (const char *pMsg) { + } + return fail; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh45.C b/gcc/testsuite/g++.old-deja/g++.mike/eh45.C new file mode 100644 index 000000000000..bed0b921d6bd --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh45.C @@ -0,0 +1,34 @@ +int i; +int fail; + +class ca { +public: + ca() { + if (++i != 1) + fail = 1; + } + virtual ~ca() { + if (++i != 4) + fail = 4; + } +}; + +class cb { +public: + cb(const ca &rca) { + if (++i != 2) + fail = 2; + } + virtual ~cb() { + if (++i != 3) + fail = 3; + } +}; + +void foo(const cb &rcb) { +} + +int main(int argc, char **argv) { + foo(cb(ca())); + return fail; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh46.C b/gcc/testsuite/g++.old-deja/g++.mike/eh46.C new file mode 100644 index 000000000000..e0e6553f7c73 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh46.C @@ -0,0 +1,47 @@ +// Build don't link: +// Special g++ Options: -fexceptions +// excess errors test - XFAIL a29k-*-* sh-*-* arm-*-pe**-* + +int atoi(const char *); + +struct ios { + virtual ~ios(); +}; + +class fstreambase : virtual public ios { +}; + +class ifstream : public fstreambase { +}; + +class ofstream : public fstreambase { +}; + +extern const short O; +extern const short D; + +const short O= 0; +const short D= -3; + + +short glc(const char* const * const l, + short& n,short& x,short& y, + ifstream* i,ofstream* o) + +{ + n=atoi(l[1]); + + x=atoi(l[2]); + y=atoi(l[3]); + + if((x < 0)||(y <0)) + { + return D; + } + + i = new ifstream[n]; + o = new ofstream[2]; + + return O; + +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh47.C b/gcc/testsuite/g++.old-deja/g++.mike/eh47.C new file mode 100644 index 000000000000..ae918c355437 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh47.C @@ -0,0 +1,22 @@ +// Special g++ Options: -fexceptions +// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-* + +#include <cstdlib> + +void myterm() { + exit (0); +} + +main() { + try { + throw ""; + } catch (...) { + } + try { + set_terminate (myterm); + throw; + } catch (...) { + return 1; + } + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh48.C b/gcc/testsuite/g++.old-deja/g++.mike/eh48.C new file mode 100644 index 000000000000..5cefacd5f1e0 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh48.C @@ -0,0 +1,32 @@ +// Special g++ Options: -fexceptions +// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-* + +#include <exception> + +class A { +public: + ~A() { + if (uncaught_exception ()) + exit (0); + } +}; + +int main() { + if (uncaught_exception ()) + return 1; + try { + throw ""; + } catch (...) { + if (uncaught_exception ()) + return 1; + } + if (uncaught_exception ()) + return 1; + try { + A a; + throw ""; + } catch (...) { + return 1; + } + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh49.C b/gcc/testsuite/g++.old-deja/g++.mike/eh49.C new file mode 100644 index 000000000000..3a301cc54ee4 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh49.C @@ -0,0 +1,15 @@ +// Special g++ Options: -fexceptions -O9 +// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-* + +main1() { + throw 1; +} + +main() { + try { + main1(); + } catch (...) { + return 0; + } + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh5.C b/gcc/testsuite/g++.old-deja/g++.mike/eh5.C new file mode 100644 index 000000000000..6bc1dc045fd8 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh5.C @@ -0,0 +1,21 @@ +// Special g++ Options: -fexceptions +// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-* + +class foo { +public: + class error {}; + + void cause_error(void) { throw "Hello World!"; } +}; + +int main(void) +{ + foo f; + try { + f.cause_error(); + } + catch (char cp[]) { + return 0; + } + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh50.C b/gcc/testsuite/g++.old-deja/g++.mike/eh50.C new file mode 100644 index 000000000000..746aaa67b4ca --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh50.C @@ -0,0 +1,19 @@ +// Special g++ Options: -fexceptions +// excess errors test - XFAIL hppa*-*-* a29k-*-* sparc64-*-elf sh-*-* z8k-*-* arm-*-pe**-* + +void my_unexpected() { + throw 42; +} + +template <class T> int foo(T) throw (int) { throw "Hi"; } + +main() { + set_unexpected (my_unexpected); + try { + foo(1); + } catch (int i) { + if (i == 42) + return 0; + } + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh51.C b/gcc/testsuite/g++.old-deja/g++.mike/eh51.C new file mode 100644 index 000000000000..55ca0c53f58c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh51.C @@ -0,0 +1,19 @@ +// Special g++ Options: -fexceptions +// excess errors test - XFAIL hppa*-*-* a29k-*-* sparc64-*-elf sh-*-* z8k-*-* arm-*-pe**-* + +void my_unexpected() { + throw 42; +} + +template <class T> int foo(T) throw (T) { throw "Hi"; } + +main() { + set_unexpected (my_unexpected); + try { + foo(1); + } catch (int i) { + if (i == 42) + return 0; + } + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh52.C b/gcc/testsuite/g++.old-deja/g++.mike/eh52.C new file mode 100644 index 000000000000..475070caebfc --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh52.C @@ -0,0 +1,14 @@ +// Special g++ Options: -fexceptions -O9 + +int promote_mode (int mode, int *punsignedp) +{ + int unsignedp = *punsignedp; + *punsignedp = unsignedp; + return mode; +} + +int main() { + int i; + i = promote_mode (42, &i); + return i != 42; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh53.C b/gcc/testsuite/g++.old-deja/g++.mike/eh53.C new file mode 100644 index 000000000000..7d47c6d1461f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh53.C @@ -0,0 +1,15 @@ +// Special g++ Options: -fexceptions -g +// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-* + +class zeroset { +public: + ~zeroset () { } +}; + +int main () { + zeroset a; + try { + ; + } catch( zeroset ) { + } +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh54.C b/gcc/testsuite/g++.old-deja/g++.mike/eh54.C new file mode 100644 index 000000000000..9c2d206f092c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh54.C @@ -0,0 +1,3 @@ +// Special g++ Options: -fexceptions + +int main() { try { 1; } } // ERROR - diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh55.C b/gcc/testsuite/g++.old-deja/g++.mike/eh55.C new file mode 100644 index 000000000000..dbb56d58c3d7 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh55.C @@ -0,0 +1,16 @@ +// Special g++ Options: -fexceptions +// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-* + +void my_terminate_handler() { + exit(0); +} + +void throw_an_unexpected_exception() throw() { + throw 1; +} + +int main() { + set_terminate(my_terminate_handler); + throw_an_unexpected_exception(); + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh56.C b/gcc/testsuite/g++.old-deja/g++.mike/eh56.C new file mode 100644 index 000000000000..674a82df4502 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh56.C @@ -0,0 +1,22 @@ +// Special g++ Options: -fexceptions + +struct A { + A() { } + A(const char *) { } + A(const A&) { } + ~A() { } +}; + +struct bmf { + bmf (const A n) { } + ~bmf (void) { } + A name; +}; + +void imf (void) { + bmf Sabs ("abs"); +} + +int main(void) { + imf (); +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh57.C b/gcc/testsuite/g++.old-deja/g++.mike/eh57.C new file mode 100644 index 000000000000..545a85fdfa92 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh57.C @@ -0,0 +1,18 @@ +// Build don't link: +// Special g++ Options: -fno-exceptions + +class Calendar_Time { +public: + ~Calendar_Time (); + int operator <= (const Calendar_Time& t) const; +}; + +class Temporal_Model_Interval { +public: + Calendar_Time start_time (); +}; + +int intersects_p (Temporal_Model_Interval* i1, Temporal_Model_Interval* i2) { + return ((i1->start_time() <= i2->start_time()) + || (i1->start_time() <= i2->start_time())); +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh58.C b/gcc/testsuite/g++.old-deja/g++.mike/eh58.C new file mode 100644 index 000000000000..967e74ab12dc --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh58.C @@ -0,0 +1,18 @@ +// Build don't link: +// Special g++ Options: -fexceptions + +struct C { + bool mem; + ~C(); +}; + +C genTemp(); + +int foo_notok(int arg) { + switch (arg) { + case 0: + return genTemp().mem; + default: + return 3; + } +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh6.C b/gcc/testsuite/g++.old-deja/g++.mike/eh6.C new file mode 100644 index 000000000000..f5409867a238 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh6.C @@ -0,0 +1,19 @@ +// Special g++ Options: -fexceptions +// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-* + +extern "C" int printf(const char *, ...); + +main1() { + throw 1; +} + + +main() { + try { + main1(); + } catch (...) { + printf("Unwind works!\n"); + return 0; + } + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh7.C b/gcc/testsuite/g++.old-deja/g++.mike/eh7.C new file mode 100644 index 000000000000..3e2c75a67f2c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh7.C @@ -0,0 +1,7 @@ +// Special g++ Options: -fexceptions +// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-* + +main() { + if (0) + throw 1 | 2; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh8.C b/gcc/testsuite/g++.old-deja/g++.mike/eh8.C new file mode 100644 index 000000000000..a9f7a902f2cd --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh8.C @@ -0,0 +1,20 @@ +// Special g++ Options: -fexceptions +// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-* + +extern "C" int printf(const char *, ...); + +int i; + +main() { + try { + try { + throw i; + } catch (char *) { + return 1; + } + return 1; + } catch (int i) { + return 0; + } + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/eh9.C b/gcc/testsuite/g++.old-deja/g++.mike/eh9.C new file mode 100644 index 000000000000..febd1dc4b969 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/eh9.C @@ -0,0 +1,4 @@ +// Special g++ Options: -fexceptions +// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe* + +main() throw () { } diff --git a/gcc/testsuite/g++.old-deja/g++.mike/enum1.C b/gcc/testsuite/g++.old-deja/g++.mike/enum1.C new file mode 100644 index 000000000000..89e8542b779b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/enum1.C @@ -0,0 +1,11 @@ +// Build don't link: +// Warn if a enum cannot fit into a small bit-field. + +enum TypeKind { ATK, BTK, CTK, DTK } ; + +struct Type { + enum TypeKind kind : 1; // WARNING - + void setBTK(); +}; + +void Type::setBTK() { kind = DTK; } diff --git a/gcc/testsuite/g++.old-deja/g++.mike/err1.C b/gcc/testsuite/g++.old-deja/g++.mike/err1.C new file mode 100644 index 000000000000..8748c7860b15 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/err1.C @@ -0,0 +1,8 @@ +// Build don't link: + +struct gorf { + int stuff; + void snarf(); +}; + +template <class T> void gorf::snarf() { return; } // ERROR - diff --git a/gcc/testsuite/g++.old-deja/g++.mike/err2.C b/gcc/testsuite/g++.old-deja/g++.mike/err2.C new file mode 100644 index 000000000000..e7f0be2a9876 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/err2.C @@ -0,0 +1,6 @@ +class foo { +public: + apply(foo *(foo::*memptr)()) { + this->*memptr(); // ERROR - wrong + } +}; diff --git a/gcc/testsuite/g++.old-deja/g++.mike/err3.C b/gcc/testsuite/g++.old-deja/g++.mike/err3.C new file mode 100644 index 000000000000..b42a4a908d86 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/err3.C @@ -0,0 +1,9 @@ +class cb { +}; + +class cc { +public: + cc() + : cb() { // ERROR - + } +}; diff --git a/gcc/testsuite/g++.old-deja/g++.mike/explicit1.C b/gcc/testsuite/g++.old-deja/g++.mike/explicit1.C new file mode 100644 index 000000000000..28213ba377d5 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/explicit1.C @@ -0,0 +1,15 @@ +struct A1 { + explicit A1(int) { } +} a1(1); + +struct A { + explicit A(int); +} a(1); + +A::A(int) { +} + +void foo(A a) { + foo(a); + foo(1); // ERROR - not allowed +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/explicit2.C b/gcc/testsuite/g++.old-deja/g++.mike/explicit2.C new file mode 100644 index 000000000000..a2077bffc2fc --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/explicit2.C @@ -0,0 +1,24 @@ +// Build don't link: + +class string { +public: + string(const char*) { } + explicit string(int size) { } +}; + +void foo(string) { } + +string bar() { + foo("hello"); // ok + foo(string(2)); // ok + foo(2); // ERROR - no implicit conversion from int to string + string x = 2; // ERROR - no implicit conversion from int to string + string y(2); // ok + foo((string)2); // ok + return 2; // ERROR - no implicit conversion from int to string +} + +class A : string { +public: + A() : string(2) { } // ok +}; diff --git a/gcc/testsuite/g++.old-deja/g++.mike/for1.C b/gcc/testsuite/g++.old-deja/g++.mike/for1.C new file mode 100644 index 000000000000..e46213035bf2 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/for1.C @@ -0,0 +1,3 @@ +int main() { + for( {int i = 0; int j = 0;} i < 10; ++i ) ; // ERROR - +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/for2.C b/gcc/testsuite/g++.old-deja/g++.mike/for2.C new file mode 100644 index 000000000000..fd01804d86b3 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/for2.C @@ -0,0 +1,19 @@ +// Build don't link: + +void foo() { + for (class C {};;) + ; + C c; // ERROR - +} + +void bar() { + for (enum E {num};;) + ; + E e; // ERROR - +} + +void bee () { + int i = 0; + for (int fun() = 0; i != 2; ++i) { // ERROR - + } +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/fresco1.C b/gcc/testsuite/g++.old-deja/g++.mike/fresco1.C new file mode 100644 index 000000000000..16fa1dbcbe93 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/fresco1.C @@ -0,0 +1,13 @@ +// Build don't link: + +// This is a Fresco found bug. + +class WhoCares {}; + +typedef float Coord; + +class BugDemo : public WhoCares { +public: + typedef Coord Matrix[4][4]; + virtual void vf1(BugDemo::Matrix m) = 0; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.mike/hog1.C b/gcc/testsuite/g++.old-deja/g++.mike/hog1.C new file mode 100644 index 000000000000..8627100f2de0 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/hog1.C @@ -0,0 +1,187 @@ +class dummy { public: void operator++(void) {} + }; +class dummy_000 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_001 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_002 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_003 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_004 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_005 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_006 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_007 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_008 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_009 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_010 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_011 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_012 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_013 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_014 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_015 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_016 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_017 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_018 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_019 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_020 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_021 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_022 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_023 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_024 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_025 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_026 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_027 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_028 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_029 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_030 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_031 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_032 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_033 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_034 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_035 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_036 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_037 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_038 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_039 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_040 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_041 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_042 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_043 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_044 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_045 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_046 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_047 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_048 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; +class dummy_049 : private virtual dummy { public: void operator++(void) { +dummy::operator++(); } }; + +class super : + private dummy_000, private dummy_001, private dummy_002, private +dummy_003, private dummy_004, + private dummy_005, private dummy_006, private dummy_007, private +dummy_008, private dummy_009, + private dummy_010, private dummy_011, private dummy_012, private +dummy_013, private dummy_014, + private dummy_015, private dummy_016, private dummy_017, private +dummy_018, private dummy_019, + private dummy_020, private dummy_021, private dummy_022, private +dummy_023, private dummy_024, + private dummy_025, private dummy_026, private dummy_027, private +dummy_028, private dummy_029, + private dummy_030, private dummy_031, private dummy_032, private +dummy_033, private dummy_034, + private dummy_035, private dummy_036, private dummy_037, private +dummy_038, private dummy_039, + private dummy_040, private dummy_041, private dummy_042, private +dummy_043, private dummy_044, + private dummy_045, private dummy_046, private dummy_047, private +dummy_048, private dummy_049 +{ +public: + void operator++(void); +}; + +void super::operator++(void) +{ + dummy_000::operator++(); + dummy_001::operator++(); + dummy_002::operator++(); + dummy_003::operator++(); + dummy_004::operator++(); + dummy_005::operator++(); + dummy_006::operator++(); + dummy_007::operator++(); + dummy_008::operator++(); + dummy_009::operator++(); + dummy_010::operator++(); + dummy_011::operator++(); + dummy_012::operator++(); + dummy_013::operator++(); + dummy_014::operator++(); + dummy_015::operator++(); + dummy_016::operator++(); + dummy_017::operator++(); + dummy_018::operator++(); + dummy_019::operator++(); + dummy_020::operator++(); + dummy_021::operator++(); + dummy_022::operator++(); + dummy_023::operator++(); + dummy_024::operator++(); + dummy_025::operator++(); + dummy_026::operator++(); + dummy_027::operator++(); + dummy_028::operator++(); + dummy_029::operator++(); + dummy_030::operator++(); + dummy_031::operator++(); + dummy_032::operator++(); + dummy_033::operator++(); + dummy_034::operator++(); + dummy_035::operator++(); + dummy_036::operator++(); + dummy_037::operator++(); + dummy_038::operator++(); + dummy_039::operator++(); + dummy_040::operator++(); + dummy_041::operator++(); + dummy_042::operator++(); + dummy_043::operator++(); + dummy_044::operator++(); + dummy_045::operator++(); + dummy_046::operator++(); + dummy_047::operator++(); + dummy_048::operator++(); + dummy_049::operator++(); +} + + +int main(void) +{ +}; diff --git a/gcc/testsuite/g++.old-deja/g++.mike/init1.C b/gcc/testsuite/g++.old-deja/g++.mike/init1.C new file mode 100644 index 000000000000..8d591865d103 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/init1.C @@ -0,0 +1,25 @@ +int count; + +extern "C" void _exit(int); + +struct C { + ~C() { if (count != 1) _exit(1); } +} c; + +class A { +public: + ~A () { ++count; } +}; + +void f() { + static A a; +} + +void g() { + // Since this isn't constructed, we can't destruct it. + static A a; +} + +int main () { + f(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/init2.C b/gcc/testsuite/g++.old-deja/g++.mike/init2.C new file mode 100644 index 000000000000..343d76f88cc6 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/init2.C @@ -0,0 +1,9 @@ +// Build don't link: + +struct Foo { + Foo (int); +}; + +int bar (Foo); + +int x = bar (3); diff --git a/gcc/testsuite/g++.old-deja/g++.mike/leak1.C b/gcc/testsuite/g++.old-deja/g++.mike/leak1.C new file mode 100644 index 000000000000..849322f128cb --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/leak1.C @@ -0,0 +1,38 @@ +int count = 0; + +class T { + int i; +public: + T() { + i = 1; + ++count; + } + T(const T& o) { + i = o.i; + ++count; + } + T operator +(const T& o) { + T r; + r.i = this->i + o.i; + return r; + } + operator int () { + return i; + } + ~T() { + --count; + } +} s, b; + +void bar() { + static int j = int(s+b); + int i = int(s+b); +} + +int i = int(s+b); + +main() { + bar(); + bar(); + return count != 2; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/mangle1.C b/gcc/testsuite/g++.old-deja/g++.mike/mangle1.C new file mode 100644 index 000000000000..ac7d6cf92fbb --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/mangle1.C @@ -0,0 +1,27 @@ +// Build don't link: +// Special g++ Options: + +// Make sure the typedef name is used in name mangling, not some random +// anonymous name + +struct foo { + typedef enum { red } color; + void bar(color r) { + } +} f; + +#ifdef sparc +void f1() asm("bar__3fooQ23foo3$_0"); +void f1() { +} +void f2() asm("_bar__3fooQ23foo3$_0"); +void f2() { +} +void f3() asm("__bar__3fooQ23foo3$_0"); +void f3() { +} +#endif + +main() { + f.bar(foo::red); +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/mangle2.C b/gcc/testsuite/g++.old-deja/g++.mike/mangle2.C new file mode 100644 index 000000000000..174cacc6f3ba --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/mangle2.C @@ -0,0 +1,17 @@ +// Build don't link: +// Special g++ Options: + +typedef struct { +} color; + +void foo(color) { +} + +#ifdef sparc +void f1() asm("foo__FG3$_0"); +void f1() { } +void f2() asm("_foo__FG3$_0"); +void f2() { } +void f3() asm("__foo__FG3$_0"); +void f3() { } +#endif diff --git a/gcc/testsuite/g++.old-deja/g++.mike/mangle3.C b/gcc/testsuite/g++.old-deja/g++.mike/mangle3.C new file mode 100644 index 000000000000..77b92eca1665 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/mangle3.C @@ -0,0 +1,14 @@ +struct ZZ { + int p; +}; + + +template <int ZZ::* ptr> +struct YY { + ZZ qq; + YY() { } +}; + +int main() { + YY<&ZZ::p> ww; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/memoize1.C b/gcc/testsuite/g++.old-deja/g++.mike/memoize1.C new file mode 100644 index 000000000000..9b7aadc5081f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/memoize1.C @@ -0,0 +1,4 @@ +// Build don't link: +// Special g++ Options: -fsave-memoized + +#include <iostream.h> diff --git a/gcc/testsuite/g++.old-deja/g++.mike/mi1.C b/gcc/testsuite/g++.old-deja/g++.mike/mi1.C new file mode 100644 index 000000000000..0f5880dc145b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/mi1.C @@ -0,0 +1,44 @@ +// Special g++ Options: -w + +class A { +public: + virtual ~A(){}; + virtual int type(void) { + return -1; + } +}; + +class B : public A { +public: + virtual ~B(){}; +}; + + +class C0 : public B, public virtual A { +public: + virtual int type(void) { + return 0; + } +}; + +class C1 : public C0 +{ +public: + virtual int type(void) { + return 1; + } +}; + +class C2 : public C0 { +public: + virtual int type(void) { + return 2; + } +}; + +main() { + C1 *one = new C1; + + if (one->type() != 1) + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/mi2.C b/gcc/testsuite/g++.old-deja/g++.mike/mi2.C new file mode 100644 index 000000000000..f3c01e383e5f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/mi2.C @@ -0,0 +1,46 @@ +class A { + char a; +public: + A(char x) : a(x) { } + virtual ~A() { } +}; + +class B : virtual public A { + char b; +public: + B(char x) : A('b'), b(x) { } + ~B() { } +}; + +class C : virtual public A { + char c; +public: + C(char x) : A('c'), c(x) { } + ~C() { } +}; + +class D : virtual public A, public B, public C { + char d; +public: + D(char x) : A('d'), B('d'), C('d'), d(x) { } + ~D() { } +}; + +class E : virtual public A, public B, public C { + char e; +public: + E(char x) : A('e'), B('e'), C('e'), e(x) { } + ~E() { } +}; + +class F : virtual public A, public D, public E { + char f; +public: + F(char x) : A('f'), D('f'), E('f'), f(x) { } + ~F() { } +}; + +int main() { + F f('x'); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/misc1.C b/gcc/testsuite/g++.old-deja/g++.mike/misc1.C new file mode 100644 index 000000000000..1703b546318d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/misc1.C @@ -0,0 +1,53 @@ +// GROUPS passed construct-destruct +/* g++ constructs j 13 times, and destructs it once. */ + +extern "C" { + int printf(...); + void exit(int); +} + +void foo() { +} + +class C { + int val; + public: + static int count; + C(int ii) { + val = ii; + ++count; + printf("up\n"); + } + ~C() { + --count; + printf("down\n"); + } + operator ++() { + return ++val; + } + operator int() { + return val; + } +}; + +int C::count = 0; + +void bar() { + for (int ii=0; ii<13; ++ii) + for (C j=1; j<9; ++j) + foo(); +} + +main() { + bar(); + if (C::count) + { + printf("FAIL\n"); + exit(1); + } + else + { + printf("PASS\n"); + } + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/misc11.C b/gcc/testsuite/g++.old-deja/g++.mike/misc11.C new file mode 100644 index 000000000000..642fd2e474ae --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/misc11.C @@ -0,0 +1,4 @@ +// Build don't link: +// GROUPS passed pt coredump +template<class T> class A; +void f () { A<int> *a; } diff --git a/gcc/testsuite/g++.old-deja/g++.mike/misc12.C b/gcc/testsuite/g++.old-deja/g++.mike/misc12.C new file mode 100644 index 000000000000..b342bb5f6c9b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/misc12.C @@ -0,0 +1,8 @@ +// Build don't link: +// GROUPS passed +struct A { virtual void f(); }; +struct B { virtual void f() ; }; +struct C : virtual A , virtual B { virtual void f(); }; + +/* This used to get an error because the DECL_CONTEXT was blown away. */ +void g(A *ptr) { ptr->f(); } diff --git a/gcc/testsuite/g++.old-deja/g++.mike/misc13.C b/gcc/testsuite/g++.old-deja/g++.mike/misc13.C new file mode 100644 index 000000000000..299af822a225 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/misc13.C @@ -0,0 +1,53 @@ +// GROUPS passed vtable +extern "C" printf(...); +enum { vf_request, vf_event } want; + +int errs = 0; + +class ivResource { +public: + virtual ~ivResource () { } +}; + +class ivHandler : public ivResource { +public: + virtual void event() { } +}; + +class ivGlyph : public ivResource { +public: + virtual ~ivGlyph () { } + virtual void request () { + if (want!=vf_request) + ++errs; + } +}; + +class ItemView : public ivGlyph, public ivHandler { +public: + virtual void event () { + if (want!=vf_event) + ++errs; + } +} a; + +ivGlyph *bar() { + return &a; +} + +ivHandler *bar2() { + return &a; +} + +main() { + want=vf_request; + bar()->request(); + want=vf_event; + bar2()->event(); + if (errs) { + printf("FAIL\n"); + return 1; + } + printf("PASS\n"); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/misc14.C b/gcc/testsuite/g++.old-deja/g++.mike/misc14.C new file mode 100644 index 000000000000..9ceeff1bf9e8 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/misc14.C @@ -0,0 +1,27 @@ +// GROUPS passed +extern "C" printf(...); +extern "C" void exit(int); + +class A { +public: + virtual ~A() { + printf("FAIL\n"); + exit (1); + } +}; + +class B : public A { +public: + virtual ~B() { + printf("PASS\n"); + exit (0); + } +}; + +main() { + B b; + A *ap = &b; + ap->~A(); // This should call the destructor virtually. + printf("FAIL\n"); + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/misc2.C b/gcc/testsuite/g++.old-deja/g++.mike/misc2.C new file mode 100644 index 000000000000..d916651e164d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/misc2.C @@ -0,0 +1,11 @@ +// Build don't link: +// Special g++ Options: -ansi -pedantic +// GROUPS passed +/* -ansi -pedantic-errors should catch this. */ + +class C { + public: + extern inline int A() {// ERROR - .* + return 1; + } +}; diff --git a/gcc/testsuite/g++.old-deja/g++.mike/misc3.C b/gcc/testsuite/g++.old-deja/g++.mike/misc3.C new file mode 100644 index 000000000000..5ac7a3b48843 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/misc3.C @@ -0,0 +1,4 @@ +// Build don't link: +// GROUPS uncaught +int a;// ERROR - .* +int a;// ERROR - .* diff --git a/gcc/testsuite/g++.old-deja/g++.mike/misc5.C b/gcc/testsuite/g++.old-deja/g++.mike/misc5.C new file mode 100644 index 000000000000..bd3e85cee481 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/misc5.C @@ -0,0 +1,11 @@ +// Build don't link: +// GROUPS uncaught +// Cfront bug A.3 (See Language System Release Notes for the +// SPARCompiler C++ version 3.0) + +struct S1 { + static int S1; // ERROR - uses same name 9.3 +}; +struct S2 { + union { int ii; float S2; }; // ERROR - uses same name 9.3 , XFAIL *-*-* +}; diff --git a/gcc/testsuite/g++.old-deja/g++.mike/misc6.C b/gcc/testsuite/g++.old-deja/g++.mike/misc6.C new file mode 100644 index 000000000000..e3697527dc94 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/misc6.C @@ -0,0 +1,11 @@ +// Build don't link: +// GROUPS uncaught +// Cfront bug A.4 (See Language System Release Notes for the +// SPARCompiler C++ version 3.0) + +struct assign { + assign& operator = (const assign&); +}; +union U { + assign a; // ERROR - member of union cannot have op= 9.4// ERROR - .* +}; diff --git a/gcc/testsuite/g++.old-deja/g++.mike/misc7.C b/gcc/testsuite/g++.old-deja/g++.mike/misc7.C new file mode 100644 index 000000000000..e613ad9e6bac --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/misc7.C @@ -0,0 +1,16 @@ +// Build don't link: +// GROUPS passed MI +struct S1 { }; + +struct S2 : S1 { }; +struct S3 : S1 { }; + +struct S4 : S3, S2 { }; + +struct S1 *p1; +struct S4 *p4; + +void foobar () +{ + p1 = p4; // ERROR - this is illegal// ERROR - .* +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/misc8.C b/gcc/testsuite/g++.old-deja/g++.mike/misc8.C new file mode 100644 index 000000000000..4cea21334226 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/misc8.C @@ -0,0 +1,5 @@ +// Build don't link: +// GROUPS passed vtable +class T { public: virtual ~T() {} }; +template<class P> class X : public virtual T {}; +main() { X<int> x; } diff --git a/gcc/testsuite/g++.old-deja/g++.mike/misc9.C b/gcc/testsuite/g++.old-deja/g++.mike/misc9.C new file mode 100644 index 000000000000..ec02d1e63c14 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/misc9.C @@ -0,0 +1,13 @@ +// Build don't link: +// Special g++ Options: -Wall -pedantic +// GROUPS passed qualifiers +class bee { + public: + int bee::bar; // WARNING - there is an extra bee:: here +}; + +class foo { + public: + int bee::bar; // ERROR - you cannot do this + int me(); +}; diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net1.C b/gcc/testsuite/g++.old-deja/g++.mike/net1.C new file mode 100644 index 000000000000..9b2bbb835ff7 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/net1.C @@ -0,0 +1,19 @@ +// Build don't link: +// Here is a net bug + +class ivAllocation { +public: + ivAllocation(); + int x_; +}; + +class TBScrollBoxInfo { +public: + ivAllocation allocation_; +}; + +TBScrollBoxInfo* items_; + +inline TBScrollBoxInfo item() { + return items_[0]; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net10.C b/gcc/testsuite/g++.old-deja/g++.mike/net10.C new file mode 100644 index 000000000000..6ebcb014b53c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/net10.C @@ -0,0 +1,15 @@ +// Build don't link: +// Special g++ Options: -pedantic-errors + +const ci=10, *pc = &ci, *const cpc = pc, **ppc; +int i, *p, *const cp = &i; + +main() +{ + i = ci; + *cp = ci; + pc++; + pc = cpc; + pc = p; + ppc = &pc; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net11.C b/gcc/testsuite/g++.old-deja/g++.mike/net11.C new file mode 100644 index 000000000000..2030796a126b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/net11.C @@ -0,0 +1,16 @@ +// Build don't link: +// Special g++ Options: -pedantic-errors + +struct Foo { + char *p; + const char *q; + void m() const; +}; + +void other(char &x); + +void +Foo::m() const +{ + other(*p); // this is legal +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net12.C b/gcc/testsuite/g++.old-deja/g++.mike/net12.C new file mode 100644 index 000000000000..b5fbf64ddec8 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/net12.C @@ -0,0 +1,16 @@ +// Build don't link: +// Special g++ Options: -pedantic-errors + +struct Foo { + char *p; + const char *q; + void m() const; +}; + +void other(char &x); // ERROR - reference below + +void +Foo::m() const +{ + other(*q); // ERROR - this is bad +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net13.C b/gcc/testsuite/g++.old-deja/g++.mike/net13.C new file mode 100644 index 000000000000..d56e87270e7e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/net13.C @@ -0,0 +1,14 @@ +// Build don't link: + +// make sure extern "C" friends work. + +extern "C" { void func(); } + +struct crash { + int i; + friend void func(); +} a; + +void func() { + a.i = 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net14.C b/gcc/testsuite/g++.old-deja/g++.mike/net14.C new file mode 100644 index 000000000000..4f32fdd52ea0 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/net14.C @@ -0,0 +1,7 @@ +// Build don't link: +// this probably does not have correct debugging info generated. + +typedef struct Thing { + Thing(); + int x; +} Thing; diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net15.C b/gcc/testsuite/g++.old-deja/g++.mike/net15.C new file mode 100644 index 000000000000..dfe4dc5e0854 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/net15.C @@ -0,0 +1,46 @@ +// InterViews (ibuild) requires this to work. + +extern "C" void exit(int); + +void *old; + +class c1 +{ + int i; +public: + c1 () {} +}; + +class c2 +{ + int j; +public: + c2 () {} +}; + +class c3 : public c1, public c2 +{ +public: + c3 () + { + old = this; + // printf("new object c3 at %x\n", (int)this); } + } +}; + +c2* f () +{ + c2* n = new c3 (); + // printf ("new object c3 casted to c2 at %x\n", (int)n); + return n; +} + +int main () +{ + c3* o = (c3*)f (); + // printf("new object c3, upcasted from c2 at %x\n", (int)o); + // if old and o are not the same, fail the test case. + if (old != o) + exit(1); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net16.C b/gcc/testsuite/g++.old-deja/g++.mike/net16.C new file mode 100644 index 000000000000..5da97a8607f4 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/net16.C @@ -0,0 +1,7 @@ +// On an i386, this core dumps because the reg-stack.c code is wrong, and +// pops an fp register that it thinks is not used, but it is. + +extern "C" int printf (const char*, ...); +struct S { ~S () { } }; +double f (S) { return 5; } +int main() { S s; double dist = f (s); printf ("%g\n", dist); return 0; } diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net17.C b/gcc/testsuite/g++.old-deja/g++.mike/net17.C new file mode 100644 index 000000000000..f80eeb396132 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/net17.C @@ -0,0 +1,58 @@ +// example from the ARM page 292 and 293 + +extern "C" int printf(const char *, ...); +extern "C" void exit(int); + +int i = 0; + +class A { +public: + A() { + printf("Doing A\n"); + if (++i != 1) + exit(1); + } +}; + +class B { +public: + B() { + printf("Doing B\n"); + if (++i != 2) + exit(1); + } +}; + +class C : public virtual A, public virtual B { +public: + C() { + printf("Doing C\n"); + if (++i != 3) + exit(1); + } +}; + +class D : public virtual B, public virtual A { +public: + D() { + printf("Doing D\n"); + if (++i != 4) + exit(1); + } +}; + +class E : public C, public D { +public: + E() { + printf("Doing E\n"); + if (++i != 5) + exit(1); + } +} e; + + +main() { + if (++i != 6) + exit(1); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net18.C b/gcc/testsuite/g++.old-deja/g++.mike/net18.C new file mode 100644 index 000000000000..81e38d370e3f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/net18.C @@ -0,0 +1,21 @@ +// Build don't link: + +class ClassA { +public: + typedef ClassA& (*PMFV)(const char*); + static PMFV setMapper(PMFV); + static PMFV _mapper; +}; + +class ClassB { +public: + typedef ClassB& (*PMFV)(const char*); +}; + +ClassA::PMFV ClassA::setMapper(ClassA::PMFV newFunc) +{ + PMFV oldFunc = _mapper; + _mapper = newFunc; + + return oldFunc; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net19.C b/gcc/testsuite/g++.old-deja/g++.mike/net19.C new file mode 100644 index 000000000000..68c47533a686 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/net19.C @@ -0,0 +1,20 @@ +// Test to make sure &<incomplete record type> works in c++ +// Build don't link: + +struct FILE { + int _flags; +}; + +extern struct _fake_filebuf __std_filebuf_2; + +class Value { + int width; +public: + Value(); + friend Value operator&( __const Value&, __const Value&); +}; + +FILE* Foo () +{ + return ((FILE*)&__std_filebuf_2); +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net2.C b/gcc/testsuite/g++.old-deja/g++.mike/net2.C new file mode 100644 index 000000000000..ffc14ef21156 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/net2.C @@ -0,0 +1,13 @@ +// Build don't link: +// Here is another program from the net. + +class B; + +class A { + private: + A(B *); // ERROR - + public: + A(long); // ERROR - +}; + +A a(0); // ERROR - should be ambigious diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net20.C b/gcc/testsuite/g++.old-deja/g++.mike/net20.C new file mode 100644 index 000000000000..916ba434b377 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/net20.C @@ -0,0 +1,11 @@ +// Build don't link: +// A pointer to member function test case. + +struct X +{ +}; + +void (X::* fee ())() +{ + lab: goto lab; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net21.C b/gcc/testsuite/g++.old-deja/g++.mike/net21.C new file mode 100644 index 000000000000..02e40b0b935d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/net21.C @@ -0,0 +1,59 @@ +// Make sure we can initialize complex (MI ambiguous) vtables. + +extern "C" int printf(const char *, ...); + +struct a +{ + virtual void f() = 0; +}; + +struct b +{ + virtual void g() { }; +}; + +struct c: public a, public b +{ + virtual void f(); + virtual void g(); +}; + +void c::f() +{ + printf("c::f()\n"); +} + +void c::g() +{ + printf("c::g()\n"); +} + +struct e: public b +{ +}; + +struct h +{ +}; + +struct d: public c, public e, public h +{ + virtual void f(); + virtual void g(); +}; +void d::f() +{ + printf("d::f()\n"); +} + +void d::g() +{ + printf("d::g()\n"); +} + +int main(int argc, char* argv[]) +{ + a* tmp = new d; + tmp->f(); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net22.C b/gcc/testsuite/g++.old-deja/g++.mike/net22.C new file mode 100644 index 000000000000..088a0fea4d8f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/net22.C @@ -0,0 +1,13 @@ +class Parent { +public: + Parent() {} + Parent( char *s ) {} +}; + +class Child : public Parent { +}; // ERROR - called + +main() { + Child c( "String initializer" ); // ERROR - bad + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net23.C b/gcc/testsuite/g++.old-deja/g++.mike/net23.C new file mode 100644 index 000000000000..2fe7d4c8c01f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/net23.C @@ -0,0 +1,15 @@ +// Build don't link: + +class environment { +public: + int get_font() ; +}; + +typedef int (environment::*INT_FUNCP)(); + +void myfoo(INT_FUNCP a); + +void init_env_requests() +{ + myfoo(&environment::get_font); +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net24.C b/gcc/testsuite/g++.old-deja/g++.mike/net24.C new file mode 100644 index 000000000000..682fb08b17a0 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/net24.C @@ -0,0 +1,3 @@ +// Build don't link: + + char HexDigit(unsigned char ch) { return ch < 'f'; } diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net25.C b/gcc/testsuite/g++.old-deja/g++.mike/net25.C new file mode 100644 index 000000000000..56356779042f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/net25.C @@ -0,0 +1,17 @@ +// Build don't link: + +void shake_zero() +{ +} + +void shake_one() +{ +} + +void (*foo)(); + +int main(int a) +{ + foo = a ? shake_zero : shake_one; + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net26.C b/gcc/testsuite/g++.old-deja/g++.mike/net26.C new file mode 100644 index 000000000000..5a00c8e04508 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/net26.C @@ -0,0 +1,27 @@ +// A test case found by InterViews testing... + +extern "C" int printf(const char *, ...); + +class A { +public: + int foo() { printf("ok nv\n"); } + virtual int vfoo() { printf("ok v\n"); } +}; + +struct S { + int (A::*pfn1)(); + int (A::*pfn2)(); + int (A::*pfn3)(); +}; + +// This failed before. +S s = { &A::foo, &A::vfoo, &A::foo }; + +A a; + +main() { + (a.*s.pfn1)(); + (a.*s.pfn2)(); + printf("PASS\n"); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net27.C b/gcc/testsuite/g++.old-deja/g++.mike/net27.C new file mode 100644 index 000000000000..afe975cc44f3 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/net27.C @@ -0,0 +1,9 @@ +// Build don't link: + +class path { +public: + path (const path& r) + { "\""; + '\''; + } +}; diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net28.C b/gcc/testsuite/g++.old-deja/g++.mike/net28.C new file mode 100644 index 000000000000..3b724820fbd2 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/net28.C @@ -0,0 +1,28 @@ +// From reinhard@ifki50.informatik.fh-muenchen.de against gcc 2.5.0. +// shows an InterViews problem on RS6000 and i386. Doesn't happen on +// SPARC. + +// From fbrowser.c. + +// Build don't link: + +class test { +}; + + +typedef int ( test ::* test2)(int fd); + +class ivFileBrowserImpl_IOCallback +{ + public: + + int inputReady(int fd); + test * _obj; + test2 _input; +}; + + +int ivFileBrowserImpl_IOCallback ::inputReady(int fd) +{ + return (_obj->*_input)(fd); +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net29.C b/gcc/testsuite/g++.old-deja/g++.mike/net29.C new file mode 100644 index 000000000000..6635241eb891 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/net29.C @@ -0,0 +1,27 @@ +// This is a test case for the recent libg++ make check problem. +// Build don't link: + +class SubString { +public: + SubString(); + SubString(const SubString& x); +}; + +class String { +public: + String(); + String(const SubString& x); +}; + +int operator!=(const String& x, const SubString& y); +int operator!=(const String& x, const String& y); + +int operator!=(const SubString& x, const String& y); +int operator!=(const SubString& x, const SubString& y); + +void comparetest() +{ + String x; + SubString s; + x != s; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net3.C b/gcc/testsuite/g++.old-deja/g++.mike/net3.C new file mode 100644 index 000000000000..e6dbdcbe786e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/net3.C @@ -0,0 +1,16 @@ +// Build don't link: +// Here is another program from the net. + +class BOOL { + public: + int val; + + BOOL(int i =0); + operator int(); +}; + +BOOL& foo() +{ + static BOOL status; + return status; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net30.C b/gcc/testsuite/g++.old-deja/g++.mike/net30.C new file mode 100644 index 000000000000..52f7b28fe24a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/net30.C @@ -0,0 +1,18 @@ +// Build don't link: + +class X { +public: + void x(void); +}; + +class Y : public X { +}; + +class Z : private Y { +public: + void y(void); +}; + +void Z::y(void) { + x(); // should be OK +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net31.C b/gcc/testsuite/g++.old-deja/g++.mike/net31.C new file mode 100644 index 000000000000..3ecf81c73491 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/net31.C @@ -0,0 +1,68 @@ +// Build don't link: + +class foo_a { + protected: + double func(int xi) {return 0.0;} + public: + foo_a() {} +}; + +class foo_b { + public: + foo_b(int); + foo_b(); + ~foo_b(); + foo_b(const foo_b&); + inline double& operator()(int); + foo_b& operator=(foo_b&); + void bar_a(int); +}; + +foo_b& operator*(foo_b&, foo_b&); +foo_b& operator*(double, foo_b&); + +template <class TP> +class foo_c { + typedef double (TP::* Tmatf)(int); + int m; + Tmatf* a; + void foo_cinst (int mm); + public: + foo_c(int mm); + foo_c() {m = 0; a = 0;} + ~foo_c() {delete a;} + double (TP::*& operator()(int i))(int) {return a[i];} + foo_b& bug_func(int); +}; + +template <class TP> +foo_b& foo_c<TP>::bug_func(int x) { + static foo_b retval(m); + retval.bar_a(m); + for (register int i = 0; i < m; i++) + retval(i) = (*(operator()(i)))(x); // ERROR - + return retval; +} + +template <class TP> +class foo_d { + protected: + foo_c<TP> bar_b; + public: + foo_d() {} + virtual ~foo_d() {} + virtual void setfoo_c(); +}; + +class foo_e : public foo_a, public foo_d<foo_a> { + public: + foo_e(); + ~foo_e() {} + void setfoo_c(); +}; + +void foo_e::setfoo_c() { + bar_b(0) = func; // ERROR - +} + +template class foo_c<foo_a>; diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net32.C b/gcc/testsuite/g++.old-deja/g++.mike/net32.C new file mode 100644 index 000000000000..4ac8a94816f7 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/net32.C @@ -0,0 +1,10 @@ +// Build don't link: + +class Co_obj { +public: + Co_obj() {} + }; +class Linear_list_node : virtual public Co_obj { }; +class M1 : public Linear_list_node { }; +class M2 : public Linear_list_node { }; +class New_node : public M1, public M2 { }; diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net34.C b/gcc/testsuite/g++.old-deja/g++.mike/net34.C new file mode 100644 index 000000000000..06d196c890af --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/net34.C @@ -0,0 +1,36 @@ +#include <iostream.h> + +class foo { +public: + foo(int i) {k = i;} +protected: + int k; +}; + +class bar_1 : public foo { +public: + bar_1(int i) : foo(i) {} + int get_k() {return k;} +}; + +class bar_2 : public foo { +public: + bar_2(int i) : foo(i) {}; + int get_k() {return k;} +}; + +class multiple : public bar_1, public bar_2 { +public: + multiple(int i1, int i2) : bar_1(i1), bar_2(i2) {} + void print() { + cout << "bar_1::k -> " << bar_1::k << "\n"; + cout << "bar_2::k -> " << bar_2::k << "\n"; + cout << "bar_1::get_k() -> " << bar_1::get_k() << "\n"; + cout << "bar_2::get_k() -> " << bar_2::get_k() << "\n"; + } +}; + +main() { + multiple m(1,2); + m.print(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net35.C b/gcc/testsuite/g++.old-deja/g++.mike/net35.C new file mode 100644 index 000000000000..332bf429f3e8 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/net35.C @@ -0,0 +1,27 @@ +extern "C" int printf(const char *, ...); + +class A { + public: + char *x; +}; + +class B1:public virtual A { }; + +class B2:public virtual A { }; + +class C:public B1, public B2 { +public: + C() { } +}; + +int main() { + C c; + printf("&c.x = %x\n", &c.x); + printf("&c.B1::x = %x\n", &c.B1::x); + printf("&c.B2::x = %x\n", &c.B2::x); + printf("&c.A::x = %x\n", &c.A::x); + if (&c.x != &c.B1::x + || &c.x != &c.B2::x + || &c.x != &c.A::x) + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net36.C b/gcc/testsuite/g++.old-deja/g++.mike/net36.C new file mode 100644 index 000000000000..ca86796c422f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/net36.C @@ -0,0 +1,19 @@ +// Build don't link: + +class X; + +class A { +public: + void handlerFn(X*); +}; + +typedef void (A::*handler) (X*); + +class B { +public: + void setHandler(handler); // ERROR - fn ref in err msg +}; + +void f(B* b) { + b->setHandler(A::handlerFn); // ERROR - +}; diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net37.C b/gcc/testsuite/g++.old-deja/g++.mike/net37.C new file mode 100644 index 000000000000..1ce7834a5e25 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/net37.C @@ -0,0 +1,39 @@ +class B { +public: + int bi; + void bProc ( void ) { bi = 39; } + }; + +class D : public B { +public: + int di; + void dProc (void ){ di = 42; } + }; + +typedef void (B::*BPROC)(void); +typedef void (D::*DPROC)(void); + +union AFX_PMSG { +public: + + AFX_PMSG () {}; + AFX_PMSG ( BPROC bpr ) { bfn = bpr ; } + + operator BPROC() { return bfn; } + + BPROC bfn; + DPROC dfn; +}; + + +int main(int argc, char *argv[]) { + B b; + D d; + + BPROC bpr = &B::bProc; + AFX_PMSG pmsg(bpr); + + BPROC ppr = pmsg; + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net38.C b/gcc/testsuite/g++.old-deja/g++.mike/net38.C new file mode 100644 index 000000000000..5732d594f71c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/net38.C @@ -0,0 +1,28 @@ +struct A { + virtual int a () { return 0; } +}; + +struct B { + virtual int b () { return 0; } + virtual int b2 () { return 0; } +}; + +struct C : public A, public B { + virtual int a () { return 1; } + virtual int b () { return 2; } + virtual int b2 () { return 3; } +}; + +int (C::*vmpb) () = &C::b; +int (C::*vmpb2) () = &C::b2; +int (C::*vmpa) () = &C::a; + +main () { + C c; + if ((c.*vmpa)() != 1) + return 1; + if ((c.*vmpb)() != 2) + return 1; + if ((c.*vmpb2)() != 3) + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net39.C b/gcc/testsuite/g++.old-deja/g++.mike/net39.C new file mode 100644 index 000000000000..00ad1c6bc02b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/net39.C @@ -0,0 +1,30 @@ +void *vp; + +class silly { +public: + virtual int b() { return 1; } +}; +class solly : silly { +public: + virtual int b() { return 2; } +}; +class thing { +public: + virtual int a() { return 3; } +}; +class thong : public solly, public thing { +public: + virtual int a() { + if (this != vp) return 4; + else return 0; + } +}; + +typedef int(thing::*ping)(); +ping qq = &thing::a; + +int main() { + thong b; + vp = &b; + return (b.*qq)(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net4.C b/gcc/testsuite/g++.old-deja/g++.mike/net4.C new file mode 100644 index 000000000000..4cf8e7a1387f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/net4.C @@ -0,0 +1,32 @@ +// Message-Id: <m0lLuUK-0000fRC@nix.appli.se> +// Date: Wed, 4 Mar 92 12:50 MET +// From: niklas@appli.se (Niklas Hallqvist) +// To: eichin@cygnus.com, tiemann@cygnus.com +// Cc: gcc2@cygnus.com +// Subject: nested type handling +// +// The last couple of days I've been struggling with nested types in the +// C++ compiler. Frankly, it's a mess! Was it impossible to put the stuff +// into the parser instead of the lexer? Well, anyway, to get the following +// code to compile: +// +// struct O { +// struct M { +// struct I +// {}; +// }; +// }; +// O::M::I s; +// +// a patch enclosed below is needed. I'm not sure if it causes any +// unanticipated side-effects, but it seem to work well for me. + +// Build don't link: + +struct O { + struct M { + struct I + {}; + }; +}; +O::M::I s; diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net40.C b/gcc/testsuite/g++.old-deja/g++.mike/net40.C new file mode 100644 index 000000000000..10e16e685b75 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/net40.C @@ -0,0 +1,18 @@ +#include <stddef.h> +extern "C" void abort(); + +class toto { +public: + void * operator new (size_t t) { + abort(); + } + void operator delete (void*p, size_t t) { + abort(); + } +}; + +int main() { + toto * p; + p = new toto[5]; + delete [] p; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net41.C b/gcc/testsuite/g++.old-deja/g++.mike/net41.C new file mode 100644 index 000000000000..6f02d3ce0f48 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/net41.C @@ -0,0 +1,3 @@ +main() { + int i = ~ false; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net42.C b/gcc/testsuite/g++.old-deja/g++.mike/net42.C new file mode 100644 index 000000000000..178a0bbf5ec2 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/net42.C @@ -0,0 +1,25 @@ +// Build don't link: + +typedef void (*__sighandler_t)(int); + +struct sigaction { + __sighandler_t sa_handler; +}; + +struct task_struct { + struct sigaction sigaction[32]; +}; + +void +get_stat() { + struct task_struct ** p = 0; + unsigned long bit = 1; + unsigned long sigignore = 0; + int i = 0; + switch((unsigned long) (*p)->sigaction[i].sa_handler) + { + case 1: + sigignore |= bit; + break; + } +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net43.C b/gcc/testsuite/g++.old-deja/g++.mike/net43.C new file mode 100644 index 000000000000..c2c789325d67 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/net43.C @@ -0,0 +1,11 @@ +// Build don't link: + +class foo { + public: + friend int operator ^(const foo&, const foo&); +}; + +main () +{ + int (*funptr) (const foo &, const foo &) = operator ^; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net44.C b/gcc/testsuite/g++.old-deja/g++.mike/net44.C new file mode 100644 index 000000000000..5b6a0ad4bfe9 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/net44.C @@ -0,0 +1,11 @@ +// Make sure we don't dump core + +enum request { q, w, e}; // ERROR - + +class request { // ERROR - +public: + int a; + request( int b) { + a = b; + }; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net45.C b/gcc/testsuite/g++.old-deja/g++.mike/net45.C new file mode 100644 index 000000000000..6f9dc3a391b8 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/net45.C @@ -0,0 +1,20 @@ +// Build don't link: + +template <class T1, class T2> +struct pair { + T1 first; + T2 second; + pair(const T1& a, const T2& b) : first(a), second(b) {} +}; + +struct myint { + myint() { + } + myint(const myint& mi) { + } + operator=(const myint& mi) { + } +}; + +extern pair<const myint, myint> a; +pair<const myint, myint> b(a); diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net46.C b/gcc/testsuite/g++.old-deja/g++.mike/net46.C new file mode 100644 index 000000000000..1813a43814fc --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/net46.C @@ -0,0 +1,15 @@ +#include <iostream.h> +#include <stddef.h> + +int fail = 1; + +static void *operator new(size_t size) { + --fail; + return (void*) 0; +} + +main() { + cout << ""; + new int; + return fail; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net47.C b/gcc/testsuite/g++.old-deja/g++.mike/net47.C new file mode 100644 index 000000000000..431ff22f1a03 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/net47.C @@ -0,0 +1,8 @@ +// Build don't link: +// Special g++ Options: -w + +class foo {}; +class bar : foo { +public: + bar () : () {} +}; diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net48.C b/gcc/testsuite/g++.old-deja/g++.mike/net48.C new file mode 100644 index 000000000000..a2d674383b67 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/net48.C @@ -0,0 +1,14 @@ +// Build don't link: + +char *a="aê"; + +class A +{ +public: + A() + { + char *b="aê"; + } +}; + +char *c="aê"; diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net5.C b/gcc/testsuite/g++.old-deja/g++.mike/net5.C new file mode 100644 index 000000000000..e9144320479f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/net5.C @@ -0,0 +1,7 @@ +// Build don't link: +// Special g++ Options: + +volatile void abort(); +volatile void oink() { + abort() ; +} // gets bogus error - diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net6.C b/gcc/testsuite/g++.old-deja/g++.mike/net6.C new file mode 100644 index 000000000000..6a3aef1d9191 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/net6.C @@ -0,0 +1,5 @@ +// Build don't link: +// Special g++ Options: + +struct X {}; +X x = X(); // gets bogus error diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net7.C b/gcc/testsuite/g++.old-deja/g++.mike/net7.C new file mode 100644 index 000000000000..14655028ea79 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/net7.C @@ -0,0 +1,7 @@ +// Build don't link: +// Special g++ Options: + +// This should compile. + +int foo (signed char *); +int foo (char *); diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net8.C b/gcc/testsuite/g++.old-deja/g++.mike/net8.C new file mode 100644 index 000000000000..62b4fedb569a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/net8.C @@ -0,0 +1,32 @@ +// Build don't link: +// Special g++ Options: -pedantic-errors + +class Base { +public: + int foo; +}; + +class Derived : public Base { +public: + int bar; +}; + +void func(Base&); // ERROR - + +void func2(const Derived& d) { + func(d); // ERROR - this is bad +} + +void +foo (int& a) +{ // ERROR - +} + +main () +{ + int b; + const int*const a = &b; + *a = 10; // ERROR - it's const + foo (*a); // ERROR - it's const + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/net9.C b/gcc/testsuite/g++.old-deja/g++.mike/net9.C new file mode 100644 index 000000000000..927184a211a9 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/net9.C @@ -0,0 +1,15 @@ +// Build don't link: +// Special g++ Options: -pedantic-errors + +const ci=10, *pc = &ci, *const cpc = pc, **ppc; +int i, *p, *const cp = &i; + +main() +{ + ci = 1; // ERROR - bad + ci++; // ERROR - bad + *pc = 2; // ERROR - bad + cp = &ci; // ERROR - bad + cpc++; // ERROR - bad + p = pc; // ERROR - bad +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/ns1.C b/gcc/testsuite/g++.old-deja/g++.mike/ns1.C new file mode 100644 index 000000000000..83fdf29f5590 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/ns1.C @@ -0,0 +1,11 @@ +namespace Foo { // WARNING - namespaces mostly broken + bar() { + return 0; + } +} + +using namespace Foo; // ERROR - using not implemented + +main() { + bar(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/ns10.C b/gcc/testsuite/g++.old-deja/g++.mike/ns10.C new file mode 100644 index 000000000000..587b9291b552 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/ns10.C @@ -0,0 +1,10 @@ +// excess errors test - XFAIL *-*-* +namespace Foo { + bar() { + return 0; + } +} + +main() { + return Foo::bar(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/ns11.C b/gcc/testsuite/g++.old-deja/g++.mike/ns11.C new file mode 100644 index 000000000000..f0243ca41c5a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/ns11.C @@ -0,0 +1,19 @@ +// excess errors test - XFAIL *-*-* +class Foo { +}; + +namespace A { + namespace Foo { + bar() { + return 0; + } + } + + mymain() { + return Foo::bar(); + } +} + +main() { + return A::mymain(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/ns12.C b/gcc/testsuite/g++.old-deja/g++.mike/ns12.C new file mode 100644 index 000000000000..65682c20afcc --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/ns12.C @@ -0,0 +1,14 @@ +namespace { // WARNING - namespaces mostly broken + int i = 10; + enum fish { one = 1, two = 2, red = 3, blue = 4 }; +} +extern "C" void printf (const char *, ...); +int main(void) +{ + if (i != 10) { + return 1; + } + if (one != 1) { + return 2; + } +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/ns13.C b/gcc/testsuite/g++.old-deja/g++.mike/ns13.C new file mode 100644 index 000000000000..d0eb3cd52444 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/ns13.C @@ -0,0 +1,14 @@ +// Build don't link: +// excess errors test - XFAIL *-*-* + +namespace N { + struct C { + C(); + }; +} + +namespace M { + struct C { + C(); + }; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/ns14.C b/gcc/testsuite/g++.old-deja/g++.mike/ns14.C new file mode 100644 index 000000000000..62ac4566359b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/ns14.C @@ -0,0 +1,12 @@ +// Build don't link: +// excess errors test - XFAIL *-*-* + +namespace Jazz { + int horn( int h ) { return 1; } +} + +using Jazz::horn; + +namespace Jazz { + int horn ( char c ) { return 0; } +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/ns2.C b/gcc/testsuite/g++.old-deja/g++.mike/ns2.C new file mode 100644 index 000000000000..d8112f82a9e6 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/ns2.C @@ -0,0 +1,9 @@ +namespace N { // WARNING - namespaces mostly broken + int i; +}; + +using namespace N; // ERROR - using not implemented + +main() { + return i; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/ns3.C b/gcc/testsuite/g++.old-deja/g++.mike/ns3.C new file mode 100644 index 000000000000..609eb36877d4 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/ns3.C @@ -0,0 +1,4 @@ +int i; // ERROR - XFAIL *-*-* + +namespace i { // ERROR - +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/ns4.C b/gcc/testsuite/g++.old-deja/g++.mike/ns4.C new file mode 100644 index 000000000000..a7dbdd630186 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/ns4.C @@ -0,0 +1,6 @@ +// Build don't link: + +namespace i { // WARNING - namespaces mostly broken +} +namespace i { +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/ns5.C b/gcc/testsuite/g++.old-deja/g++.mike/ns5.C new file mode 100644 index 000000000000..01b36231a4a1 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/ns5.C @@ -0,0 +1,5 @@ +namespace A { // WARNING - namespaces mostly broken + int i = 1; +} + +int j = i; // ERROR - XFAIL *-*-* diff --git a/gcc/testsuite/g++.old-deja/g++.mike/ns6.C b/gcc/testsuite/g++.old-deja/g++.mike/ns6.C new file mode 100644 index 000000000000..22506c57c62f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/ns6.C @@ -0,0 +1,9 @@ +// Build don't link: + +namespace A { // WARNING - namespaces mostly broken + int i = 1; +} + +namespace A { + int j = i; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/ns7.C b/gcc/testsuite/g++.old-deja/g++.mike/ns7.C new file mode 100644 index 000000000000..0d0698c5f946 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/ns7.C @@ -0,0 +1,9 @@ +// Build don't link: + +namespace A { // WARNING - namespaces mostly broken + int i = 1; +} + +namespace B { + int j = i; // ERROR - XFAIL *-*-* +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/ns8.C b/gcc/testsuite/g++.old-deja/g++.mike/ns8.C new file mode 100644 index 000000000000..4073eb82ce82 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/ns8.C @@ -0,0 +1,9 @@ +// Build don't link: + +namespace A { // WARNING - namespaces mostly broken + int i = 1; +} + +namespace A { + int j = i; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/ns9.C b/gcc/testsuite/g++.old-deja/g++.mike/ns9.C new file mode 100644 index 000000000000..b88ae278e39d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/ns9.C @@ -0,0 +1,12 @@ +// excess errors test - XFAIL *-*-* +namespace Foo { + bar() { + return 0; + } +} + +using Foo::bar; + +main() { + return bar(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/offset1.C b/gcc/testsuite/g++.old-deja/g++.mike/offset1.C new file mode 100644 index 000000000000..6a259d8967a0 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/offset1.C @@ -0,0 +1,38 @@ +extern "C" int printf(const char *, ...); +void *vp; +int fail = 0; + +class Foo { +public: + virtual void setName() { + printf("Foo at %x\n", this); + if (vp != (void*)this) + fail = 1; + } +}; + +class Bar : public Foo { +public: + virtual void init(int argc, char **argv) { + printf("Bar's Foo at %x\n", (Foo*)this); + vp = (void*)(Foo*)this; + setName(); + } +}; + +class Barf : virtual public Bar { +public: + virtual void init(int argc, char **argv) { Bar::init(argc, argv); } +}; + +class Baz : virtual public Bar, virtual public Barf { +public: + virtual void init(int argc, char **argv) { Barf::init(argc, argv); } +}; + +Bar *theBar = new Baz(); + +int main(int argc, char **argv) { + theBar->init(argc, argv); + return fail; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/opr-as1.C b/gcc/testsuite/g++.old-deja/g++.mike/opr-as1.C new file mode 100644 index 000000000000..38795b5ba240 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/opr-as1.C @@ -0,0 +1,11 @@ +// Shows a problem with the default op= not being an implementation... + +class C { + int i; +}; + +C a, b; + +main() { + a = b; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/opr-dot1.C b/gcc/testsuite/g++.old-deja/g++.mike/opr-dot1.C new file mode 100644 index 000000000000..e709057c33a5 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/opr-dot1.C @@ -0,0 +1,22 @@ +// Build don't link: + +typedef struct base1 { + int x; +} base1_t; + +typedef struct base2 { + int x; +} base2_t; + +class derived1 : public base1 { +}; + +class derived2 : public derived1, public base2 { +}; + +struct test { + derived2& fails; + test1() { + fails.base1::x = 5; + } +}; diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p10148.C b/gcc/testsuite/g++.old-deja/g++.mike/p10148.C new file mode 100644 index 000000000000..36309763fde8 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p10148.C @@ -0,0 +1,33 @@ +// prms-id: 10148 + +int fail = 1; +void ok() { fail = 0; } + +class TC { + int s_; +}; + +class TIRD { + public: + void (*itc)(); + TIRD() { itc = ok; } +}; + +class TCCB : public TC, public TIRD { +}; + +class TCRCB : public TCCB { +public: + virtual void eat (); +}; + +void TCRCB::eat () { + void *vp = (TIRD*)this->itc; + this->itc(); +} + +main() { + TCRCB a; + a.eat(); + return fail; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p10247.C b/gcc/testsuite/g++.old-deja/g++.mike/p10247.C new file mode 100644 index 000000000000..c69bc90afdfa --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p10247.C @@ -0,0 +1,6 @@ +// prms-id: 10247 + +class a { +public: + int operator++(int) { return operator()++ ; } // ERROR - +}; diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p10416.C b/gcc/testsuite/g++.old-deja/g++.mike/p10416.C new file mode 100644 index 000000000000..aa56b5ffc2a2 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p10416.C @@ -0,0 +1,9 @@ +// Build don't link: +// Special g++ Options: -fexceptions +// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe* +// prms-id: 10416 + +class not_ok { +public: + void f() throw(int) { } +}; diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p10511.C b/gcc/testsuite/g++.old-deja/g++.mike/p10511.C new file mode 100644 index 000000000000..b92b4f7d7fd0 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p10511.C @@ -0,0 +1,15 @@ +// Build don't link: +// prms-id: 10511 + +class S { +public: + enum E {a, b, c}; +}; + +class C { +public: + bool f (S::E()) { } + virtual void foo(); +}; + +void C::foo() { } diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p10769a.C b/gcc/testsuite/g++.old-deja/g++.mike/p10769a.C new file mode 100644 index 000000000000..784465ce8eee --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p10769a.C @@ -0,0 +1,45 @@ +// Special g++ Options: -Wno-pmf-conversions +// prms-id: 10769 + +#define PMF2PF(PMF) ((void (*)())(PMF)) + +int ok = 0; + +class A { +public: + void f1a() { ok += 3; } + void f1b() { ok += 5; } + void f2a() { ok += 7; } + void f2b() { } + const static void (*table[2][2])(); + void main(); +} a; + +const void (*A::table[2][2])() + = { { PMF2PF(&A::f1a), PMF2PF(&A::f1b) }, + { PMF2PF(&A::f2a), PMF2PF(&A::f1b) }, + }; + +void +dispatch (A *obj, int i, int j) +{ + (*(void (*)(A *))A::table[i][j])(obj); +} + +void A::main() { + dispatch (&a, 0, 0); + void (A::*mPtr)(A*) = &A::f1a; + + (*(void (*)(A*))PMF2PF(mPtr))(&a); + (*(void (*)(A*))PMF2PF(f2a))(&a); +} + +int main() { + a.A::main(); + dispatch (&a, 0, 1); + void (A::*mPtr)(A*) = &A::f1b; + + (*(void (*)(A*))PMF2PF(a.*mPtr))(&a); + (*(void (*)(A*))PMF2PF(a.f2a))(&a); + return ok != 3+3+5+5+7+7; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p10769b.C b/gcc/testsuite/g++.old-deja/g++.mike/p10769b.C new file mode 100644 index 000000000000..91e11fb6ed75 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p10769b.C @@ -0,0 +1,25 @@ +// Special g++ Options: +// prms-id: 10769 + +#define PMF2PF(PMF) ((void (*)())(PMF)) + +class A { +public: + void f1a() { } + void main(); +} a; + +class B { +public: + void bf1() { } +} b; + +void A::main() { + void (B::*mPtrB)(B*); + (*(void (*)(A*))PMF2PF(mPtrB))(&b); // ERROR - +} + +int main() { + void (A::*mPtr)(A*) = &A::f1a; + (*(void (*)(A*))PMF2PF(mPtr))(&a); // ERROR - +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p10849a.C b/gcc/testsuite/g++.old-deja/g++.mike/p10849a.C new file mode 100644 index 000000000000..ff94b1f81116 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p10849a.C @@ -0,0 +1,33 @@ +// prms-id: 10849 + +struct A +{ + int comm; + A(int i) : comm(i) { } +}; + +struct S1 { char c1; }; + +struct B : public S1, public A +{ + B(int i) : A(i) { } +}; + +struct C : public A +{ + C(int i) : A(i) { } +}; + +struct D : public B, public C +{ + virtual int g() { + int D::*pmd = &C::comm; + return (this->*pmd) == 42; + } + D() : B(41), C(42) { } +} d; + +main() { + if (! d.g()) + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p10951.C b/gcc/testsuite/g++.old-deja/g++.mike/p10951.C new file mode 100644 index 000000000000..d53775fecc4d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p10951.C @@ -0,0 +1,21 @@ +// Build don't link: +// prms-id: 10951 + +inline int m1(const int& a) { + return 1; +} + +template <class T> +class A { +public: + typedef int st; + + static int m2t() { + return m1(1); + } +}; + +A<int>::st i; +int m3() { + return A<int>::m2t(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p11012.C b/gcc/testsuite/g++.old-deja/g++.mike/p11012.C new file mode 100644 index 000000000000..aca77d426076 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p11012.C @@ -0,0 +1,14 @@ +// Build don't link: +// Special g++ Options: -Wno-pmf-conversions +// prms-id: 11012 + +class Foo { +public: + int f(){} +}; + +void foo() { + void *p1 = &Foo::f; + const void *p2 = &Foo::f; + int (*p3)() = &Foo::f; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p11110.C b/gcc/testsuite/g++.old-deja/g++.mike/p11110.C new file mode 100644 index 000000000000..565dfb15855b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p11110.C @@ -0,0 +1,20 @@ +// prms-id: 11110 + +class data; + +class conatiner { +public: + virtual void* first (); + virtual data* contents (void* i); +}; + +class user { +public: + data* data1 () const; +private: + conatiner& _c; +}; + +data* user::data1() const { + return (_c.contents (_c.first)); // ERROR - +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p11116.C b/gcc/testsuite/g++.old-deja/g++.mike/p11116.C new file mode 100644 index 000000000000..9beff46e8275 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p11116.C @@ -0,0 +1,22 @@ +// Build don't link: +// Special g++ Options: -Wno-pmf-conversions +// prms-id: 11116 + +class Bar { +public: + int f(int a) { val = a; return val; } +private: + int val; +}; + +typedef int (Bar::*BarPtr)(int); + +void foo() { + int a; + int (Bar::*bp)(int) = &Bar::f; + Bar bar; + int (*p)(void *, int); + + p = (int (*)(void*,int))((void (*)())((bp).__pfn_or_delta2.__pfn)); + a = (*p)(&bar, 4); +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p11142.C b/gcc/testsuite/g++.old-deja/g++.mike/p11142.C new file mode 100644 index 000000000000..a22ca45bbd71 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p11142.C @@ -0,0 +1,18 @@ +// Build don't link: +// Special g++ Options: -fexceptions -O -g +// prms-id: 11142 + +class RWxmsg { +public: + RWxmsg(); + virtual ~RWxmsg(); +}; + +class RWTHRInternalError : public RWxmsg { +public: + virtual ~RWTHRInternalError() { } +}; + +void setCount(int count) { + throw RWTHRInternalError(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p11144.C b/gcc/testsuite/g++.old-deja/g++.mike/p11144.C new file mode 100644 index 000000000000..98b9fb04ef95 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p11144.C @@ -0,0 +1,17 @@ +// Special g++ Options: -O +// prms-id: 11144 + +class Id { +public: + int d_i; + Id(int i) : d_i(i) {} + int value() {return d_i;} +} id(1); + +Id foo() { return id; } + +int main() { + const Id &id1 = foo(); + const Id &id2 = foo(); + return &id1 == &id2; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p11482.C b/gcc/testsuite/g++.old-deja/g++.mike/p11482.C new file mode 100644 index 000000000000..f03a4229eca2 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p11482.C @@ -0,0 +1,10 @@ +// Build don't link: +// prms-id: 11482 + +void *vp; + +enum E { bad, ok } e; + +void foo() { + e = (E)vp; // ERROR - +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p11667.C b/gcc/testsuite/g++.old-deja/g++.mike/p11667.C new file mode 100644 index 000000000000..be028b323695 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p11667.C @@ -0,0 +1,62 @@ +// Special g++ Options: -fexceptions +// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-* +// prms-id: 11667 + +extern "C" printf(const char *,...); + +template < class T > +class LIST { +public: + + LIST() { nitems = 16; items = new T[nitems]; }; + + LIST(int u) { nitems = u; items = new T[nitems]; }; + + T& operator[](int i) const { + return items[i]; + } + + void grow(int n) { + T* newlist = new T[n]; + T* src = items; + T* dst = newlist; + int i = nitems; + + try { + while (i--) *dst++ = *src++; + } catch (...) { + delete[] newlist; + throw; + } + + if (items) delete[] items; + nitems = n; + items = newlist; + } + +private: + int nitems; + T *items; +}; + +int main(int argc, char **argv) { + int i; + LIST<int> mylist(10); + + printf("Start dumping initial 10 item list\n"); + for (i = 0; i < 10 ; i++) { + mylist[i] = i; + printf("%d\n", mylist[i]); + } + + printf("Growing list to 20\n"); + mylist.grow(20); + + printf("Start dumping grown 20 item list\n"); + for (i = 0; i < 20; i++) { + mylist[i] = i; + printf("%d\n", mylist[i]); + } + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p12306.C b/gcc/testsuite/g++.old-deja/g++.mike/p12306.C new file mode 100644 index 000000000000..12b4a453b9aa --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p12306.C @@ -0,0 +1,75 @@ +// prms-id: 12306 + +void *ptr1, *ptr2; +int fail = 0; + +extern "C" int printf(const char *...); + +class RWSlist { }; + +class RWSlistIterator { +public: + RWSlist *slist; + RWSlistIterator(RWSlist& s) { } + void toLast() { + if (ptr1 != (RWSlistIterator*)this) + fail = 5; + if (ptr2 != &(*this).slist) + fail = 6; + + if (0) printf("at %x %x\n", (RWSlistIterator*)this, &(*this).slist); + } +}; + +class RWCollectable { +}; + +class RWSlistCollectables : public RWSlist { +public: + RWSlistCollectables() { } + RWSlistCollectables(RWCollectable* a) { } +}; + +class RWIterator { }; + +class RWSlistCollectablesIterator : public RWIterator, public RWSlistIterator { +public: + RWSlistCollectablesIterator(RWSlistCollectables& s) : RWSlistIterator(s) { } +}; + +class Sim_Event_Manager { +public: + RWSlistCollectables scheduled_events_; + RWSlistCollectablesIterator last_posted_event_position_; + Sim_Event_Manager(); + void post_event(); +}; + +Sim_Event_Manager::Sim_Event_Manager () + :last_posted_event_position_(scheduled_events_) +{ +} + +void Sim_Event_Manager::post_event () { + ptr1 = (RWSlistIterator*)&last_posted_event_position_; + ptr2 = &((RWSlistIterator*)&last_posted_event_position_)->slist; + if (0) printf("at %x %x\n", (RWSlistIterator*)&last_posted_event_position_, + &((RWSlistIterator*)&last_posted_event_position_)->slist); + if (ptr1 != (RWSlistIterator*)&last_posted_event_position_) + fail = 1; + if (ptr2 != &((RWSlistIterator&)last_posted_event_position_).slist) + fail = 2; + if (0) printf("at %x ?%x\n", (RWSlistIterator*)&last_posted_event_position_, + &((RWSlistIterator&)last_posted_event_position_).slist); + if (ptr1 != (RWSlistIterator*)&last_posted_event_position_) + fail = 3; + if (ptr2 != &((RWSlistIterator&)last_posted_event_position_).slist) + fail = 4; + last_posted_event_position_.toLast(); +} + +int main(int argc, char **argv) { + Sim_Event_Manager foo; + foo.post_event(); + return fail; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p12306a.C b/gcc/testsuite/g++.old-deja/g++.mike/p12306a.C new file mode 100644 index 000000000000..bbcade4f9beb --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p12306a.C @@ -0,0 +1,35 @@ +// prms-id: 12306 +// a net report of the same problem as 12306 + +class a { +public: + int i; +}; + +class g : virtual public a { +}; + +class b : virtual public a { + int j; +}; + +class c : public g, public b { +}; + +class d { +public: + virtual class b* get() {return 0;} +}; + +class f : public d { +public: + virtual class b* get() {return &_c;} + c _c; +}; + +int main(void) { + f D; + b* bp=D.get(); + D._c.i = 42; + return &D._c.i != &bp->i; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p1248.C b/gcc/testsuite/g++.old-deja/g++.mike/p1248.C new file mode 100644 index 000000000000..3db677c5b80e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p1248.C @@ -0,0 +1,28 @@ +// GROUPS passed pure-virt +extern "C" { void printf(const char *, ...); } +class Base { +public: + virtual ~Base() =0; +}; + +class Deranged : public Base { +public: + int value; + virtual ~Deranged(); +}; + + +Deranged::~Deranged(){} + +void foo() { + Deranged d; +} + +main() +{ + foo(); + printf("PASS\n"); + return 0; +} + +Base::~Base () { } diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p1567.C b/gcc/testsuite/g++.old-deja/g++.mike/p1567.C new file mode 100644 index 000000000000..0cc9a03775e1 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p1567.C @@ -0,0 +1,41 @@ +// GROUPS passed vtable +extern "C" printf (const char *, ...); +extern "C" void exit(int); + +class A { +public: + virtual const char* f1() { return "A::f1"; } + virtual const char* f2() { return "A::f2"; } + virtual const char* f3() { printf("FAIL\n"); exit(1); return "A::f3"; } +}; + +class B { +public: + virtual const char* f2() { return "B::f2"; } + virtual const char* f3() { return "B::f3"; } +}; + +class C: public A, public B { +public: + const char* f2() { return B::f2(); } + const char* f1() { return f2(); } + const char* f3() { return A::f3(); } +}; + +class D: public A, public B { +public: + const char* f2() { return B::f2(); } + const char* f1() { return D :: f2(); } + const char* f3() { return A::f3(); } +}; + +main() { + C* tempC = new C; + D* tempD = new D; + A* a = tempC; + printf("calling f1 on a C gives %s\n", a->f1()); + a = tempD; + printf("calling f1 on a D gives %s\n", a->f1()); + printf("PASS\n"); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p1862.C b/gcc/testsuite/g++.old-deja/g++.mike/p1862.C new file mode 100644 index 000000000000..1f88a830a269 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p1862.C @@ -0,0 +1,62 @@ +// GROUPS vtable +extern "C" printf (const char *, ...); + +class A +{ +public: + virtual ~A(){}; + virtual int type(void) + { + return -1; + } +}; + +class B +{ +public: + virtual ~B(){}; +}; + + +class C0 : public B, public A +{ +public: + virtual int type(void) + { + return 0; + } +}; + +class C1 : public C0 +{ +public: + virtual int type(void) + { + return 1; + } +}; + +class C2 : public C0 +{ +public: + virtual int type(void) + { + return 2; + } +}; + +main() +{ + C1 *one = new C1; + + if (one->type() == 1) + { + printf ("PASS\n"); + return 0; + } + else + { + printf ("FAIL\n"); + return 1; + } +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p1989.C b/gcc/testsuite/g++.old-deja/g++.mike/p1989.C new file mode 100644 index 000000000000..a145b1ecbce0 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p1989.C @@ -0,0 +1,494 @@ +// Build don't link: +// prms-id: 1989 + +#define TRUE true +#define FALSE false +typedef void *Pix; + +template<class T> +struct link { + T item; + link *next; + link *prev; + + link(const T& t): item(t), prev(0), next(0) + { }; + link(const T& t, link<T> *p, link<T> *n): item(t), prev(p), next(n) + { }; +}; + +template<class T> +class List_DL { +public: + List_DL(); + List_DL(const List_DL&); + ~List_DL(); + + void append(const T& item); + void prepend(const T& item); + void insert(const T& item, Pix x, bool before); + + void remove(Pix& x) + { T tmp; remove(x, tmp); } + void remove(Pix& x, T& item); + + void clear(); + + unsigned length() const + { return count; } + +private: + + unsigned count; + link<T> *head; + link<T> *tail; + +public: + Pix first() const + { return Pix(head); } + Pix last() const + { return Pix(tail); } + void next(Pix& x) const + { if (0 != x) x = ((link<T> *) x)->next; } + void prev(Pix& x) const + { if (0 != x) x = ((link<T> *) x)->prev; } + T& operator()(Pix x) const + { return ((link<T> *) x)->item; } +}; + +template<class T> +List_DL<T>::List_DL(): +count(0), +head(0) +{ } + +template<class T> +List_DL<T>::List_DL(const List_DL& other): +count(0), +head(0) +{ + for (Pix x=other.first(); 0 != x; other.next(x)) + append(other(x)); +} + +template<class T> +List_DL<T>::~List_DL() +{ + clear(); +} + +template<class T> +void +List_DL<T>::append(const T& item) +{ + count++; + if (0 == head) { + head = new link<T>(item); + tail = head; + } else { + tail->next = new link<T>(item, tail, 0); + tail = tail->next; + } +} + +template<class T> +void +List_DL<T>::prepend(const T& item) +{ + count++; + if (0 == head) { + head = new link<T>(item); + tail = head; + } else { + head = new link<T>(item, 0, head); + if (tail == head) + tail = tail->next; + } +} + +template<class T> +void +List_DL<T>::insert(const T& item, Pix x, bool before = TRUE) +{ + link<T> *l = (link<T> *) x; + + if (before) { + if (0 == l || l == head) { + prepend(item); + } else { + link<T> *n = new link<T>(item, l->prev, l); + l->prev->next = n; + l->prev = n; + } + } else { + if (0 == l || l == tail) { + append(item); + } else { + link<T> *n = new link<T>(item, l, l->next); + l->next->prev = n; + l->prev = n; + } + } +} + +template<class T> +void +List_DL<T>::remove(Pix& x, T& item) +{ + link<T> *l = (link<T> *) x; + + if (0 == l) + return; + + item = l->item; + if (1 == count) { + delete head; + head = 0; + tail = 0; + } else { + // more than one item in the list + if (l == head) { + link<T> *old = head; + head = head->next; + head->prev = 0; + delete old; + } else if (l == tail) { + link<T> *old = tail; + tail = tail->prev; + tail->next = 0; + delete old; + } else { + l->next->prev = l->prev; + l->prev->next = l->next; + delete l; + } + } +} + +template<class T> +void +List_DL<T>::clear() +{ + link<T> *l, *succ; + for (l=head; 0 != l; l=succ) { + succ = l->next; + delete l; + } + head = 0; + tail = 0; +} + +template<class T> +class List_DLS: public List_DL<T> { +public: + List_DLS(): List_DL<T>() + { }; + List_DLS(const List_DLS& other): List_DL<T>(other) + { }; + + bool contains(const T& item) const + { return search(item) != 0 ? TRUE: FALSE; } + Pix search(const T&) const; +}; + +template<class T> +Pix +List_DLS<T>::search(const T& item) const +{ + for (Pix x=first(); 0 != x; next(x)) { + if (item == operator()(x)) // ERROR - const subversion + return x; + } + return 0; +} + +template<class T> +class List_DLSp: public List_DL<T> { +public: + List_DLSp(): List_DL<T>() + { }; + List_DLSp(const List_DLSp& other): List_DL<T>(other) + { }; + + bool contains(const T& item) const +#ifndef INTERNAL_ERROR + ; +#else + { return search(item) != 0 ? TRUE: FALSE; } +#endif + Pix search(const T&) const; +}; + +template<class T> +bool +List_DLSp<T>::contains(const T& item) const +{ + for (Pix x=first(); 0 != x; next(x)) { + if (*item == *operator()(x)) + return TRUE; + } + return FALSE; +} + +template<class T> +class Set { +public: + Set(); + Set(const Set& other); + + virtual void add(const T& item); + + void remove(const T& item) + { Pix x = search(item); remove(x); } + void remove(Pix& x) + { T tmp; remove(x, tmp); } + virtual void remove(Pix& x, T& item); + + virtual void clear(); + + virtual bool contains(const T&) const; + virtual Pix search(const T&) const; + + virtual unsigned length() const; + + virtual Pix first() const; + virtual void next(Pix& x) const; + virtual T& operator()(Pix x) const; +}; + +template<class T> +Set<T>::Set() +{ } + +template<class T> +Set<T>::Set(const Set& other) +{ } + + +template<class T> +class Set_DL: public List_DLS<T> { +public: + Set_DL(); + Set_DL(const Set_DL& other); + + void add(const T& item) + { list.append(item); } + void remove(Pix& x, T& item) + { list.remove(x, item); } + + void clear() + { list.clear(); } + + bool contains(const T& item) const + { return list.contains(item); } + Pix search(const T& item) const + { return list.search(item); } + + unsigned length() const + { return list.length(); } + + Pix first() const + { return list.first(); } + void next(Pix& x) const + { list.next(x); } + T& operator()(Pix x) const + { return list(x); } +private: + List_DLS<T> list; +}; + +template<class T> +class Set_DLp: public List_DLSp<T> { +public: + Set_DLp(); + Set_DLp(const Set_DLp& other); + + void add(const T& item) + { list.append(item); } + void remove(Pix& x, T& item) + { list.remove(x, item); } + + void clear() + { list.clear(); } + + bool contains(const T& item) const + { return list.contains(item); } + Pix search(const T& item) const + { return list.search(item); } + + unsigned length() const + { return list.length(); } + + Pix first() const + { return list.first(); } + void next(Pix& x) const + { list.next(x); } + T& operator()(Pix x) const + { return list(x); } +private: + List_DLSp<T> list; +}; + +template<class T> +struct vertex { + T item; + List_DL<vertex<T> *> fanout; + + vertex(): item(), fanout() // gets bogus error + { }; + vertex(const T& i): item(), fanout() // gets bogus error - XFAIL *-*-* + { }; +}; + +template<class T> +class Graph { +public: + Graph(); + Graph(const Graph&); + ~Graph(); + + void add(const T& from, const T& to); + bool contains(const T& from, const T& to) const; + + void clear() + { vertices.clear(); } + + unsigned lengthV() const + { return vertices.length(); } + + Pix firstV() const + { return vertices.first(); } + void nextV(Pix& x) const + { vertices.next(x); } + T& V(Pix x) const + { return vertices(x).item; } + + Pix firstV1(Pix vx) const; + void nextV1(Pix vx, Pix& x) const; + T& V1(Pix vx, Pix x) const; +private: + vertex<T> *lookup(const T& from) const; + vertex<T> *lookup_new(const T& from); + + List_DLS<vertex<T> > vertices; +}; + +template<class T> +Graph<T>::Graph(): +vertices() +{ } + +template<class T> +Graph<T>::Graph(const Graph& other): +vertices() +{ + for (Pix vx=firstV(); 0 != vx; nextV(vx)) { + for (Pix vx1=firstV1(vx); 0 != vx1; nextV1(vx, vx1)) { + add(V(vx), V1(vx, vx1)); + } + } +} + +template<class T> +Graph<T>::~Graph() +{ + clear(); +} + +template<class T> +void +Graph<T>::add(const T& from, const T& to) +{ + vertex<T> *fromv = lookup_new(from); + if (from == to) + return; + vertex<T> *tov = lookup_new(to); + fromv->fanout.append(tov); +} + +template<class T> +bool +Graph<T>::contains(const T& from, const T& to) const +{ + vertex<T> *fromv = lookup(from); + if (0 == fromv) + return FALSE; + + for (Pix x=fromv->fanout.first(); 0 != x; fromv->fanout.next(x)) { + if (fromv->fanout(x)->item == to) + return TRUE; + } + + return FALSE; +} + +template<class T> +vertex<T> * +Graph<T>::lookup(const T& from) const +{ + for (Pix x=vertices.first(); 0 != x; vertices.next(x)) { + if (vertices(x).item == from) + return &vertices(x); + } + return 0; +} + +template<class T> +vertex<T> * +Graph<T>::lookup_new(const T& from) +{ + vertex<T> *v = lookup(from); + if (0 == v) { + vertices.append(from); // gets bogus error + return &vertices(vertices.last()); + } + return v; +} + +template<class T> +Pix +Graph<T>::firstV1(Pix vx) const +{ + vertex<T> *v = (vertex<T> *) vx; + return v->fanout.first(); +} + +template<class T> +void +Graph<T>::nextV1(Pix vx, Pix& x) const +{ + vertex<T> *v = (vertex<T> *) vx; + return v->fanout.next(x); // ERROR - return from void method +} + +template<class T> +T& +Graph<T>::V1(Pix vx, Pix x) const +{ + vertex<T> *v = (vertex<T> *) vx; + static T x1; + return x1; +} + +class STRLIdentifier; + +extern x(List_DL<STRLIdentifier *>); +extern x(List_DLS<STRLIdentifier *>); + +extern x(Set<STRLIdentifier *>); +extern x(Set_DL<STRLIdentifier *>); +extern x(Set_DLp<STRLIdentifier *>); + +extern x(Graph<STRLIdentifier *>); + +class STRLIdentifier { + char buf[10]; +}; + +extern int operator==(vertex<STRLIdentifier*>&, vertex<STRLIdentifier*>&); // ERROR - const subversion +extern int operator==(STRLIdentifier&, STRLIdentifier&); // ERROR - fn ref in err msg + +extern x(List_DLSp<STRLIdentifier *>); + +template class Graph<STRLIdentifier *>; +template class List_DLS<vertex<STRLIdentifier *> >; diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p2394.C b/gcc/testsuite/g++.old-deja/g++.mike/p2394.C new file mode 100644 index 000000000000..ce335c401839 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p2394.C @@ -0,0 +1,36 @@ +// prms-id: 2394 + +class Foo { + public: + int x; + int y; + Foo(int i, int j) { x = i; y = j; } +} foo(10, 11); + +class Wasted { int unsed; }; + +class Bar : Wasted, public Foo { +public: + Bar() : Foo(12, 13) { } +} bar; + +int +test0() { + int Foo::* pmi = &Foo::y; + return (int)(foo.*pmi); +} + +int +test1() { + int Foo::* pmi = &Foo::y; + return (int)(bar.*pmi); +} + +int +main() { + if (test0() != 11) + return 1; + if (test1() != 13) + return 2; + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p2431.C b/gcc/testsuite/g++.old-deja/g++.mike/p2431.C new file mode 100644 index 000000000000..17a76fa7c187 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p2431.C @@ -0,0 +1,23 @@ +// Build don't link: +// GROUPS passed infinite_loop +class A +{ + public: + A(A &); // ERROR - candidates are +}; + +class B +{ + public: + operator A (); +}; + +class C +{ + public : + C() + { + B b; + A a = b;// ERROR - + } +}; diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p2573.C b/gcc/testsuite/g++.old-deja/g++.mike/p2573.C new file mode 100644 index 000000000000..9e3ddeed9dea --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p2573.C @@ -0,0 +1,14 @@ +// prms-id: 2573 + +class X { +public: + int key(); + virtual int vkey(); + char *add(); +}; + +char *X::add() { + char *f1 = (char *) &key; // ERROR - + char *f2 = (char *) &vkey; // ERROR - + return f1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p2736.C b/gcc/testsuite/g++.old-deja/g++.mike/p2736.C new file mode 100644 index 000000000000..0ef5b3a0001b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p2736.C @@ -0,0 +1,28 @@ +// This is a poor test case, it is meant to ensure that function local +// statics are destroyed at the right time. See PR 2736 for details. +// prms-id: 2736 + +int count; + +struct A { + int which; + A(int i) :which(i) { + // printf("ctor %x\n", this); + } + ~A() { + // printf("dtor %x\n", this); + if (++count != which) + abort (); + } +}; + +void +foo() { + static A a(1); +} + +A a(2); + +main() { + foo(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p2746.C b/gcc/testsuite/g++.old-deja/g++.mike/p2746.C new file mode 100644 index 000000000000..fdc37d137f76 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p2746.C @@ -0,0 +1,156 @@ +// Build don't link: +// GROUPS passed scope pt +class Link { +public: + Link(); + Link(Link *); +private: + Link *next_; + +friend class IListBase; +friend class IListIterBase; +}; + +inline +Link::Link() : next_(0) +{ +} + +inline +Link::Link(Link *next) : next_(next) +{ +} + +class IListBase { +public: + IListBase(); + IListBase(Link *); + void append(Link *); + void insert(Link *); + Link *head(); + int empty(); + Link *get(); + void remove(Link *); +private: + Link *head_; +friend class IListIterBase; +}; + +inline +IListBase::IListBase() : head_(0) +{ +} + +inline +IListBase::IListBase(Link *head) : head_(head) +{ +} + +inline +void IListBase::insert(Link *p) +{ + p->next_ = head_; + head_ = p; +} + +inline +Link *IListBase::head() +{ + return head_; +} + +inline +int IListBase::empty() +{ + return head_ == 0; +} + +inline +Link *IListBase::get() +{ + Link *tem = head_; + head_ = head_->next_; + return tem; +} + +template<class T> class IListIter; + +template<class T> +class IList : private IListBase { +public: + IList() { } + IList(T *p) : IListBase(p) { } + ~IList(); + void append(T *p) { IListBase::append(p); } + void insert(T *p) { IListBase::insert(p); } + void remove(T *p) { IListBase::remove(p); } + T *head() { return (T *)IListBase::head(); } + T *get() { return (T *)IListBase::get(); } + IListBase::empty; +friend class IListIter<T>; +}; + +template<class T> +IList<T>::~IList() +{ + while (!empty()) + delete get(); +} + +class IListIterBase { +public: + IListIterBase(const IListBase &); + int done(); + Link *cur(); + void next(); +private: + Link *p_; +}; + +inline +IListIterBase::IListIterBase(const IListBase &list) : p_(list.head_) +{ +} + +inline +int IListIterBase::done() +{ + return p_ == 0; +} + +inline +Link *IListIterBase::cur() +{ + return p_; +} + +inline +void IListIterBase::next() +{ + p_ = p_->next_; +} + + +template<class T> +class IListIter : private IListIterBase { +public: + IListIter(const IList<T> &list) : IListIterBase(list) { } + T *cur() { return (T *)IListIterBase::cur(); } + IListIterBase::next; + IListIterBase::done; +}; + + +struct A { + IList<Link> list; + int x; + void foo(); +}; + + +void A::foo() +{ + for (IListIter<Link> iter(list); !iter.done(); iter.next()) + ; + x = 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p2793.C b/gcc/testsuite/g++.old-deja/g++.mike/p2793.C new file mode 100644 index 000000000000..73bf23f73496 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p2793.C @@ -0,0 +1,6 @@ +// Build don't link: +// prms-id: 2793 + +void f(char&) { // ERROR - referenced by error below + f('c'); // ERROR - +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p2806.C b/gcc/testsuite/g++.old-deja/g++.mike/p2806.C new file mode 100644 index 000000000000..401b5ecd4880 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p2806.C @@ -0,0 +1,20 @@ +// Build don't link: +// GROUPS passed +template<class T> +class List +{ + public: + List(); + void f() const; +}; + +template<class T> +void List<T>::f() const +{ +} + +void func() +{ + List<int> list; + list.f(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p2846.C b/gcc/testsuite/g++.old-deja/g++.mike/p2846.C new file mode 100644 index 000000000000..953e80037b8d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p2846.C @@ -0,0 +1,55 @@ +// prms-id: 2846 + +extern "C" int printf(const char *, ...); +extern "C" void exit(int); + +class A; +class B; + +class A { +public: + + A(void){} + A(const A&){} + A(const B&); + + virtual ~A(void){} + + virtual void print(void) const { + printf("A::print\n"); + printf("FAIL\n"); + exit(1); + } + B compute(void) const; +}; + +class B : private A { +friend class A; +public: + + virtual ~B(void){} + + void print(void) const { + printf("B::print\n"); + } + +private: + B(const A& x, int){} +}; + +A::A(const B& s) { + s.print(); +} + +B A::compute(void) const { + B sub(*this, 1); + return sub; +} + +main () +{ + A titi; + A toto = titi.compute(); + printf("PASS\n"); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p2846a.C b/gcc/testsuite/g++.old-deja/g++.mike/p2846a.C new file mode 100644 index 000000000000..363ed5b0177c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p2846a.C @@ -0,0 +1,34 @@ +// Shows that problem of initializing one object's vtable pointer from +// another object's vtable pointer when doing a default copy of it +// and the vtable pointer involved is the main one. + +// Correct answer is B::print. +// g++ prints D::print, which is wrong. Cfront gets is right. + +// prms-id: 2846 + +extern "C" int printf(const char *, ...); +extern "C" void exit(int); + +class B { +public: + virtual void print(void) const { printf("B::print\n"); } +}; + +class D : public B { +public: + void print(void) const { printf("D::print\n"); exit(1); } + B compute(void) const; +}; + +B D::compute(void) const +{ + B sub(*(B*)this); + return sub; +} + +main () { + D titi; + titi.compute().print(); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p2846b.C b/gcc/testsuite/g++.old-deja/g++.mike/p2846b.C new file mode 100644 index 000000000000..0fb8217456e6 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p2846b.C @@ -0,0 +1,52 @@ +// Shows that problem of initializing one object's secondary base from +// another object via a user defined copy constructor for that base, +// the pointer for the secondary vtable is not set after implicit +// copying of the outer class, but rather has the pointer to the main +// vtable for the secondary base left over from the user defined copy +// constructor for that base. + +// Correct answer is B::beefy. +// g++ prints A::beefy, which is wrong. Cfront gets it right. + +// prms-id: 2846 + +extern "C" int printf(const char *, ...); +extern "C" void exit(int); + +class B; + +class A { + public: + + A(void){} + A(const A&){} + + virtual void print(void) const { } + B compute(void) const; +}; + +class C { +public: + C() { } + C(C& o) { } // with it, things are wrong, without it, they're ok + virtual void beefy(void) const { printf("A::beefy\n"); exit(1); } +}; + +class B : private A, public C { +public: + B(const A& x, int){} + void beefy(void) const { printf("B::beefy\n"); } +}; + +B A::compute(void) const +{ + B sub(*this, 1); + return sub; +} + +main () +{ + A titi; + titi.compute().beefy(); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p2855.C b/gcc/testsuite/g++.old-deja/g++.mike/p2855.C new file mode 100644 index 000000000000..9c99bd72835f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p2855.C @@ -0,0 +1,21 @@ +// Build don't link: +// Special g++ Options: -Wcast-qual +// prms-id: 2855 + +class Ctest { +private: + char* data; +public: + operator const char *() const; +}; + +Ctest::operator const char *() const +{ + return data; +} +int main() +{ + Ctest obj; + char* temp = (char *)obj; // WARNING - + temp[0] = '\0'; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p2960.C b/gcc/testsuite/g++.old-deja/g++.mike/p2960.C new file mode 100644 index 000000000000..f7c88d9843c6 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p2960.C @@ -0,0 +1,30 @@ +// prms-id: 2960 + +extern "C" int printf(const char *, ...); + +class Test0 { +public: + virtual void f0() { } // works fine if this virtual removed +}; + +class Test1 : public Test0 { +public: + void f1() { f2(); } // generates bus error here + virtual void f2() { printf("Test1::f2\n"); } +}; + +class Test2 { +public: + virtual void f3() { } +}; + +class Test3 : public Test2, public Test1 { // works fine if Test1 first +public: + virtual ~Test3() { f1(); } // calling f2 directly works + virtual void f2() { printf("Test3::f2\n"); } +}; + +main() { + Test3 t3; + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p3041.C b/gcc/testsuite/g++.old-deja/g++.mike/p3041.C new file mode 100644 index 000000000000..c059c0e6cdb1 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p3041.C @@ -0,0 +1,33 @@ +// prms-id: 3041 + +class A { +public: + A() { } + virtual void a() = 0; + static int b(A * p) { + p->a(); + return 1; + } +}; + +class B : virtual public A { +public: + B() { + static int installed = b(this); + } + void a() { } +}; + +class C : virtual public B { +public: + C() { + static int installed = b(this); + } + void a() { } +}; + +main() +{ + C c; + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p3060c.C b/gcc/testsuite/g++.old-deja/g++.mike/p3060c.C new file mode 100644 index 000000000000..e26b8024db61 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p3060c.C @@ -0,0 +1,23 @@ +// A new problem with my pointer to member function work. +// Build don't link: +// prms-id: 3060 + +class Foo +{ + public: + int x; + int y; + Foo (int i, int j) { x = i; y = j; } + operator int (); +}; + +int Foo::operator int() { return x; } // WARNING - can't specify return type + +Foo foo(10, 11); + +int +main() +{ + int Foo::* pmi = &Foo::y; + return foo.*pmi; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p3060d.C b/gcc/testsuite/g++.old-deja/g++.mike/p3060d.C new file mode 100644 index 000000000000..2813d66c871a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p3060d.C @@ -0,0 +1,34 @@ +// This is a test case to make sure the explicit cast on a pointer to +// a member function works ok. +// prms-id: 3060 + +extern "C" int printf(const char *, ...); + +class Object; + +typedef void (Object::*VoidObjMemberFunc)(Object *, ...); + +class Object { +public: + int foo; +}; + +class Clipper: public Object { +public: + int bar; + void Feedback(Object*, void*); +}; +void Clipper::Feedback(Object *tracker, void *ap) { + printf("Doing feedback\n"); +} + +void vfunc(VoidObjMemberFunc of, Object *op, void *v1) { + (op->*of)(op, v1); +} + +main() { + Object o; + + vfunc((VoidObjMemberFunc)&Clipper::Feedback, &o, 0); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p3068.C b/gcc/testsuite/g++.old-deja/g++.mike/p3068.C new file mode 100644 index 000000000000..52c5cd56de3b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p3068.C @@ -0,0 +1,60 @@ +// prms-id: 3068 + +extern "C" int printf(const char *, ...); +extern "C" void exit(int); + +class LB { +public: + virtual int test() { return 0; } + virtual ~LB() { } +protected: + LB() { } +}; + +class RRB { +public: + virtual ~RRB() { } + virtual void test2(int a) { } +}; + +class RR : public RRB { +public: + virtual ~RR() { } +}; + +class RL { +public: + virtual void real(int a) { + printf("RL::real\n"); + } +}; + + +class R : public RL, public RR { +public: + virtual void test3(int a) { } + virtual void test2(int a) { } +}; + +class L : public LB { +}; + +class C : public L, public R { +public: + C() { } + virtual ~C() { + printf("C::~C\n"); + exit(1); + } + virtual void real(int a) { + printf("RL::real\n"); + } +}; + +main() { + C& bb = *new C; + R& mv = bb; + bb.real(0); + mv.real(0); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p3070.C b/gcc/testsuite/g++.old-deja/g++.mike/p3070.C new file mode 100644 index 000000000000..c9278736d2cc --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p3070.C @@ -0,0 +1,32 @@ +// Build don't link: +// Caused an Internal Compiler Error. Works now. +// prms-id: 3070 + +class Object { +public: + virtual ~Object() {} +}; + +class BaseView { +protected: + virtual void _forwardReceiveUpdate() = 0; +}; + + +class View : public BaseView { +public: + virtual ~View(); +}; + +class TestViewBaseUpdate { +protected: + virtual void _receiveUpdate(); +}; + +class TestViewBase : public TestViewBaseUpdate, private View { +}; + +class TestView : public Object, public TestViewBase { +protected: + virtual void _receiveUpdate(); +}; diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p3139.C b/gcc/testsuite/g++.old-deja/g++.mike/p3139.C new file mode 100644 index 000000000000..9ff9b23cfa53 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p3139.C @@ -0,0 +1,25 @@ +// prms-id: 3139 + +extern "C" int printf(const char *, ...); + +class A { + public: + A() { } + virtual int a() = 0; +}; + +class B : virtual public A { + public: + virtual int a() = 0; +}; + +class C : public B { + public: + int a() { return 42; } +}; + +main() { + B * b = new C; + printf("%d.\n", b->a()); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p3524a.C b/gcc/testsuite/g++.old-deja/g++.mike/p3524a.C new file mode 100644 index 000000000000..0995f3530a84 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p3524a.C @@ -0,0 +1,25 @@ +// Make sure we can initialize a reference to a templated type, that +// requires a conversion from a derived type to a base type. + +// Build don't link: +// prms-id: 3524 + +struct cc2Vector +{}; + +template <class T> +struct ccPair +{ + ccPair (const cc2Vector&); +}; + +struct ccLine : cc2Vector +{ + double distToPoint (const ccPair <float> &); +}; + +void foo () +{ + ccLine l2; + l2.distToPoint (l2); +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p3524b.C b/gcc/testsuite/g++.old-deja/g++.mike/p3524b.C new file mode 100644 index 000000000000..c645d4cdea4b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p3524b.C @@ -0,0 +1,21 @@ +// Make sure we can cast to a templated type, that requires a conversion by +// constructor, from a derived type to a base type. + +// Build don't link: +// prms-id: 3524 + +template <class T> +struct ccPair { + ccPair () { } +}; + +template <class T> +struct ccO : ccPair<T> { + ccO () { } +}; + +void foo () +{ + ccO<float> r; + (ccPair<float>)r; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p3524c.C b/gcc/testsuite/g++.old-deja/g++.mike/p3524c.C new file mode 100644 index 000000000000..d901e19a265a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p3524c.C @@ -0,0 +1,15 @@ +// Make sure we can cast to a templated type, that requires a conversion by +// constructor, from a non-aggregate type. + +// Build don't link: +// prms-id: 3524 + +template <class T> +struct ccPair { + ccPair (int i) { } +}; + +void foo () +{ + (ccPair<float>)1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p3538a.C b/gcc/testsuite/g++.old-deja/g++.mike/p3538a.C new file mode 100644 index 000000000000..ea1a6cc53a72 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p3538a.C @@ -0,0 +1,33 @@ +// Build don't link: +// This tests for the compiler_error in binfo_value. +// prms-id: 3538 + +class ccObjectInfo +{ +public: + virtual const ccObjectInfo& repInvariant (int); +}; + +template<class T> +class ccHandle : public ccObjectInfo +{ +protected: + T* p; +public: + virtual const ccObjectInfo& repInvariant (int); +}; + +template <class T> +const ccObjectInfo& ccHandle<T>::repInvariant (int) +{ return p->ri(1); } + +class ccHandleBase : public ccObjectInfo +{}; + +class cc_CircleHdl : public virtual ccHandleBase, public ccObjectInfo +{ +public: + virtual const ccObjectInfo& ri (int); +}; // WARNING - + +class ccCircleHdl : public ccHandle <cc_CircleHdl> {}; diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p3538b.C b/gcc/testsuite/g++.old-deja/g++.mike/p3538b.C new file mode 100644 index 000000000000..4dcd60b3d10c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p3538b.C @@ -0,0 +1,35 @@ +// Build don't link: +// prms-id: 3538 + +// This tests for an ambiguous conversion of the this pointer (going +// down to DECL_CONTEXT of a FUNCTION_DECL. + +class ccObjectInfo +{ +public: + virtual const ccObjectInfo& repInvariant (int); +}; + +template<class T> +class ccHandle : public ccObjectInfo +{ +protected: + T* p; +public: + virtual const ccObjectInfo& repInvariant (int); +}; + +template <class T> +const ccObjectInfo& ccHandle<T>::repInvariant (int) +{ return p->repInvariant(1); } + +class ccHandleBase : public ccObjectInfo +{}; + +class cc_CircleHdl : public virtual ccHandleBase, public ccObjectInfo +{ +public: + virtual const ccObjectInfo& repInvariant (int); +}; // WARNING - + +class ccCircleHdl : public ccHandle <cc_CircleHdl> {}; diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p3570.C b/gcc/testsuite/g++.old-deja/g++.mike/p3570.C new file mode 100644 index 000000000000..abccf793cb6b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p3570.C @@ -0,0 +1,29 @@ +// prms-id: 3570 + +extern "C" int printf(const char *, ...); + +struct A { + void print() {printf("A");}; +}; + +struct B : A { + typedef A superB; + void print() {superB::print(); printf("B");}; +}; + +struct C : B { + typedef B superC; + void print() {superC::print(); printf("C");}; +}; + +main () +{ + A a; + B b; + C c; + + a.print(); printf("\n"); + b.print(); printf("\n"); + c.print(); printf("\n"); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p3579.C b/gcc/testsuite/g++.old-deja/g++.mike/p3579.C new file mode 100644 index 000000000000..d960599450fe --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p3579.C @@ -0,0 +1,39 @@ +// prms-id: 3579 + +extern "C" int printf(const char *, ...); + +int num_x; + +class Y { +public: + Y () { printf("Y() this: %x\n", this); } + ~Y () { printf("~Y() this: %x\n", this); } +}; + +class X { +public: + X () { + ++num_x; + printf("X() this: %x\n", this); + Y y; + *this = (X) y; + } + + X (const Y & yy) { printf("X(const Y&) this: %x\n", this); ++num_x; } + X & operator = (const X & xx) { + printf("X.op=(X&) this: %x\n", this); + return *this; + } + + ~X () { printf("~X() this: %x\n", this); --num_x; } +}; + +int main (int, char **) { + { X anX; } + if (num_x) { + printf("FAIL\n"); + return 1; + } + printf("PASS\n"); + return 0; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p3708.C b/gcc/testsuite/g++.old-deja/g++.mike/p3708.C new file mode 100644 index 000000000000..2f5e401e56d7 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p3708.C @@ -0,0 +1,86 @@ +// prms-id: 3708 + +extern "C" void printf (char *, ...); +extern "C" int atoi (char *); + +void *ptr; + +class A { +public: + A() { printf ("A is constructed.\n"); } + virtual xx(int doit) { printf ("A is destructed.\n"); } +}; + +class A1 { +public: + A1() { printf ("A1 is constructed.\n"); } + virtual xx(int doit) { printf ("A1 is destructed.\n"); } +}; + +class B : public virtual A, public A1 { +public: + B() { printf ("B is constructed.\n"); } + virtual xx(int doit) { + printf ("B is destructed.\n"); + A1::xx (1); + if (doit) A::xx (1); + } +}; + +int num; + +class C : public virtual A, public B { +public: + C() { ++num; printf ("C is constructed.\n"); + ptr = this; + } + virtual xx(int doit) { + --num; + if (ptr != this) + printf("FAIL\n%x != %x\n", ptr, this); + printf ("C is destructed.\n"); + B::xx (0); + if (doit) A::xx (1); + } +}; + +void fooA(A *a) { + printf ("Casting to A!\n"); + a->xx (1); +} +void fooA1(A1 *a) { + printf ("Casting to A1!\n"); + a->xx (1); +} + +void fooB(B *b) { + printf ("Casting to B!\n"); + b->xx (1); +} + +void fooC(C *c) { + printf ("Casting to C!\n"); + c->xx (1); +} + +int main(int argc, char *argv[]) { + printf ("*** Construct C object!\n"); + C *c = new C(); + + int i = 0; + + printf ("*** Try to delete the casting pointer!\n"); + switch (i) + { + case 0: fooA1(c); + break; + case 1: fooA(c); + break; + case 2: fooB(c); + break; + case 3: fooC(c); + break; + } + + return num!=0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p3708a.C b/gcc/testsuite/g++.old-deja/g++.mike/p3708a.C new file mode 100644 index 000000000000..1fecb16be364 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p3708a.C @@ -0,0 +1,86 @@ +// prms-id: 3708 + +extern "C" void printf (char *, ...); +extern "C" int atoi (char *); + +void *ptr; + +class A { +public: + A() { printf ("A is constructed.\n"); } + virtual xx(int doit) { printf ("A is destructed.\n"); } +}; + +class A1 { +public: + A1() { printf ("A1 is constructed.\n"); } + virtual xx(int doit) { printf ("A1 is destructed.\n"); } +}; + +class B : public A1, public virtual A { +public: + B() { printf ("B is constructed.\n"); } + virtual xx(int doit) { + printf ("B is destructed.\n"); + A1::xx (1); + if (doit) A::xx (1); + } +}; + +int num; + +class C : public virtual A, public B { +public: + C() { ++num; printf ("C is constructed.\n"); + ptr = this; + } + virtual xx(int doit) { + --num; + if (ptr != this) + printf("FAIL\n%x != %x\n", ptr, this); + printf ("C is destructed.\n"); + B::xx (0); + if (doit) A::xx (1); + } +}; + +void fooA(A *a) { + printf ("Casting to A!\n"); + a->xx (1); +} +void fooA1(A1 *a) { + printf ("Casting to A1!\n"); + a->xx (1); +} + +void fooB(B *b) { + printf ("Casting to B!\n"); + b->xx (1); +} + +void fooC(C *c) { + printf ("Casting to C!\n"); + c->xx (1); +} + +int main(int argc, char *argv[]) { + printf ("*** Construct C object!\n"); + C *c = new C(); + + int i = 0; + + printf ("*** Try to delete the casting pointer!\n"); + switch (i) + { + case 0: fooA1(c); + break; + case 1: fooA(c); + break; + case 2: fooB(c); + break; + case 3: fooC(c); + break; + } + + return num!=0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p3708b.C b/gcc/testsuite/g++.old-deja/g++.mike/p3708b.C new file mode 100644 index 000000000000..dddb77c2e51b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p3708b.C @@ -0,0 +1,85 @@ +// prms-id: 3708 + +extern "C" void printf (char *, ...); +extern "C" void exit(int); + +void *ptr; + +class A { +public: + A() { printf ("A is constructed.\n"); } + virtual xx(int doit) { printf ("A is destructed.\n"); } +}; + +class A1 { +public: + A1() { printf ("A1 is constructed.\n"); } + virtual xx(int doit) { printf ("A1 is destructed.\n"); } +}; + +class B : public virtual A, public A1 { +public: + B() { printf ("B is constructed.\n"); } + virtual xx(int doit) { + printf ("B is destructed.\n"); + A1::xx (1); + if (doit) A::xx (1); + } +}; + +int num; + +class C : public virtual A { +public: + C() { printf ("C is constructed.\n"); + } + virtual xx(int doit) { + printf ("C is destructed.\n"); + if (doit) A::xx (1); + } +}; + +class D : public C, public B { +public: + D() { ++num; printf ("D is constructed.\n"); + ptr = this; + } + virtual xx(int doit) { + --num; + if (ptr != this) { + printf("FAIL\n%x != %x\n", ptr, this); + exit(1); + } + printf ("D is destructed.\n"); + C::xx (0); + B::xx (0); + } +}; + +void fooA(A *a) { + printf ("Casting to A!\n"); + a->xx (1); +} +void fooA1(A1 *a) { + printf ("Casting to A1!\n"); + a->xx (1); +} + +void fooB(B *b) { + printf ("Casting to B!\n"); + b->xx (1); +} + +void fooC(C *c) { + printf ("Casting to C!\n"); + c->xx (1); +} + +int main(int argc, char *argv[]) { + printf ("*** Construct D object!\n"); + D *d = new D(); + + printf ("*** Try to delete the casting pointer!\n"); + fooA1(d); + return num!=0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p3764.C b/gcc/testsuite/g++.old-deja/g++.mike/p3764.C new file mode 100644 index 000000000000..d0527555563e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p3764.C @@ -0,0 +1,25 @@ +// Build don't link: +// prms-id: 3764 + +class Menu; +class MenuItem; + +class MenuAction { +public: + virtual void execute (Menu& menu, MenuItem& menuItem) = 0; +protected: + MenuAction () {} +}; + +class Test { + class MenuCBA : public MenuAction { + public: + typedef void (Test::* MenuCBA_Member) (Menu& menu, MenuItem& menuItem) ; + MenuCBA(Test& instance, MenuCBA_Member member) + : _instance(&instance), _member(member) { } + void execute(Menu& menu, MenuItem& menuItem); + private: + MenuCBA_Member _member; + Test *_instance; + }; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p3836.C b/gcc/testsuite/g++.old-deja/g++.mike/p3836.C new file mode 100644 index 000000000000..c62530f69067 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p3836.C @@ -0,0 +1,14 @@ +// prms-id: 3836 + +void f(int &i) { // ERROR - ref line + i = 10; +} + +int main() +{ + int i=1, j=2; + f(i); + f((int)j); // ERROR - passing in to non-const + if (j != 2) + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p4068.C b/gcc/testsuite/g++.old-deja/g++.mike/p4068.C new file mode 100644 index 000000000000..e2531ed81fea --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p4068.C @@ -0,0 +1,22 @@ +// prms-id: 4068 + +struct A { + A(); + typedef void (A::*F)(); + void d(); + void foo() { } + F& f() { return f_; } + F f_; +}; + +A::A() : f_(&A::foo) { +} + +void A::d() { + (this->*(f()))(); +} + +main() { + A a; + a.d(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p4104.C b/gcc/testsuite/g++.old-deja/g++.mike/p4104.C new file mode 100644 index 000000000000..7559034779ac --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p4104.C @@ -0,0 +1,15 @@ +// prms-id: 4104 + +template <class T> +void F(T &a, void (*P)(T &temp)) { + (*P)(a); +} + +template <class T> +void G(T &a) { +} + +int main() { + int a; + F(a, G); +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p4173.C b/gcc/testsuite/g++.old-deja/g++.mike/p4173.C new file mode 100644 index 000000000000..a5b11f226d2c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p4173.C @@ -0,0 +1,24 @@ +// This error happens because lvalue is not done well in the C++ front-end. +// NOPs should be lvalues if their arguments are. +// NON_LVALUE_EXPRs shouldn't be. + +// Special g++ Options: -Wall -ansi -pedantic-errors +// Build don't link: +// prms-id: 4173 + +enum TypeKind { + RecordTypeKind +}; +struct Type +{ + enum TypeKind kind : 8; + unsigned char prefixLen; +}; + +Type a; +Type b; +TypeKind c; +main() { + a.kind = b.kind = c; + (a.kind = c) = b.kind; // gets bogus error +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p418.C b/gcc/testsuite/g++.old-deja/g++.mike/p418.C new file mode 100644 index 000000000000..6e868c7ec0d3 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p418.C @@ -0,0 +1,18 @@ +// Build don't link: +// prms-id: 418 + +class Base { +public: + int foo; +}; + +class Derived : public Base { +public: + int bar; +}; + +void func(Base&); // ERROR - referenced by error below + +void func2(const Derived& d) { + func(d); // ERROR - should be error because of const +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p4238.C b/gcc/testsuite/g++.old-deja/g++.mike/p4238.C new file mode 100644 index 000000000000..2499a6d40158 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p4238.C @@ -0,0 +1,7 @@ +// This showed a problem with default op= +// Build don't link: +// prms-id: 4238 + +struct sigcontext { + int sc_wbuf[31][25]; +}; // gets bogus error - default op= seems broken diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p4246.C b/gcc/testsuite/g++.old-deja/g++.mike/p4246.C new file mode 100644 index 000000000000..1eb6668e9693 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p4246.C @@ -0,0 +1,48 @@ +// prms-id: 4246 + +extern "C" void abort (); +int num_d; + +class A +{ + public: + A() { } + virtual ~A() { } + virtual id() { } +}; + +class B +{ + public: + B() { } + virtual ~B() { } + virtual id() { } +}; + +class C : public A, public B +{ + public: + C() { } + virtual ~C() { } + id() { abort(); } +}; + +class D : public C +{ + public: + D() { ++num_d; } + virtual ~D() { -- num_d; } + id() { } +}; + +main() +{ + D* dp2 = new D; + ((B*)dp2)->id(); + delete (B*) dp2; + + B* bp1 = new D; + bp1->id(); + delete bp1; + return num_d != 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p4263.C b/gcc/testsuite/g++.old-deja/g++.mike/p4263.C new file mode 100644 index 000000000000..65d5150c7515 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p4263.C @@ -0,0 +1,14 @@ +// prms-id: 4263 + +enum OT {A_type, B_Type}; +enum AT {A, B}; + +/* These are not ok. */ +OT t = A; // ERROR - +OT e2 = 1; // ERROR - +OT e3 = 1.1; // ERROR - + +/* These are ok. */ +int i = A; +double d = A; +OT e4 = A_type; diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p438.C b/gcc/testsuite/g++.old-deja/g++.mike/p438.C new file mode 100644 index 000000000000..9afab638abc7 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p438.C @@ -0,0 +1,23 @@ +// Build don't link: +// prms-id: 438 + +class D; + +class C +{ + public: + void test() const; +}; + +class D +{ + public: + void a(C& b); // ERROR - referenced below +}; + +void C::test() const +{ + D d; + + d.a(*this); // ERROR - *this is const, so should get error +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p4484.C b/gcc/testsuite/g++.old-deja/g++.mike/p4484.C new file mode 100644 index 000000000000..64aab1609653 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p4484.C @@ -0,0 +1,26 @@ +// Build don't link: +// prms-id: 4484 + +class A { + char buf[64]; +}; + +typedef void (A::*pmf)(); +typedef void (A::*pmfc)() const; + +pmfc p = (pmfc)(pmf)0; + +class B { +}; + +class D : public A, public B { +}; + +typedef int (B::*bmfp)(); +typedef int (D::*dmfp)(); + +bmfp foo; + +void bar(dmfp a) { + bar(foo); +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p4511.C b/gcc/testsuite/g++.old-deja/g++.mike/p4511.C new file mode 100644 index 000000000000..a3c83105bb9c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p4511.C @@ -0,0 +1,33 @@ +// prms-id: 4511 + +int bad; + +class A { +public: + virtual void dummy (){}; +}; + +class B { +public: + virtual void f(void) = 0; +}; + +class C : public A, public B { +public: + void f(void) { bad=1; }; +}; + +class D : public C { +public: + void f(void) { }; +}; + +class E : public D { }; + +main() { + E e; + e.f(); + E * ep = &e; + ep->f(); + return bad; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p4619.C b/gcc/testsuite/g++.old-deja/g++.mike/p4619.C new file mode 100644 index 000000000000..b401d7dda177 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p4619.C @@ -0,0 +1,10 @@ +// Build don't link: +// prms-id: 4619 + +main() { + int i = 3; + int (*p)[10] = new int [20][10]; + int (*p1)[5][7][13][10] = new int [i][5][7][13][10]; + delete [] p1; + delete [] p; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p4623.C b/gcc/testsuite/g++.old-deja/g++.mike/p4623.C new file mode 100644 index 000000000000..c96388de6d2e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p4623.C @@ -0,0 +1,35 @@ +// prms-id: 4623 + +class base { +public: + int b_data; + base( int i=0 ) { b_data = i; } + void b_print() { } +}; + +class base1: virtual public base { +public: + int b1_data; + base1( int i = 0 ) { b1_data = i; b_data++; } + void b1_print() { } +}; + +class base2: virtual public base { +public: + int b2_data; + base2( int i = 0 ) { b2_data = i; b_data++; } + void b2_print() { } +}; + +class base3: public base {}; + +class derived: public base3, public base1, public base2 { +public: + int d_data; + derived( int i ) { d_data = i; base3::b_data++; } + void d_print() { } +}; + +main() { + derived d(1); d.d_print(); return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p4667.C b/gcc/testsuite/g++.old-deja/g++.mike/p4667.C new file mode 100644 index 000000000000..751a5666103b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p4667.C @@ -0,0 +1,31 @@ +// prms-id: 4667 + +int counter = 0; +int a = 0; +int b = 0; +int c = 0; + +struct A { + A() { a = counter++; } +}; + +struct B { + B() { b = counter++; } +}; + +struct C : public virtual B { + C() { c = counter++; } +}; + +struct D : public virtual A, public virtual C { }; + +extern "C" int printf(const char*,...); +int main(void) { + D d; + + if (!(a == 0 && b == 1 && c == 2)) { + return 1; + } + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p4671.C b/gcc/testsuite/g++.old-deja/g++.mike/p4671.C new file mode 100644 index 000000000000..68f3ee16c0cc --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p4671.C @@ -0,0 +1,16 @@ +// Build don't link: +// prms-id: 4671 + +class ccUnwind { +public: + virtual void _c_getInfo() const; + virtual ~ccUnwind (); +}; +class ccTransmittable { +public: + virtual ~ccTransmittable(); +}; +class ccCommand : public ccUnwind, public ccTransmittable { +}; +class foo : public ccCommand { +}; diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p4677.C b/gcc/testsuite/g++.old-deja/g++.mike/p4677.C new file mode 100644 index 000000000000..463033caec3b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p4677.C @@ -0,0 +1,9 @@ +// Build don't link: +// prms-id: 4677 + +struct A { + A(double d) { } +}; + +struct B { B(A) { } } bad = 1; // ERROR - +B good (1); diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p4693.C b/gcc/testsuite/g++.old-deja/g++.mike/p4693.C new file mode 100644 index 000000000000..09e1333933ed --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p4693.C @@ -0,0 +1,24 @@ +// Build don't link: +// prms-id: 4693 + +class a { +public: + virtual ~a(); +}; + +class b { +public: + virtual void set_var() = 0; +}; + +class c : public b, public a { }; + +class d : public c { +public: + void set_var() { } +}; + +main() { + d * test; + test = new d; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p4736a.C b/gcc/testsuite/g++.old-deja/g++.mike/p4736a.C new file mode 100644 index 000000000000..a6e3aef88e7d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p4736a.C @@ -0,0 +1,39 @@ +// prms-id: 4736 + +int did_fail = 1; + +class O { +public: + virtual void of() { } +}; + +class A : public O { +public: + virtual void vf() { } +}; + +class W { +public: + virtual void vf() { } +}; + +class X : public W, public A { +public: + virtual void vf() { } +}; + +class Z : public X { +public: + virtual void vf() { did_fail = 0; } +}; + +Z sz; + +void fail1(W* w) { + w->vf(); +} + +int main() { + fail1 (&sz); + return did_fail; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p4736b.C b/gcc/testsuite/g++.old-deja/g++.mike/p4736b.C new file mode 100644 index 000000000000..19d655c6f091 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p4736b.C @@ -0,0 +1,48 @@ +// prms-id: 4736 + +class Rep { +public: + virtual int foo() { return 1; } +}; + +class Rep_1 : public Rep { +}; + +class VBaseMain { +public: + virtual int foo() { return 2; } +}; + +class OtherVBase { +public: + virtual int foo() { return 3; } +}; + +class Rep_2 : public Rep { +}; + +class DVBase : public VBaseMain, public Rep_2, public OtherVBase { +public: + virtual int foo() { return 4; } +}; + +class Main : public Rep_1, virtual public DVBase { +public: + virtual int foo() { return 5; } +}; + +main() { + Main m; + if (m.foo() != 5) + return 1; + if (((Rep*)(Rep_1*)&m)->foo() != 5) + return 2; + if (((DVBase*)&m)->foo() != 5) + return 3; + if (((VBaseMain*)(DVBase*)&m)->foo() != 5) + return 4; + if (((Rep*)(Rep_2*)(DVBase*)&m)->foo() != 5) + return 5; + if (((OtherVBase*)(DVBase*)&m)->foo() != 5) + return 6; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p4736c.C b/gcc/testsuite/g++.old-deja/g++.mike/p4736c.C new file mode 100644 index 000000000000..de5e4b6962c4 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p4736c.C @@ -0,0 +1,62 @@ +// prms-id: 4736 + +int did_fail; + +class Rep { +public: + virtual ~Rep() { } +}; + +class Rep_1 : public Rep { +}; + +class VBaseMain { +public: + virtual ~VBaseMain() { } +}; + +class OtherVBase { +public: + virtual ~OtherVBase() { } +}; + +class Rep_2 : public Rep { +}; + +class DVBase : public VBaseMain, public Rep_2, public OtherVBase { +public: + virtual ~DVBase() { } +}; + +class Main : public Rep_1, virtual public DVBase { +public: + virtual ~Main() { did_fail = 0; } +}; + +main() { + Main* m; + did_fail = 1; + delete new Main; + if (did_fail) + return 1; + did_fail = 1; + delete (Rep*)(Rep_1*)new Main; + if (did_fail) + return 2; + did_fail = 1; + delete (DVBase*)new Main; + if (did_fail) + return 3; + did_fail = 1; + delete (VBaseMain*)(DVBase*)new Main; + if (did_fail) + return 4; + did_fail = 1; + delete (Rep*)(Rep_2*)(DVBase*)new Main; + if (did_fail) + return 5; + did_fail = 1; + delete (OtherVBase*)(DVBase*)new Main; + if (did_fail) + return 6; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p4750.C b/gcc/testsuite/g++.old-deja/g++.mike/p4750.C new file mode 100644 index 000000000000..b404cc05ff4f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p4750.C @@ -0,0 +1,11 @@ +// Build don't link: +// Skip if not native +// Special g++ Options: -fpic -pedantic-errors -S +// prms-id: 4750 + +extern const int FRAME_VEC_MAX; + +const int FRAME_VEC_MAX = 12; +int frame_vec_sizes[FRAME_VEC_MAX+1] = { + 0, 1, 3, 3, 6, 6, 6, 9, 9, 9, 12, 12, 12 +}; diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p5469.C b/gcc/testsuite/g++.old-deja/g++.mike/p5469.C new file mode 100644 index 000000000000..3f5029dc3ce1 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p5469.C @@ -0,0 +1,21 @@ +// prms-id: 5469 + +int count; + +class A { + A(); + A(const A&); +public: + A(int) { ++count; } + ~A() { --count; } + int operator== (const A& r) { return 0; } +}; + +main() { + { + A a (1); + if (a == 2 && a == 1) + ; + } + return count; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p5469a.C b/gcc/testsuite/g++.old-deja/g++.mike/p5469a.C new file mode 100644 index 000000000000..efcd2f4b6521 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p5469a.C @@ -0,0 +1,21 @@ +// prms-id: 5469 + +int count; + +class A { + A(); + A(const A&); +public: + A(int) { ++count; } + ~A() { --count; } + int operator== (const A& r) { return 1; } +}; + +main() { + { + A a (1); + if (a == 2 || a == 1) + ; + } + return count; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p5571.C b/gcc/testsuite/g++.old-deja/g++.mike/p5571.C new file mode 100644 index 000000000000..d9a3a471dd89 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p5571.C @@ -0,0 +1,70 @@ +// prms-id: 5571 + +int err = 0; +void *vp = 0; + +class ParentOne { +public: + ParentOne() {}; +#ifdef MAKE_WORK + virtual ~ParentOne() {}; +#endif +private: + char SomeData[101]; +}; + +class ParentTwo { +public: + ParentTwo() {}; + virtual ~ParentTwo() {}; +private: + int MoreData[12]; + virtual foo() { return 0; } +}; + +struct Child : public ParentOne, public ParentTwo { + int ChildsToy; + virtual void PrintThis() = 0; +}; + +struct Student : public Child { + int StudentsBook; + void PrintThis() { + if (vp == 0) + vp = (void *)this; + else + { + if (vp != (void *)this) + ++err; + } + } + void LocalPrintThis() { + if (vp == 0) + vp = (void *)this; + else + { + if (vp != (void *)this) + ++err; + } + PrintThis(); + } + void ForcedPrintThis() { + if (vp == 0) + vp = (void *)this; + else + { + if (vp != (void *)this) + ++err; + } + Student::PrintThis(); + } +}; + +main() { + Student o; + o.LocalPrintThis(); + o.ForcedPrintThis(); + Child* pX = &o; + pX->PrintThis(); + return err; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p5611.C b/gcc/testsuite/g++.old-deja/g++.mike/p5611.C new file mode 100644 index 000000000000..557d2cc2bafb --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p5611.C @@ -0,0 +1,11 @@ +// prms-id: 5611 + +int main(void) +{ + struct B + { + virtual void b1() { }; + }; + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p5673.C b/gcc/testsuite/g++.old-deja/g++.mike/p5673.C new file mode 100644 index 000000000000..8d29191861e1 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p5673.C @@ -0,0 +1,20 @@ +// prms-id: 5673 + +class A { +public: + operator int () { + return 7; + } + ~A(); +}; + +int foo() { + return A(); +} + +main() { + return foo() != 7; +} + +A::~A() { +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p5718.C b/gcc/testsuite/g++.old-deja/g++.mike/p5718.C new file mode 100644 index 000000000000..8858d389ef77 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p5718.C @@ -0,0 +1,37 @@ +// prms-id: 5718 + +class Base { + int i; +public: + Base() { i = 42; }; +}; + + +class Mixin { + int j; +public: + Mixin() { j = 42; } +}; + + +class Derived : public Base, public Mixin { +public: + Derived() { }; + Derived & operator=(Mixin & m) { return *this; }; +}; + + +void +testFunct(Derived * arg) { + Mixin temp; + + (Mixin &)(*arg) = temp; // gets bogus error +} + + +int +main(int argc, char *argv[]) { + Derived temp; + + testFunct(&temp); +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p5793.C b/gcc/testsuite/g++.old-deja/g++.mike/p5793.C new file mode 100644 index 000000000000..53469cdf07af --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p5793.C @@ -0,0 +1,21 @@ +// Build don't link: +// prms-id: 5793 + +class temp_string { + public: + temp_string (const int); + temp_string (const char * const); +}; + +class Range { + public: + Range ( const int); + operator int () const ; +}; + +int operator == (const int, temp_string ); + +void CheckArrayConstraints(void) { + if (Range(0L) == 0L) + ; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p5840.C b/gcc/testsuite/g++.old-deja/g++.mike/p5840.C new file mode 100644 index 000000000000..46a161beec89 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p5840.C @@ -0,0 +1,33 @@ +// prms-id: 5840 + +class Signal { +public: + int Name(void) { return 1; } +}; + +class Derived : public Signal { +public: + int Name(void) { return 2; } +}; + +template <class Foo , int (Foo::*Id)(void)> +class Bar +{ +public: + int value (Foo* a) { return (a->*Id)(); } +}; + +template class Bar <Derived, &Signal::Name>; +template class Bar <Signal, &Signal::Name>; +template class Bar <Derived, &Derived::Name>; + +Derived a; + +Bar<Derived, &Signal::Name> dispatcher1; +Bar<Derived, &Derived::Name> dispatcher2; + +main() { + int i1 = dispatcher1.value(&a); + int i2 = dispatcher2.value(&a); + return i1 != 1 || i2 != 2; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p5958.C b/gcc/testsuite/g++.old-deja/g++.mike/p5958.C new file mode 100644 index 000000000000..20d45f264d03 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p5958.C @@ -0,0 +1,27 @@ +// Special g++ Options: -ansi +// prms-id: 5958 + +class A { }; + +main() { + int i = 1; + if (1 not_eq 1) + return 1; + if (not (1 and 1)) + return 1; + if (not (1 or 1)) + return 1; + if (compl ~0) + return 1; + if (1 bitand 2) + return 1; + if (not (1 bitor 2)) + return 1; + if (1 xor 1) + return 1; + i and_eq 1; + i or_eq 2; + i xor_eq 4; + if (i not_eq 7) + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p6004.C b/gcc/testsuite/g++.old-deja/g++.mike/p6004.C new file mode 100644 index 000000000000..b692365b12e7 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p6004.C @@ -0,0 +1,20 @@ +// Special g++ Options: +// prms-id: 6004 + +class A { +public: + static int foo() asm("_my_routine"); +}; + +int bar1() asm("foo__1A"); +int bar2() asm("_foo__1A"); +int bar3() asm("__foo__1A"); +int bar1() { return 45; } +int bar2() { return 44; } +int bar3() { return 43; } + +int A::foo() { return 42; } + +main() { + return A::foo() - 42; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p6058.C b/gcc/testsuite/g++.old-deja/g++.mike/p6058.C new file mode 100644 index 000000000000..aa78b7ff63d4 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p6058.C @@ -0,0 +1,18 @@ +// Build don't link: +// Special g++ Options: -fexceptions -pedantic-errors +// prms-id: 6058 + +void bar(struct s1 { } a) { (void)a; } // ERROR - + +struct s2*fooey() // ERROR - XFAIL *-*-* +{ + try { + static_cast<struct s3 { } *>(0); // ERROR - + const_cast<struct s4 { } *>((s4*)0); // ERROR - + reinterpret_cast<struct s5 { } *>((s3*)0); // ERROR - + dynamic_cast<struct s6 { } *>((s6*)0); // ERROR - + (struct s7 { } *)(int*)0xffedec; // ERROR - + } catch (struct s8 { } s) { // ERROR - + } + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p6149.C b/gcc/testsuite/g++.old-deja/g++.mike/p6149.C new file mode 100644 index 000000000000..578ee8b643c7 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p6149.C @@ -0,0 +1,4 @@ +// Build don't link: +// prms-id: 6149 + +int a[3 - sizeof(double)]; // ERROR - diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p6311.C b/gcc/testsuite/g++.old-deja/g++.mike/p6311.C new file mode 100644 index 000000000000..12d3cfc61690 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p6311.C @@ -0,0 +1,16 @@ +// prms-id: 6311 + +struct Foo { + int member; +} a = { 42 }, *ptra = &a; + +int Foo::*pmd = &Foo::member; + +main() { + if (pmd == 0) + return 1; + if (a.*pmd != 42) + return 2; + if (ptra->*pmd != 42) + return 3; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p646.C b/gcc/testsuite/g++.old-deja/g++.mike/p646.C new file mode 100644 index 000000000000..2644c1b43dfd --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p646.C @@ -0,0 +1,175 @@ +// GROUPS passed i960 +/* + Bug Id: bnr + PMRS Id: p0000646 + Bug is: Urgent Code Generation Problem in gcc-i960 V 1.95 +*/ + + +// Special g++ Options: + +extern "C" +{ + void printf (char *, ...); + void abort (); +} + +struct foo +{ + static int si; + int i; + foo (); + foo (const foo&); + ~foo (); +}; + +int +foo_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); +} + +int +return_1 () +{ + foo f; + printf ("returning 1\n"); + return 1; +} + +int +return_arg (int arg) +{ + foo f; + printf ("returning %d\n", arg); + return arg; +} + +int +return_sum (int x, int y) +{ + foo f; + printf ("returning %d+%d\n", x, y); + return x + y; +} + +foo +return_foo () +{ + foo f; + printf ("returning foo\n"); + return f; +} + +foo +return_named_foo () return f +{ + printf ("returning named foo\n"); + return f; +} + +foo +foo_parm_returns_foo (foo f) +{ + return f; +} + +void +abort_because (char *str) +{ + printf ("aborting because %s\n", str); + abort (); +} + +int +warn_return_1 () +{ + foo f; + printf ("returning 1\n"); +} + +int +warn_return_arg (int arg) +{ + foo f; + printf ("returning %d\n", arg); + arg; +} + +int +warn_return_sum (int x, int y) +{ + foo f; + printf ("returning %d+%d\n", x, y); + x + y; +} + +foo +warn_return_foo () +{ + foo f; + printf ("returning foo\n"); +} + +foo +nowarn_return_named_foo () return f +{ + printf ("returning named foo\n"); +} + +foo +warn_foo_parm_returns_foo (foo f) +{ + f; +} + +main () +{ + 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; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p6578.C b/gcc/testsuite/g++.old-deja/g++.mike/p6578.C new file mode 100644 index 000000000000..2b19e86ddfb6 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p6578.C @@ -0,0 +1,8 @@ +// Build don't link: +// prms-id: 6578 + +struct A { + operator int (); +}; + +int i = A(); diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p658.C b/gcc/testsuite/g++.old-deja/g++.mike/p658.C new file mode 100644 index 000000000000..971619f92147 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p658.C @@ -0,0 +1,101 @@ +// prms-id: 658 + +#include <ostream.h> +#include <bool.h> +extern "C" void abort(); + +/* We may not find the libg++ <bool.h>. */ +#ifndef FALSE +#define FALSE false +#endif +#ifndef TRUE +#define TRUE true +#endif + +class Object { +public: + Object(); + Object(const Object&); + ~Object(); + + void OK() const; +private: + bool _destructed; +}; + +class Char: public Object { +public: + Char(); + Char(char); + Char(const Char&); + ~Char(); + + operator char () const; +private: + char _c; +}; + +main() +{ + Char r, s; + + r = Char('r'); + s = Char('s'); +} + +// +// Object stuff +// +Object::Object(): +_destructed(FALSE) +{} + +Object::Object(const Object& other): +_destructed(FALSE) +{ + other.OK(); +} + +Object::~Object() +{ + OK(); + _destructed = TRUE; +} + +void +Object::OK() const +{ + if (_destructed) { + cerr << "FAILURE - reference was made to a destructed object\n"; + abort(); + } +} + +// +// Char stuff +// + +Char::Char(): +Object(), +_c('a') +{ } + +Char::Char(char c): +Object(), +_c(c) +{ } + +Char::Char(const Char& other): +Object(other), +_c(other._c) +{ } + +Char::~Char() +{ + OK(); +} + +Char::operator char () const +{ + return _c; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p6610a.C b/gcc/testsuite/g++.old-deja/g++.mike/p6610a.C new file mode 100644 index 000000000000..b0b13d47f971 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p6610a.C @@ -0,0 +1,13 @@ +// prms-id: 6610 + +int fail = 1; +struct B; +struct A { virtual int f(const B*) = 0; int g(const B*); }; +int A::g(const B* t) { return f(t); } +struct B : virtual A { B(); int f(const B*); B* B_this; }; +B::B() { if (g(this)) fail = 0; } +int B::f(const B* t) { return t == this; } +struct C : B { int f(const B*); int x; }; +int C::f(const B*) { return 0; } + +int main() { C c; return fail; } diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p6610b.C b/gcc/testsuite/g++.old-deja/g++.mike/p6610b.C new file mode 100644 index 000000000000..8ec637eef028 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p6610b.C @@ -0,0 +1,14 @@ +// prms-id: 6610 + +int fail = 1; +struct B; +struct A { virtual int f(const B*) = 0; int g(const B*); }; +int A::g(const B* t) { return f(t); } +struct B : virtual A { int f(const B*); B* B_this; }; +int B::f(const B* t) { return t == this; } +struct S1 { }; +struct C : virtual S1, virtual B, virtual A { C(); }; +C::C() { if (g(this)) fail = 0; } +struct D : virtual B, virtual A, C { }; + +int main() { D d; return fail; } diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p6611.C b/gcc/testsuite/g++.old-deja/g++.mike/p6611.C new file mode 100644 index 000000000000..3d972cb86435 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p6611.C @@ -0,0 +1,26 @@ +// prms-id: 6611 + +class COMPLEX { +public: + COMPLEX(double a, double b=0) { re = a; im = b; } + void print() const { } +private: + double re; + double im; +}; + +int main(void) +{ + COMPLEX a[3][3] = { + { 1, COMPLEX(2,3), COMPLEX(3,4), }, + { 1, COMPLEX(2,3), COMPLEX(3,4), }, + { 1, COMPLEX(2,3), COMPLEX(3,4), }, + }; + int i,j; + + for (i = 0; i < 3; i++) { + for (j = 0; j < 3; j++) { + a[i][j].print(); + } + } +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p6746.C b/gcc/testsuite/g++.old-deja/g++.mike/p6746.C new file mode 100644 index 000000000000..764310fc05b7 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p6746.C @@ -0,0 +1,18 @@ +// Build don't link: +// prms-id: 6746 + +class call_trace { +public: + call_trace(char* fcn_name); + ~call_trace(); +}; + +static char * last_tree; +extern "C" void prt(); + +char * smt_mark_stree() { + char* _my_name = "smt_mark_stree" ; + call_trace _t(_my_name); + + return last_tree = 0 ? (char*)0 : (prt(), (char*)0); +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p6901.C b/gcc/testsuite/g++.old-deja/g++.mike/p6901.C new file mode 100644 index 000000000000..83292949ca87 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p6901.C @@ -0,0 +1,7 @@ +// Build don't link: +// prms-id: 6901 + +void green() { + for (int i = 0; i < 10; i++) {} + for (int i = 0; i < 10; i++) {} +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p6927.C b/gcc/testsuite/g++.old-deja/g++.mike/p6927.C new file mode 100644 index 000000000000..827ef29b24d7 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p6927.C @@ -0,0 +1,16 @@ +// prms-id: 6927 + +class Object { +public: + Object(); + int Value; +}; + +Object::Object() : Value(-1) { } + +Object *pArr = new Object[2]; + +main() { + if (pArr[0].Value != -1 || pArr[1].Value != -1) + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p700.C b/gcc/testsuite/g++.old-deja/g++.mike/p700.C new file mode 100644 index 000000000000..580895e557bc --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p700.C @@ -0,0 +1,2387 @@ +// Special g++ Options: +// prms-id: 700 + +//# 1 "../../../../libg++/etc/benchmarks/dhrystone.cc" + + + + + + + + + + + + + + + + + + + + + + + + + +//# 1 "../../../../libg++/etc/benchmarks/Int.h" 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +class Int +{ +protected: + int rep; + + + +public: + Int (); + Int (const int b); + Int (const Int& b); + ~Int(); + + operator int() const; + + inline virtual int val() const; + + inline virtual void operator = (const int); + inline virtual void operator = (const Int&); + + inline virtual void negate(); + inline virtual void complement(); + inline virtual void operator ++ (); + inline virtual void operator -- (); + + inline virtual void operator += (const Int & ); + inline virtual void operator -= (const Int & ); + inline virtual void operator *= (const Int & ); + inline virtual void operator /= (const Int & ); + inline virtual void operator %= (const Int & ); + inline virtual void operator |= (const Int & ); + inline virtual void operator &= (const Int & ); + inline virtual void operator ^= (const Int & ); + inline virtual void operator <<=(const Int & ); + inline virtual void operator >>=(const Int & ); + + + inline virtual void operator += (const int); + inline virtual void operator -= (const int); + inline virtual void operator *= (const int); + inline virtual void operator /= (const int); + inline virtual void operator %= (const int); + inline virtual void operator |= (const int); + inline virtual void operator &= (const int); + inline virtual void operator ^= (const int); + inline virtual void operator <<=(const int); + inline virtual void operator >>=(const int); + + +}; + +inline int Int::val() const { return rep; } +inline Int::operator int() const { return val(); } + +inline Int::Int () :rep(0) {} +inline Int::Int (const int b) :rep(b) {} +inline Int::Int (const Int& b) :rep(b.Int::val()) {} +inline Int::~Int() {} + +inline void Int::operator = (const int b) +{ rep = b; ; } +inline void Int::operator = (const Int& b) +{ rep = b.Int::val(); ; } + +inline void Int::complement() +{ rep = ~rep; ; } +inline void Int::negate() +{ rep = -rep; ; } +inline void Int::operator ++ () +{ ++rep; ; } +inline void Int::operator -- () +{ --rep; ; } + +inline void Int::operator += (const Int & b) +{ rep += b.Int::val(); ; } +inline void Int::operator -= (const Int & b) +{ rep -= b.Int::val(); ; } +inline void Int::operator *= (const Int & b) +{ rep *= b.Int::val(); ; } +inline void Int::operator /= (const Int & b) +{ rep /= b.Int::val(); ; } +inline void Int::operator %= (const Int & b) +{ rep %= b.Int::val(); ; } +inline void Int::operator |= (const Int & b) +{ rep |= b.Int::val(); ; } +inline void Int::operator &= (const Int & b) +{ rep &= b.Int::val(); ; } +inline void Int::operator ^= (const Int & b) +{ rep ^= b.Int::val(); ; } +inline void Int::operator <<=(const Int & b) +{ rep <<= b.Int::val(); ; } +inline void Int::operator >>=(const Int & b) +{ rep >>= b.Int::val(); ; } + + + +inline void Int::operator += (const int b) +{ rep += b; ; } +inline void Int::operator -= (const int b) +{ rep -= b; ; } +inline void Int::operator *= (const int b) +{ rep *= b; ; } +inline void Int::operator /= (const int b) +{ rep /= b; ; } +inline void Int::operator %= (const int b) +{ rep %= b; ; } +inline void Int::operator |= (const int b) +{ rep |= b; ; } +inline void Int::operator &= (const int b) +{ rep &= b; ; } +inline void Int::operator ^= (const int b) +{ rep ^= b; ; } +inline void Int::operator <<=(const int b) +{ rep <<= b; ; } +inline void Int::operator >>=(const int b) +{ rep >>= b; ; } + + +inline int& operator = (int& a, const Int & b) +{ a = b.Int::val(); return a;} // WARNING - +inline int& operator += (int& a, const Int & b) +{ a += b.Int::val(); return a; } +inline int& operator -= (int& a, const Int & b) +{ a -= b.Int::val(); return a;} +inline int& operator *= (int& a, const Int & b) +{ a *= b.Int::val(); return a;} +inline int& operator /= (int& a, const Int & b) +{ a /= b.Int::val(); return a;} +inline int& operator %= (int& a, const Int & b) +{ a %= b.Int::val(); return a;} +inline int& operator |= (int& a, const Int & b) +{ a |= b.Int::val(); return a;} +inline int& operator &= (int& a, const Int & b) +{ a &= b.Int::val(); return a;} +inline int& operator ^= (int& a, const Int & b) +{ a ^= b.Int::val(); return a;} +inline int& operator <<=(int& a, const Int & b) +{ a <<= b.Int::val(); return a;} +inline int& operator >>=(int& a, const Int & b) +{ a >>= b.Int::val(); return a;} + + + +//# 289 "../../../../libg++/etc/benchmarks/Int.h" + + +inline Int operator - (const Int & a) return r(a) +{ r.negate(); } +inline Int operator ~ (const Int & a) return r(a) +{ r.complement(); } + +inline Int operator + (const Int & a, const Int & b) return r(a) +{ r += b.Int::val(); } +inline Int operator - (const Int & a, const Int & b) return r(a) +{ r -= b.Int::val(); } +inline Int operator * (const Int & a, const Int & b) return r(a) +{ r *= b.Int::val(); } +inline Int operator / (const Int & a, const Int & b) return r(a) +{ r /= b.Int::val(); } +inline Int operator % (const Int & a, const Int & b) return r(a) +{ r %= b.Int::val(); } +inline Int operator << (const Int & a, const Int & b) return r(a) +{ r <<= b.Int::val(); } +inline Int operator >> (const Int & a, const Int & b) return r(a) +{ r >>= b.Int::val(); } +inline Int operator & (const Int & a, const Int & b) return r(a) +{ r &= b.Int::val(); } +inline Int operator | (const Int & a, const Int & b) return r(a) +{ r |= b.Int::val(); } +inline Int operator ^ (const Int & a, const Int & b) return r(a) +{ r ^= b.Int::val(); } + +inline Int operator + (const Int & a, const int b) return r(a) +{ r += b; } +inline Int operator - (const Int & a, const int b) return r(a) +{ r -= b; } +inline Int operator * (const Int & a, const int b) return r(a) +{ r *= b; } +inline Int operator / (const Int & a, const int b) return r(a) +{ r /= b; } +inline Int operator % (const Int & a, const int b) return r(a) +{ r %= b; } +inline Int operator << (const Int & a, const int b) return r(a) +{ r <<= b; } +inline Int operator >> (const Int & a, const int b) return r(a) +{ r >>= b; } +inline Int operator & (const Int & a, const int b) return r(a) +{ r &= b; } +inline Int operator | (const Int & a, const int b) return r(a) +{ r |= b; } +inline Int operator ^ (const Int & a, const int b) return r(a) +{ r ^= b; } + +inline Int operator + (const int a, const Int & b) return r(a) +{ r += b.Int::val(); } +inline Int operator - (const int a, const Int & b) return r(a) +{ r -= b.Int::val(); } +inline Int operator * (const int a, const Int & b) return r(a) +{ r *= b.Int::val(); } +inline Int operator / (const int a, const Int & b) return r(a) +{ r /= b.Int::val(); } +inline Int operator % (const int a, const Int & b) return r(a) +{ r %= b.Int::val(); } +inline Int operator << (const int a, const Int & b) return r(a) +{ r <<= b.Int::val(); } +inline Int operator >> (const int a, const Int & b) return r(a) +{ r >>= b.Int::val(); } +inline Int operator & (const int a, const Int & b) return r(a) +{ r &= b.Int::val(); } +inline Int operator | (const int a, const Int & b) return r(a) +{ r |= b.Int::val(); } +inline Int operator ^ (const int a, const Int & b) return r(a) +{ r ^= b.Int::val(); } + + + +inline int operator ! (const Int & a) { return !a.Int::val(); } + +inline int operator == (const Int & a, const Int & b) +{ return a.Int::val() == b.Int::val(); } +inline int operator != (const Int & a, const Int & b) +{ return a.Int::val() != b.Int::val(); } +inline int operator < (const Int & a, const Int & b) +{ return a.Int::val() < b.Int::val(); } +inline int operator <= (const Int & a, const Int & b) +{ return a.Int::val() <= b.Int::val(); } +inline int operator > (const Int & a, const Int & b) +{ return a.Int::val() > b.Int::val(); } +inline int operator >= (const Int & a, const Int & b) +{ return a.Int::val() >= b.Int::val(); } + +inline int operator == (const Int & a, const int b) +{ return a.Int::val() == b; } +inline int operator != (const Int & a, const int b) +{ return a.Int::val() != b; } +inline int operator < (const Int & a, const int b) +{ return a.Int::val() < b; } +inline int operator <= (const Int & a, const int b) +{ return a.Int::val() <= b; } +inline int operator > (const Int & a, const int b) +{ return a.Int::val() > b; } +inline int operator >= (const Int & a, const int b) +{ return a.Int::val() >= b; } + +inline int operator == (const int a, const Int & b) +{ return a == b.Int::val(); } +inline int operator != (const int a, const Int & b) +{ return a != b.Int::val(); } +inline int operator < (const int a, const Int & b) +{ return a < b.Int::val(); } +inline int operator <= (const int a, const Int & b) +{ return a <= b.Int::val(); } +inline int operator > (const int a, const Int & b) +{ return a > b.Int::val(); } +inline int operator >= (const int a, const Int & b) +{ return a >= b.Int::val(); } + + + +//# 26 "../../../../libg++/etc/benchmarks/dhrystone.cc" 2 + +//# 1 "../../../../libg++/etc/benchmarks/Char.h" 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +class Char +{ +protected: + char rep; + + + +public: + Char (); + Char (const char b); + Char (const Char& b); + ~Char(); + + operator char() const; + + inline virtual char val() const; + + inline virtual void operator = (const char); + inline virtual void operator = (const Char&); + + inline virtual void negate(); + inline virtual void complement(); + inline virtual void operator ++ (); + inline virtual void operator -- (); + + inline virtual void operator += (const Char & ); + inline virtual void operator -= (const Char & ); + inline virtual void operator *= (const Char & ); + inline virtual void operator /= (const Char & ); + inline virtual void operator %= (const Char & ); + inline virtual void operator |= (const Char & ); + inline virtual void operator &= (const Char & ); + inline virtual void operator ^= (const Char & ); + inline virtual void operator <<=(const Char & ); + inline virtual void operator >>=(const Char & ); + + + inline virtual void operator += (const char); + inline virtual void operator -= (const char); + inline virtual void operator *= (const char); + inline virtual void operator /= (const char); + inline virtual void operator %= (const char); + inline virtual void operator |= (const char); + inline virtual void operator &= (const char); + inline virtual void operator ^= (const char); + inline virtual void operator <<=(const char); + inline virtual void operator >>=(const char); + + +}; + +inline char Char::val() const { return rep; } +inline Char::operator char() const { return val(); } + +inline Char::Char () :rep(0) {} +inline Char::Char (const char b) :rep(b) {} +inline Char::Char (const Char& b) :rep(b.Char::val()) {} +inline Char::~Char() {} + +inline void Char::operator = (const char b) +{ rep = b; ; } +inline void Char::operator = (const Char& b) +{ rep = b.Char::val(); ; } + +inline void Char::complement() +{ rep = ~rep; ; } +inline void Char::negate() +{ rep = -rep; ; } +inline void Char::operator ++ () +{ ++rep; ; } +inline void Char::operator -- () +{ --rep; ; } + +inline void Char::operator += (const Char & b) +{ rep += b.Char::val(); ; } +inline void Char::operator -= (const Char & b) +{ rep -= b.Char::val(); ; } +inline void Char::operator *= (const Char & b) +{ rep *= b.Char::val(); ; } +inline void Char::operator /= (const Char & b) +{ rep /= b.Char::val(); ; } +inline void Char::operator %= (const Char & b) +{ rep %= b.Char::val(); ; } +inline void Char::operator |= (const Char & b) +{ rep |= b.Char::val(); ; } +inline void Char::operator &= (const Char & b) +{ rep &= b.Char::val(); ; } +inline void Char::operator ^= (const Char & b) +{ rep ^= b.Char::val(); ; } +inline void Char::operator <<=(const Char & b) +{ rep <<= b.Char::val(); ; } +inline void Char::operator >>=(const Char & b) +{ rep >>= b.Char::val(); ; } + + + +inline void Char::operator += (const char b) +{ rep += b; ; } +inline void Char::operator -= (const char b) +{ rep -= b; ; } +inline void Char::operator *= (const char b) +{ rep *= b; ; } +inline void Char::operator /= (const char b) +{ rep /= b; ; } +inline void Char::operator %= (const char b) +{ rep %= b; ; } +inline void Char::operator |= (const char b) +{ rep |= b; ; } +inline void Char::operator &= (const char b) +{ rep &= b; ; } +inline void Char::operator ^= (const char b) +{ rep ^= b; ; } +inline void Char::operator <<=(const char b) +{ rep <<= b; ; } +inline void Char::operator >>=(const char b) +{ rep >>= b; ; } + + +inline char& operator = (char& a, const Char & b) +{ a = b.Char::val(); return a;} // WARNING - +inline char& operator += (char& a, const Char & b) +{ a += b.Char::val(); return a; } +inline char& operator -= (char& a, const Char & b) +{ a -= b.Char::val(); return a;} +inline char& operator *= (char& a, const Char & b) +{ a *= b.Char::val(); return a;} +inline char& operator /= (char& a, const Char & b) +{ a /= b.Char::val(); return a;} +inline char& operator %= (char& a, const Char & b) +{ a %= b.Char::val(); return a;} +inline char& operator |= (char& a, const Char & b) +{ a |= b.Char::val(); return a;} +inline char& operator &= (char& a, const Char & b) +{ a &= b.Char::val(); return a;} +inline char& operator ^= (char& a, const Char & b) +{ a ^= b.Char::val(); return a;} +inline char& operator <<=(char& a, const Char & b) +{ a <<= b.Char::val(); return a;} +inline char& operator >>=(char& a, const Char & b) +{ a >>= b.Char::val(); return a;} + + + +//# 291 "../../../../libg++/etc/benchmarks/Char.h" + + +inline Char operator - (const Char & a) return r(a) +{ r.negate(); } +inline Char operator ~ (const Char & a) return r(a) +{ r.complement(); } + +inline Char operator + (const Char & a, const Char & b) return r(a) +{ r += b.Char::val(); } +inline Char operator - (const Char & a, const Char & b) return r(a) +{ r -= b.Char::val(); } +inline Char operator * (const Char & a, const Char & b) return r(a) +{ r *= b.Char::val(); } +inline Char operator / (const Char & a, const Char & b) return r(a) +{ r /= b.Char::val(); } +inline Char operator % (const Char & a, const Char & b) return r(a) +{ r %= b.Char::val(); } +inline Char operator << (const Char & a, const Char & b) return r(a) +{ r <<= b.Char::val(); } +inline Char operator >> (const Char & a, const Char & b) return r(a) +{ r >>= b.Char::val(); } +inline Char operator & (const Char & a, const Char & b) return r(a) +{ r &= b.Char::val(); } +inline Char operator | (const Char & a, const Char & b) return r(a) +{ r |= b.Char::val(); } +inline Char operator ^ (const Char & a, const Char & b) return r(a) +{ r ^= b.Char::val(); } + +inline Char operator + (const Char & a, const char b) return r(a) +{ r += b; } +inline Char operator - (const Char & a, const char b) return r(a) +{ r -= b; } +inline Char operator * (const Char & a, const char b) return r(a) +{ r *= b; } +inline Char operator / (const Char & a, const char b) return r(a) +{ r /= b; } +inline Char operator % (const Char & a, const char b) return r(a) +{ r %= b; } +inline Char operator << (const Char & a, const char b) return r(a) +{ r <<= b; } +inline Char operator >> (const Char & a, const char b) return r(a) +{ r >>= b; } +inline Char operator & (const Char & a, const char b) return r(a) +{ r &= b; } +inline Char operator | (const Char & a, const char b) return r(a) +{ r |= b; } +inline Char operator ^ (const Char & a, const char b) return r(a) +{ r ^= b; } + +inline Char operator + (const char a, const Char & b) return r(a) +{ r += b.Char::val(); } +inline Char operator - (const char a, const Char & b) return r(a) +{ r -= b.Char::val(); } +inline Char operator * (const char a, const Char & b) return r(a) +{ r *= b.Char::val(); } +inline Char operator / (const char a, const Char & b) return r(a) +{ r /= b.Char::val(); } +inline Char operator % (const char a, const Char & b) return r(a) +{ r %= b.Char::val(); } +inline Char operator << (const char a, const Char & b) return r(a) +{ r <<= b.Char::val(); } +inline Char operator >> (const char a, const Char & b) return r(a) +{ r >>= b.Char::val(); } +inline Char operator & (const char a, const Char & b) return r(a) +{ r &= b.Char::val(); } +inline Char operator | (const char a, const Char & b) return r(a) +{ r |= b.Char::val(); } +inline Char operator ^ (const char a, const Char & b) return r(a) +{ r ^= b.Char::val(); } + + + +inline char operator ! (const Char & a) { return !a.Char::val(); } + +inline char operator == (const Char & a, const Char & b) +{ return a.Char::val() == b.Char::val(); } +inline char operator != (const Char & a, const Char & b) +{ return a.Char::val() != b.Char::val(); } +inline char operator < (const Char & a, const Char & b) +{ return a.Char::val() < b.Char::val(); } +inline char operator <= (const Char & a, const Char & b) +{ return a.Char::val() <= b.Char::val(); } +inline char operator > (const Char & a, const Char & b) +{ return a.Char::val() > b.Char::val(); } +inline char operator >= (const Char & a, const Char & b) +{ return a.Char::val() >= b.Char::val(); } + +inline char operator == (const Char & a, const char b) +{ return a.Char::val() == b; } +inline char operator != (const Char & a, const char b) +{ return a.Char::val() != b; } +inline char operator < (const Char & a, const char b) +{ return a.Char::val() < b; } +inline char operator <= (const Char & a, const char b) +{ return a.Char::val() <= b; } +inline char operator > (const Char & a, const char b) +{ return a.Char::val() > b; } +inline char operator >= (const Char & a, const char b) +{ return a.Char::val() >= b; } + +inline char operator == (const char a, const Char & b) +{ return a == b.Char::val(); } +inline char operator != (const char a, const Char & b) +{ return a != b.Char::val(); } +inline char operator < (const char a, const Char & b) +{ return a < b.Char::val(); } +inline char operator <= (const char a, const Char & b) +{ return a <= b.Char::val(); } +inline char operator > (const char a, const Char & b) +{ return a > b.Char::val(); } +inline char operator >= (const char a, const Char & b) +{ return a >= b.Char::val(); } + + + +//# 27 "../../../../libg++/etc/benchmarks/dhrystone.cc" 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +//# 1 "/giga/hgs/lib/g++-include/sys/types.h" 1 + + +//# 1 "/giga/hgs/lib/g++-include/stddef.h" 1 + +extern "C" { +//# 1 "/giga/hgs/lib/gcc/sun4/cygnus-1.96/include/stddef.h" 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +typedef int ptrdiff_t; + + + + + + + + + + + + + + + + + + + + + +typedef int size_t; + + + + + + + + + + + + + + + + + + + + + +typedef short unsigned int wchar_t; + + + + + + + + + + + + + + + + + + + +//# 3 "/giga/hgs/lib/g++-include/stddef.h" 2 + +} +//# 73 "/giga/hgs/lib/g++-include/stddef.h" + +//# 3 "/giga/hgs/lib/g++-include/sys/types.h" 2 + + + + +extern "C" +{ + + + + + + + + + + + + + + + + + + + + + + + + + + +//# 1 "/usr/include/sys/types.h" 1 + + + + + + + + + + + + + + + +//# 1 "/usr/include/sys/stdtypes.h" 1 + + + + + + + + + + + + + +typedef int sigset_t; + +typedef unsigned int speed_t; +typedef unsigned long tcflag_t; +typedef unsigned char cc_t; +typedef int pid_t; + +typedef unsigned short mode_t; +typedef short nlink_t; + +typedef long clock_t; +typedef long time_t; + +typedef int size_t; +typedef int ptrdiff_t; + +typedef unsigned short wchar_t; + + +//# 16 "/usr/include/sys/types.h" 2 + + + +//# 1 "/usr/include/sys/sysmacros.h" 1 + + + + + + + + + + + + + + + + + + + +//# 19 "/usr/include/sys/types.h" 2 + + + + + +typedef unsigned char u_char; +typedef unsigned short u_short; +typedef unsigned int u_int; +typedef unsigned long u_long; +typedef unsigned short ushort; +typedef unsigned int uint; + + + + + + + + + + + + + + + +typedef struct _physadr_t { int r[1]; } *physadr_t; +typedef struct label_t { + int val[2]; +} label_t; + + + + + + + +typedef struct _quad_t { long val[2]; } quad_t; +typedef long daddr_t; +typedef char * caddr_t; +typedef unsigned long ino_t; +typedef short dev_t; +typedef long off_t; +typedef unsigned short uid_t; +typedef unsigned short gid_t; +typedef long key_t; +typedef char * addr_t; + + + + + + + + + + + + + + +typedef long fd_mask; + + + + + + + + + +typedef struct fd_set { + fd_mask fds_bits[(((256 )+(( (sizeof (fd_mask) * 8 ) )-1))/( (sizeof (fd_mask) * 8 ) )) ]; +} fd_set; + + + + + + + +//# 113 "/usr/include/sys/types.h" + + + +//# 35 "/giga/hgs/lib/g++-include/sys/types.h" 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +} + + + + +//# 310 "../../../../libg++/etc/benchmarks/dhrystone.cc" 2 + +//# 1 "/giga/hgs/lib/g++-include/sys/times.h" 1 +//# 1 "/giga/hgs/lib/g++-include/time.h" 1 + + + + + +//# 1 "/giga/hgs/lib/g++-include/stddef.h" 1 + +extern "C" { +//# 1 "/giga/hgs/lib/gcc/sun4/cygnus-1.96/include/stddef.h" 1 +//# 94 "/giga/hgs/lib/gcc/sun4/cygnus-1.96/include/stddef.h" + +//# 3 "/giga/hgs/lib/g++-include/stddef.h" 2 + +} +//# 73 "/giga/hgs/lib/g++-include/stddef.h" + +//# 6 "/giga/hgs/lib/g++-include/time.h" 2 + +//# 1 "/giga/hgs/lib/g++-include/stdio.h" 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +//#pragma interface + + + + + + + + + + + + + + + + + + + +//# 80 "/giga/hgs/lib/g++-include/stdio.h" + + + +//# 117 "/giga/hgs/lib/g++-include/stdio.h" + + + + + +//# 153 "/giga/hgs/lib/g++-include/stdio.h" + + + +extern "C" { + + + + + + + + + + + + + + + + + + + + + + + + + + + + +//# 1 "/usr/include/stdio.h" 1 + + + + + +extern struct _iobuf { + int _cnt; + unsigned char *_ptr; + unsigned char *_base; + int _bufsiz; + short _flag; + char _file; +} _iob[]; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +extern struct _iobuf *c_proto_fopen (); +extern struct _iobuf *c_proto_fdopen (); +extern struct _iobuf *c_proto_freopen (); +extern struct _iobuf *c_proto_popen (); +extern struct _iobuf *tmpfile(); +extern long ftell(); +extern char *fgets(); +extern char *gets(); +extern char *c_proto_sprintf (); +extern char *ctermid(); +extern char *cuserid(); +extern char *c_proto_tempnam (); +extern char *tmpnam(); + + + + + + +//# 185 "/giga/hgs/lib/g++-include/stdio.h" 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +} +//# 417 "/giga/hgs/lib/g++-include/stdio.h" + + + + + + +extern "C" { + + + + + + + +int _doprnt(const char*, void*, struct _iobuf *); +int _doscan(struct _iobuf *, const char*, ...); +int _filbuf(struct _iobuf *); +int _flsbuf(unsigned, struct _iobuf *); + +int fclose(struct _iobuf *); +struct _iobuf * fdopen(int, const char*); +int fflush(struct _iobuf *); +int fgetc(struct _iobuf *); +char* fgets(char*, int, struct _iobuf *); +struct _iobuf * fopen(const char*, const char*); +int fprintf(struct _iobuf *, const char* ...); +int fputc(int, struct _iobuf *); +int fputs(const char*, struct _iobuf *); +int fread(void*, int, int, struct _iobuf *); + + + +struct _iobuf * freopen(const char*, const char*, struct _iobuf *); + +int fscanf(struct _iobuf *, const char* ...); +int fseek(struct _iobuf *, long, int); +long ftell(struct _iobuf *); +int fwrite(const void*, int, int, struct _iobuf *); +char* gets(char*); +int getw(struct _iobuf *); +int pclose(struct _iobuf *); +void perror(const char*); +struct _iobuf * popen(const char*, const char*); +int printf(const char* ...); +int puts(const char*); +int putw(int, struct _iobuf *); +int rewind(struct _iobuf *); +int scanf(const char* ...); +int setbuf(struct _iobuf *, char*); +int setbuffer(struct _iobuf *, char*, int); +int setlinebuf(struct _iobuf *); +int setvbuf(struct _iobuf *, char*, int, int); +int sscanf(char*, const char* ...); +struct _iobuf * tmpfile(); +int ungetc(int, struct _iobuf *); +int vfprintf(struct _iobuf *, const char*, ...); + + + + +int vprintf(const char*, ... ); + + + + + +char* sprintf(char*, const char*, ...); +char* vsprintf(char*, const char*, ...); + + +} + + + + + + + + + + + + + + + + + +//# 7 "/giga/hgs/lib/g++-include/time.h" 2 + + +//# 1 "/giga/hgs/lib/g++-include/sys/types.h" 1 + + +//# 1 "/giga/hgs/lib/g++-include/stddef.h" 1 + +extern "C" { +//# 1 "/giga/hgs/lib/gcc/sun4/cygnus-1.96/include/stddef.h" 1 +//# 94 "/giga/hgs/lib/gcc/sun4/cygnus-1.96/include/stddef.h" + +//# 3 "/giga/hgs/lib/g++-include/stddef.h" 2 + +} +//# 73 "/giga/hgs/lib/g++-include/stddef.h" + +//# 3 "/giga/hgs/lib/g++-include/sys/types.h" 2 + + + + +extern "C" +{ + + + + + + + + + + + + + + + + + + + + + + + + + + +//# 1 "/usr/include/sys/types.h" 1 + + + + + + + + +//# 115 "/usr/include/sys/types.h" + +//# 35 "/giga/hgs/lib/g++-include/sys/types.h" 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +} + + + + +//# 9 "/giga/hgs/lib/g++-include/time.h" 2 + + +extern "C" { + + + + + + + + + + + + + + + + + +//# 42 "/giga/hgs/lib/g++-include/time.h" + + + + + + + +//# 1 "/usr/include/time.h" 1 + + + + + +//# 1 "/usr/include/sys/stdtypes.h" 1 + + + + + + + + + + +//# 32 "/usr/include/sys/stdtypes.h" + +//# 6 "/usr/include/time.h" 2 + + + + +struct tm { + int tm_sec; + int tm_min; + int tm_hour; + int tm_mday; + int tm_mon; + int tm_year; + int tm_wday; + int tm_yday; + int tm_isdst; + char *tm_zone; + long tm_gmtoff; +}; + +extern struct tm *c_proto_gmtime (), *c_proto_localtime (); +extern char *c_proto_asctime (), *c_proto_ctime (); +extern void c_proto_tzset (), c_proto_tzsetwall (); +extern int dysize(); +extern time_t timelocal(), timegm(); + + +//# 49 "/giga/hgs/lib/g++-include/time.h" 2 + + +//# 1 "/usr/include/sys/times.h" 1 + + + + + + + + + +//# 1 "/giga/hgs/lib/g++-include/sys/types.h" 1 + + +//# 1 "/giga/hgs/lib/g++-include/stddef.h" 1 + +extern "C" { +//# 1 "/giga/hgs/lib/gcc/sun4/cygnus-1.96/include/stddef.h" 1 +//# 94 "/giga/hgs/lib/gcc/sun4/cygnus-1.96/include/stddef.h" + +//# 3 "/giga/hgs/lib/g++-include/stddef.h" 2 + +} +//# 73 "/giga/hgs/lib/g++-include/stddef.h" + +//# 3 "/giga/hgs/lib/g++-include/sys/types.h" 2 + + + + +extern "C" +{ + + + + + + + + + + + + + + + + + + + + + + + + + + +//# 1 "/usr/include/sys/types.h" 1 + + + + + + + + +//# 115 "/usr/include/sys/types.h" + +//# 35 "/giga/hgs/lib/g++-include/sys/types.h" 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +} + + + + +//# 10 "/usr/include/sys/times.h" 2 + + +struct tms { + clock_t tms_utime; + clock_t tms_stime; + clock_t tms_cutime; + clock_t tms_cstime; +}; + + +clock_t times( ); + + + +//# 51 "/giga/hgs/lib/g++-include/time.h" 2 + + + + + + + + + + + + + + + + + + + + + +extern struct tm* localtime(long*); +extern struct tm* gmtime(long*); +extern char* ctime(long*); +extern char* asctime(struct tm*); +extern void tzset(); +extern void tzsetwall(); + + + + + + +extern long times(struct tms*); + + +//# 97 "/giga/hgs/lib/g++-include/time.h" + +extern char* timezone(int, int); +extern int getitimer(int, struct itimerval*); +extern int setitimer(int, struct itimerval*, struct itimerval*); +extern int gettimeofday(struct timeval*, struct timezone*); +extern int settimeofday(struct timeval*, struct timezone*); +extern int stime(long*); +int dysize(int); + + + + + + + + +long clock(void); + +long time(long*); +unsigned ualarm(unsigned, unsigned); +unsigned usleep(unsigned); +int profil(char*, int, int, int); + +} + + + +//# 1 "/giga/hgs/lib/g++-include/sys/times.h" 2 + +//# 311 "../../../../libg++/etc/benchmarks/dhrystone.cc" 2 + + + + + + + + + + + + + + + + + + + + + + + + +typedef enum {Ident1, Ident2, Ident3, Ident4, Ident5} Enumeration; + + + + +typedef Int OneToThirty; +typedef Int OneToFifty; +typedef Char CapitalLetter; +typedef Char String30[31]; +typedef Int Array1Dim[51]; +typedef Int Array2Dim[51][51]; + +struct Record +{ + struct Record *PtrComp; + Enumeration Discr; + Enumeration EnumComp; + OneToFifty IntComp; + String30 StringComp; +}; + +typedef struct Record RecordType; +typedef RecordType * RecordPtr; +typedef int boolean; + + + + + + + + + + + +extern "C" { +extern int printf(const char* ...); +extern void exit(int); +} + +void Proc0(); +void Proc1(RecordPtr PtrParIn); +void Proc2(OneToFifty *IntParIO); +void Proc3(RecordPtr *PtrParOut); +void Proc4(); +void Proc5(); +boolean Func3(Enumeration EnumParIn); +void Proc6( Enumeration EnumParIn, Enumeration *EnumParOut); +void Proc7(OneToFifty IntParI1, OneToFifty IntParI2, OneToFifty *IntParOut); +void Proc8(Array1Dim Array1Par, + Array2Dim Array2Par, + OneToFifty IntParI1, + OneToFifty IntParI2); +Enumeration Func1(CapitalLetter CharPar1, CapitalLetter CharPar2); +boolean Func2(String30 StrParI1, String30 StrParI2); +boolean Func3(Enumeration EnumParIn); + +void mystrcpy(String30 s, char* t) +{ + for (; *t != '\0'; ++s, ++t) *s = *t; + *s = '\0'; +} + +char mystrcmp(String30 s, String30 t) +{ + for (; *s == *t; ++s, ++t) if (*s == '\0') return 0; + return char(*s - *t); +} + + + +main() +{ + Proc0(); + exit(0); +} + + + + +Int IntGlob; +boolean BoolGlob; +char Char1Glob; +char Char2Glob; +Array1Dim Array1Glob; +Array2Dim Array2Glob; +RecordPtr PtrGlb; +RecordPtr PtrGlbNext; + +void Proc0() +{ + OneToFifty IntLoc1; + OneToFifty IntLoc2; + OneToFifty IntLoc3; + char CharLoc; + char CharIndex; + Enumeration EnumLoc; + String30 String1Loc; + String30 String2Loc; + +//# 445 "../../../../libg++/etc/benchmarks/dhrystone.cc" + + + time_t starttime; + time_t benchtime; + time_t nulltime; + struct tms Tms; + register unsigned int i; + + times(&Tms); starttime = Tms.tms_utime; + for (i = 0; i < 500000 ; ++i); + times(&Tms); + nulltime = Tms.tms_utime - starttime; + + + PtrGlbNext = new Record; + PtrGlb = new Record; + PtrGlb->PtrComp = PtrGlbNext; + PtrGlb->Discr = Ident1; + PtrGlb->EnumComp = Ident3; + PtrGlb->IntComp = 40; + mystrcpy(PtrGlb->StringComp, "DHRYSTONE PROGRAM, SOME STRING"); + mystrcpy(String1Loc, "JUST INITIALIZED TO SOME JUNK."); + + + + + + + + + times(&Tms); starttime = Tms.tms_utime; + + for (i = 0; i < 500000 ; ++i) + { + + Proc5(); + Proc4(); + IntLoc1 = 2; + IntLoc2 = 3; + mystrcpy(String2Loc, "DHRYSTONE PROGRAM, 2'ND STRING"); + EnumLoc = Ident2; + BoolGlob = ! Func2(String1Loc, String2Loc); + while (IntLoc1 < IntLoc2) + { + IntLoc3 = 5 * IntLoc1 - IntLoc2; + Proc7(IntLoc1, IntLoc2, &IntLoc3); + ++IntLoc1; + } + Proc8(Array1Glob, Array2Glob, IntLoc1, IntLoc3); + Proc1(PtrGlb); + for (CharIndex = 'A'; CharIndex <= Char2Glob; ++CharIndex) + if (EnumLoc == Func1(CharIndex, 'C')) + Proc6(Ident1, &EnumLoc); + IntLoc3 = IntLoc2 * IntLoc1; + IntLoc2 = IntLoc3 / IntLoc1; + IntLoc2 = 7 * (IntLoc3 - IntLoc2) - IntLoc1; + Proc2(&IntLoc1); + } + + + + + + + + + + + + + + times(&Tms); + benchtime = Tms.tms_utime - starttime - nulltime; + printf("Dhrystone time for %ld passes = %ld\n", + (long) 500000 , benchtime/60 ); + printf("This machine benchmarks at %ld dhrystones/second\n", + ((long) 500000 ) * 60 / benchtime); + + +} + +void Proc1(RecordPtr PtrParIn) +{ + + + (*(PtrParIn->PtrComp)) = *PtrGlb ; + PtrParIn->IntComp = 5; + (*(PtrParIn->PtrComp)) .IntComp = PtrParIn->IntComp; + (*(PtrParIn->PtrComp)) .PtrComp = PtrParIn->PtrComp; + + Proc3(&((*(PtrParIn->PtrComp)) .PtrComp)); + if ((*(PtrParIn->PtrComp)) .Discr == Ident1) + { + (*(PtrParIn->PtrComp)) .IntComp = 6; + Proc6(PtrParIn->EnumComp, &(*(PtrParIn->PtrComp)) .EnumComp); + (*(PtrParIn->PtrComp)) .PtrComp = PtrGlb->PtrComp; + Proc7((*(PtrParIn->PtrComp)) .IntComp, 10, &(*(PtrParIn->PtrComp)) .IntComp); + } + else + *PtrParIn = (*(PtrParIn->PtrComp)) ; + + +} + +void Proc2(OneToFifty *IntParIO) +{ + OneToFifty IntLoc; + Enumeration EnumLoc; + + IntLoc = *IntParIO + 10; + for(;;) + { + if (Char1Glob == 'A') + { + --IntLoc; + *IntParIO = IntLoc - IntGlob; + EnumLoc = Ident1; + } + if (EnumLoc == Ident1) + break; + } +} + +void Proc3(RecordPtr *PtrParOut) +{ + if (PtrGlb != 0 ) + *PtrParOut = PtrGlb->PtrComp; + else + IntGlob = 100; + Proc7(10, IntGlob, &PtrGlb->IntComp); +} + +void Proc4() +{ + boolean BoolLoc; + + BoolLoc = Char1Glob == 'A'; + BoolLoc |= BoolGlob; + Char2Glob = 'B'; +} + +void Proc5() +{ + Char1Glob = 'A'; + BoolGlob = 0 ; +} + + + + +void Proc6( Enumeration EnumParIn, Enumeration *EnumParOut) +{ + *EnumParOut = EnumParIn; + if (! Func3(EnumParIn) ) + *EnumParOut = Ident4; + switch (EnumParIn) + { + case Ident1: *EnumParOut = Ident1; break; + case Ident2: if (IntGlob > 100) *EnumParOut = Ident1; + else *EnumParOut = Ident4; + break; + case Ident3: *EnumParOut = Ident2; break; + case Ident4: break; + case Ident5: *EnumParOut = Ident3; + } +} + +void Proc7(OneToFifty IntParI1, OneToFifty IntParI2, OneToFifty *IntParOut) +{ + OneToFifty IntLoc; + + IntLoc = IntParI1 + 2; + *IntParOut = IntParI2 + IntLoc; +} + +void Proc8(Array1Dim Array1Par, + Array2Dim Array2Par, + OneToFifty IntParI1, + OneToFifty IntParI2) +{ + OneToFifty IntLoc; + OneToFifty IntIndex; + + IntLoc = IntParI1 + 5; + Array1Par[IntLoc] = IntParI2; + Array1Par[IntLoc+1] = Array1Par[IntLoc]; + Array1Par[IntLoc+30] = IntLoc; + for (IntIndex = IntLoc; IntIndex <= (IntLoc+1); ++IntIndex) + Array2Par[IntLoc][IntIndex] = IntLoc; + ++Array2Par[IntLoc][IntLoc-1]; + Array2Par[IntLoc+20][IntLoc] = Array1Par[IntLoc]; + IntGlob = 5; +} + +Enumeration Func1(CapitalLetter CharPar1, CapitalLetter CharPar2) +{ + CapitalLetter CharLoc1; + CapitalLetter CharLoc2; + + CharLoc1 = CharPar1; + CharLoc2 = CharLoc1; + if (CharLoc2 != CharPar2) + return (Ident1); + else + return (Ident2); +} + +boolean Func2(String30 StrParI1, String30 StrParI2) +{ + OneToThirty IntLoc; + CapitalLetter CharLoc; + + IntLoc = 1; + while (IntLoc <= 1) + if (Func1(StrParI1[IntLoc], StrParI2[IntLoc+1]) == Ident1) + { + CharLoc = 'A'; + ++IntLoc; + } + if (CharLoc >= 'W' && CharLoc <= 'Z') + IntLoc = 7; + if (CharLoc == 'X') + return( 1 ); + else + { + if (mystrcmp(StrParI1, StrParI2) > 0) + { + IntLoc += 7; + return ( 1 ); + } + else + return ( 0 ); + } +} + +boolean Func3(Enumeration EnumParIn) +{ + Enumeration EnumLoc; + + EnumLoc = EnumParIn; + if (EnumLoc == Ident3) return ( 1 ); + return ( 0 ); +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p701.C b/gcc/testsuite/g++.old-deja/g++.mike/p701.C new file mode 100644 index 000000000000..4acf17038d46 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p701.C @@ -0,0 +1,34 @@ +// Build don't link: +// prms-id: 701 + +extern "C" +{ + int printf(const char *, ...); +}; + + +void Munge(int& x) +{ // ERROR - referenced below + x = 2; +} + + +class A +{ + public: + int i; + A(int x) : i(x) {} + void Safe() const; +}; + +void +A::Safe() const +{ + Munge(i); // ERROR - should not be able to modify a const object +} + +main() +{ + const A a(1); + a.Safe(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p710.C b/gcc/testsuite/g++.old-deja/g++.mike/p710.C new file mode 100644 index 000000000000..56f09b1a67ec --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p710.C @@ -0,0 +1,43 @@ +// Build don't link: +// GROUPS passed delete +/* + Bug Id: + PRMS Id: p0000710 + Bug is : overloading operator delete in class def not allowed +*/ + +/* + In addition to this bug, the compiler permits overloading operator + delete in the class definition. This is verboten, and should be + caught by a regression suite. In other words, the following is also a + bug that's not caught: +*/ + + +#include <stdlib.h> + +extern "C" +{ + int printf(const char*, ...); +}; + + + +class B +{ + public: + int x; + virtual ~B() {} + void operator delete(void*,size_t s) + {// ERROR - previous declaration as.* + printf("B::delete() %d\n",s); + } + void operator delete(void*){} // ERROR - .B::operator.*overloaded +}; + +main() +{ + B* p = new B; + delete p; + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p7180.C b/gcc/testsuite/g++.old-deja/g++.mike/p7180.C new file mode 100644 index 000000000000..da75bd6d4ed8 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p7180.C @@ -0,0 +1,17 @@ +// prms-id: 7180 + +class String { +public: + String(const char*); + ~String(); +}; + +String::String(const char* str = "") { +} + +String::~String(void) { +} + +int main() { + const String array[] = {"3"}; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p7325.C b/gcc/testsuite/g++.old-deja/g++.mike/p7325.C new file mode 100644 index 000000000000..8402a36cc348 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p7325.C @@ -0,0 +1,55 @@ +// I hate this type of test case. I'm not sure how to code it better. +// See the PR for what this tests. +// prms-id: 7325 +// execution test fails *-*-* + +int fail = 0; + +struct A { + int i; + static const A* match_this; + static const A* match_arg; + A(): i(7) { + if (match_this) + if (match_this != this) + fail = 1; + } + A* get_this() { return this; } + A& operator = (const A& o) { + if (match_this) + if (match_this != this) + fail = 1; + if (match_arg) + if (match_arg != &o) + fail = 1; + match_arg = &o; + } +}; + +const A* A::match_this; +const A* A::match_arg; +A a; + +A foo() { return a; } +void f () +{ + A a; + A::match_this = &a; + a = foo (); + a = foo (); + A::match_this = 0; +} + +void g () +{ + A::match_this = A().get_this(); + A(); + A(); + A::match_this = 0; +} + +main() { + f(); + g(); + return fail; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p7476.C b/gcc/testsuite/g++.old-deja/g++.mike/p7476.C new file mode 100644 index 000000000000..acddf05ee13a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p7476.C @@ -0,0 +1,20 @@ +// Build don't link: +// prms-id: 7476 + +class HeapTracked { +public: + virtual ~HeapTracked() { } + static void isObjectAllocation(const HeapTracked *ptr); + static void isObjectAllocation(HeapTracked *ptr); +}; + +void HeapTracked::isObjectAllocation(HeapTracked *ptr) +{ + dynamic_cast<const void*>(ptr); + dynamic_cast<void*>(ptr); +} +void HeapTracked::isObjectAllocation(const HeapTracked *ptr) +{ + const_cast<void*>(dynamic_cast<const void*>(ptr)); + dynamic_cast<void*>(ptr); // ERROR - +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p755.C b/gcc/testsuite/g++.old-deja/g++.mike/p755.C new file mode 100644 index 000000000000..e01fc64e8ce6 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p755.C @@ -0,0 +1,17 @@ +// It checks to see if you can define your own global new operator. +// prms-id: 755 + +typedef __SIZE_TYPE__ size_t; +extern "C" void exit(int); + +void* operator new(size_t sz) { + void* p = 0; + exit(0); + return p; +} + +main () { + int* i = new int; + delete i; + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p755a.C b/gcc/testsuite/g++.old-deja/g++.mike/p755a.C new file mode 100644 index 000000000000..9f496c1e337d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p755a.C @@ -0,0 +1,14 @@ +// It checks to see if you can define your own global delete operator. +// prms-id: 755 + +extern "C" void exit(int); + +void operator delete(void *p) throw() { + exit(0); +} + +main () { + int* i = new int; + delete i; + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p7626.C b/gcc/testsuite/g++.old-deja/g++.mike/p7626.C new file mode 100644 index 000000000000..61636d61fdb6 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p7626.C @@ -0,0 +1,43 @@ +// Build don't link: +// prms-id: 7626 + +int fail; + +typedef unsigned int UINT; + +class CObject{}; + +class CCmdTarget : public CObject { +}; + +typedef void (CCmdTarget::*AFX_PMSG)(void); + +struct AFX_MSGMAP_ENTRY { + AFX_PMSG pfn; +}; + +class CWnd : public CCmdTarget { +public: + void OnMyMsg() { fail = 1; } // If this one is called, something is wrong. + static AFX_MSGMAP_ENTRY _messageEntries[]; +}; + +typedef void (CWnd::*AFX_PMSGW)(void); + +class CDialog : public CWnd +{ +public: + void OnMyMsg() { } + static AFX_MSGMAP_ENTRY _messageEntries[]; +}; + +AFX_MSGMAP_ENTRY CDialog ::_messageEntries[] = { + { (AFX_PMSG)(AFX_PMSGW)(void (CWnd::*)())&CDialog::OnMyMsg }, + { (AFX_PMSG)0 } +}; + +main() { + CDialog d; + (d.*((CDialog::_messageEntries)[0]).pfn)(); // This should call CDialog::OnMyMsg + return fail; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p7635.C b/gcc/testsuite/g++.old-deja/g++.mike/p7635.C new file mode 100644 index 000000000000..4cafa0e46fa4 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p7635.C @@ -0,0 +1,6 @@ +// prms-id: 7635 + +class DaycountBasis { + mutable const int * p; + mutable int * const q; // ERROR - +}; diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p7651.C b/gcc/testsuite/g++.old-deja/g++.mike/p7651.C new file mode 100644 index 000000000000..a295a8971af3 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p7651.C @@ -0,0 +1,25 @@ +// prms-id: 7651 + +int fail = 0; + +class Foo { +public: + Foo(double i) : data(i) { if (data != 1.0) fail = 1; } + ~Foo() { if (data != 1.0) fail = 1; } +private: + volatile double data; +}; + +int DingDong(double A) { + volatile Foo a(A); + + if ( A != 0.0 ) { + return 1; + } + return 0; +} + + +main() { + DingDong(1.0); +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p783.C b/gcc/testsuite/g++.old-deja/g++.mike/p783.C new file mode 100644 index 000000000000..ce22a7c14b51 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p783.C @@ -0,0 +1,15 @@ +// prms-id: 783 + +extern "C" void printf (char *, ...); + +class C { +public: + C() { } + ~C() { } +}; + +main(int argc, char**argv) { + C c,d; + c = (argc&1) ? C() : d; + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p783a.C b/gcc/testsuite/g++.old-deja/g++.mike/p783a.C new file mode 100644 index 000000000000..1883fc7ded2b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p783a.C @@ -0,0 +1,26 @@ +// Copying into an object directly is a lose according to tiemann. +// Deleting an object many times is a lose. +// prms-id: 783 + +extern "C" void printf (char *, ...); +extern "C" void exit (int); + +class C { + int i; +public: + C() { + i = 1; + } + ~C() { + if (i != 1) { + exit(1); + } + i = 0; + } +}; + +main(int argc, char**argv) { + C c; + c = C(); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p783b.C b/gcc/testsuite/g++.old-deja/g++.mike/p783b.C new file mode 100644 index 000000000000..f4170bc21cc0 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p783b.C @@ -0,0 +1,37 @@ +// This one check for objects being destroyed twice. The bug it is +// looking for is the extra dtor call on C() even though it is never +// built. +// prms-id: 783 + +extern "C" void printf (char *, ...); +extern "C" void exit (int); + +class C { + int i; +public: +// C() {printf ("C ctor at %x\n", this);} +// ~C() {printf ("C dtor at %x\n", this);} + C() { + i = 1; + } + ~C() { + if (i != 1) { + exit(1); + } + i = 0; + } +}; + +C g; + +C func() { + return g; +} + +main(int argc, char**argv) { + C c,d; +// printf ("\n"); + c = (argc != 1) ? C() : d; +// printf ("\n"); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p784.C b/gcc/testsuite/g++.old-deja/g++.mike/p784.C new file mode 100644 index 000000000000..a8f05306c9d6 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p784.C @@ -0,0 +1,3702 @@ +// Build don't link: +// Special g++ Options: -w +// prms-id: 784 + +//# 1 "GctSymbol.GctSymbol.CHMap.cc" +// This may look like C code, but it is really -*- C++ -*- +/* +Copyright (C) 1988 Free Software Foundation + written by Doug Lea (dl@rocky.oswego.edu) + +This file is part of the GNU C++ Library. This library is free +software; you can redistribute it and/or modify it under the terms of +the GNU Library General Public License as published by the Free +Software Foundation; either version 2 of the License, or (at your +option) any later version. This library is distributed in the hope +that it will be useful, but WITHOUT ANY WARRANTY; without even the +implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. See the GNU Library General Public License for more details. +You should have received a copy of the GNU Library General Public +License along with this library; if not, write to the Free Software +Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + + +//#pragma implementation + +//# 1 "GctSymbol.GctSymbol.CHMap.h" 1 +// This may look like C code, but it is really -*- C++ -*- +/* +Copyright (C) 1988 Free Software Foundation + written by Doug Lea (dl@rocky.oswego.edu) + +This file is part of the GNU C++ Library. This library is free +software; you can redistribute it and/or modify it under the terms of +the GNU Library General Public License as published by the Free +Software Foundation; either version 2 of the License, or (at your +option) any later version. This library is distributed in the hope +that it will be useful, but WITHOUT ANY WARRANTY; without even the +implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. See the GNU Library General Public License for more details. +You should have received a copy of the GNU Library General Public +License along with this library; if not, write to the Free Software +Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + + + + +//#pragma interface + + + +//# 1 "GctSymbol.GctSymbol.Map.h" 1 +// This may look like C code, but it is really -*- C++ -*- +/* +Copyright (C) 1988 Free Software Foundation + written by Doug Lea (dl@rocky.oswego.edu) + +This file is part of the GNU C++ Library. This library is free +software; you can redistribute it and/or modify it under the terms of +the GNU Library General Public License as published by the Free +Software Foundation; either version 2 of the License, or (at your +option) any later version. This library is distributed in the hope +that it will be useful, but WITHOUT ANY WARRANTY; without even the +implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. See the GNU Library General Public License for more details. +You should have received a copy of the GNU Library General Public +License along with this library; if not, write to the Free Software +Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + + + + +//#pragma interface + + + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/Pix.h" 1 + + + +typedef void* Pix; + +//# 26 "GctSymbol.GctSymbol.Map.h" 2 + +//# 1 "GctSymbol.defs.h" 1 +// This may look like C code, but it is really -*- C++ -*- +/* +Copyright (C) 1988 Free Software Foundation + written by Doug Lea (dl@rocky.oswego.edu) + +This file is part of the GNU C++ Library. This library is free +software; you can redistribute it and/or modify it under the terms of +the GNU Library General Public License as published by the Free +Software Foundation; either version 2 of the License, or (at your +option) any later version. This library is distributed in the hope +that it will be useful, but WITHOUT ANY WARRANTY; without even the +implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. See the GNU Library General Public License for more details. +You should have received a copy of the GNU Library General Public +License along with this library; if not, write to the Free Software +Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + + + + + + + +//# 1 "../../GctSymbol.h" 1 +// -*- C++ -*- + + + +// +// GctSymbol class +// +// Expects to be included by Gct.h +// +// Wendell Baker, Berkeley CAD Group, 1992 (wbaker@ic.Berkeley.EDU) +// + + + + + +//#pragma interface + + +// $Source: /cvs/cvsfiles/devo/gcc/testsuite/g++.old-deja/g++.mike/p784.C,v $ +// $Author: jason $ +// $Revision: 1.6 $ +// $Date: 1994/05/16 09:13:02 $ + +#include <bool.h> + +//# 25 "../../GctSymbol.h" 2 + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/String.h" 1 +// This may look like C code, but it is really -*- C++ -*- +/* +Copyright (C) 1988 Free Software Foundation + written by Doug Lea (dl@rocky.oswego.edu) + +This file is part of the GNU C++ Library. This library is free +software; you can redistribute it and/or modify it under the terms of +the GNU Library General Public License as published by the Free +Software Foundation; either version 2 of the License, or (at your +option) any later version. This library is distributed in the hope +that it will be useful, but WITHOUT ANY WARRANTY; without even the +implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. See the GNU Library General Public License for more details. +You should have received a copy of the GNU Library General Public +License along with this library; if not, write to the Free Software +Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + + + + +//#pragma interface + + + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stream.h" 1 + + + +// Compatibility with old library. + + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" 1 +// This is part of the iostream library, providing -*- C++ -*- input/output. +// Copyright (C) 1991 Per Bothner. +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Library General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Library General Public License for more details. +// +// You should have received a copy of the GNU Library General Public +// License along with this library; if not, write to the Free +// Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + + +//#pragma interface + + + + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/streambuf.h" 1 +// This is part of the iostream library, providing -*- C++ -*- input/output. +// Copyright (C) 1991 Per Bothner. +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Library General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Library General Public License for more details. +// +// You should have received a copy of the GNU Library General Public +// License along with this library; if not, write to the Free +// Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + + + +//#pragma interface + + +/* KLUDGES!! */ +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stddef.h" 1 + + +extern "C" { + + + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/mips/lib/gcc/decstatn/cygnus-1.96/include/stddef.h" 1 + + + + + + +/* This avoids lossage on Sunos but only if stdtypes.h comes first. + There's no way to win with the other order! Sun lossage. */ + +/* In case nobody has defined these types, but we aren't running under + GCC 2.00, make sure that __PTRDIFF_TYPE__, __SIZE__TYPE__, and + __WCHAR_TYPE__ have reasonable values. This can happen if the + parts of GCC is compiled by an older compiler, that actually + include gstddef.h, such as collect2. */ + +/* Signed type of difference of two pointers. */ + + + + + + + + + + + + + + +typedef long int ptrdiff_t; + + + + + + +/* Unsigned type of `sizeof' something. */ + + + + + + + + + + + + + + +typedef unsigned int size_t; + + + + + + +/* Data type for wide chars. */ + + + + + + + + + + + + + + +typedef int wchar_t; + + + + + + + + +/* A null pointer constant. */ + + + + +/* Offset of member MEMBER in a struct of type TYPE. */ + + + + + +//# 7 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stddef.h" 2 + + + + +} + +//# 25 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/streambuf.h" 2 + + + + + + + + + + + + + + + + +class ostream; class streambuf; + +typedef long streamoff, streampos; + +struct _ios_fields { // The data members of an ios. + streambuf *_strbuf; + ostream* _tie; + long _width; + unsigned long _flags; + char _fill; + unsigned char _state; + unsigned short _precision; +}; + + +enum state_value { _good = 0, _eof = 1, _fail = 2, _bad = 4 }; + + +class ios : public _ios_fields { + public: + enum io_state { goodbit=0, eofbit=1, failbit=2, badbit=4 }; + enum open_mode { + in=1, + out=2, + ate=4, + app=8, + trunc=16, + nocreate=32, + noreplace=64 }; + enum seek_dir { beg, cur, end}; + enum { skipws=01, left=02, right=04, internal=010, + dec=020, oct=040, hex=0100, + showbase=0200, showpoint=0400, uppercase=01000, showpos=02000, + scientific=04000, fixed=0100000, unitbuf=020000, stdio=040000, + dont_close=0x80000000 //Don't close streambuf when destroying stream + }; + + ostream* tie() { return _tie; } + ostream* tie(ostream* val) { ostream* save=_tie; _tie=val; return save; } + + // Methods to change the format state. + char fill() { return _fill; } + char fill(char newf) { char oldf = _fill; _fill = newf; return oldf; } + unsigned long flags() { return _flags; } + unsigned long flags(unsigned long new_val) { + unsigned long old_val = _flags; _flags = new_val; return old_val; } + unsigned short precision() { return _precision; } + unsigned short precision(int newp) { + unsigned short oldp = _precision; _precision = (unsigned short)newp; + return oldp; } + unsigned long setf(unsigned long val) { + unsigned long oldbits = _flags; + _flags |= val; return oldbits; } + unsigned long setf(unsigned long val, unsigned long mask) { + unsigned long oldbits = _flags; + _flags = (_flags & ~mask) | (val & mask); return oldbits; } + unsigned long unsetf(unsigned long mask) { + unsigned long oldbits = _flags & mask; + _flags &= ~mask; return oldbits; } + long width() { return _width; } + long width(long val) { long save = _width; _width = val; return save; } + + static const unsigned long basefield; + static const unsigned long adjustfield; + static const unsigned long floatfield; + + streambuf* rdbuf() { return _strbuf; } + void clear(int state = 0) { _state = state; } + int good() { return _state == 0; } + int eof() { return _state & ios::eofbit; } + int fail() { return _state & (ios::badbit|ios::failbit); } + int bad() { return _state & ios::badbit; } + int rdstate() { return _state; } + void set(int flag) { _state |= flag; } + operator void*() { return fail() ? (void*)0 : (void*)this; } + int operator!() { return fail(); } + + + void unset(state_value flag) { _state &= ~flag; } + void close(); + int is_open(); + int readable(); + int writable(); + + + protected: + ios(streambuf*sb) { _strbuf=sb; _state=0; _width=0; _fill=' '; + _flags=ios::skipws; _precision=6; } +}; + + + + +typedef ios::seek_dir _seek_dir; + + +// Magic numbers and bits for the _flags field. +// The magic numbers use the high-order bits of _flags; +// the remaining bits are abailable for variable flags. +// Note: The magic numbers must all be negative if stdio +// emulation is desired. + + + + + + + + + + + + + + + +struct __streambuf { + // NOTE: If this is changed, also change __FILE in stdio/stdio.h! + int _flags; /* High-order word is _IO_MAGIC; rest is flags. */ + char* _gptr; /* Current get pointer */ + char* _egptr; /* End of get area. */ + char* _eback; /* Start of putback+get area. */ + char* _pbase; /* Start of put area. */ + char* _pptr; /* Current put pointer. */ + char* _epptr; /* End of put area. */ + char* _base; /* Start of reserve area. */ + char* _ebuf; /* End of reserve area. */ + struct streambuf *_chain; +}; + +struct streambuf : private __streambuf { + friend class ios; + friend class istream; + friend class ostream; + protected: + static streambuf* _list_all; /* List of open streambufs. */ + streambuf*& xchain() { return _chain; } + void _un_link(); + void _link_in(); + char* gptr() const { return _gptr; } + char* pptr() const { return _pptr; } + char* egptr() const { return _egptr; } + char* epptr() const { return _epptr; } + char* pbase() const { return _pbase; } + char* eback() const { return _eback; } + char* ebuf() const { return _ebuf; } + char* base() const { return _base; } + void xput_char(char c) { *_pptr++ = c; } + int xflags() { return _flags; } + int xflags(int f) { int fl = _flags; _flags = f; return fl; } + void xsetflags(int f) { _flags |= f; } + void gbump(int n) { _gptr += n; } + void pbump(int n) { _pptr += n; } + void setb(char* b, char* eb, int a=0); + void setp(char* p, char* ep) { _pbase=_pptr=p; _epptr=ep; } + void setg(char* eb, char* g, char *eg) { _eback=eb; _gptr=g; _egptr=eg; } + public: + static int flush_all(); + static void flush_all_linebuffered(); // Flush all line buffered files. + virtual int underflow(); // Leave public for now + virtual int overflow(int c = (-1) ); // Leave public for now + virtual int doallocate(); + virtual streampos seekoff(streamoff, _seek_dir, int mode=ios::in|ios::out); + virtual streampos seekpos(streampos pos, int mode = ios::in|ios::out); + int sputbackc(char c); + int sungetc(); + streambuf(); + virtual ~streambuf(); + int unbuffered() { return _flags & 2 ? 1 : 0; } + int linebuffered() { return _flags & 0x4000 ? 1 : 0; } + void unbuffered(int i) + { if (i) _flags |= 2 ; else _flags &= ~2 ; } + void linebuffered(int i) + { if (i) _flags |= 0x4000 ; else _flags &= ~0x4000 ; } + int allocate() { + if (base() || unbuffered()) return 0; + else return doallocate(); } + virtual int sync(); + virtual int pbackfail(int c); + virtual int ungetfail(); + virtual streambuf* setbuf(char* p, int len); + int in_avail() { return _egptr - _gptr; } + int out_waiting() { return _pptr - _pbase; } + virtual int sputn(const char* s, int n); + virtual int sgetn(char* s, int n); + long sgetline(char* buf, size_t n, char delim, int putback_delim); + int sbumpc() { + if (_gptr >= _egptr && underflow() == (-1) ) return (-1) ; + else return *(unsigned char*)_gptr++; } + int sgetc() { + if (_gptr >= _egptr && underflow() == (-1) ) return (-1) ; + else return *(unsigned char*)_gptr; } + int snextc() { + if (++_gptr >= _egptr && underflow() == (-1) ) return (-1) ; + else return *(unsigned char*)_gptr; } + int sputc(int c) { + if (_pptr >= _epptr) return overflow(c); + return *_pptr++ = c, (unsigned char)c; } + int vscan(char const *fmt0, char* ap); + int vform(char const *fmt0, char* ap); +}; + +struct __file_fields { + char _fake; + char _shortbuf[1]; + short _fileno; + int _blksize; + char* _save_gptr; + char* _save_egptr; + long _offset; +}; + +class filebuf : public streambuf { + struct __file_fields _fb; + void init(); + public: + filebuf(); + filebuf(int fd); + filebuf(int fd, char* p, int len); + ~filebuf(); + filebuf* attach(int fd); + filebuf* open(const char *filename, const char *mode); + filebuf* open(const char *filename, int mode, int prot = 0664); + virtual int underflow(); + virtual int overflow(int c = (-1) ); + int is_open() { return _fb._fileno >= 0; } + int fd() { return is_open() ? _fb._fileno : (-1) ; } + filebuf* close(); + virtual int doallocate(); + virtual streampos seekoff(streamoff, _seek_dir, int mode=ios::in|ios::out); + int sputn(const char* s, int n); + int sgetn(char* s, int n); + protected: // See documentation in filebuf.C. + virtual int pbackfail(int c); + virtual int sync(); + int is_reading() { return eback() != egptr(); } + char* cur_ptr() { return is_reading() ? gptr() : pptr(); } + /* System's idea of pointer */ + char* file_ptr() { return _fb._save_gptr ? _fb._save_egptr : egptr(); } + int do_flush(); + // Low-level operations (Usually invoke system calls.) + virtual int sys_read(char* buf, size_t size); + virtual long sys_seek(long , _seek_dir); + virtual long sys_write(const void*, long); + virtual int sys_stat(void*); // Actually, a (struct stat*) + virtual int sys_close(); +}; + + +inline int ios::readable() { return rdbuf()->_flags & 4 ; } +inline int ios::writable() { return rdbuf()->_flags & 8 ; } +inline int ios::is_open() {return rdbuf()->_flags & 4 +8 ;} + + + + +//# 25 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" 2 + + +class istream; class ostream; +typedef istream& (*__imanip)(istream&); +typedef ostream& (*__omanip)(ostream&); + +extern istream& ws(istream& ins); +extern ostream& flush(ostream& outs); +extern ostream& endl(ostream& outs); +extern ostream& ends(ostream& outs); + +class ostream : public ios +{ + void do_osfx(); + public: + ostream(); + ostream(streambuf* sb, ostream* tied=((void *)0) ); + ~ostream(); + + int opfx() { if (!good()) return 0; if (_tie) _tie->flush(); return 1; } + void osfx() { if (flags() & (ios::unitbuf|ios::stdio)) + do_osfx(); } + streambuf* ostreambuf() const { return _strbuf; } + ostream& flush(); + ostream& put(char c); + ostream& write(const char *s, int n); + ostream& write(const unsigned char *s, int n) { return write((char*)s, n);} + ostream& write(const void *s, int n) { return write((char*)s, n);} + ostream& seekp(streampos); + ostream& seekp(streamoff, _seek_dir); + streampos tellp(); + ostream& form(const char *format ...); + ostream& vform(const char *format, char* args); +}; + +ostream& operator<<(ostream&, char c); +ostream& operator<<(ostream& os, unsigned char c) { return os << (char)c; } +//ostream& operator<<(ostream &os, signed char c) { return os << (char)c; } +extern ostream& operator<<(ostream&, const char *s); +inline ostream& operator<<(ostream& os, const unsigned char *s) +{ return os << (const char*)s; } +//inline ostream& operator<<(ostream& os, const signed char *s) +//{ return os << (const char*)s; } +ostream& operator<<(ostream&, void *p); +ostream& operator<<(ostream&, int n); +ostream& operator<<(ostream&, long n); +ostream& operator<<(ostream&, unsigned int n); +ostream& operator<<(ostream&, unsigned long n); +ostream& operator<<(ostream& os, short n) {return os << (int)n;} +ostream& operator<<(ostream& os, unsigned short n) +{return os << (unsigned int)n;} +ostream& operator<<(ostream&, float n); +ostream& operator<<(ostream&, double n); +ostream& operator<<(ostream& os, __omanip func) { return (*func)(os); } +ostream& operator<<(ostream&, streambuf*); + +class istream : public ios +{ + size_t _gcount; + public: + istream(); + istream(streambuf* sb, ostream*tied=((void *)0) ); + ~istream(); + streambuf* istreambuf() const { return _strbuf; } + istream& get(char& c); + istream& get(unsigned char& c); + istream& read(char *ptr, int n); + istream& read(unsigned char *ptr, int n) { return read((char*)ptr, n); } + istream& read(void *ptr, int n) { return read((char*)ptr, n); } + int get() { return _strbuf->sbumpc(); } + istream& getline(char* ptr, int len, char delim = '\n'); + istream& get(char* ptr, int len, char delim = '\n'); + istream& gets(char **s, char delim = '\n'); + int ipfx(int need) { + if (!good()) { set(ios::failbit); return 0; } + if (_tie && (need == 0 || rdbuf()->in_avail())) ; //??? THIS LINE IS QUESTIONABLE */ + if (!need && (flags() & ios::skipws) && !ws(*this)) return 0; + return 1; + } + int ipfx0() { // Optimized version of ipfx(0). + if (!good()) { set(ios::failbit); return 0; } + if (_tie) _tie->flush(); + if ((flags() & ios::skipws) && !ws(*this)) return 0; + return 1; + } + int ipfx1() { // Optimized version of ipfx(1). + if (!good()) { set(ios::failbit); return 0; } + if (_tie && rdbuf()->in_avail() == 0) _tie->flush(); + return 1; + } + size_t gcount() { return _gcount; } + istream& seekg(streampos); + istream& seekg(streamoff, _seek_dir); + streampos tellg(); + istream& putback(char ch) { + if (good() && _strbuf->sputbackc(ch) == (-1) ) clear(ios::badbit); + return *this;} + istream& unget() { + if (good() && _strbuf->sungetc() == (-1) ) clear(ios::badbit); + return *this;} + + istream& unget(char ch) { return putback(ch); } + int skip(int i); + +}; + +istream& operator>>(istream&, char*); +istream& operator>>(istream& is, unsigned char* p) { return is >> (char*)p; } +//istream& operator>>(istream& is, signed char* p) { return is >> (char*)p; } +istream& operator>>(istream&, char& c); +istream& operator>>(istream&, unsigned char& c); +//istream& operator>>(istream&, signed char& c); +istream& operator>>(istream&, int&); +istream& operator>>(istream&, long&); +istream& operator>>(istream&, short&); +istream& operator>>(istream&, unsigned int&); +istream& operator>>(istream&, unsigned long&); +istream& operator>>(istream&, unsigned short&); +istream& operator>>(istream&, float&); +istream& operator>>(istream&, double&); +istream& operator>>(istream& is, __imanip func) { return (*func)(is); } + +class iostream : public ios { + size_t _gcount; + public: + iostream(); + operator istream&() { return *(istream*)this; } + operator ostream&() { return *(ostream*)this; } + ~iostream(); + // NOTE: These duplicate istream methods. + istream& get(char& c) { return ((istream*)this)->get(c); } + istream& get(unsigned char& c) { return ((istream*)this)->get(c); } + istream& read(char *ptr, int n) { return ((istream*)this)->read(ptr, n); } + istream& read(unsigned char *ptr, int n) + { return ((istream*)this)->read((char*)ptr, n); } + istream& read(void *ptr, int n) + { return ((istream*)this)->read((char*)ptr, n); } + int get() { return _strbuf->sbumpc(); } + istream& getline(char* ptr, int len, char delim = '\n') + { return ((istream*)this)->getline(ptr, len, delim); } + istream& get(char* ptr, int len, char delim = '\n') + { return ((istream*)this)->get(ptr, len, delim); } + istream& gets(char **s, char delim = '\n') + { return ((istream*)this)->gets(s, delim); } + int ipfx(int need) { return ((istream*)this)->ipfx(need); } + int ipfx0() { return ((istream*)this)->ipfx0(); } + int ipfx1() { return ((istream*)this)->ipfx1(); } + size_t gcount() { return _gcount; } + istream& putback(char ch) { return ((istream*)this)->putback(ch); } + istream& unget() { return ((istream*)this)->unget(); } + istream& seekg(streampos pos) { return ((istream*)this)->seekg(pos); } + istream& seekg(streamoff off, _seek_dir dir) + { return ((istream*)this)->seekg(off, dir); } + streampos tellg() { return ((istream*)this)->tellg(); } + + istream& unget(char ch) { return putback(ch); } + + + // NOTE: These duplicate ostream methods. + int opfx() { return ((ostream*)this)->opfx(); } + void osfx() { ((ostream*)this)->osfx(); } + ostream& flush() { return ((ostream*)this)->flush(); } + ostream& put(char c) { return ((ostream*)this)->put(c); } + ostream& write(const char *s, int n) + { return ((ostream*)this)->write(s, n); } + ostream& write(const unsigned char *s, int n) + { return ((ostream*)this)->write((char*)s, n); } + ostream& write(const void *s, int n) + { return ((ostream*)this)->write((char*)s, n); } + ostream& form(const char *format ...); + ostream& vform(const char *format, char* args) + { return ((ostream*)this)->vform(format, args); } + ostream& seekp(streampos pos) { return ((ostream*)this)->seekp(pos); } + ostream& seekp(streamoff off, _seek_dir dir) + { return ((ostream*)this)->seekp(off, dir); } + streampos tellp() { return ((ostream*)this)->tellp(); } +}; + +extern istream cin; +extern ostream cout, cerr, clog; // clog->rdbuf() == cerr->rdbuf() + +inline ostream& ostream::put(char c) { _strbuf->sputc(c); return *this; } + +struct Iostream_init { } ; // Compatibility hack for AT&T libraray. + + +//# 7 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stream.h" 2 + + +extern char* form(char*, ...); + +extern char* dec(long, int=0); +extern char* dec(int, int=0); +extern char* dec(unsigned long, int=0); +extern char* dec(unsigned int, int=0); + +extern char* hex(long, int=0); +extern char* hex(int, int=0); +extern char* hex(unsigned long, int=0); +extern char* hex(unsigned int, int=0); + +extern char* oct(long, int=0); +extern char* oct(int, int=0); +extern char* oct(unsigned long, int=0); +extern char* oct(unsigned int, int=0); + +inline istream& WS(istream& str) { return ws(str); } + + +//# 26 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/String.h" 2 + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/Regex.h" 1 +// This may look like C code, but it is really -*- C++ -*- +/* +Copyright (C) 1988 Free Software Foundation + written by Doug Lea (dl@rocky.oswego.edu) + +This file is part of the GNU C++ Library. This library is free +software; you can redistribute it and/or modify it under the terms of +the GNU Library General Public License as published by the Free +Software Foundation; either version 2 of the License, or (at your +option) any later version. This library is distributed in the hope +that it will be useful, but WITHOUT ANY WARRANTY; without even the +implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. See the GNU Library General Public License for more details. +You should have received a copy of the GNU Library General Public +License along with this library; if not, write to the Free Software +Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + + + + +//#pragma interface + + + + + + + + + +struct re_pattern_buffer; // defined elsewhere +struct re_registers; + +class Regex +{ +private: + + Regex(const Regex&) {} // no X(X&) + void operator = (const Regex&) {} // no assignment + +protected: + re_pattern_buffer* buf; + re_registers* reg; + +public: + Regex(const char* t, + int fast = 0, + int bufsize = 40, + const char* transtable = 0); + + ~Regex(); + + int match(const char* s, int len, int pos = 0) const; + int search(const char* s, int len, + int& matchlen, int startpos = 0) const; + int match_info(int& start, int& length, int nth = 0) const; + + int OK() const; // representation invariant +}; + +// some built in regular expressions + +extern const Regex RXwhite; // = "[ \n\t\r\v\f]+" +extern const Regex RXint; // = "-?[0-9]+" +extern const Regex RXdouble; // = "-?\\(\\([0-9]+\\.[0-9]*\\)\\| + // \\([0-9]+\\)\\|\\(\\.[0-9]+\\)\\) + // \\([eE][---+]?[0-9]+\\)?" +extern const Regex RXalpha; // = "[A-Za-z]+" +extern const Regex RXlowercase; // = "[a-z]+" +extern const Regex RXuppercase; // = "[A-Z]+" +extern const Regex RXalphanum; // = "[0-9A-Za-z]+" +extern const Regex RXidentifier; // = "[A-Za-z_][A-Za-z0-9_]*" + + + +//# 27 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/String.h" 2 + + +struct StrRep // internal String representations +{ + unsigned short len; // string length + unsigned short sz; // allocated space + char s[1]; // the string starts here + // (at least 1 char for trailing null) + // allocated & expanded via non-public fcts +}; + +// primitive ops on StrReps -- nearly all String fns go through these. + +StrRep* Salloc(StrRep*, const char*, int, int); +StrRep* Scopy(StrRep*, StrRep*); +StrRep* Sresize(StrRep*, int); +StrRep* Scat(StrRep*, const char*, int, const char*, int); +StrRep* Scat(StrRep*, const char*, int,const char*,int, const char*,int); +StrRep* Sprepend(StrRep*, const char*, int); +StrRep* Sreverse(StrRep*, StrRep*); +StrRep* Supcase(StrRep*, StrRep*); +StrRep* Sdowncase(StrRep*, StrRep*); +StrRep* Scapitalize(StrRep*, StrRep*); + +// These classes need to be defined in the order given + +class String; +class SubString; + +class SubString +{ + friend class String; +protected: + + String& S; // The String I'm a substring of + unsigned short pos; // starting position in S's rep + unsigned short len; // length of substring + + void assign(StrRep*, const char*, int = -1); + SubString(String& x, int p, int l); + SubString(const SubString& x); + +public: + +// Note there are no public constructors. SubStrings are always +// created via String operations + + ~SubString(); + + void operator = (const String& y); + void operator = (const SubString& y); + void operator = (const char* t); + void operator = (char c); + +// return 1 if target appears anywhere in SubString; else 0 + + int contains(char c) const; + int contains(const String& y) const; + int contains(const SubString& y) const; + int contains(const char* t) const; + int contains(const Regex& r) const; + +// return 1 if target matches entire SubString + + int matches(const Regex& r) const; + +// IO + + friend ostream& operator<<(ostream& s, const SubString& x); + +// status + + unsigned int length() const; + int empty() const; + const char* chars() const; + + int OK() const; + +}; + + +class String +{ + friend class SubString; + +protected: + StrRep* rep; // Strings are pointers to their representations + +// some helper functions + + int search(int, int, const char*, int = -1) const; + int search(int, int, char) const; + int match(int, int, int, const char*, int = -1) const; + int _gsub(const char*, int, const char* ,int); + int _gsub(const Regex&, const char*, int); + SubString _substr(int, int); + +public: + +// constructors & assignment + + String(); + String(const String& x); + String(const SubString& x); + String(const char* t); + String(const char* t, int len); + String(char c); + + ~String(); + + void operator = (const String& y); + void operator = (const char* y); + void operator = (char c); + void operator = (const SubString& y); + +// concatenation + + void operator += (const String& y); + void operator += (const SubString& y); + void operator += (const char* t); + void operator += (char c); + + void prepend(const String& y); + void prepend(const SubString& y); + void prepend(const char* t); + void prepend(char c); + + +// procedural versions: +// concatenate first 2 args, store result in last arg + + friend void cat(const String&, const String&, String&); + friend void cat(const String&, const SubString&, String&); + friend void cat(const String&, const char*, String&); + friend void cat(const String&, char, String&); + + friend void cat(const SubString&, const String&, String&); + friend void cat(const SubString&, const SubString&, String&); + friend void cat(const SubString&, const char*, String&); + friend void cat(const SubString&, char, String&); + + friend void cat(const char*, const String&, String&); + friend void cat(const char*, const SubString&, String&); + friend void cat(const char*, const char*, String&); + friend void cat(const char*, char, String&); + +// double concatenation, by request. (yes, there are too many versions, +// but if one is supported, then the others should be too...) +// Concatenate first 3 args, store in last arg + + friend void cat(const String&,const String&, const String&,String&); + friend void cat(const String&,const String&,const SubString&,String&); + friend void cat(const String&,const String&, const char*, String&); + friend void cat(const String&,const String&, char, String&); + friend void cat(const String&,const SubString&,const String&,String&); + friend void cat(const String&,const SubString&,const SubString&,String&); + friend void cat(const String&,const SubString&, const char*, String&); + friend void cat(const String&,const SubString&, char, String&); + friend void cat(const String&,const char*, const String&, String&); + friend void cat(const String&,const char*, const SubString&, String&); + friend void cat(const String&,const char*, const char*, String&); + friend void cat(const String&,const char*, char, String&); + + friend void cat(const char*, const String&, const String&,String&); + friend void cat(const char*,const String&,const SubString&,String&); + friend void cat(const char*,const String&, const char*, String&); + friend void cat(const char*,const String&, char, String&); + friend void cat(const char*,const SubString&,const String&,String&); + friend void cat(const char*,const SubString&,const SubString&,String&); + friend void cat(const char*,const SubString&, const char*, String&); + friend void cat(const char*,const SubString&, char, String&); + friend void cat(const char*,const char*, const String&, String&); + friend void cat(const char*,const char*, const SubString&, String&); + friend void cat(const char*,const char*, const char*, String&); + friend void cat(const char*,const char*, char, String&); + + +// searching & matching + +// return position of target in string or -1 for failure + + int index(char c, int startpos = 0) const; + int index(const String& y, int startpos = 0) const; + int index(const SubString& y, int startpos = 0) const; + int index(const char* t, int startpos = 0) const; + int index(const Regex& r, int startpos = 0) const; + +// return 1 if target appears anyhere in String; else 0 + + int contains(char c) const; + int contains(const String& y) const; + int contains(const SubString& y) const; + int contains(const char* t) const; + int contains(const Regex& r) const; + +// return 1 if target appears anywhere after position pos +// (or before, if pos is negative) in String; else 0 + + int contains(char c, int pos) const; + int contains(const String& y, int pos) const; + int contains(const SubString& y, int pos) const; + int contains(const char* t, int pos) const; + int contains(const Regex& r, int pos) const; + +// return 1 if target appears at position pos in String; else 0 + + int matches(char c, int pos = 0) const; + int matches(const String& y, int pos = 0) const; + int matches(const SubString& y, int pos = 0) const; + int matches(const char* t, int pos = 0) const; + int matches(const Regex& r, int pos = 0) const; + +// return number of occurences of target in String + + int freq(char c) const; + int freq(const String& y) const; + int freq(const SubString& y) const; + int freq(const char* t) const; + +// SubString extraction + +// Note that you can't take a substring of a const String, since +// this leaves open the possiblility of indirectly modifying the +// String through the SubString + + SubString at(int pos, int len); + SubString operator () (int pos, int len); // synonym for at + + SubString at(const String& x, int startpos = 0); + SubString at(const SubString& x, int startpos = 0); + SubString at(const char* t, int startpos = 0); + SubString at(char c, int startpos = 0); + SubString at(const Regex& r, int startpos = 0); + + SubString before(int pos); + SubString before(const String& x, int startpos = 0); + SubString before(const SubString& x, int startpos = 0); + SubString before(const char* t, int startpos = 0); + SubString before(char c, int startpos = 0); + SubString before(const Regex& r, int startpos = 0); + + SubString through(int pos); + SubString through(const String& x, int startpos = 0); + SubString through(const SubString& x, int startpos = 0); + SubString through(const char* t, int startpos = 0); + SubString through(char c, int startpos = 0); + SubString through(const Regex& r, int startpos = 0); + + SubString from(int pos); + SubString from(const String& x, int startpos = 0); + SubString from(const SubString& x, int startpos = 0); + SubString from(const char* t, int startpos = 0); + SubString from(char c, int startpos = 0); + SubString from(const Regex& r, int startpos = 0); + + SubString after(int pos); + SubString after(const String& x, int startpos = 0); + SubString after(const SubString& x, int startpos = 0); + SubString after(const char* t, int startpos = 0); + SubString after(char c, int startpos = 0); + SubString after(const Regex& r, int startpos = 0); + + +// deletion + +// delete len chars starting at pos + void del(int pos, int len); + +// delete the first occurrence of target after startpos + + void del(const String& y, int startpos = 0); + void del(const SubString& y, int startpos = 0); + void del(const char* t, int startpos = 0); + void del(char c, int startpos = 0); + void del(const Regex& r, int startpos = 0); + +// global substitution: substitute all occurrences of pat with repl + + int gsub(const String& pat, const String& repl); + int gsub(const SubString& pat, const String& repl); + int gsub(const char* pat, const String& repl); + int gsub(const char* pat, const char* repl); + int gsub(const Regex& pat, const String& repl); + +// friends & utilities + +// split string into array res at separators; return number of elements + + friend int split(const String& x, String res[], int maxn, + const String& sep); + friend int split(const String& x, String res[], int maxn, + const Regex& sep); + + friend String common_prefix(const String& x, const String& y, + int startpos = 0); + friend String common_suffix(const String& x, const String& y, + int startpos = -1); + friend String replicate(char c, int n); + friend String replicate(const String& y, int n); + friend String join(String src[], int n, const String& sep); + +// simple builtin transformations + + friend String reverse(const String& x); + friend String upcase(const String& x); + friend String downcase(const String& x); + friend String capitalize(const String& x); + +// in-place versions of above + + void reverse(); + void upcase(); + void downcase(); + void capitalize(); + +// element extraction + + char& operator [] (int i); + char elem(int i) const; + char firstchar() const; + char lastchar() const; + +// conversion + + operator const char*() const; + const char* chars() const; + + +// IO + + friend ostream& operator<<(ostream& s, const String& x); + friend ostream& operator<<(ostream& s, const SubString& x); + friend istream& operator>>(istream& s, String& x); + + friend int readline(istream& s, String& x, + char terminator = '\n', + int discard_terminator = 1); + +// status + + unsigned int length() const; + int empty() const; + +// preallocate some space for String + void alloc(int newsize); + +// report current allocation (not length!) + + int allocation() const; + + + volatile void error(const char* msg) const; + + int OK() const; +}; + +typedef String StrTmp; // for backward compatibility + +// other externs + +int compare(const String& x, const String& y); +int compare(const String& x, const SubString& y); +int compare(const String& x, const char* y); +int compare(const SubString& x, const String& y); +int compare(const SubString& x, const SubString& y); +int compare(const SubString& x, const char* y); +int fcompare(const String& x, const String& y); // ignore case + +extern StrRep _nilStrRep; +extern String _nilString; + +// other inlines + +String operator + (const String& x, const String& y); +String operator + (const String& x, const SubString& y); +String operator + (const String& x, const char* y); +String operator + (const String& x, char y); +String operator + (const SubString& x, const String& y); +String operator + (const SubString& x, const SubString& y); +String operator + (const SubString& x, const char* y); +String operator + (const SubString& x, char y); +String operator + (const char* x, const String& y); +String operator + (const char* x, const SubString& y); + +int operator==(const String& x, const String& y); +int operator!=(const String& x, const String& y); +int operator> (const String& x, const String& y); +int operator>=(const String& x, const String& y); +int operator< (const String& x, const String& y); +int operator<=(const String& x, const String& y); +int operator==(const String& x, const SubString& y); +int operator!=(const String& x, const SubString& y); +int operator> (const String& x, const SubString& y); +int operator>=(const String& x, const SubString& y); +int operator< (const String& x, const SubString& y); +int operator<=(const String& x, const SubString& y); +int operator==(const String& x, const char* t); +int operator!=(const String& x, const char* t); +int operator> (const String& x, const char* t); +int operator>=(const String& x, const char* t); +int operator< (const String& x, const char* t); +int operator<=(const String& x, const char* t); +int operator==(const SubString& x, const String& y); +int operator!=(const SubString& x, const String& y); +int operator> (const SubString& x, const String& y); +int operator>=(const SubString& x, const String& y); +int operator< (const SubString& x, const String& y); +int operator<=(const SubString& x, const String& y); +int operator==(const SubString& x, const SubString& y); +int operator!=(const SubString& x, const SubString& y); +int operator> (const SubString& x, const SubString& y); +int operator>=(const SubString& x, const SubString& y); +int operator< (const SubString& x, const SubString& y); +int operator<=(const SubString& x, const SubString& y); +int operator==(const SubString& x, const char* t); +int operator!=(const SubString& x, const char* t); +int operator> (const SubString& x, const char* t); +int operator>=(const SubString& x, const char* t); +int operator< (const SubString& x, const char* t); +int operator<=(const SubString& x, const char* t); + + + + +// status reports, needed before defining other things + +inline unsigned int String::length() const { return rep->len; } +inline int String::empty() const { return rep->len == 0; } +inline const char* String::chars() const { return &(rep->s[0]); } +inline int String::allocation() const { return rep->sz; } +inline void String::alloc(int newsize) { rep = Sresize(rep, newsize); } + +inline unsigned int SubString::length() const { return len; } +inline int SubString::empty() const { return len == 0; } +inline const char* SubString::chars() const { return &(S.rep->s[pos]); } + + +// constructors + +inline String::String() + : rep(&_nilStrRep) {} +inline String::String(const String& x) + : rep(Scopy(0, x.rep)) {} +inline String::String(const char* t) + : rep(Salloc(0, t, -1, -1)) {} +inline String::String(const char* t, int tlen) + : rep(Salloc(0, t, tlen, tlen)) {} +inline String::String(const SubString& y) + : rep(Salloc(0, y.chars(), y.length(), y.length())) {} +inline String::String(char c) + : rep(Salloc(0, &c, 1, 1)) {} + +inline String::~String() { if (rep != &_nilStrRep) delete rep; } + +inline SubString::SubString(const SubString& x) + :S(x.S), pos(x.pos), len(x.len) {} +inline SubString::SubString(String& x, int first, int l) + :S(x), pos(first), len(l) {} + +inline SubString::~SubString() {} + +// assignment + +inline void String::operator = (const String& y) +{ + rep = Scopy(rep, y.rep); +} + +inline void String::operator=(const char* t) +{ + rep = Salloc(rep, t, -1, -1); +} + +inline void String::operator=(const SubString& y) +{ + rep = Salloc(rep, y.chars(), y.length(), y.length()); +} + +inline void String::operator=(char c) +{ + rep = Salloc(rep, &c, 1, 1); +} + + +inline void SubString::operator = (const char* ys) +{ + assign(0, ys); +} + +inline void SubString::operator = (char ch) +{ + assign(0, &ch, 1); +} + +inline void SubString::operator = (const String& y) +{ + assign(y.rep, y.chars(), y.length()); +} + +inline void SubString::operator = (const SubString& y) +{ + assign(y.S.rep, y.chars(), y.length()); +} + +// Zillions of cats... + +inline void cat(const String& x, const String& y, String& r) +{ + r.rep = Scat(r.rep, x.chars(), x.length(), y.chars(), y.length()); +} + +inline void cat(const String& x, const SubString& y, String& r) +{ + r.rep = Scat(r.rep, x.chars(), x.length(), y.chars(), y.length()); +} + +inline void cat(const String& x, const char* y, String& r) +{ + r.rep = Scat(r.rep, x.chars(), x.length(), y, -1); +} + +inline void cat(const String& x, char y, String& r) +{ + r.rep = Scat(r.rep, x.chars(), x.length(), &y, 1); +} + +inline void cat(const SubString& x, const String& y, String& r) +{ + r.rep = Scat(r.rep, x.chars(), x.length(), y.chars(), y.length()); +} + +inline void cat(const SubString& x, const SubString& y, String& r) +{ + r.rep = Scat(r.rep, x.chars(), x.length(), y.chars(), y.length()); +} + +inline void cat(const SubString& x, const char* y, String& r) +{ + r.rep = Scat(r.rep, x.chars(), x.length(), y, -1); +} + +inline void cat(const SubString& x, char y, String& r) +{ + r.rep = Scat(r.rep, x.chars(), x.length(), &y, 1); +} + +inline void cat(const char* x, const String& y, String& r) +{ + r.rep = Scat(r.rep, x, -1, y.chars(), y.length()); +} + +inline void cat(const char* x, const SubString& y, String& r) +{ + r.rep = Scat(r.rep, x, -1, y.chars(), y.length()); +} + +inline void cat(const char* x, const char* y, String& r) +{ + r.rep = Scat(r.rep, x, -1, y, -1); +} + +inline void cat(const char* x, char y, String& r) +{ + r.rep = Scat(r.rep, x, -1, &y, 1); +} + +inline void cat(const String& a, const String& x, const String& y, String& r) +{ + r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), y.chars(), y.length()); +} + +inline void cat(const String& a, const String& x, const SubString& y, String& r) +{ + r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), y.chars(), y.length()); +} + +inline void cat(const String& a, const String& x, const char* y, String& r) +{ + r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), y, -1); +} + +inline void cat(const String& a, const String& x, char y, String& r) +{ + r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), &y, 1); +} + +inline void cat(const String& a, const SubString& x, const String& y, String& r) +{ + r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), y.chars(), y.length()); +} + +inline void cat(const String& a, const SubString& x, const SubString& y, String& r) +{ + r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), y.chars(), y.length()); +} + +inline void cat(const String& a, const SubString& x, const char* y, String& r) +{ + r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), y, -1); +} + +inline void cat(const String& a, const SubString& x, char y, String& r) +{ + r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), &y, 1); +} + +inline void cat(const String& a, const char* x, const String& y, String& r) +{ + r.rep = Scat(r.rep, a.chars(), a.length(), x, -1, y.chars(), y.length()); +} + +inline void cat(const String& a, const char* x, const SubString& y, String& r) +{ + r.rep = Scat(r.rep, a.chars(), a.length(), x, -1, y.chars(), y.length()); +} + +inline void cat(const String& a, const char* x, const char* y, String& r) +{ + r.rep = Scat(r.rep, a.chars(), a.length(), x, -1, y, -1); +} + +inline void cat(const String& a, const char* x, char y, String& r) +{ + r.rep = Scat(r.rep, a.chars(), a.length(), x, -1, &y, 1); +} + + +inline void cat(const char* a, const String& x, const String& y, String& r) +{ + r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), y.chars(), y.length()); +} + +inline void cat(const char* a, const String& x, const SubString& y, String& r) +{ + r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), y.chars(), y.length()); +} + +inline void cat(const char* a, const String& x, const char* y, String& r) +{ + r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), y, -1); +} + +inline void cat(const char* a, const String& x, char y, String& r) +{ + r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), &y, 1); +} + +inline void cat(const char* a, const SubString& x, const String& y, String& r) +{ + r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), y.chars(), y.length()); +} + +inline void cat(const char* a, const SubString& x, const SubString& y, String& r) +{ + r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), y.chars(), y.length()); +} + +inline void cat(const char* a, const SubString& x, const char* y, String& r) +{ + r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), y, -1); +} + +inline void cat(const char* a, const SubString& x, char y, String& r) +{ + r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), &y, 1); +} + +inline void cat(const char* a, const char* x, const String& y, String& r) +{ + r.rep = Scat(r.rep, a, -1, x, -1, y.chars(), y.length()); +} + +inline void cat(const char* a, const char* x, const SubString& y, String& r) +{ + r.rep = Scat(r.rep, a, -1, x, -1, y.chars(), y.length()); +} + +inline void cat(const char* a, const char* x, const char* y, String& r) +{ + r.rep = Scat(r.rep, a, -1, x, -1, y, -1); +} + +inline void cat(const char* a, const char* x, char y, String& r) +{ + r.rep = Scat(r.rep, a, -1, x, -1, &y, 1); +} + + +// operator versions + +inline void String::operator +=(const String& y) +{ + cat(*this, y, *this); +} + +inline void String::operator +=(const SubString& y) +{ + cat(*this, y, *this); +} + +inline void String::operator += (const char* y) +{ + cat(*this, y, *this); +} + +inline void String:: operator +=(char y) +{ + cat(*this, y, *this); +} + +// constructive concatenation + + + +inline String operator + (const String& x, const String& y) return r; +{ + cat(x, y, r); +} + +inline String operator + (const String& x, const SubString& y) return r; +{ + cat(x, y, r); +} + +inline String operator + (const String& x, const char* y) return r; +{ + cat(x, y, r); +} + +inline String operator + (const String& x, char y) return r; +{ + cat(x, y, r); +} + +inline String operator + (const SubString& x, const String& y) return r; +{ + cat(x, y, r); +} + +inline String operator + (const SubString& x, const SubString& y) return r; +{ + cat(x, y, r); +} + +inline String operator + (const SubString& x, const char* y) return r; +{ + cat(x, y, r); +} + +inline String operator + (const SubString& x, char y) return r; +{ + cat(x, y, r); +} + +inline String operator + (const char* x, const String& y) return r; +{ + cat(x, y, r); +} + +inline String operator + (const char* x, const SubString& y) return r; +{ + cat(x, y, r); +} + +inline String reverse(const String& x) return r; +{ + r.rep = Sreverse(x.rep, r.rep); +} + +inline String upcase(const String& x) return r; +{ + r.rep = Supcase(x.rep, r.rep); +} + +inline String downcase(const String& x) return r; +{ + r.rep = Sdowncase(x.rep, r.rep); +} + +inline String capitalize(const String& x) return r; +{ + r.rep = Scapitalize(x.rep, r.rep); +} + +//# 883 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/String.h" + + +// prepend + +inline void String::prepend(const String& y) +{ + rep = Sprepend(rep, y.chars(), y.length()); +} + +inline void String::prepend(const char* y) +{ + rep = Sprepend(rep, y, -1); +} + +inline void String::prepend(char y) +{ + rep = Sprepend(rep, &y, 1); +} + +inline void String::prepend(const SubString& y) +{ + rep = Sprepend(rep, y.chars(), y.length()); +} + +// misc transformations + + +inline void String::reverse() +{ + rep = Sreverse(rep, rep); +} + + +inline void String::upcase() +{ + rep = Supcase(rep, rep); +} + + +inline void String::downcase() +{ + rep = Sdowncase(rep, rep); +} + + +inline void String::capitalize() +{ + rep = Scapitalize(rep, rep); +} + +// element extraction + +inline char& String::operator [] (int i) +{ + if (((unsigned)i) >= length()) error("invalid index"); + return rep->s[i]; +} + +inline char String::elem (int i) const +{ + if (((unsigned)i) >= length()) error("invalid index"); + return rep->s[i]; +} + +inline char String::firstchar() const +{ + return elem(0); +} + +inline char String::lastchar() const +{ + return elem(length() - 1); +} + +// searching + +inline int String::index(char c, int startpos) const +{ + return search(startpos, length(), c); +} + +inline int String::index(const char* t, int startpos) const +{ + return search(startpos, length(), t); +} + +inline int String::index(const String& y, int startpos) const +{ + return search(startpos, length(), y.chars(), y.length()); +} + +inline int String::index(const SubString& y, int startpos) const +{ + return search(startpos, length(), y.chars(), y.length()); +} + +inline int String::index(const Regex& r, int startpos) const +{ + int unused; return r.search(chars(), length(), unused, startpos); +} + +inline int String::contains(char c) const +{ + return search(0, length(), c) >= 0; +} + +inline int String::contains(const char* t) const +{ + return search(0, length(), t) >= 0; +} + +inline int String::contains(const String& y) const +{ + return search(0, length(), y.chars(), y.length()) >= 0; +} + +inline int String::contains(const SubString& y) const +{ + return search(0, length(), y.chars(), y.length()) >= 0; +} + +inline int String::contains(char c, int p) const +{ + return match(p, length(), 0, &c, 1) >= 0; +} + +inline int String::contains(const char* t, int p) const +{ + return match(p, length(), 0, t) >= 0; +} + +inline int String::contains(const String& y, int p) const +{ + return match(p, length(), 0, y.chars(), y.length()) >= 0; +} + +inline int String::contains(const SubString& y, int p) const +{ + return match(p, length(), 0, y.chars(), y.length()) >= 0; +} + +inline int String::contains(const Regex& r) const +{ + int unused; return r.search(chars(), length(), unused, 0) >= 0; +} + +inline int String::contains(const Regex& r, int p) const +{ + return r.match(chars(), length(), p) >= 0; +} + + +inline int String::matches(const SubString& y, int p) const +{ + return match(p, length(), 1, y.chars(), y.length()) >= 0; +} + +inline int String::matches(const String& y, int p) const +{ + return match(p, length(), 1, y.chars(), y.length()) >= 0; +} + +inline int String::matches(const char* t, int p) const +{ + return match(p, length(), 1, t) >= 0; +} + +inline int String::matches(char c, int p) const +{ + return match(p, length(), 1, &c, 1) >= 0; +} + +inline int String::matches(const Regex& r, int p) const +{ + int l = (p < 0)? -p : length() - p; + return r.match(chars(), length(), p) == l; +} + + +inline int SubString::contains(const char* t) const +{ + return S.search(pos, pos+len, t) >= 0; +} + +inline int SubString::contains(const String& y) const +{ + return S.search(pos, pos+len, y.chars(), y.length()) >= 0; +} + +inline int SubString::contains(const SubString& y) const +{ + return S.search(pos, pos+len, y.chars(), y.length()) >= 0; +} + +inline int SubString::contains(char c) const +{ + return S.search(pos, pos+len, 0, c) >= 0; +} + +inline int SubString::contains(const Regex& r) const +{ + int unused; return r.search(chars(), len, unused, 0) >= 0; +} + +inline int SubString::matches(const Regex& r) const +{ + return r.match(chars(), len, 0) == len; +} + + +inline int String::gsub(const String& pat, const String& r) +{ + return _gsub(pat.chars(), pat.length(), r.chars(), r.length()); +} + +inline int String::gsub(const SubString& pat, const String& r) +{ + return _gsub(pat.chars(), pat.length(), r.chars(), r.length()); +} + +inline int String::gsub(const Regex& pat, const String& r) +{ + return _gsub(pat, r.chars(), r.length()); +} + +inline int String::gsub(const char* pat, const String& r) +{ + return _gsub(pat, -1, r.chars(), r.length()); +} + +inline int String::gsub(const char* pat, const char* r) +{ + return _gsub(pat, -1, r, -1); +} + + + +inline ostream& operator<<(ostream& s, const String& x) +{ + s << x.chars(); return s; +} + +// a zillion comparison operators + +inline int operator==(const String& x, const String& y) +{ + return compare(x, y) == 0; +} + +inline int operator!=(const String& x, const String& y) +{ + return compare(x, y) != 0; +} + +inline int operator>(const String& x, const String& y) +{ + return compare(x, y) > 0; +} + +inline int operator>=(const String& x, const String& y) +{ + return compare(x, y) >= 0; +} + +inline int operator<(const String& x, const String& y) +{ + return compare(x, y) < 0; +} + +inline int operator<=(const String& x, const String& y) +{ + return compare(x, y) <= 0; +} + +inline int operator==(const String& x, const SubString& y) +{ + return compare(x, y) == 0; +} + +inline int operator!=(const String& x, const SubString& y) +{ + return compare(x, y) != 0; +} + +inline int operator>(const String& x, const SubString& y) +{ + return compare(x, y) > 0; +} + +inline int operator>=(const String& x, const SubString& y) +{ + return compare(x, y) >= 0; +} + +inline int operator<(const String& x, const SubString& y) +{ + return compare(x, y) < 0; +} + +inline int operator<=(const String& x, const SubString& y) +{ + return compare(x, y) <= 0; +} + +inline int operator==(const String& x, const char* t) +{ + return compare(x, t) == 0; +} + +inline int operator!=(const String& x, const char* t) +{ + return compare(x, t) != 0; +} + +inline int operator>(const String& x, const char* t) +{ + return compare(x, t) > 0; +} + +inline int operator>=(const String& x, const char* t) +{ + return compare(x, t) >= 0; +} + +inline int operator<(const String& x, const char* t) +{ + return compare(x, t) < 0; +} + +inline int operator<=(const String& x, const char* t) +{ + return compare(x, t) <= 0; +} + +inline int operator==(const SubString& x, const String& y) +{ + return compare(y, x) == 0; +} + +inline int operator!=(const SubString& x, const String& y) +{ + return compare(y, x) != 0; +} + +inline int operator>(const SubString& x, const String& y) +{ + return compare(y, x) < 0; +} + +inline int operator>=(const SubString& x, const String& y) +{ + return compare(y, x) <= 0; +} + +inline int operator<(const SubString& x, const String& y) +{ + return compare(y, x) > 0; +} + +inline int operator<=(const SubString& x, const String& y) +{ + return compare(y, x) >= 0; +} + +inline int operator==(const SubString& x, const SubString& y) +{ + return compare(x, y) == 0; +} + +inline int operator!=(const SubString& x, const SubString& y) +{ + return compare(x, y) != 0; +} + +inline int operator>(const SubString& x, const SubString& y) +{ + return compare(x, y) > 0; +} + +inline int operator>=(const SubString& x, const SubString& y) +{ + return compare(x, y) >= 0; +} + +inline int operator<(const SubString& x, const SubString& y) +{ + return compare(x, y) < 0; +} + +inline int operator<=(const SubString& x, const SubString& y) +{ + return compare(x, y) <= 0; +} + +inline int operator==(const SubString& x, const char* t) +{ + return compare(x, t) == 0; +} + +inline int operator!=(const SubString& x, const char* t) +{ + return compare(x, t) != 0; +} + +inline int operator>(const SubString& x, const char* t) +{ + return compare(x, t) > 0; +} + +inline int operator>=(const SubString& x, const char* t) +{ + return compare(x, t) >= 0; +} + +inline int operator<(const SubString& x, const char* t) +{ + return compare(x, t) < 0; +} + +inline int operator<=(const SubString& x, const char* t) +{ + return compare(x, t) <= 0; +} + + +// a helper needed by at, before, etc. + +inline SubString String::_substr(int first, int l) +{ + if (first >= length() ) // ??? THIS LINE IS QUESTIONABLE + return SubString(_nilString, 0, 0) ; + else + return SubString(*this, first, l); +} + + + + + +//# 26 "../../GctSymbol.h" 2 + + +//# 1 "../../../../../../mips/include/Gct/Object/GctHashObject.h" 1 +// -*- C++ -*- + + + +// +// GctHashObject class (is abstract) +// +// Expects to be included by Object.h or where needed explicitly. +// +// Wendell Baker, Berkeley CAD Group, 1992 (wbaker@ic.Berkeley.EDU) +// + + + + + +//#pragma interface + + +// $Source: /cvs/cvsfiles/devo/gcc/testsuite/g++.old-deja/g++.mike/p784.C,v $ +// $Author: jason $ +// $Revision: 1.6 $ +// $Date: 1994/05/16 09:13:02 $ + +//# 1 "../../../../../../mips/include/Gct/Object/GctObject.h" 1 +// -*- C++ -*- + + + +// +// GctObject class (is abstract) +// +// Expects to be included by Object.h or where needed explicitly. +// +// Wendell Baker, Berkeley CAD Group, 1992 (wbaker@ic.Berkeley.EDU) +// + + + + + +//#pragma interface + + +// $Source: /cvs/cvsfiles/devo/gcc/testsuite/g++.old-deja/g++.mike/p784.C,v $ +// $Author: jason $ +// $Revision: 1.6 $ +// $Date: 1994/05/16 09:13:02 $ + +//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/tostrstream.h" 1 +// -*- C++ -*- + + + +// +// tostrstream class +// +// A terminated oststream - an ostsrstream that auto-terminates on str() +// +// Wendell Baker, Berkeley CAD Group, 1992 (wbaker@ic.Berkeley.EDU) +// + + + + + +//#pragma interface + + +// $Source: /cvs/cvsfiles/devo/gcc/testsuite/g++.old-deja/g++.mike/p784.C,v $ +// $Author: jason $ +// $Revision: 1.6 $ +// $Date: 1994/05/16 09:13:02 $ + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/strstream.h" 1 +// This is part of the iostream library, providing input/output for C++. +// Copyright (C) 1991 Per Bothner. +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Library General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Library General Public License for more details. +// +// You should have received a copy of the GNU Library General Public +// License along with this library; if not, write to the Free +// Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + + + +//#pragma interface + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" 1 +// This is part of the iostream library, providing -*- C++ -*- input/output. +// Copyright (C) 1991 Per Bothner. +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Library General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Library General Public License for more details. +// +// You should have received a copy of the GNU Library General Public +// License along with this library; if not, write to the Free +// Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +//# 210 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" + +//# 23 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/strstream.h" 2 + + +class strstreambuf : public streambuf { + size_t *lenp; /* current (logical) length (i.e. valid data bytes) */ + size_t *sizep; /* allocated (physical) buffer size */ + char **bufp; + size_t _len; + size_t _size; + char *buf; + int _frozen; + protected: + virtual int overflow(int = (-1) ); + public: + strstreambuf(); + strstreambuf(int initial); + strstreambuf(char *ptr, int size, char *pstart = ((void *)0) ); + ~strstreambuf(); + int frozen() { return _frozen; } + void freeze(int n=1) { _frozen = n != 0; } + size_t pcount(); + char *str(); +}; + +class istrstream : public istream { + public: + istrstream(char*); + istrstream(char*, int); + strstreambuf* rdbuf() { return (strstreambuf*)_strbuf; } +}; + +class ostrstream : public ostream { + public: + ostrstream(); + ostrstream(char *cp, int n, int mode=ios::out); + size_t pcount() { return ((strstreambuf*)_strbuf)->pcount(); } + char *str() { return ((strstreambuf*)_strbuf)->str(); } + void freeze(int n = 1) { ((strstreambuf*)_strbuf)->freeze(n); } + int frozen() { return ((strstreambuf*)_strbuf)->frozen(); } + strstreambuf* rdbuf() { return (strstreambuf*)_strbuf; } +}; + + +//# 25 "/sandbox/wbaker/wbaker0/source/mips/include/tostrstream.h" 2 + + +// +// tostrstream class +// +// An isteam class that doesn't have that nasty skipws parameter that +// you have to remember to set. This class simply provides the istream +// functionality with a set of constructors which defaults skipws to +// FALSE (instead of defaulting to TRUE as is the case with plain istream). +// +class tostrstream: public ostrstream { +public: + tostrstream(): ostrstream() + { } + // This constructor defines cp as the buffer to use for the + // stream (instead of one of its own devising); it does NOT + // initialize the ostrstream to contain cp (of length n). + tostrstream(char *cp, int n, int mode=ios::out): ostrtream(cp, n, mode) // ERROR - + { } + char *str() + { + char *s = ostrstream::str(); + s[ostrstream::pcount()] = '\0'; + return s; + } +}; + + +//# 25 "../../../../../../mips/include/Gct/Object/GctObject.h" 2 + + +//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttObject.h" 1 +// -*- C++ -*- + + + +// +// GttObject class (is abstract) +// +// Expects to be included where needed explicitly. +// +// Wendell Baker, Berkeley CAD Group, 1992 (wbaker@ic.Berkeley.EDU) +// + + + + + +//#pragma interface + + +// $Source: /cvs/cvsfiles/devo/gcc/testsuite/g++.old-deja/g++.mike/p784.C,v $ +// $Author: jason $ +// $Revision: 1.6 $ +// $Date: 1994/05/16 09:13:02 $ + +//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/tostrstream.h" 1 +// -*- C++ -*- +//# 52 "/sandbox/wbaker/wbaker0/source/mips/include/tostrstream.h" + +//# 25 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttObject.h" 2 + + +//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttErrorHandler.h" 1 +// -*- C++ -*- + + + +// +// GttErrorHandler class +// +// Expects to be included by Gtt.h +// +// Wendell Baker, Berkeley CAD Group, 1992 (wbaker@ic.Berkeley.EDU) +// + + + + + +//#pragma interface + + +// $Source: /cvs/cvsfiles/devo/gcc/testsuite/g++.old-deja/g++.mike/p784.C,v $ +// $Author: jason $ +// $Revision: 1.6 $ +// $Date: 1994/05/16 09:13:02 $ + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/bool.h" 1 + + + + + + + +//# 25 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttErrorHandler.h" 2 + + +//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/stuff++.h" 1 +// -*- C++ -*- + + + +// +// Fake up a libstuff++ +// +// This is done as a complete and utter hack; this library has no function +// at all being in the boot area; it is here solely in order to provide a +// libstuff++ against which the Makefiles can resolve link lines. +// +// The only reason that this is done is to allow the STANDARD_C++_LIBRARIES +// as provided by the Makefile templates in the boot area to be the same +// ones that are used by the tools outside this hierarchy. +// +// The tools outside this hierarchy use a different libstuff++; one that is +// written in C++. This one is not written in C++ in order to be simpler. +// + + + + + +//#pragma interface + + +// $Source: /cvs/cvsfiles/devo/gcc/testsuite/g++.old-deja/g++.mike/p784.C,v $ +// $Author: jason $ +// $Revision: 1.6 $ +// $Date: 1994/05/16 09:13:02 $ + +extern "C" { +//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/stuff.h" 1 + + + +/* + * Useful stuff + */ + +/* + * $Source: /cvs/cvsfiles/devo/gcc/testsuite/g++.old-deja/g++.mike/p784.C,v $ + * $Revision: 1.6 $ + * $Author: jason $ + * $Date: 1994/05/16 09:13:02 $ + */ + +//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/ansi.h" 1 + + + + +/* + * ANSI Compiler Support + * + * David Harrison + * University of California, Berkeley + * 1988 + * + * ANSI compatible compilers are supposed to define the preprocessor + * directive __STDC__. Based on this directive, this file defines + * certain ANSI specific macros. + * + * ARGS: + * Used in function prototypes. Example: + * extern int foo + * ARGS((char *blah, double threshold)); + */ + +/* + * $Source: /cvs/cvsfiles/devo/gcc/testsuite/g++.old-deja/g++.mike/p784.C,v $ + * $Author: jason $ + * $Revision: 1.6 $ + * $Date: 1994/05/16 09:13:02 $ + * + * Modifications + * Wendell C Baker + * University of California, Berkeley + */ + +/* Function prototypes */ + + + + + + + + + + + + + + + + + + + + + + + + + + + +//# 15 "/sandbox/wbaker/wbaker0/source/mips/include/stuff.h" 2 + + + +/* + * If g++, then we stub out part of this thing and let the C++ types take + * over and do the same job; some compatibility must be given however + */ + +/* + * Use the GNU libg++ definition + */ +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/bool.h" 1 + + + + + + + +//# 26 "/sandbox/wbaker/wbaker0/source/mips/include/stuff.h" 2 + +//# 35 "/sandbox/wbaker/wbaker0/source/mips/include/stuff.h" + + +/* + * Make various pieces of C code that use the old ``Boolean'' + * be compatible by faking up the definition of Boolean using + * the new bool type. + */ + + +//# 58 "/sandbox/wbaker/wbaker0/source/mips/include/stuff.h" + + +typedef long FitAny; /* can fit any integral type */ + +/* + * typedef char *String; - DO NOT USE THIS - it conflicts with C++ + * typedef char **Stringv; - just use char* and char** instead. + * - void* can be used for arbitrary pointers + */ + + + + +extern int nocase_strcmp (char *, char *) ; +extern int nocase_strncmp (char *, char *, int) ; + +extern bool nocase_strequal (char *, char *) ; +extern bool nocase_strnequal (char *, char *, int) ; + +extern bool lead_strequal (char *, char *) ; +extern bool nocase_lead_strequal (char *, char *) ; + +extern int strhash (char *, int) ; +extern int nocase_strhash (char *, int) ; + +extern int sign (int) ; + +/* + * Some useful macros. + */ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +//# 33 "/sandbox/wbaker/wbaker0/source/mips/include/stuff++.h" 2 + +} + +// +// This is here because we wish to provide externs for the two +// functions btoa(bool, unsigned = 0) and operator<<(ostream&, bool) +// because they are not provided in bool.h. +// +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/bool.h" 1 + + + + + + + +//# 41 "/sandbox/wbaker/wbaker0/source/mips/include/stuff++.h" 2 + +extern const char *stringify(bool b); +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" 1 +// This is part of the iostream library, providing -*- C++ -*- input/output. +// Copyright (C) 1991 Per Bothner. +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Library General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Library General Public License for more details. +// +// You should have received a copy of the GNU Library General Public +// License along with this library; if not, write to the Free +// Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +//# 210 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" + +//# 43 "/sandbox/wbaker/wbaker0/source/mips/include/stuff++.h" 2 + +extern ostream& operator<<(ostream&, bool); + +// Should this be kept separate? bool isn't, but then is +// included here only to define ostream& operator<<(ostream&, bool) +//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/unit.h" 1 +// -*- C++ -*- + + + +// +// unit enum +// +// Wendell Baker, Berkeley CAD Group, 1991 (wbaker@ic.Berkeley.EDU) +// + +// $Source: /cvs/cvsfiles/devo/gcc/testsuite/g++.old-deja/g++.mike/p784.C,v $ +// $Author: jason $ +// $Revision: 1.6 $ +// $Date: 1994/05/16 09:13:02 $ + +// +// unit enum +// +// This _looks_ silly, but it has an important theoretical basis in category +// theory. For the pragmatic reason for its existence, see the example below. +// +enum unit { + UNIT = 1, +}; + +extern const char *stringify(unit u); + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" 1 +// This is part of the iostream library, providing -*- C++ -*- input/output. +// Copyright (C) 1991 Per Bothner. +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Library General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Library General Public License for more details. +// +// You should have received a copy of the GNU Library General Public +// License along with this library; if not, write to the Free +// Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +//# 210 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" + +//# 28 "/sandbox/wbaker/wbaker0/source/mips/include/unit.h" 2 + +extern ostream& operator<<(ostream&, unit); + +// +// A unit is used in cases where the type signature of an overloaded +// function must be differentiated in some stronger way than can be +// denoted unambiguously in the C++ syntax. This enum is used to give +// one of the functions a different type signature, thereby allowing +// the overloading. +// +// The use of ``unit'' instead of int or bool is important because a unit +// has only one possible value; therefore it adds no more information to +// the code. For example, say a bool was used instead, then in the testing +// phase, would have to ask: what if TRUE was given, what if FALSE was given. +// The problem is compounded if char or int is used. +// +// Example: +// +// class ID { +// public: +// ID(); // construct a null ID +// ID(unit); // alloc a ID with a new id +// private: +// static unsigned high_water; +// unsigned id; +// }; +// +// Try working this example save that ID implements all of the generic +// features of the identifier object, but the high_water is stored +// in the heir. That is what originally motivated the creation of unit. +// + + +//# 48 "/sandbox/wbaker/wbaker0/source/mips/include/stuff++.h" 2 + + +// +// In the spirit of the standard GNU error handler functions +// as described in +// typedef void (*one_arg_error_handler_t)(const char*); +// a one argument error handler function pointer +// typedef void (*two_arg_error_handler_t)(const char*, const char*); +// a two argument error handler function pointer +// +// And now the NEW +// +// typedef void (*zero_arg_error_handler_t)(); +// a zero argument error handler function pointer +// +typedef void (*zero_arg_error_handler_t)(); + +// +// In the spirit of the default GNU error handler functions +// as described in +// extern void default_one_arg_error_handler(const char *message); +// print out message on stderr, and do the default thing (abort) +// extern void default_two_arg_error_handler(const char *kind, const char *message); +// print out kind and message on stderr, and do the default thing (abort) +// +// And now the NEW +// +// extern void default_zero_arg_error_handler(const char *message); +// do the default thing (abort) +// +extern void default_zero_arg_error_handler(); + +// Guaranteed to exit (1) +extern void exit_zero_arg_error_handler(); +extern void exit_one_arg_error_handler(const char *message); +extern void exit_two_arg_error_handler(const char *kind, const char *message); + +// Guaranteed to abort() +extern void abort_zero_arg_error_handler(); +extern void abort_one_arg_error_handler(const char *message); +extern void abort_two_arg_error_handler(const char *kind, const char *message); + +// +// In the spirit of the standard GNU error handlers +// as described in +// extern void verbose_File_error_handler(const char*); +// perror and set errno = 0 +// extern void quiet_File_error_handler(const char*); +// set errno = 0 +// extern void fatal_File_error_handler(const char*); +// perror and exit 1 +// +// And now the NEW +// +// extern void preserve_File_error_handler(const char *message); +// no perror, no assignment to errno. +// +extern void preserve_File_error_handler(const char *message); + + +//# 27 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttErrorHandler.h" 2 + +//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/tostrstream.h" 1 +// -*- C++ -*- +//# 52 "/sandbox/wbaker/wbaker0/source/mips/include/tostrstream.h" + +//# 28 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttErrorHandler.h" 2 + + +// +// It is expected that this will be virtually multiply inherited +// into all of the classes that need error reporting services. +// +// The typical way to have that done is by inheriting the GttObject +// as a virtual base class. +// + +// +// GttErrorHandler class +// +class GttErrorHandler { +public: + GttErrorHandler(); + GttErrorHandler(const char *program); + virtual ~GttErrorHandler(); + + // + // Error messages + // - an unacceptable, but expected and recoverable condition + // was was detected (but the test fails) + // - errors are for ``the expected environment was not found'' + // rather than for ``file couldn't be opened'' + // - these messages cannot be shut off + // - the error handler determines the recovery action + // TODO - one day exceptions will be used here + // + static void error(const char *message); + static void error(tostrstream& message); + + static void error(const char *function, const char *message); + static void error(const char *function, tostrstream& message); + + static void error(const char *class_name, const char *method, const char *message); + static void error(const char *class_name, const char *method, tostrstream& message); + + // + // Fatal messages + // - an unacceptable and unexpected error was detected + // the data invariants were violated, there is no recovery + // - these messages cannot be shut off + // - the error handler determines the recovery action + // TODO - one day exceptions will be used here + // + static void fatal(const char *message); + static void fatal(tostrstream& message); + + static void fatal(const char *function, const char *message); + static void fatal(const char *function, tostrstream& message); + + static void fatal(const char *class_name, const char *method, const char *message); + static void fatal(const char *class_name, const char *method, tostrstream& message); +private: + // + // Two underscores are used here in order to prevent confusion of these + // private variables with any of the heir's private variables. Note that + // access control is different than visibility in C++, so all the variable + // names in a class hierarchy must be unique. + // + + static bool __partial_init; + static void __partial_initialize(); + static bool __full_init; + static void __full_initialize(const char *program); + static char *__program; + + static void __handle_error(); + static void __handle_fatal(); + static void __add_newline(const char *message); + + static bool __output_valid(); + static ostream *__output; +}; + + +//# 27 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttObject.h" 2 + + +// +// GttObject class (is abstract) +// +class GttObject: virtual public GttErrorHandler { +protected: + GttObject(); + GttObject(const GttObject&); + virtual ~GttObject(); // ensure descendants have virtual destructors + +public: + // + // I/O Support + // + // The value typically persists only long enough for an i/o operation + // to be performed (see the defintion of output via operator<<(... ) below) + virtual const char *stringify(); +protected: + // This is the buffer into which the printed representation of this + // object will be put when the time comes. It is associated with the + // object so it will never go away (so long as the object exists). + // Use a pointer so that you only pay for the space when I/O is used + tostrstream *stringbuf; + void clear_stringbuf(); + +public: + // + // Consistency + // + // The global data invariant for the whole object (heirs included). + // This OK function will call the local invariant function ok() if + // necessary and in addition the OK functions of the heirs + // This is expected to compute the data invariant of the object. + // It will execute GctErrorHandler::fatal if there is wrong. + virtual void OK() const; + +protected: + // + // consistency + // + // This function computes the invariant which is local to this object. + // It does not call any of the ancestor's OK() or ok() functions. + // It is not a virtual function so that it can be called from within a + // constructor with impunity. Thus this function MUST NOT call any + // virtual functions either; it should call them by their full name if + // that is necessary. The global OK() function will call this function + // as necessary. + // + // This function must NOT NEVER EVER be made virtual. + void ok() const; + +protected: + // + // Class Name + // + // This must return a static (constant) string which is the name + // of the class being declared. By convention, not all classes + // must have one of these, but the major root abstract class must + // have one in order to allow the stringify() to work approximately + // correctly. + virtual const char *class_name() const = 0; +}; + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" 1 +// This is part of the iostream library, providing -*- C++ -*- input/output. +// Copyright (C) 1991 Per Bothner. +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Library General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Library General Public License for more details. +// +// You should have received a copy of the GNU Library General Public +// License along with this library; if not, write to the Free +// Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +//# 210 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" + +//# 91 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttObject.h" 2 + +extern ostream& operator<<(ostream&, GttObject&); + +// There may be other X& operator<<(X&, GttObject&) defined in the +// packages defining class X. For example see the definition of +// GttUnitObject& operator<<(GttUnitObject&, GttObject&) in Unit. + + +//# 27 "../../../../../../mips/include/Gct/Object/GctObject.h" 2 + + +//# 1 "../../../../../../mips/include/Gct/GctErrorHandler.h" 1 +// -*- C++ -*- + + + +// +// GctErrorHandler class +// +// Expects to be included by Gct.h +// +// Wendell Baker, Berkeley CAD Group, 1991 (wbaker@ic.Berkeley.EDU) +// + + + + + +//#pragma interface + + +// $Source: /cvs/cvsfiles/devo/gcc/testsuite/g++.old-deja/g++.mike/p784.C,v $ +// $Author: jason $ +// $Revision: 1.6 $ +// $Date: 1994/05/16 09:13:02 $ + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/bool.h" 1 + + + + + + + +//# 25 "../../../../../../mips/include/Gct/GctErrorHandler.h" 2 + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/String.h" 1 +// This may look like C code, but it is really -*- C++ -*- +/* +Copyright (C) 1988 Free Software Foundation + written by Doug Lea (dl@rocky.oswego.edu) + +This file is part of the GNU C++ Library. This library is free +software; you can redistribute it and/or modify it under the terms of +the GNU Library General Public License as published by the Free +Software Foundation; either version 2 of the License, or (at your +option) any later version. This library is distributed in the hope +that it will be useful, but WITHOUT ANY WARRANTY; without even the +implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. See the GNU Library General Public License for more details. +You should have received a copy of the GNU Library General Public +License along with this library; if not, write to the Free Software +Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + + +//# 1321 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/String.h" + +//# 26 "../../../../../../mips/include/Gct/GctErrorHandler.h" 2 + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" 1 +// This is part of the iostream library, providing -*- C++ -*- input/output. +// Copyright (C) 1991 Per Bothner. +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Library General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Library General Public License for more details. +// +// You should have received a copy of the GNU Library General Public +// License along with this library; if not, write to the Free +// Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +//# 210 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" + +//# 27 "../../../../../../mips/include/Gct/GctErrorHandler.h" 2 + + +//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/stuff++.h" 1 +// -*- C++ -*- +//# 107 "/sandbox/wbaker/wbaker0/source/mips/include/stuff++.h" + +//# 29 "../../../../../../mips/include/Gct/GctErrorHandler.h" 2 + +//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/tostrstream.h" 1 +// -*- C++ -*- +//# 52 "/sandbox/wbaker/wbaker0/source/mips/include/tostrstream.h" + +//# 30 "../../../../../../mips/include/Gct/GctErrorHandler.h" 2 + + +//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttObject.h" 1 +// -*- C++ -*- +//# 98 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttObject.h" + +//# 32 "../../../../../../mips/include/Gct/GctErrorHandler.h" 2 + + +// +// It is expected that this will be virtually multiply inherited +// into all of the classes that need error reporting services. +// +// The typical way to have that done is by inheriting the GctObject +// as a virtual base class. +// + +// +// GctErrorHandler class +// +// GPP_1_96_BUG +// NOTE - virtual public GttObject should be MI into GctObject - but that +// causes g++ 1.96 to segfault; so we must inherit GttObject here and use SI +// GPP_1_96_BUG +class GctErrorHandler: virtual public GttObject { +public: + GctErrorHandler(); + GctErrorHandler(const String& program); + virtual ~GctErrorHandler(); + + // + // Debugging messages + // - these are turned off for production code. + // - these messages can be shut off + // + static void debug(const char *message); + static void debug(tostrstream& message); + + static void debug(const char *function, const char *message); + static void debug(const char *function, tostrstream& message); + + static void debug(const char *class_name, const char *method, const char *message); + static void debug(const char *class_name, const char *method, tostrstream& message); + + static bool debug(); // current debug switch + static void debug(bool value); // change the debug switch + + // + // Informational messages + // - these correspond to a ``verbose'' mode + // - these are not errors, just chatty progress reports + // - these messages can be shut off + // + static void note(const char *message); + static void note(tostrstream& message); + + static void note(const char *function, const char *message); + static void note(const char *function, tostrstream& message); + + static void note(const char *class_name, const char *method, const char *message); + static void note(const char *class_name, const char *method, tostrstream& message); + + static bool note(); // current note switch + static void note(bool value); // change the note switch + + // + // Warning messages + // - warnings are system-recoverable errors + // - the system has noticed something and taken some + // corrective action + // - these messages can be shut off + // + static void warning(const char *message); + static void warning(tostrstream& message); + + static void warning(const char *function, const char *message); + static void warning(const char *function, tostrstream& message); + + static void warning(const char *class_name, const char *method, const char *message); + static void warning(const char *class_name, const char *method, tostrstream& message); + + static bool warning(); // current warning switch + static void warning(bool value); // change the warning switch + + // + // Error messages + // - an unacceptable, but expected and recoverable + // condition was was detected + // - errors are for ``the expected environment was not found'' + // rather than for ``file couldn't be opened'' + // - these messages cannot be shut off + // - the error handler determines the recovery action + // TODO - one day exceptions will be used here + // + static void error(const char *message); + static void error(tostrstream& message); + + static void error(const char *function, const char *message); + static void error(const char *function, tostrstream& message); + + static void error(const char *class_name, const char *method, const char *message); + static void error(const char *class_name, const char *method, tostrstream& message); + + // can't turn off errors - no ``static void error(bool value);'' + static zero_arg_error_handler_t error(); // current error handler + static void error(zero_arg_error_handler_t handler);// change the error handler + + static void error_is_lib_error_handler(); // change the error handler + static void error_is_exit(); // change the error handler + + // Describes the fatal handler - WATCHOUT - implicitly uses AllocRing + static const char *error_handler_description(); + + // + // Fatal messages + // - an unacceptable and unexpected error was detected + // the data invariants were violated, there is no recovery + // - these messages cannot be shut off + // - the error handler determines the recovery action + // TODO - one day exceptions will be used here + // + static void fatal(const char *message); + static void fatal(tostrstream& message); + + static void fatal(const char *function, const char *message); + static void fatal(const char *function, tostrstream& message); + + static void fatal(const char *class_name, const char *method, const char *message); + static void fatal(const char *class_name, const char *method, tostrstream& message); + + // can't turn off fatals - no ``static void fatal(bool value);'' + static zero_arg_error_handler_t fatal(); // return the fatal handler + static void fatal(zero_arg_error_handler_t handler); // change the fatal handler + + static void fatal_is_exit(); // change the fatal handler + static void fatal_is_abort(); // change the fatal handler + + // Describes the fatal handler - WATCHOUT - implicitly uses AllocRing + static const char *fatal_handler_description(); +private: + // + // Two underscores are used here in order to prevent confusion of these + // private variables with any of the heir's private variables. Note that + // access control is different than visibility in C++, so all the variable + // names in a class hierarchy must be unique. + // + static bool __debug; + static bool __note; + static bool __warning; + static void (*__error_handler)(); // can't turn off errors + static void (*__fatal_handler)(); // can't turn off fatals + + static bool __partial_init; + static void __partial_initialize(); + static bool __full_init; + static void __full_initialize(const char *program); + static char *__program; + + static void __handle_error(); + static void __handle_fatal(); + static void __add_newline(const char *message); + static void __message_switch(bool value, bool& flag, const char *description); + static void __message_switch(bool value, bool& flag); + static const char *__describe_handler(zero_arg_error_handler_t handler); + + static bool __output_valid(); + static ostream *__output; + + // GPP_1_96_BUG + const char *class_name() const; + // GPP_1_96_BUG +}; + + +//# 29 "../../../../../../mips/include/Gct/Object/GctObject.h" 2 + + +// +// GctObject class (is abstract) +// +class GctObject: virtual public GctErrorHandler /*, virtual public GttObject*/ { +protected: + GctObject(); + GctObject(const GctObject&); + virtual ~GctObject(); // ensure descendants have virtual destructors + +public: + // + // I/O Support + // + // The value typically persists only long enough for an i/o operation + // to be performed (see the defintion of output via operator<<(... ) below) + virtual const char *stringify(); +protected: + // This is the buffer into which the printed representation of this + // object will be put when the time comes. It is associated with the + // object so it will never go away (so long as the object exists). + // Use a pointer so that you only pay for the space when I/O is used + tostrstream *stringbuf; + void clear_stringbuf(); + +public: + // + // Consistency (global consistency) + // + // The global data invariant for the whole object (heirs included). + // This OK function will call the local invariant function ok() if + // necessary and in addition the OK functions of the heirs + // This is expected to compute the data invariant of the object. + // It will execute GctErrorHandler::fatal if there is wrong. + virtual void OK() const; + +protected: + // + // consistency (local consistency) + // + // This function computes the invariant which is local to this object. + // It does not call any of the ancestor's OK() or ok() functions. + // It is not a virtual function so that it can be called from within a + // constructor with impunity. Thus this function MUST NOT call any + // virtual functions either; it should call them by their full name if + // that is necessary. The global OK() function will call this function + // as necessary. + // + // This function must NOT NEVER EVER be made virtual. + void ok() const; +protected: + // + // Class Name + // + // This must return a static (constant) string which is the name + // of the class being declared. By convention, not all classes + // must have one of these, but the major root abstract class must + // have one in order to allow the stringify() to work approximately + // correctly. + virtual const char *class_name() const = 0; + +public: + // + // The ``id'' of this object + // + // NOTE - we explicitly allow the situation where this function + // can return the address of the object - the ``this'' pointer + // instead of a computed id field (the __object_id field below). + // + // This function is protected because we don't want too much dependence + // on this notion of object identity. I want to be able to rip it + // out if it becomes to cumbersome. + unsigned objectId() const; +private: + // + // Symbolic ID + // + // NOTE - Normally this would be implemented by the `this' pointer. + // TODO - remove this for production code + // + // However, in order to make the test suites run on all machines, we + // make this into a symbolic id that is maintained with each object. + // Thus the valid outputs are always consistent across all machines. + unsigned __object_id; + static unsigned __next_id; +}; + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" 1 +// This is part of the iostream library, providing -*- C++ -*- input/output. +// Copyright (C) 1991 Per Bothner. +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Library General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Library General Public License for more details. +// +// You should have received a copy of the GNU Library General Public +// License along with this library; if not, write to the Free +// Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +//# 210 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" + +//# 117 "../../../../../../mips/include/Gct/Object/GctObject.h" 2 + +extern ostream& operator<<(ostream&, GctObject&); + + +//# 25 "../../../../../../mips/include/Gct/Object/GctHashObject.h" 2 + + +// +// GctHashObject class (is abstract) +// +class GctHashObject: virtual public GctObject { +protected: + GctHashObject(); + GctHashObject(const GctHashObject&); + +public: + // + // hash support + // + virtual unsigned hash() const; +}; + + +//# 28 "../../GctSymbol.h" 2 + + +// +// GctSymbol +// +class GctSymbol: virtual public GctHashObject, String { +public: + GctSymbol(); // vacuous symbol required for genclass usage + GctSymbol(const char*); + GctSymbol(const String&); + GctSymbol(const GctSymbol&); + + operator const char *() const; + + bool operator==(const GctSymbol&) const; + bool operator!=(const GctSymbol&) const; + + bool operator<=(const GctSymbol&) const; + bool operator<(const GctSymbol&) const; + bool operator>=(const GctSymbol&) const; + bool operator>(const GctSymbol&) const; + + unsigned hash() const; + + // I/O Support + const char *stringify(); + + // Consistency + void OK() const; +private: + const char *class_name() const; +}; + +extern unsigned hash(GctSymbol&); // genclass support (no const) + +// +// Inline functions +// +// Note - none of the String operators save for operator const char *() +// are String member functions, instead, they are anonymous functions +// which work by overloading. +// + + + + + +GctSymbol::operator const char *() const +{ + + + + + + return String::operator const char *(); +} + +bool +GctSymbol::operator==(const GctSymbol& other) const +{ + + + + + + return (bool)::operator==(*this, other); +} + +bool +GctSymbol::operator!=(const GctSymbol& other) const +{ + + + + + + return (bool)::operator!=(*this, other); +} + +bool +GctSymbol::operator<=(const GctSymbol& other) const +{ + + + + + + return (bool)::operator<=(*this, other); +} + +bool +GctSymbol::operator<(const GctSymbol& other) const +{ + + + + + + return (bool)::operator<(*this, other); +} + +bool +GctSymbol::operator>=(const GctSymbol& other) const +{ + + + + + + return (bool)::operator>=(*this, other); +} + +bool +GctSymbol::operator>(const GctSymbol& other) const +{ + + + + + + return (bool)::operator>(*this, other); +} + + +//# 25 "GctSymbol.defs.h" 2 + + +// equality operator + + + + +// less-than-or-equal + + + + +// comparison : less-than -> 0 + + + + +// hash function + +extern unsigned int hash(GctSymbol&); + + + +// initial capacity for structures requiring one + + + + + + + +//# 27 "GctSymbol.GctSymbol.Map.h" 2 + + +class GctSymbolGctSymbolMap +{ +protected: + int count; + GctSymbol def; + +public: + GctSymbolGctSymbolMap(GctSymbol& dflt); + virtual ~GctSymbolGctSymbolMap(); + + int length(); // current number of items + int empty(); + + virtual int contains(GctSymbol& key); // is key mapped? + + virtual void clear(); // delete all items + + virtual GctSymbol& operator [] (GctSymbol& key) = 0; // access contents by key + + virtual void del(GctSymbol& key) = 0; // delete entry + + virtual Pix first() = 0; // Pix of first item or 0 + virtual void next(Pix& i) = 0; // advance to next or 0 + virtual GctSymbol& key(Pix i) = 0; // access key at i + virtual GctSymbol& contents(Pix i) = 0; // access contents at i + + virtual int owns(Pix i); // is i a valid Pix ? + virtual Pix seek(GctSymbol& key); // Pix of key + + GctSymbol& dflt(); // access default val + + void error(const char* msg); + virtual int OK() = 0; // rep invariant +}; + + + +inline GctSymbolGctSymbolMap::~GctSymbolGctSymbolMap() {} + +inline int GctSymbolGctSymbolMap::length() +{ + return count; +} + +inline int GctSymbolGctSymbolMap::empty() +{ + return count == 0; +} + +inline GctSymbol& GctSymbolGctSymbolMap::dflt() +{ + return def; +} + +inline GctSymbolGctSymbolMap::GctSymbolGctSymbolMap(GctSymbol& dflt) :def(dflt) +{ + count = 0; +} + + + + +//# 26 "GctSymbol.GctSymbol.CHMap.h" 2 + + + + + +struct GctSymbolGctSymbolCHNode +{ + GctSymbolGctSymbolCHNode* tl; + GctSymbol hd; + GctSymbol cont; + GctSymbolGctSymbolCHNode(); + GctSymbolGctSymbolCHNode(GctSymbol& h, GctSymbol& c, GctSymbolGctSymbolCHNode* t = 0); + ~GctSymbolGctSymbolCHNode(); +}; + + + +inline GctSymbolGctSymbolCHNode::GctSymbolGctSymbolCHNode() {} + +inline GctSymbolGctSymbolCHNode::GctSymbolGctSymbolCHNode(GctSymbol& h, GctSymbol& c, GctSymbolGctSymbolCHNode* t) + : hd(h), cont(c), tl(t) {} + +inline GctSymbolGctSymbolCHNode::~GctSymbolGctSymbolCHNode() {} + + + + +typedef GctSymbolGctSymbolCHNode* GctSymbolGctSymbolCHNodePtr; + + + + +class GctSymbolGctSymbolCHMap : public GctSymbolGctSymbolMap +{ +protected: + GctSymbolGctSymbolCHNode** tab; + unsigned int size; + +public: + GctSymbolGctSymbolCHMap(GctSymbol& dflt,unsigned int sz=100 ); + GctSymbolGctSymbolCHMap(GctSymbolGctSymbolCHMap& a); + ~GctSymbolGctSymbolCHMap(); + + GctSymbol& operator [] (GctSymbol& key); + + void del(GctSymbol& key); + + Pix first(); + void next(Pix& i); + GctSymbol& key(Pix i); + GctSymbol& contents(Pix i); + + Pix seek(GctSymbol& key); + int contains(GctSymbol& key); + + void clear(); + int OK(); +}; + + + +inline GctSymbolGctSymbolCHMap::~GctSymbolGctSymbolCHMap() +{ + clear(); + delete tab; +} + +inline int GctSymbolGctSymbolCHMap::contains(GctSymbol& key) +{ + return seek(key) != 0; +} + +inline GctSymbol& GctSymbolGctSymbolCHMap::key(Pix p) +{ + if (p == 0) error("null Pix"); + return ((GctSymbolGctSymbolCHNode*)p)->hd; +} + +inline GctSymbol& GctSymbolGctSymbolCHMap::contents(Pix p) +{ + if (p == 0) error("null Pix"); + return ((GctSymbolGctSymbolCHNode*)p)->cont; +} + + + + +//# 22 "GctSymbol.GctSymbol.CHMap.cc" 2 + + +// The nodes are linked together serially via a version +// of a trick used in some vtables: odd pointers are +// actually links to the next table entry. +// Not terrible, but not wonderful either + +static inline int goodCHptr(GctSymbolGctSymbolCHNode* t) +{ + return ((((unsigned)t) & 1) == 0); +} + +static inline GctSymbolGctSymbolCHNode* index_to_CHptr(int i) +{ + return (GctSymbolGctSymbolCHNode*)((i << 1) + 1); +} + +static inline int CHptr_to_index(GctSymbolGctSymbolCHNode* t) +{ + return ( ((unsigned) t) >> 1); +} + +GctSymbolGctSymbolCHMap::GctSymbolGctSymbolCHMap(GctSymbol& dflt, unsigned int sz) + :GctSymbolGctSymbolMap(dflt) +{ + tab = (GctSymbolGctSymbolCHNode**)(new GctSymbolGctSymbolCHNodePtr[size = sz]); + for (unsigned int i = 0; i < size; ++i) tab[i] = index_to_CHptr(i+1); + count = 0; +} + +GctSymbolGctSymbolCHMap::GctSymbolGctSymbolCHMap(GctSymbolGctSymbolCHMap& a) :GctSymbolGctSymbolMap(a.def) +{ + tab = (GctSymbolGctSymbolCHNode**)(new GctSymbolGctSymbolCHNodePtr[size = a.size]); + for (unsigned int i = 0; i < size; ++i) tab[i] = index_to_CHptr(i+1); + count = 0; + for (Pix p = a.first(); p; a.next(p)) (*this)[a.key(p)] = a.contents(p); // gets bogus error - type `GctSymbol' is derived from private `String' +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p785.C b/gcc/testsuite/g++.old-deja/g++.mike/p785.C new file mode 100644 index 000000000000..897f06a810a9 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p785.C @@ -0,0 +1,8154 @@ +// Special g++ Options: -w +// Build don't link: +// prms-id: 785 + +//# 1 "GctNameRef.List.cc" +//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/sumachine++.h" 1 +// -*- C++ -*- +#ifndef FALSE +#define FALSE false +#endif +#ifndef TRUE +#define TRUE true +#endif + + +// +// WATCHOUT - CC 2.1 uses regular old cpp as its #ifdef processor +// whereas GNU uses a special preprocessor (actually ``gcc-cpp -+'') +// This implies that there can be no C++ comments on lines which are +// to be understood by cpp. Actually it turns out that only lines +// with grammatical structures (such as ``#if defined( ... )'') are +// affected, but this is probably a good rule to follow elsewhere too. +// + +// +// Define a ``Standard C++ Unix Machine'' +// +// By whatever means are available in sumachine and elsewhere, +// figure out what type of C++ world we are on. +// +// See also "sumachine.h" +// +// $Revision: 1.8 $ +// $Date: 1995/05/07 18:57:48 $ +// $Source: /cvs/cvsfiles/devo/gcc/testsuite/g++.old-deja/g++.mike/p785.C,v $ +// +// This file is expected to be included as the first #include file in +// all .cc files This file should be included in each and every src file +// compiled b/c it ensures that the environment which those src files +// expect exists either by fiat or by faking it. +// + + +// +// Its GNU C++ +// +// This pragma only works under g++ 1 (it no longer works for gcc2) + + + + +// Because between releases of Cygnus' stuff, the definitions keep bouncing +// around between so fast that one can't +// keep one's code compiling ... Just include them all and be done with it. +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stdlib.h" 1 + + + + + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stddef.h" 1 + + +extern "C" { + + + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/mips/lib/gcc/decstatn/cygnus-1.96/include/stddef.h" 1 + + + + + + +/* This avoids lossage on Sunos but only if stdtypes.h comes first. + There's no way to win with the other order! Sun lossage. */ + +/* In case nobody has defined these types, but we aren't running under + GCC 2.00, make sure that __PTRDIFF_TYPE__, __SIZE__TYPE__, and + __WCHAR_TYPE__ have reasonable values. This can happen if the + parts of GCC is compiled by an older compiler, that actually + include gstddef.h, such as collect2. */ + +/* Signed type of difference of two pointers. */ + + + + + + + + + + + + + + +typedef long int ptrdiff_t; + + + + + + +/* Unsigned type of `sizeof' something. */ + + + + + + + + + + + + + + +typedef int size_t; + + + + + + +/* Data type for wide chars. */ + + + + + + + + + + + + + + +typedef int wchar_t; + + + + + + + + +/* A null pointer constant. */ + + + + +/* Offset of member MEMBER in a struct of type TYPE. */ + + + + + +//# 7 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stddef.h" 2 + + + + +} + +//# 6 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stdlib.h" 2 + + +extern "C" { + +int abs(int); + + +void abort(void); + + + + +double atof(const char*); +int atoi(const char*); +long atol(const char*); + +int atexit(auto void (*p) (void)); +int bsearch (const void *, const void *, size_t, + size_t, auto int (*ptf)(const void*, const void*)); +void* calloc(size_t, size_t); +void cfree(void*); + + +void exit(int); + + + + +char* fcvt(double, int, int*, int*); +void free(void*); +char* getenv(const char*); +int getopt(int, const char**, const char*); +int getpw(int, char*); +char* gcvt(double, int, char*); +char* ecvt(double, int, int*, int*); +extern char** environ; + +long labs(long); +void* malloc(size_t); +size_t malloc_usable_size(void*); +int putenv(const char*); +extern char* optarg; +extern int opterr; +extern int optind; +void qsort(void*, size_t, size_t, auto int (*ptf)(void*,void*)); +int rand(void); +void* realloc(void*, size_t); +int setkey(const char*); +int srand(unsigned int); +double strtod(const char*, char**); +long strtol(const char*, char**, int); +unsigned long stroul(const char**, int); +int system(const char*); + +long random(void); +void srandom(int); +char* setstate(char*); +char* initstate(unsigned, char*, int); + +double drand48(void); +void lcong48(short*); +long jrand48(short*); +long lrand48(void); +long mrand48(void); +long nrand48(short*); +short* seed48(short*); +void srand48(long); + +char* ctermid(char*); +char* cuserid(char*); +char* tempnam(const char*, const char*); +char* tmpnam(char*); + +} + +//# 44 "/sandbox/wbaker/wbaker0/source/mips/include/sumachine++.h" 2 + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/std.h" 1 +// This may look like C code, but it is really -*- C++ -*- +/* +Copyright (C) 1988, 1992 Free Software Foundation + written by Doug Lea (dl@rocky.oswego.edu) + +This file is part of the GNU C++ Library. This library is free +software; you can redistribute it and/or modify it under the terms of +the GNU Library General Public License as published by the Free +Software Foundation; either version 2 of the License, or (at your +option) any later version. This library is distributed in the hope +that it will be useful, but WITHOUT ANY WARRANTY; without even the +implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. See the GNU Library General Public License for more details. +You should have received a copy of the GNU Library General Public +License along with this library; if not, write to the Free Software +Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + + + + + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stddef.h" 1 +//# 12 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stddef.h" + +//# 23 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/std.h" 2 + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stdlib.h" 1 + + +//# 80 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stdlib.h" + +//# 24 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/std.h" 2 + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/string.h" 1 + + + + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stddef.h" 1 +//# 12 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stddef.h" + +//# 5 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/string.h" 2 + + + +extern "C" { + +char* strcat(char*, const char*); +char* strchr(const char*, int); +int strcmp(const char*, const char*); +int strcoll(const char*, const char*); +char* strcpy(char*, const char*); +size_t strcspn(const char*, const char*); +char* strdup(const char*); + +char* strncat(char*, const char*, size_t); +int strncmp(const char*, const char*, size_t); +char* strncpy(char*, const char*, size_t); +char* strpbrk(const char*, const char*); +char* strrchr(const char*, int); +size_t strspn(const char*, const char*); +char* strstr(const char*, const char *); +char* strtok(char*, const char*); +size_t strxfrm(char*, const char*, size_t); + +} + + + + + + + +extern "C" { +char* index(const char*, int); +char* rindex(const char*, int); +} + + + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/memory.h" 1 + + + + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stddef.h" 1 +//# 12 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stddef.h" + +//# 5 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/memory.h" 2 + + +extern "C" { + +void* memalign(size_t, size_t); +void* memccpy(void*, const void*, int, size_t); +void* memchr(const void*, int, size_t); + + +void* memset(void*, int, size_t); +int ffs(int); +size_t getpagesize(void); +void* valloc(size_t); + +} + + + + + + + + + +extern "C" { +void bcopy(const void*, void*, size_t); // USG uses version in bcopy.c +int bcmp(const void*, const void*, int); +void bzero(void*, int); +} + + + + + + + + + + + + + + + + +//# 43 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/string.h" 2 + + + +//# 25 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/std.h" 2 + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/memory.h" 1 + +//# 49 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/memory.h" + +//# 26 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/std.h" 2 + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/unistd.h" 1 + + + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stddef.h" 1 +//# 12 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stddef.h" + +//# 4 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/unistd.h" 2 + + +extern "C" { + + +void _exit(int); + + + + +unsigned alarm(unsigned); +int brk(void*); +int chdir(const char*); +int chmod(const char*, int); +int chown(const char*, int, int); +int close(int); +char* crypt(const char*, const char*); +int dup(int); +int dup2(int, int); +char* encrypt(char*, int); +int execl(const char*, const char *, ...); +int execle(const char*, const char *, ...); +int execlp(const char*, const char*, ...); +int exect(const char*, const char**, char**); +int execv(const char*, const char**); +int execve(const char*, const char**, char**); +int execvp(const char*, const char**); +int fchown(int, int, int); +int fork(void); +int fsync(int); +int ftruncate(int, unsigned long); +char* getcwd(char*, int); +int getdomainname(char*, int); +int getdtablesize(void); + +int getgroups(int, int*); +int geteuid(void); +int getegid(void); +int getgid(void); +long gethostid(void); +int gethostname(char*, int); +int getpgrp(...); +int getpid(void); +int getppid(void); +char* getlogin(void); +char* getpass(const char*); +unsigned getuid(void); +int ioctl(int, int, void*); +int isatty(int); +int link(const char*, const char*); +int mkstemp(char*); +char* mktemp(char*); +int nice(int); + +void volatile pause(void); + + + +int pipe(int*); +int readlink(const char*, char*, int); +int rename(const char*, const char*); +int rmdir(const char*); +void* sbrk(int); +int syscall(int, ...); +int setgid(int); +int sethostname(const char*, int); +int setpgrp(...); +int setregid(int, int); +int setreuid(int, int); +int setuid(int); +unsigned sleep(unsigned); +void swab(void*, void*, int); +int symlink(const char*, const char*); +int truncate(const char*, unsigned long); +char* ttyname(int); +int ttyslot(void); +// int umask(int); /* commented out for now; wrong for SunOs4.1 */ +int unlink(const char*); +int vfork(void); +int vadvise(int); +int vhangup(void); + +long lseek(int, long, int); +int read(int, void*, size_t); +int write(int, const void*, size_t); +int access(const char*, int); + +int flock(int, int); + + +} + + + + +//# 27 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/std.h" 2 + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stdio.h" 1 +// This may look like C code, but it is really -*- C++ -*- +/* +Copyright (C) 1988 Free Software Foundation + written by Doug Lea (dl@rocky.oswego.edu) + +This file is part of the GNU C++ Library. This library is free +software; you can redistribute it and/or modify it under the terms of +the GNU Library General Public License as published by the Free +Software Foundation; either version 2 of the License, or (at your +option) any later version. This library is distributed in the hope +that it will be useful, but WITHOUT ANY WARRANTY; without even the +implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. See the GNU Library General Public License for more details. +You should have received a copy of the GNU Library General Public +License along with this library; if not, write to the Free Software +Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +/* + * Please check the following before installing this file: + * + * Make sure USG is #defined if you are on a USG system! + * + * Check the value of _NFILE against the one in your /usr/include/stdio.h. + * (USG only) + * + * Check whether your libc.a sprintf function returns + * an int (as do most) versus a char* (BSD), and (un)comment + * the corresponding SPRINTF_RETURNS_INT line. + * + * Check the value of BUFSIZ against the one in your /usr/include/stdio.h. + * + * Carefully check the fields and order of _iobuf declaration against + * the one in your /usr/include/stdio.h. Xenix-based systems + * may need some re-ordering of _iobuf. fields. + * + * Note that some _IOXXX #defines may not be present in your + * /usr/include/stdio.h. This is ok, so long as the ones that + * are present in both are set to the same values. + * + * Some of the prototypes refer to functions that may not be + * present in your libc.a. This is ok so long as you do not + * actually call such functions. + * + */ + + + +//#pragma interface + + + + + + + +// Note: The #define _stdio_h is at the end of this file, +// in case #include_next finds an installed version of this +// same file -- we want it to continue until it finds the C version. + +/* + HAVE_VPRINTF should be set if vprintf is in libc.a + HAVE_SETVBUF should be set if setvbuf is in libc.a + HAVE_SETLINEBUF should be set if setlinebuf in libc.a + + The following are probably correct for the listed systems + +*/ + + + + + +//# 85 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stdio.h" + + + +//# 158 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stdio.h" + + +extern "C" { + + + + + + + + + + + + + + + + + + + + + + + + + + + + +//# 1 "/usr/include/stdio.h" 1 +/* @(#)stdio.h 4.6 (ULTRIX) 3/1/91 */ +/************************************************************************ + * * + * Copyright (c) 1985 by * + * Digital Equipment Corporation, Maynard, MA * + * All rights reserved. * + * * + * This software is furnished under a license and may be used and * + * copied only in accordance with the terms of such license and * + * with the inclusion of the above copyright notice. This * + * software or any other copies thereof may not be provided or * + * otherwise made available to any other person. No title to and * + * ownership of the software is hereby transferred. * + * * + * This software is derived from software received from the * + * University of California, Berkeley, and from Bell * + * Laboratories. Use, duplication, or disclosure is subject to * + * restrictions under license agreements with University of * + * California and with AT&T. * + * * + * The information in this software is subject to change without * + * notice and should not be construed as a commitment by Digital * + * Equipment Corporation. * + * * + * Digital assumes no responsibility for the use or reliability * + * of its software on equipment which is not supplied by Digital. * + * * + ************************************************************************/ +/************************************************************************ + * Modification History + * + * Mitch Condylis 28-Feb-1991 + * Changed _file member of FILE structure from char to short + * as part of work to increase max number of open file descriptors. + * + * Mike Thomas, 7-Sep-1990 + * 016 Back out most of 015. Leave in explicit declarations. + * + * Mike Thomas, 21-Aug-1990 + * 015 DECwest ANSI - change _filbuf to __filbuf for ANSI compliance. + * Explicitly declare __filbuf under __STDC__. + * Likewise flsbuf. + * + * 014 Mike Thomas, 08-Jun-90 + * Changed _POSIX_SOURCE reference back to POSIX. + * + * 013 Dan Smith, 23-Feb-90 + * Added const to several prototypes. More namespace protection. + * Changed reference of POSIX to _POSIX_SOURCE. + * + * Jon Reeves, 07-Dec-1989 + * 012 Namespace protection. + * + * Jon Reeves, 09-Nov-1989 + * 011 Fix putc properly: could still sign-extend in some cases before. + * + * Linda Wilson, 06-Oct-1989 + * 010 Declare sprintf as int for std conformance + * + * Jon Reeves, 25-Aug-1989 + * 009 Fix putc[har] for 8-bit mode (unsigned int->char) + * + * Jon Reeves, 18-Jul-1989 + * 008 Add getw, putw for X/Open conformance. + * + * Jon Reeves, 31-May-1989 + * 007 ANSI conformance; clean up rogue comments. sprintf is still + * wrong. + * + * Lu Anne Van de Pas, 02-Jun-1986 + * 006 Added ending "/" to P_tmpdir string. + * + * David L Ballenger, 22-Nov-1985 + * 005 Correct definition of sprintf() for System V environment. + * + * David L Ballenger, 01-Aug-1985 + * 004 Add _IOAPPEND flag for files opened with "A" or "A+". + * + * David L Ballenger, 26-Jun-1985 + * 003 Add changes so that FILE structures are allocated dynamically. + * + * Larry Cohen, 23-April-1985 + * - change NFILE from 20 to 64 + * + * David L Ballenger, 13-Mar-1985 + * 0001 Add System V definitions. + ************************************************************************/ + +//# 1 "/usr/include/ansi_compat.h" 1 +/* + * @(#)ansi_compat.h 4.4 (ULTRIX) 10/8/90 + */ + +/************************************************************************ + * * + * Copyright (c) 1990 by * + * Digital Equipment Corporation, Maynard, MA * + * All rights reserved. * + * * + * This software is furnished under a license and may be used and * + * copied only in accordance with the terms of such license and * + * with the inclusion of the above copyright notice. This * + * software or any other copies thereof may not be provided or * + * otherwise made available to any other person. No title to and * + * ownership of the software is hereby transferred. * + * * + * The information in this software is subject to change without * + * notice and should not be construed as a commitment by Digital * + * Equipment Corporation. * + * * + * Digital assumes no responsibility for the use or reliability * + * of its software on equipment which is not supplied by Digital. * + * * + ************************************************************************/ + +/* + * To avoid namespace pollution when using the ULTRIX header files under the + * DEC ANSI compiler, all user-visible header files were modifed to reference + * ANSI-style predefined macro name rather than their traditional names + * (__ultrix vice ultrix). Every file which accesses a predefined macro name + * must include this file before any other files are included or the macros + * are tested. + * + * In strict ANSI mode, the appropriate ANSI-style macros are already + * defined and the redefinitions in this file will not be seen. When using + * pcc, the traditional macro names are defined and this file will define + * ANSI-style equivalents of the traditional names. When using the DEC C + * compiler, both the traditional and ANSI predefined macro names are + * available so the definitions in this file are not made visible. + * + */ + + +//# 116 "/usr/include/ansi_compat.h" + +//# 89 "/usr/include/stdio.h" 2 + + + + + + + + + + + + + + /* Note: spacing must match, too, to avoid warnings */ + + + + +extern struct _iobuf { + int _cnt; + char *_ptr; + char *_base; + int _bufsiz; + short _flag; + short _file; +} _iob[3 ]; +typedef struct _iobuf FILE; + +typedef long fpos_t; + + + + + + + + + + + + + + + + + +/* fseek() values */ + + + + + + + +/* + * prototype + * + */ +extern int getc( FILE *__stream ); +extern int getchar( void ); +extern int putc( int __c, FILE *__stream); +extern int putchar( int __c); +extern int feof( FILE *__stream ); +extern int ferror( FILE *__stream ); +extern int fileno( FILE *__stream ); +extern int _filbuf( FILE *p); +extern int _flsbuf( unsigned char x , FILE *p); + + + + + + + + + + + + + + + + +typedef char *va_list; + +/* + * prototypes + * + */ +extern void clearerr( FILE *__stream); +extern int fclose( FILE *__stream ); +extern FILE * c_proto_fdopen ( int __filedes, char *__type ); +extern int fflush( FILE *__stream ); +extern int fgetc( FILE *__stream ); +extern int fgetpos( FILE *__stream, fpos_t *__pos ); +extern char * fgets( char *__s, int __n, FILE *__stream ); +extern FILE * c_proto_fopen ( const char *__filename, const char *__type ); +extern int c_proto_fprintf ( FILE *__stream, const char *__format, ... ); +extern int fputc( int __c, FILE *__stream ); +extern int c_proto_fputs ( const char *__s, FILE *__stream ); +extern size_t fread( void *__ptr, size_t __size, + size_t __nitems, FILE *__stream ); +extern FILE * c_proto_freopen ( const char *__filename, const char *__type, + FILE *__stream ); +extern int c_proto_fscanf ( FILE *__stream, const char *__format, ... ); +extern int fseek( FILE *__stream, long __offset, int __ptrname ); +extern int fsetpos( FILE *__stream, const fpos_t *__pos ); +extern long ftell( FILE *__stream ); +extern size_t c_proto_fwrite ( const void *__ptr, size_t __size, + size_t __nitems, FILE *__stream ); +extern char * gets( char *__s ); +extern void c_proto_perror ( const char *__s ); +extern FILE * c_proto_popen (const char *__command, const char *__type ); +extern int c_proto_printf ( const char *__format, ... ); +extern int c_proto_puts ( const char *__s ); +extern int remove( const char *__filename ); +extern int rename( const char *__from, const char *__to ); +extern void c_proto_rewind ( FILE *__stream ); +extern int c_proto_scanf ( const char *__format, ... ); +extern void c_proto_setbuf ( FILE *__stream, char *__buf ); +extern int c_proto_setvbuf ( FILE *__stream, char *__buf, + int __type, size_t __size ); +extern int c_proto_sscanf ( const char *__s, const char *__format, ... ); +extern FILE * tmpfile( void ); +extern char * tmpnam( char *__s ); +extern int ungetc( int __c, FILE *__stream ); +extern int c_proto_vfprintf ( FILE *__stream, const char *__format, va_list __ap ); +extern int c_proto_vprintf ( const char *__format, va_list __ap ); +extern int c_proto_vsprintf ( char *__s, const char *__format, va_list __ap); + + +extern char * c_proto_tempnam ( const char *__dir, const char *__pfx); +extern int c_proto_putw ( int __w, FILE *__stream ); +extern int getw(FILE *__stream); +extern int pclose( FILE *__stream ); + + +//# 298 "/usr/include/stdio.h" + + + +/* function prototype */ +extern int c_proto_sprintf ( char *__s, const char *__format, ... ); + + + + + + + + + + + + + + + + + + + +//# 189 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stdio.h" 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +} + + + + + +extern "C" { + +//# 239 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stdio.h" + +int fclose(FILE*); +FILE* fdopen(int, const char*); +int fflush(FILE*); +int fgetc(FILE*); +char* fgets(char*, int, FILE *); +FILE* fopen(const char*, const char*); +int fprintf(FILE*, const char* ...); +int fputc(int, FILE*); +int fputs(const char*, FILE*); +size_t fread(void*, size_t, size_t, FILE*); + + + +FILE* freopen(const char*, const char*, FILE*); + +int fscanf(FILE*, const char* ...); +int fseek(FILE*, long, int); +long ftell(FILE *); +unsigned int fwrite(const void*, unsigned int, unsigned int, FILE*); +char* gets(char*); +int getw(FILE*); +int pclose(FILE*); +void perror(const char*); +FILE* popen(const char*, const char*); +int printf(const char* ...); +int puts(const char*); +int putw(int, FILE*); +int rewind(FILE*); +int scanf(const char* ...); +int setbuf(FILE*, char*); +int setbuffer(FILE*, char*, int); +int setlinebuf(FILE*); +int setvbuf(FILE*, char*, int, unsigned int); +int sscanf(char*, const char* ...); +FILE* tmpfile(); +int ungetc(int, FILE*); +int vfprintf(FILE*, const char*, ...); + +// Third arg to vprintf must be '...' for some machines, & doesn't +// hurt for others. + +int vprintf(const char*, ... ); + + + + + +char* sprintf(char*, const char*, ...); +char* vsprintf(char*, const char*, ...); + + +} + + + + + + + + + + + + + + + + + + +//# 28 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/std.h" 2 + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/errno.h" 1 + + +extern "C" { + + + + + +//# 1 "/usr/include/errno.h" 1 +/* @(#)errno.h 2.4 (ULTRIX) 11/10/89 */ + +/************************************************************************ + * * + * Copyright (c) 1984, 1987 by * + * Digital Equipment Corporation, Maynard, MA * + * All rights reserved. * + * * + * This software is furnished under a license and may be used and * + * copied only in accordance with the terms of such license and * + * with the inclusion of the above copyright notice. This * + * software or any other copies thereof may not be provided or * + * otherwise made available to any other person. No title to and * + * ownership of the software is hereby transferred. * + * * + * This software is derived from software received from the * + * University of California, Berkeley, and from Bell * + * Laboratories. Use, duplication, or disclosure is subject to * + * restrictions under license agreements with University of * + * California and with AT&T. * + * * + * The information in this software is subject to change without * + * notice and should not be construed as a commitment by Digital * + * Equipment Corporation. * + * * + * Digital assumes no responsibility for the use or reliability * + * of its software on equipment which is not supplied by Digital. * + * * + ************************************************************************/ +/* + * + * Modification history: + * + * 10 Jul 89 -- jlr + * Added ENOSYS for POSIX + * + * 13 Jan 88 -- map + * Added ENOLCK for POSIX + * + * 4 Aug 86 -- chet + * Moved NFS error codes to match SUN's. + * + * 24 Feb 86 -- depp + * Added EALIGN error code + * + * 28-Mar-85 -- David L Ballenger + * Add mapping of System V error numbers from BRL package. + * + * 01 Mar 85 -- depp + * Added System V IPC error codes error codes. + * + */ + +/* + * Error codes + */ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +/* math software */ + + + +/* non-blocking and interrupt i/o */ + + + +/* ipc/network software */ + + /* argument errors */ + + + + + + + + + + + + + + /* operational errors */ + + + + + + + + + + + + + + /* */ + + + +/* should be rearranged */ + + + + +/* quotas & mush */ + + + + +/* NFS error codes */ + + + +/* IPC errors + */ + + + +/* Alignment error of some type (i.e., cluster, page, block ...) */ + + +/* System V mappings from BRL package + */ + + +/* POSIX errnos + */ + + + +/* + * DUP (Diagnostic/Utilities Protocol) related error numbers. + */ + + + + + + + + + + + + + + +/* External definition of errno from System V + */ + +extern int errno; + +//# 9 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/errno.h" 2 + + + + +extern char* sys_errlist[]; +extern int sys_nerr; +extern int errno; +void perror(const char*); +char* strerr(int); + + +} + + +//# 29 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/std.h" 2 + + + +//# 45 "/sandbox/wbaker/wbaker0/source/mips/include/sumachine++.h" 2 + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/builtin.h" 1 +// This may look like C code, but it is really -*- C++ -*- + +/* +Copyright (C) 1988, 1992 Free Software Foundation + written by Doug Lea (dl@rocky.oswego.edu) + +This file is part of the GNU C++ Library. This library is free +software; you can redistribute it and/or modify it under the terms of +the GNU Library General Public License as published by the Free +Software Foundation; either version 2 of the License, or (at your +option) any later version. This library is distributed in the hope +that it will be useful, but WITHOUT ANY WARRANTY; without even the +implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. See the GNU Library General Public License for more details. +You should have received a copy of the GNU Library General Public +License along with this library; if not, write to the Free Software +Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +/* + arithmetic, etc. functions on built in types +*/ + + + + +//#pragma interface + + + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stddef.h" 1 +//# 12 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stddef.h" + +//# 31 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/builtin.h" 2 + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/std.h" 1 +// This may look like C code, but it is really -*- C++ -*- +/* +Copyright (C) 1988, 1992 Free Software Foundation + written by Doug Lea (dl@rocky.oswego.edu) + +This file is part of the GNU C++ Library. This library is free +software; you can redistribute it and/or modify it under the terms of +the GNU Library General Public License as published by the Free +Software Foundation; either version 2 of the License, or (at your +option) any later version. This library is distributed in the hope +that it will be useful, but WITHOUT ANY WARRANTY; without even the +implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. See the GNU Library General Public License for more details. +You should have received a copy of the GNU Library General Public +License along with this library; if not, write to the Free Software +Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + + +//# 31 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/std.h" + +//# 32 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/builtin.h" 2 + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/math.h" 1 +// This may look like C code, but it is really -*- C++ -*- +/* +Copyright (C) 1988 Free Software Foundation + written by Doug Lea (dl@rocky.oswego.edu) + +This file is part of the GNU C++ Library. This library is free +software; you can redistribute it and/or modify it under the terms of +the GNU Library General Public License as published by the Free +Software Foundation; either version 2 of the License, or (at your +option) any later version. This library is distributed in the hope +that it will be useful, but WITHOUT ANY WARRANTY; without even the +implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. See the GNU Library General Public License for more details. +You should have received a copy of the GNU Library General Public +License along with this library; if not, write to the Free Software +Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + + + + +//#pragma interface + + + + + + + + + + + +//# 64 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/math.h" + +extern "C" { + +double acos(double); +double acosh(double); +double asin(double); +double asinh(double); +double atan(double); +double atan2(double, double); +double atanh(double); +double cbrt(double); +double ceil(double); +double copysign(double,double); +double cos(double); +double cosh(double); +double drem(double,double); +double erf(double); +double erfc(double); +double exp(double); +double expm1(double); +double fabs(double); +double finite(double); +double floor(double); +double frexp(double, int*); +double gamma(double); +double hypot(double,double); +double infnan(int); + +/* see below */ +int isinf(double); +int isnan(double); + +double j0(double); +double j1(double); +double jn(int, double); +double ldexp(double, int); +double lgamma(double); +double log(double); +double log10(double); +double log1p(double); +double logb(double); +double modf(double, double*); +double pow(double, double); +double rint(double); +double scalb(double, int); +double sin(double); +double sinh(double); +double sqrt(double); +double tan(double); +double tanh(double); +double y0(double); +double y1(double); +double yn(int, double); + +double aint(double); +double anint(double); +int irint(double); +int nint(double); +} + + + +/* libg++ doesn't use this since it is not available on some systems */ + +/* the following ifdef is just for compiling OOPS */ + + +struct libm_exception +{ + int type; + char* name; + double arg1, arg2, retval; +}; + + + + + + + + +extern "C" int matherr(libm_exception*); + + + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/values.h" 1 +// This may look like C code, but it is really -*- C++ -*- +/* +Copyright (C) 1988 Free Software Foundation + written by Doug Lea (dl@rocky.oswego.edu) + +This file is part of the GNU C++ Library. This library is free +software; you can redistribute it and/or modify it under the terms of +the GNU Library General Public License as published by the Free +Software Foundation; either version 2 of the License, or (at your +option) any later version. This library is distributed in the hope +that it will be useful, but WITHOUT ANY WARRANTY; without even the +implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. See the GNU Library General Public License for more details. +You should have received a copy of the GNU Library General Public +License along with this library; if not, write to the Free Software +Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + + + + + + + + + + + + + + + + + + + + + + + + + + + +//# 150 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/values.h" + + + + + + + + + + + + + + + + + + + + + + + + + +//# 149 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/math.h" 2 + + +/* On some systems, HUGE ought to be MAXFLOAT or IEEE infinity */ + + + + + + +/* sequents don't supply these. The following should suffice */ + + + + + + + + + +/* These seem to be sun & sysV names of these constants */ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +//# 33 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/builtin.h" 2 + + +typedef void (*one_arg_error_handler_t)(const char*); +typedef void (*two_arg_error_handler_t)(const char*, const char*); + +long gcd(long, long); +long lg(unsigned long); +double pow(double, long); +long pow(long, long); + +double start_timer(); +double return_elapsed_time(double last_time = 0.0); + +char* itoa(long x, int base = 10, int width = 0); +char* itoa(unsigned long x, int base = 10, int width = 0); + +char* itoa(long long x, int base = 10, int width = 0); +char* itoa(unsigned long long x, int base = 10, int width = 0); + +char* dtoa(double x, char cvt = 'g', int width = 0, int prec = 6); + +char* hex(long x, int width); +char* hex(unsigned long x, int width); +char* hex(int x, int width); +char* hex(short x, int width); +char* hex(unsigned int x, int width); +char* hex(unsigned short x, int width); + +char* oct(long x, int width); +char* oct(unsigned long x, int width); +char* oct(int x, int width); +char* oct(short x, int width); +char* oct(unsigned int x, int width) ; +char* oct(unsigned short x, int width); + +char* dec(long x, int width); +char* dec(unsigned long x, int width); +char* dec(int x, int width); +char* dec(short x, int width); +char* dec(unsigned int x, int width) ; +char* dec(unsigned short x, int width); + +char* form(const char* fmt ...); +char* chr(char ch, int width = 0); +char* str(const char* s, int width = 0); + +unsigned int hashpjw(const char*); +unsigned int multiplicativehash(int); +unsigned int foldhash(double); + +extern void default_one_arg_error_handler(const char*); +extern void default_two_arg_error_handler(const char*, const char*); + +extern two_arg_error_handler_t lib_error_handler; + +extern two_arg_error_handler_t + set_lib_error_handler(two_arg_error_handler_t f); + + +double abs(double arg); +float abs(float arg); +short abs(short arg); +long abs(long arg); +int sign(long arg); +int sign(double arg); +long sqr(long arg); +double sqr(double arg); +int even(long arg); +int odd(long arg); +long lcm(long x, long y); +void setbit(long& x, long b); +void clearbit(long& x, long b); +int testbit(long x, long b); + +signed char min(signed char a, signed char b); +unsigned char min(unsigned char a, unsigned char b); + +signed short min(signed short a, signed short b); +unsigned short min(unsigned short a, unsigned short b); + +signed int min(signed int a, signed int b); +unsigned int min(unsigned int a, unsigned int b); + +signed long min(signed long a, signed long b); +unsigned long min(unsigned long a, unsigned long b); + +float min(float a, float b); + +double min(double a, double b); + +signed char max(signed char a, signed char b); +unsigned char max(unsigned char a, unsigned char b); + +signed short max(signed short a, signed short b); +unsigned short max(unsigned short a, unsigned short b); + +signed int max(signed int a, signed int b); +unsigned int max(unsigned int a, unsigned int b); + +signed long max(signed long a, signed long b); +unsigned long max(unsigned long a, unsigned long b); + +float max(float a, float b); + +double max(double a, double b); + + + + +inline double abs(double arg) +{ + return (arg < 0.0)? -arg : arg; +} + +inline float abs(float arg) +{ + return (arg < 0.0)? -arg : arg; +} + +inline short abs(short arg) +{ + return (arg < 0)? -arg : arg; +} + +inline long abs(long arg) +{ + return (arg < 0)? -arg : arg; +} + +inline int sign(long arg) +{ + return (arg == 0) ? 0 : ( (arg > 0) ? 1 : -1 ); +} + +inline int sign(double arg) +{ + return (arg == 0.0) ? 0 : ( (arg > 0.0) ? 1 : -1 ); +} + +inline long sqr(long arg) +{ + return arg * arg; +} + +inline double sqr(double arg) +{ + return arg * arg; +} + +inline int even(long arg) +{ + return !(arg & 1); +} + +inline int odd(long arg) +{ + return (arg & 1); +} + +inline long lcm(long x, long y) +{ + return x / gcd(x, y) * y; +} + +inline void setbit(long& x, long b) +{ + x |= (1 << b); +} + +inline void clearbit(long& x, long b) +{ + x &= ~(1 << b); +} + +inline int testbit(long x, long b) +{ + return ((x & (1 << b)) != 0); +} + + + + +//# 46 "/sandbox/wbaker/wbaker0/source/mips/include/sumachine++.h" 2 + + +//# 65 "/sandbox/wbaker/wbaker0/source/mips/include/sumachine++.h" + + +// Take the nice stuff that the regular sumachine.h provides +extern "C" { +//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/sumachine.h" 1 + + + +/* + * Define a ``Standard Unix Machine'' + * + * By whatever means are available in /lib/cpp, figure out + * what type of operating system, maker, machine architecture + * and architecture instance we are on. + * + * OPSYS_TYPE - the type of operating system (e.g. vms) + * OPSYS_SUBTYPE - the subtype of operating system (e.g. bsd, sys5, etc) + * OPSYS_MFR - the manufacturer (e.g. Hewlett-Packard) + * OPSYS_VERS - the operating system version (e.g. sun 4.0) + * + * CPU_TYPE - the architecture (e.g. 68K) + * CPU_MODEL - the architecture instance (e.g. 68010) + * + * $Revision: 1.8 $ + * $Date: 1995/05/07 18:57:48 $ + * $Source: /cvs/cvsfiles/devo/gcc/testsuite/g++.old-deja/g++.mike/p785.C,v $ + * + * This file should be #included as the 1st line of each and every .c file + * + * It ensures that the environment which those src files expect exists + * either by fiat or by faking it where the host operating system is not + * up to snuff. + */ + +/* + * The OPSYS specifics + * + * Parameterized with the best known /lib/cpp predefines + */ + + + + + + + + + +/* + * Note that everyone defines the symbol unix except IBM's AIX 3.1 + * which doesn't define unix but DOES define the symbol _AIX + */ + + + + + + + + + + + + + + + + + + + + + +/* + * WATCHOUT - the newer gcc doesn't define __GNU__ + * So we may have to define __GNU__ ourselves + * + * __GNU__ is the old way + * __GNUC__ is the new way + * + * Use gcc -v somefile.c to determine what is being passed. + */ + +/* + * GNU doesn't know about any opsys-specific + * cpp tokens, so we must figure them out for it. + * GNU does however know about architecture-tokens + */ +//# 93 "/sandbox/wbaker/wbaker0/source/mips/include/sumachine.h" + + + + +/* then if defined(vax) || defined(mips) */ +/* then if >= ultrix 4.2 => defined(__vax) || defined(__mips) */ + + +/* + * gcc 1.39 uses the words mips and __mips__ while Ultrix 4.2 has + * been coded in terms of __mips (only!) - so we have to hack it. + * + * See from Ultrix 4.2 + * + * Unfortunately also, is turned on only if __STDC__ + * is undefined. gcc defines __STDC__ and you can't undef it. So + * We are forced here (as with math.h) to copy and + * strip off the #if !defined(__STDC__). + * + * Further unfortunateness occurs in that the only way we have of + * discovering that we're in Ultrix 4.2 is to #include + * and check for the vector unit support #defined there. However + * we need the workarounds to be defined first in + * order to get the full effect of . + * + * So we have to do all this stuff under any and all Ultrix versions. + * + * We also have to work around the fact that the GNU (gcc 1.95.0 and later) + * compilers may be defining this stuff already + */ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +/* end of fakeout */ + + +/* + * The r2000 and r3000 are indistinguishable (so far) + */ + + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/sys/types.h" 1 + + +extern "C" +{ + + + + + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stddef.h" 1 +//# 12 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stddef.h" + +//# 10 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/sys/types.h" 2 + + + + + +//# 1 "/usr/include/sys/types.h" 1 +/* @(#)types.h 4.3 (ULTRIX) 2/28/91 */ + +/************************************************************************ + * * + * Copyright (c) 1984 - 1989 by * + * Digital Equipment Corporation, Maynard, MA * + * All rights reserved. * + * * + * This software is furnished under a license and may be used and * + * copied only in accordance with the terms of such license and * + * with the inclusion of the above copyright notice. This * + * software or any other copies thereof may not be provided or * + * otherwise made available to any other person. No title to and * + * ownership of the software is hereby transferred. * + * * + * This software is derived from software received from the * + * University of California, Berkeley, and from Bell * + * Laboratories. Use, duplication, or disclosure is subject to * + * restrictions under license agreements with University of * + * California and with AT&T. * + * * + * The information in this software is subject to change without * + * notice and should not be construed as a commitment by Digital * + * Equipment Corporation. * + * * + * Digital assumes no responsibility for the use or reliability * + * of its software on equipment which is not supplied by Digital. * + * * + ************************************************************************/ + +/* ------------------------------------------------------------------------ + * Modification History: /sys/h/types.h + * + * 20-Dec-1989 Larry Scott + * added #ifdef's for compliance + * + * 16-Jun-1989 Jon Reeves + * size_t must be unsigned, per ANSI and X/Open + * + * 05-Jun-1989 Jon Reeves + * Change latch name for size_t; it's in lots of headers. + * + * 12-May-1989 Todd M. Katz TMK0001 + * Added volatile type definitions: vu_long, vu_short, vu_char, + * v_long, v_short, and v_char. + * + * 08-May-1989 -- Ken Lesniak + * Conditionalize items also defined in time.h. + * + * 1-Feb-89 -- jmartin + * typedef s_char + * + * 15-Jan-88 lp + * Merge of final 43BSD changes. + * + * 31-August-1987 -- Mark Parenti + * Add definitions needed for POSIX compliance + * + * 27-April-1987 -- Larry Cohen + * Modify the typedef "fd_set" to accomodate 64 file descriptors. + * + * David L Ballenger, 8-Mar-1985 + * 0002 Add types for System V compatibility. + * + * 23 Oct 84 -- jrs + * Add ifdef so we can be nested without problem + * Derived from 4.2BSD, labeled: + * types.h 6.2 84/06/09 + * + * ----------------------------------------------------------------------- + */ + + + + + + + +//# 1 "/usr/include/ansi_compat.h" 1 +/* + * @(#)ansi_compat.h 4.4 (ULTRIX) 10/8/90 + */ + +/************************************************************************ + * * + * Copyright (c) 1990 by * + * Digital Equipment Corporation, Maynard, MA * + * All rights reserved. * + * * + * This software is furnished under a license and may be used and * + * copied only in accordance with the terms of such license and * + * with the inclusion of the above copyright notice. This * + * software or any other copies thereof may not be provided or * + * otherwise made available to any other person. No title to and * + * ownership of the software is hereby transferred. * + * * + * The information in this software is subject to change without * + * notice and should not be construed as a commitment by Digital * + * Equipment Corporation. * + * * + * Digital assumes no responsibility for the use or reliability * + * of its software on equipment which is not supplied by Digital. * + * * + ************************************************************************/ + +/* + * To avoid namespace pollution when using the ULTRIX header files under the + * DEC ANSI compiler, all user-visible header files were modifed to reference + * ANSI-style predefined macro name rather than their traditional names + * (__ultrix vice ultrix). Every file which accesses a predefined macro name + * must include this file before any other files are included or the macros + * are tested. + * + * In strict ANSI mode, the appropriate ANSI-style macros are already + * defined and the redefinitions in this file will not be seen. When using + * pcc, the traditional macro names are defined and this file will define + * ANSI-style equivalents of the traditional names. When using the DEC C + * compiler, both the traditional and ANSI predefined macro names are + * available so the definitions in this file are not made visible. + * + */ + + +//# 116 "/usr/include/ansi_compat.h" + +//# 79 "/usr/include/sys/types.h" 2 + + + + +/* + * Basic system types and major/minor device constructing/busting macros. + */ + +/* major part of a device */ + + +/* minor part of a device */ + + +/* make a device number */ + + +typedef unsigned char u_char; +typedef unsigned short u_short; +typedef unsigned int u_int; +typedef unsigned int uint; /* sys V compatibility */ +typedef unsigned long u_long; +typedef unsigned short ushort; /* sys III compat */ + +typedef volatile char v_char; +typedef volatile short v_short; +typedef volatile long v_long; +typedef volatile unsigned char vu_char; +typedef volatile unsigned short vu_short; +typedef volatile unsigned long vu_long; + +typedef + + signed + + char s_char; + + + + + + + + + +typedef struct _physadr { int r[1]; } *physadr; +/* + * WARNING: + * this must match the definition of kernel jmpbuf's in machine/pcb.h + */ +typedef struct label_t { + int val[12]; +} label_t; + + +typedef struct _quad { long val[2]; } quad; +typedef long daddr_t; +typedef char * caddr_t; +typedef u_long gno_t; +typedef short cnt_t; /* sys V compatibility */ +typedef long swblk_t; +typedef long paddr_t; /* sys V compatibility */ +typedef long audit_ID_t; + + +typedef short dev_t; +typedef short gid_t; /* POSIX compliance */ +typedef unsigned long ino_t; +typedef unsigned short mode_t; /* POSIX compliance */ +typedef short nlink_t; /* POSIX compliance */ +typedef int off_t; + + +typedef int pid_t; /* POSIX compliance */ + +typedef short uid_t; /* POSIX compliance */ + + +typedef int time_t; + + + + + + + + + +typedef int clock_t; /* POSIX compliance */ + +typedef long key_t; /* sys V compatibility */ + + + + +/* + * The maximum number of file descriptors is now a configurable option + * (max_nofile variable in /sys/conf/{mips|vax}/param.c). + * The getdtablesize(2) system call should be used to obtain the + * current limit. The value returned by getdtablesize() must be greater + * than 64, and less than or equal to MAX_NOFILE in types.h . The + * MAX_NOFILE define is needed for backward compatability with broken + * programs that need a static sized array for selecting. These programs + * should be modified to use the getdtablesize() interface for sizing. + */ + + +/* + * Select uses bit masks of file descriptors in longs. + * These macros manipulate such bit fields (the filesystem macros use chars). + * FD_SETSIZE may be defined by the user, but the default here + * should be >= NOFILE (param.h). + */ + + + + +/* How many things we'll allow select to use. 0 if unlimited */ + +typedef long fd_mask; + + + + + + +typedef struct fd_set { + fd_mask fds_bits[(((4096 )+(( (sizeof(fd_mask) * 8 ) )-1))/( (sizeof(fd_mask) * 8 ) )) ]; +} fd_set; + + + + + + + + +//# 15 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/sys/types.h" 2 + + + + + + +} + + + + +//# 199 "/sandbox/wbaker/wbaker0/source/mips/include/sumachine.h" 2 + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/signal.h" 1 +// This may look like C code, but it is really -*- C++ -*- +/* +Copyright (C) 1989 Free Software Foundation + written by Doug Lea (dl@rocky.oswego.edu) + +This file is part of the GNU C++ Library. This library is free +software; you can redistribute it and/or modify it under the terms of +the GNU Library General Public License as published by the Free +Software Foundation; either version 2 of the License, or (at your +option) any later version. This library is distributed in the hope +that it will be useful, but WITHOUT ANY WARRANTY; without even the +implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. See the GNU Library General Public License for more details. +You should have received a copy of the GNU Library General Public +License along with this library; if not, write to the Free Software +Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + + + +extern "C" { + + + + +//# 1 "/usr/include/signal.h" 1 +/* @(#)signal.h 2.8 (ULTRIX) 11/9/89 */ + +/************************************************************************ + * * + * Copyright (c) 1987-1989 by * + * Digital Equipment Corporation, Maynard, MA * + * All rights reserved. * + * * + * This software is furnished under a license and may be used and * + * copied only in accordance with the terms of such license and * + * with the inclusion of the above copyright notice. This * + * software or any other copies thereof may not be provided or * + * otherwise made available to any other person. No title to and * + * ownership of the software is hereby transferred. * + * * + * This software is derived from software received from the * + * University of California, Berkeley, and from Bell * + * Laboratories. Use, duplication, or disclosure is subject to * + * restrictions under license agreements with University of * + * California and with AT&T. * + * * + * The information in this software is subject to change without * + * notice and should not be construed as a commitment by Digital * + * Equipment Corporation. * + * * + * Digital assumes no responsibility for the use or reliability * + * of its software on equipment which is not supplied by Digital. * + * * + ************************************************************************/ +/************************************************************************ + * Modification History * + * * + * Debby Haeck 11/14/90 * + * added new Vector Arithmetic Exception handling codes * + * Debby Haeck 9/4/90 * + * added new u_code for vector support * + * ILL_VECOP_FAULT, ILL_VECINST_FAULT, TERM_VECT_HARD and * + * TERM_VECT_TOOMANY * + * Tak Yin Wong 3/390 * + * Add ifdef's for POSIX and XOPEN * + * Linda Wilson 9/12/89 * + * typedef sigset_t for X/OPEN * + * Linda Wilson 9/12/89 * + * ifdef out sigmask for POSIX * + * Jon Reeves 7/14/89 * + * Add X/Open mandated function declarations. * + * Jon Reeves 5/16/89 * + * Add new BRK_STACKOVERFLOW def from MIPS 2.0 cmplrs * + * Jon Reeves 5/12/89 * + * Add raise() and sig_atomic_t for ANSI * + * Mark Parenti 2/06/88 * + * Change SA_CLDSTOP to SA_NOCLDSTOP per POSIX change * + * Fred Glover 1/12/88 * + * Add SIGLOST - server crash Sys-V lock notification * + * * + * Larry Cohen 10/1/85 * + * Add SIGWINCH - window change signal * + * * + * Greg Depp 25 Jun 85 * + * Moved SIGUSR1 and SIGUSR2 to 30 and 31 to conform with Berkeley * + * * + * David L Ballenger, 28-Mar-1985 * + * 0001 Add definitions for System V compatibility * + * * + ************************************************************************/ + + + + + + + + +//# 1 "/usr/include/ansi_compat.h" 1 +/* + * @(#)ansi_compat.h 4.4 (ULTRIX) 10/8/90 + */ + +/************************************************************************ + * * + * Copyright (c) 1990 by * + * Digital Equipment Corporation, Maynard, MA * + * All rights reserved. * + * * + * This software is furnished under a license and may be used and * + * copied only in accordance with the terms of such license and * + * with the inclusion of the above copyright notice. This * + * software or any other copies thereof may not be provided or * + * otherwise made available to any other person. No title to and * + * ownership of the software is hereby transferred. * + * * + * The information in this software is subject to change without * + * notice and should not be construed as a commitment by Digital * + * Equipment Corporation. * + * * + * Digital assumes no responsibility for the use or reliability * + * of its software on equipment which is not supplied by Digital. * + * * + ************************************************************************/ + +/* + * To avoid namespace pollution when using the ULTRIX header files under the + * DEC ANSI compiler, all user-visible header files were modifed to reference + * ANSI-style predefined macro name rather than their traditional names + * (__ultrix vice ultrix). Every file which accesses a predefined macro name + * must include this file before any other files are included or the macros + * are tested. + * + * In strict ANSI mode, the appropriate ANSI-style macros are already + * defined and the redefinitions in this file will not be seen. When using + * pcc, the traditional macro names are defined and this file will define + * ANSI-style equivalents of the traditional names. When using the DEC C + * compiler, both the traditional and ANSI predefined macro names are + * available so the definitions in this file are not made visible. + * + */ + + +//# 116 "/usr/include/ansi_compat.h" + +//# 74 "/usr/include/signal.h" 2 + + + + + + + + + + + + + + + + + + + /* absent or non-vector capable sys */ +/* CHME, CHMS, CHMU are not yet given back to users reasonably */ + + + + + + + + + + + + + + + + + + + +/* the following are used to for Vector Arithmetic Exception handling */ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +/* Add System V signal definitions (DLB001) */ + + + + + + + +/* + * Codes for the mips break instruction. + */ + + + + + + + + + + + + + + + + +/* Accesses to sig_atomic_t are atomic, even with async interrupts. + Not an issue for us, but ANSI requires the definition. */ +typedef long sig_atomic_t; +typedef int sigset_t; /* type used for sigsetops() functions */ + + +/* + * Signal vector "template" used in sigvec call. + */ +struct sigvec { + void (*sv_handler)(); /* signal handler */ + sigset_t sv_mask; /* signal mask to apply */ + int sv_flags; /* see signal options below */ +}; + + +/* + * The following structure must be exactly the same as the above structure + * with the names changed for POSIX compliance. + */ +struct sigaction { + void (*sa_handler)(); /* signal handler */ + sigset_t sa_mask; /* signal mask to apply */ + int sa_flags; /* see signal options below */ +}; + + + + + + + + + + + + + + +/* Defines for sigprocmask() call. POSIX. + */ + + + + + + +/* + * Structure used in sigstack call. + */ +struct sigstack { + char *ss_sp; /* signal stack pointer */ + int ss_onstack; /* current status */ +}; + +/* + * Information pushed on stack when a signal is delivered. + * This is used by the kernel to restore state following + * execution of the signal handler. It is also made available + * to the handler to allow it to properly restore state if + * a non-standard exit is performed. + * +//#ifdef __vax + * XXX - sigcontext needs updating per 4.3BSD - rr + * +//#endif __vax +//#ifdef __mips + * WARNING: THE sigcontext MUST BE KEPT CONSISTENT WITH /usr/include/setjmp.h + * AND THE LIBC ROUTINES setjmp() AND longjmp() +//#endif __mips + */ +struct sigcontext { + + /* + * BEGIN REGION THAT MUST CORRESPOND WITH setjmp.h + * BEGIN REGION THAT MUST CORRESPOND WITH A jmp_buf + */ + + int sc_onstack; /* sigstack state to restore */ + int sc_mask; /* signal mask to restore */ + + + + + + + int sc_pc; /* pc at time of signal */ + /* + * General purpose registers + */ + int sc_regs[32]; /* processor regs 0 to 31 */ + int sc_mdlo; /* mul/div low */ + int sc_mdhi; /* mul/div high */ + /* + * Floating point coprocessor state + */ + int sc_ownedfp; /* fp has been used */ + int sc_fpregs[32]; /* fp regs 0 to 31 */ + int sc_fpc_csr; /* floating point control and status reg */ + int sc_fpc_eir; /* floating point exception instruction reg */ + /* + * END OF REGION THAT MUST AGREE WITH setjmp.h + * END OF jmp_buf REGION + */ + /* + * System coprocessor registers at time of signal + */ + int sc_cause; /* cp0 cause register */ + int sc_badvaddr; /* cp0 bad virtual address */ + int sc_badpaddr; /* cpu bd bad physical address */ + +}; + + + + + + + + + + + + + + + + + + + + + + + +/* + * prototypes + * + */ +extern void (*signal(int __sig, void(*__func)(int)))(int); +int raise( int __sig ); +int kill( pid_t __pid, int __sig ); +int sigemptyset( sigset_t *__set ); +int sigfillset( sigset_t *__set ); +int sigaddset( sigset_t *__set, int __signo ); +int sigdelset( sigset_t *__set, int __signo ); +int sigismember( const sigset_t *__set, int __signo ); +int sigaction( int __sig, const struct sigaction *__act, + struct sigaction *__oact ); +int sigprocmask( int __how, const sigset_t *__set, sigset_t *__oset ); +int sigpending( sigset_t *__set ); +int sigsuspend( const sigset_t *__sigmask ); + + + + + + + + + + + +/* + * Macro for converting signal number to a mask suitable for + * sigblock(). + */ + + + + + + +//# 26 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/signal.h" 2 + + + + +// The Interviews folks call this SignalHandler. Might as well conform. +// Beware: some systems think that SignalHandler returns int. +typedef void (*SignalHandler) (int); + +extern SignalHandler signal(int sig, SignalHandler action); +extern SignalHandler sigset(int sig, SignalHandler action); +extern SignalHandler ssignal(int sig, SignalHandler action); +extern int gsignal (int sig); +extern int kill (int pid, int sig); +extern int killpg(int, int); +extern int siginterrupt(int, int); +extern void psignal(unsigned, char*); + + +extern int sigsetmask(int mask); +extern int sigblock(int mask); +extern int sigpause(int mask); +extern int sigvec(int sig, struct sigvec* v, struct sigvec* prev); + + +// The Interviews version also has these ... + + + + + + + + + + + + + +} + + + +//# 200 "/sandbox/wbaker/wbaker0/source/mips/include/sumachine.h" 2 + + +/* + * Note that in Ultrix 4.2 renames all of the + * previously-predefined cpp names to __names. Also there is + * new support for vector processors - TERM_VECT_HARD etc. + */ + +//# 244 "/sandbox/wbaker/wbaker0/source/mips/include/sumachine.h" + + +//# 263 "/sandbox/wbaker/wbaker0/source/mips/include/sumachine.h" + +//# 283 "/sandbox/wbaker/wbaker0/source/mips/include/sumachine.h" + +/* { */ +//# 298 "/sandbox/wbaker/wbaker0/source/mips/include/sumachine.h" + +//# 319 "/sandbox/wbaker/wbaker0/source/mips/include/sumachine.h" + +//# 328 "/sandbox/wbaker/wbaker0/source/mips/include/sumachine.h" + +//# 345 "/sandbox/wbaker/wbaker0/source/mips/include/sumachine.h" + + + + + + + + + + + + + + + + + + + + + + + + + + +//# 387 "/sandbox/wbaker/wbaker0/source/mips/include/sumachine.h" + + + + + + + +/* + * THE CPU specifics + * + * Parameterized with the best known /lib/cpp predefines + * Set up for a middle-of-the-road machine. + */ + +/* + * DECstation Processor + * 2100 R2000 (slower clock) + * 3100 R2000 + * 5000 R3000 + * 5400 R3000 + * ???? R6000 + */ +/* + * We might be on the R3000 machine, but there is really + * no way of distinguishing that from the src-code level. + * The GNU people define some stuff, but its usually wrong. + */ + + + + + + + + + + + + + + + + + +//# 453 "/sandbox/wbaker/wbaker0/source/mips/include/sumachine.h" + + + + + + + + + +//# 471 "/sandbox/wbaker/wbaker0/source/mips/include/sumachine.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +//# 512 "/sandbox/wbaker/wbaker0/source/mips/include/sumachine.h" + +/* will we be porting to this? */ +//# 522 "/sandbox/wbaker/wbaker0/source/mips/include/sumachine.h" + + +//# 537 "/sandbox/wbaker/wbaker0/source/mips/include/sumachine.h" + + +/* + * The following MUST be literals else /lib/cpp cannot do + * == operations on them. Remember cpp does strcmps, not MATH + * + * OPSYS_TYPE + * + * #if OPSYS_TYPE == MD_opsystype + * #endif + */ + + + + + + +/* + * OPSYS_SUBTYPE + * + * #if OPSYS_SUBTYPE == MD_opsyssubtype + * #endif + */ + + + + + + + + + + + +/* + * OPSYS_MFR + * + * #if OPSYS_MFR == MD_opsysmfr + * #endif + */ + + + + + + + + + + + + + + + +/* + * OPSYS_VERS + * + * #if OPSYS_VERS == MD_opsysvers + * #endif + * #if OPSYS_MFR == MD_opsysmfr && OPSYS_VERS <= MD_opsysvers + * #endif + */ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +/* + * CPU_TYPE + * + * #if CPU_TYPE == MD_cputype + * #endif + */ + + + + + + + + + + + + + + + + + + + + +/* + * CPU_MODEL + * + * #if CPU_MODEL == MD_modelname + * #endif + */ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +/* don't add this stuff in if the query program display.sh is being run */ + +//# 1754 "/sandbox/wbaker/wbaker0/source/mips/include/sumachine.h" + + + + + +//# 69 "/sandbox/wbaker/wbaker0/source/mips/include/sumachine++.h" 2 + +} + +// Always turn this stuff on b/c otherwise nothing works + + + + + +//# 1 "GctNameRef.List.cc" 2 + +//# 1 "../../../../mips/include/Gct/genclasses.h" 1 +// -*- C++ -*- + + + +// +// genclasses - The GNU Container Classes +// +// Expects to be included by Gct.h or where appropriate +// especially before any genclass class headerfile is included. +// +// Wendell Baker, Berkeley CAD Group, 1991 (wbaker@ic.Berkeley.EDU) +// + +// $Source: /cvs/cvsfiles/devo/gcc/testsuite/g++.old-deja/g++.mike/p785.C,v $ +// $Author: jason $ +// $Revision: 1.8 $ +// $Date: 1995/05/07 18:57:48 $ + +// Make sure that we get all of the inline functions too but prevent duplicate +// definition warnings. + + + + + + + + + + +// +// Turn off the definitions of these hash functions +// +// unsigned hash(GctAstRef&) +// +// So that the following will match and be used instead: +// +// unsigned hash(GctRef&) +// +// The idea is to not allow the various header files to +// create (say) ``unsigned hash(GctAstRef&)'' but to use +// ``hash(x)'' for the hash function anyway. We just want +// the hash() function used to be ``unsigned hash(GctRef&)'' +// + + +//# 1 "../../../../mips/include/Gct/Reference.h" 1 +// -*- C++ -*- + + + +// +// Classes: +// GctRef +// GctReferenceObject +// +// Wendell Baker, Berkeley CAD Group, 1992 (wbaker@ic.Berkeley.EDU) +// + + + + + +//#pragma interface + + +// $Source: /cvs/cvsfiles/devo/gcc/testsuite/g++.old-deja/g++.mike/p785.C,v $ +// $Author: jason $ +// $Revision: 1.8 $ +// $Date: 1995/05/07 18:57:48 $ + +//# 1 "../../../../mips/include/Gct/Reference/GctReferenceCount.h" 1 +// -*- C++ -*- + + + +// +// GctReferenceCount class +// +// Expects to be included by Gct/Reference.h +// +// Wendell Baker, Berkeley CAD Group, 1992 (wbaker@ic.Berkeley.EDU) +// + + + + + +//#pragma interface + + +// $Source: /cvs/cvsfiles/devo/gcc/testsuite/g++.old-deja/g++.mike/p785.C,v $ +// $Author: jason $ +// $Revision: 1.8 $ +// $Date: 1995/05/07 18:57:48 $ + +#include <bool.h> + +//# 25 "../../../../mips/include/Gct/Reference/GctReferenceCount.h" 2 + + +//# 1 "../../../../mips/include/Gct/GctErrorHandler.h" 1 +// -*- C++ -*- + + + +// +// GctErrorHandler class +// +// Expects to be included by Gct.h +// +// Wendell Baker, Berkeley CAD Group, 1991 (wbaker@ic.Berkeley.EDU) +// + + + + + +//#pragma interface + + +// $Source: /cvs/cvsfiles/devo/gcc/testsuite/g++.old-deja/g++.mike/p785.C,v $ +// $Author: jason $ +// $Revision: 1.8 $ +// $Date: 1995/05/07 18:57:48 $ + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/bool.h" 1 + + + + + + + +//# 25 "../../../../mips/include/Gct/GctErrorHandler.h" 2 + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/String.h" 1 +// This may look like C code, but it is really -*- C++ -*- +/* +Copyright (C) 1988 Free Software Foundation + written by Doug Lea (dl@rocky.oswego.edu) + +This file is part of the GNU C++ Library. This library is free +software; you can redistribute it and/or modify it under the terms of +the GNU Library General Public License as published by the Free +Software Foundation; either version 2 of the License, or (at your +option) any later version. This library is distributed in the hope +that it will be useful, but WITHOUT ANY WARRANTY; without even the +implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. See the GNU Library General Public License for more details. +You should have received a copy of the GNU Library General Public +License along with this library; if not, write to the Free Software +Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + + + + +//#pragma interface + + + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stream.h" 1 + + + +// Compatibility with old library. + + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" 1 +// This is part of the iostream library, providing -*- C++ -*- input/output. +// Copyright (C) 1991 Per Bothner. +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Library General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Library General Public License for more details. +// +// You should have received a copy of the GNU Library General Public +// License along with this library; if not, write to the Free +// Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + + +//#pragma interface + + + + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/streambuf.h" 1 +// This is part of the iostream library, providing -*- C++ -*- input/output. +// Copyright (C) 1991 Per Bothner. +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Library General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Library General Public License for more details. +// +// You should have received a copy of the GNU Library General Public +// License along with this library; if not, write to the Free +// Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + + + +//#pragma interface + + +/* KLUDGES!! */ +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stddef.h" 1 +//# 12 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stddef.h" + +//# 25 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/streambuf.h" 2 + + + + + + + + + + + + + + + + +class ostream; class streambuf; + +typedef long streamoff, streampos; + +struct _ios_fields { // The data members of an ios. + streambuf *_strbuf; + ostream* _tie; + long _width; + unsigned long _flags; + char _fill; + unsigned char _state; + unsigned short _precision; +}; + + +enum state_value { _good = 0, _eof = 1, _fail = 2, _bad = 4 }; + + +class ios : public _ios_fields { + public: + enum io_state { goodbit=0, eofbit=1, failbit=2, badbit=4 }; + enum open_mode { + in=1, + out=2, + ate=4, + app=8, + trunc=16, + nocreate=32, + noreplace=64 }; + enum seek_dir { beg, cur, end}; + enum { skipws=01, left=02, right=04, internal=010, + dec=020, oct=040, hex=0100, + showbase=0200, showpoint=0400, uppercase=01000, showpos=02000, + scientific=04000, fixed=0100000, unitbuf=020000, stdio=040000, + dont_close=0x80000000 //Don't close streambuf when destroying stream + }; + + ostream* tie() { return _tie; } + ostream* tie(ostream* val) { ostream* save=_tie; _tie=val; return save; } + + // Methods to change the format state. + char fill() { return _fill; } + char fill(char newf) { char oldf = _fill; _fill = newf; return oldf; } + unsigned long flags() { return _flags; } + unsigned long flags(unsigned long new_val) { + unsigned long old_val = _flags; _flags = new_val; return old_val; } + unsigned short precision() { return _precision; } + unsigned short precision(int newp) { + unsigned short oldp = _precision; _precision = (unsigned short)newp; + return oldp; } + unsigned long setf(unsigned long val) { + unsigned long oldbits = _flags; + _flags |= val; return oldbits; } + unsigned long setf(unsigned long val, unsigned long mask) { + unsigned long oldbits = _flags; + _flags = (_flags & ~mask) | (val & mask); return oldbits; } + unsigned long unsetf(unsigned long mask) { + unsigned long oldbits = _flags & mask; + _flags &= ~mask; return oldbits; } + long width() { return _width; } + long width(long val) { long save = _width; _width = val; return save; } + + static const unsigned long basefield; + static const unsigned long adjustfield; + static const unsigned long floatfield; + + streambuf* rdbuf() { return _strbuf; } + void clear(int state = 0) { _state = state; } + int good() { return _state == 0; } + int eof() { return _state & ios::eofbit; } + int fail() { return _state & (ios::badbit|ios::failbit); } + int bad() { return _state & ios::badbit; } + int rdstate() { return _state; } + void set(int flag) { _state |= flag; } + operator void*() { return fail() ? (void*)0 : (void*)this; } + int operator!() { return fail(); } + + + void unset(state_value flag) { _state &= ~flag; } + void close(); + int is_open(); + int readable(); + int writable(); + + + protected: + ios(streambuf*sb) { _strbuf=sb; _state=0; _width=0; _fill=' '; + _flags=ios::skipws; _precision=6; } +}; + + + + +typedef ios::seek_dir _seek_dir; + + +// Magic numbers and bits for the _flags field. +// The magic numbers use the high-order bits of _flags; +// the remaining bits are abailable for variable flags. +// Note: The magic numbers must all be negative if stdio +// emulation is desired. + + + + + + + + + + + + + + + +struct __streambuf { + // NOTE: If this is changed, also change __FILE in stdio/stdio.h! + int _flags; /* High-order word is _IO_MAGIC; rest is flags. */ + char* _gptr; /* Current get pointer */ + char* _egptr; /* End of get area. */ + char* _eback; /* Start of putback+get area. */ + char* _pbase; /* Start of put area. */ + char* _pptr; /* Current put pointer. */ + char* _epptr; /* End of put area. */ + char* _base; /* Start of reserve area. */ + char* _ebuf; /* End of reserve area. */ + struct streambuf *_chain; +}; + +struct streambuf : private __streambuf { + friend class ios; + friend class istream; + friend class ostream; + protected: + static streambuf* _list_all; /* List of open streambufs. */ + streambuf*& xchain() { return _chain; } + void _un_link(); + void _link_in(); + char* gptr() const { return _gptr; } + char* pptr() const { return _pptr; } + char* egptr() const { return _egptr; } + char* epptr() const { return _epptr; } + char* pbase() const { return _pbase; } + char* eback() const { return _eback; } + char* ebuf() const { return _ebuf; } + char* base() const { return _base; } + void xput_char(char c) { *_pptr++ = c; } + int xflags() { return _flags; } + int xflags(int f) { int fl = _flags; _flags = f; return fl; } + void xsetflags(int f) { _flags |= f; } + void gbump(int n) { _gptr += n; } + void pbump(int n) { _pptr += n; } + void setb(char* b, char* eb, int a=0); + void setp(char* p, char* ep) { _pbase=_pptr=p; _epptr=ep; } + void setg(char* eb, char* g, char *eg) { _eback=eb; _gptr=g; _egptr=eg; } + public: + static int flush_all(); + static void flush_all_linebuffered(); // Flush all line buffered files. + virtual int underflow(); // Leave public for now + virtual int overflow(int c = (-1) ); // Leave public for now + virtual int doallocate(); + virtual streampos seekoff(streamoff, _seek_dir, int mode=ios::in|ios::out); + virtual streampos seekpos(streampos pos, int mode = ios::in|ios::out); + int sputbackc(char c); + int sungetc(); + streambuf(); + virtual ~streambuf(); + int unbuffered() { return _flags & 2 ? 1 : 0; } + int linebuffered() { return _flags & 0x4000 ? 1 : 0; } + void unbuffered(int i) + { if (i) _flags |= 2 ; else _flags &= ~2 ; } + void linebuffered(int i) + { if (i) _flags |= 0x4000 ; else _flags &= ~0x4000 ; } + int allocate() { + if (base() || unbuffered()) return 0; + else return doallocate(); } + virtual int sync(); + virtual int pbackfail(int c); + virtual int ungetfail(); + virtual streambuf* setbuf(char* p, int len); + int in_avail() { return _egptr - _gptr; } + int out_waiting() { return _pptr - _pbase; } + virtual int sputn(const char* s, int n); + virtual int sgetn(char* s, int n); + long sgetline(char* buf, size_t n, char delim, int putback_delim); + int sbumpc() { + if (_gptr >= _egptr && underflow() == (-1) ) return (-1) ; + else return *(unsigned char*)_gptr++; } + int sgetc() { + if (_gptr >= _egptr && underflow() == (-1) ) return (-1) ; + else return *(unsigned char*)_gptr; } + int snextc() { + if (++_gptr >= _egptr && underflow() == (-1) ) return (-1) ; + else return *(unsigned char*)_gptr; } + int sputc(int c) { + if (_pptr >= _epptr) return overflow(c); + return *_pptr++ = c, (unsigned char)c; } + int vscan(char const *fmt0, char* ap); + int vform(char const *fmt0, char* ap); +}; + +struct __file_fields { + char _fake; + char _shortbuf[1]; + short _fileno; + int _blksize; + char* _save_gptr; + char* _save_egptr; + long _offset; +}; + +class filebuf : public streambuf { + struct __file_fields _fb; + void init(); + public: + filebuf(); + filebuf(int fd); + filebuf(int fd, char* p, int len); + ~filebuf(); + filebuf* attach(int fd); + filebuf* open(const char *filename, const char *mode); + filebuf* open(const char *filename, int mode, int prot = 0664); + virtual int underflow(); + virtual int overflow(int c = (-1) ); + int is_open() { return _fb._fileno >= 0; } + int fd() { return is_open() ? _fb._fileno : (-1) ; } + filebuf* close(); + virtual int doallocate(); + virtual streampos seekoff(streamoff, _seek_dir, int mode=ios::in|ios::out); + int sputn(const char* s, int n); + int sgetn(char* s, int n); + protected: // See documentation in filebuf.C. + virtual int pbackfail(int c); + virtual int sync(); + int is_reading() { return eback() != egptr(); } + char* cur_ptr() { return is_reading() ? gptr() : pptr(); } + /* System's idea of pointer */ + char* file_ptr() { return _fb._save_gptr ? _fb._save_egptr : egptr(); } + int do_flush(); + // Low-level operations (Usually invoke system calls.) + virtual int sys_read(char* buf, size_t size); + virtual long sys_seek(long , _seek_dir); + virtual long sys_write(const void*, long); + virtual int sys_stat(void*); // Actually, a (struct stat*) + virtual int sys_close(); +}; + + +inline int ios::readable() { return rdbuf()->_flags & 4 ; } +inline int ios::writable() { return rdbuf()->_flags & 8 ; } +inline int ios::is_open() {return rdbuf()->_flags & 4 +8 ;} + + + + +//# 25 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" 2 + + +class istream; class ostream; +typedef istream& (*__imanip)(istream&); +typedef ostream& (*__omanip)(ostream&); + +extern istream& ws(istream& ins); +extern ostream& flush(ostream& outs); +extern ostream& endl(ostream& outs); +extern ostream& ends(ostream& outs); + +class ostream : public ios +{ + void do_osfx(); + public: + ostream(); + ostream(streambuf* sb, ostream* tied=0 ); + ~ostream(); + + int opfx() { if (!good()) return 0; if (_tie) _tie->flush(); return 1; } + void osfx() { if (flags() & (ios::unitbuf|ios::stdio)) + do_osfx(); } + streambuf* ostreambuf() const { return _strbuf; } + ostream& flush(); + ostream& put(char c); + ostream& write(const char *s, int n); + ostream& write(const unsigned char *s, int n) { return write((char*)s, n);} + ostream& write(const void *s, int n) { return write((char*)s, n);} + ostream& seekp(streampos); + ostream& seekp(streamoff, _seek_dir); + streampos tellp(); + ostream& form(const char *format ...); + ostream& vform(const char *format, char* args); +}; + +ostream& operator<<(ostream&, char c); +ostream& operator<<(ostream& os, unsigned char c) { return os << (char)c; } +//ostream& operator<<(ostream &os, signed char c) { return os << (char)c; } +extern ostream& operator<<(ostream&, const char *s); +inline ostream& operator<<(ostream& os, const unsigned char *s) +{ return os << (const char*)s; } +//inline ostream& operator<<(ostream& os, const signed char *s) +//{ return os << (const char*)s; } +ostream& operator<<(ostream&, void *p); +ostream& operator<<(ostream&, int n); +ostream& operator<<(ostream&, long n); +ostream& operator<<(ostream&, unsigned int n); +ostream& operator<<(ostream&, unsigned long n); +ostream& operator<<(ostream& os, short n) {return os << (int)n;} +ostream& operator<<(ostream& os, unsigned short n) +{return os << (unsigned int)n;} +ostream& operator<<(ostream&, float n); +ostream& operator<<(ostream&, double n); +ostream& operator<<(ostream& os, __omanip func) { return (*func)(os); } +ostream& operator<<(ostream&, streambuf*); + +class istream : public ios +{ + size_t _gcount; + public: + istream(); + istream(streambuf* sb, ostream*tied=0 ); + ~istream(); + streambuf* istreambuf() const { return _strbuf; } + istream& get(char& c); + istream& get(unsigned char& c); + istream& read(char *ptr, int n); + istream& read(unsigned char *ptr, int n) { return read((char*)ptr, n); } + istream& read(void *ptr, int n) { return read((char*)ptr, n); } + int get() { return _strbuf->sbumpc(); } + istream& getline(char* ptr, int len, char delim = '\n'); + istream& get(char* ptr, int len, char delim = '\n'); + istream& gets(char **s, char delim = '\n'); + int ipfx(int need) { + if (!good()) { set(ios::failbit); return 0; } + if (_tie && (need == 0 || rdbuf()->in_avail())) ; /* THIS IS BAD */ + if (!need && (flags() & ios::skipws) && !ws(*this)) return 0; + return 1; + } + int ipfx0() { // Optimized version of ipfx(0). + if (!good()) { set(ios::failbit); return 0; } + if (_tie) _tie->flush(); + if ((flags() & ios::skipws) && !ws(*this)) return 0; + return 1; + } + int ipfx1() { // Optimized version of ipfx(1). + if (!good()) { set(ios::failbit); return 0; } + if (_tie && rdbuf()->in_avail() == 0) _tie->flush(); + return 1; + } + size_t gcount() { return _gcount; } + istream& seekg(streampos); + istream& seekg(streamoff, _seek_dir); + streampos tellg(); + istream& putback(char ch) { + if (good() && _strbuf->sputbackc(ch) == (-1) ) clear(ios::badbit); + return *this;} + istream& unget() { + if (good() && _strbuf->sungetc() == (-1) ) clear(ios::badbit); + return *this;} + + istream& unget(char ch) { return putback(ch); } + int skip(int i); + +}; + +istream& operator>>(istream&, char*); +istream& operator>>(istream& is, unsigned char* p) { return is >> (char*)p; } +//istream& operator>>(istream& is, signed char* p) { return is >> (char*)p; } +istream& operator>>(istream&, char& c); +istream& operator>>(istream&, unsigned char& c); +//istream& operator>>(istream&, signed char& c); +istream& operator>>(istream&, int&); +istream& operator>>(istream&, long&); +istream& operator>>(istream&, short&); +istream& operator>>(istream&, unsigned int&); +istream& operator>>(istream&, unsigned long&); +istream& operator>>(istream&, unsigned short&); +istream& operator>>(istream&, float&); +istream& operator>>(istream&, double&); +istream& operator>>(istream& is, __imanip func) { return (*func)(is); } + +class iostream : public ios { + size_t _gcount; + public: + iostream(); + operator istream&() { return *(istream*)this; } + operator ostream&() { return *(ostream*)this; } + ~iostream(); + // NOTE: These duplicate istream methods. + istream& get(char& c) { return ((istream*)this)->get(c); } + istream& get(unsigned char& c) { return ((istream*)this)->get(c); } + istream& read(char *ptr, int n) { return ((istream*)this)->read(ptr, n); } + istream& read(unsigned char *ptr, int n) + { return ((istream*)this)->read((char*)ptr, n); } + istream& read(void *ptr, int n) + { return ((istream*)this)->read((char*)ptr, n); } + int get() { return _strbuf->sbumpc(); } + istream& getline(char* ptr, int len, char delim = '\n') + { return ((istream*)this)->getline(ptr, len, delim); } + istream& get(char* ptr, int len, char delim = '\n') + { return ((istream*)this)->get(ptr, len, delim); } + istream& gets(char **s, char delim = '\n') + { return ((istream*)this)->gets(s, delim); } + int ipfx(int need) { return ((istream*)this)->ipfx(need); } + int ipfx0() { return ((istream*)this)->ipfx0(); } + int ipfx1() { return ((istream*)this)->ipfx1(); } + size_t gcount() { return _gcount; } + istream& putback(char ch) { return ((istream*)this)->putback(ch); } + istream& unget() { return ((istream*)this)->unget(); } + istream& seekg(streampos pos) { return ((istream*)this)->seekg(pos); } + istream& seekg(streamoff off, _seek_dir dir) + { return ((istream*)this)->seekg(off, dir); } + streampos tellg() { return ((istream*)this)->tellg(); } + + istream& unget(char ch) { return putback(ch); } + + + // NOTE: These duplicate ostream methods. + int opfx() { return ((ostream*)this)->opfx(); } + void osfx() { ((ostream*)this)->osfx(); } + ostream& flush() { return ((ostream*)this)->flush(); } + ostream& put(char c) { return ((ostream*)this)->put(c); } + ostream& write(const char *s, int n) + { return ((ostream*)this)->write(s, n); } + ostream& write(const unsigned char *s, int n) + { return ((ostream*)this)->write((char*)s, n); } + ostream& write(const void *s, int n) + { return ((ostream*)this)->write((char*)s, n); } + ostream& form(const char *format ...); + ostream& vform(const char *format, char* args) + { return ((ostream*)this)->vform(format, args); } + ostream& seekp(streampos pos) { return ((ostream*)this)->seekp(pos); } + ostream& seekp(streamoff off, _seek_dir dir) + { return ((ostream*)this)->seekp(off, dir); } + streampos tellp() { return ((ostream*)this)->tellp(); } +}; + +extern istream cin; +extern ostream cout, cerr, clog; // clog->rdbuf() == cerr->rdbuf() + +inline ostream& ostream::put(char c) { _strbuf->sputc(c); return *this; } + +struct Iostream_init { } ; // Compatibility hack for AT&T libraray. + + +//# 7 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/stream.h" 2 + + +extern char* form(char*, ...); + +extern char* dec(long, int=0); +extern char* dec(int, int=0); +extern char* dec(unsigned long, int=0); +extern char* dec(unsigned int, int=0); + +extern char* hex(long, int=0); +extern char* hex(int, int=0); +extern char* hex(unsigned long, int=0); +extern char* hex(unsigned int, int=0); + +extern char* oct(long, int=0); +extern char* oct(int, int=0); +extern char* oct(unsigned long, int=0); +extern char* oct(unsigned int, int=0); + +inline istream& WS(istream& str) { return ws(str); } + + +//# 26 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/String.h" 2 + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/Regex.h" 1 +// This may look like C code, but it is really -*- C++ -*- +/* +Copyright (C) 1988 Free Software Foundation + written by Doug Lea (dl@rocky.oswego.edu) + +This file is part of the GNU C++ Library. This library is free +software; you can redistribute it and/or modify it under the terms of +the GNU Library General Public License as published by the Free +Software Foundation; either version 2 of the License, or (at your +option) any later version. This library is distributed in the hope +that it will be useful, but WITHOUT ANY WARRANTY; without even the +implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. See the GNU Library General Public License for more details. +You should have received a copy of the GNU Library General Public +License along with this library; if not, write to the Free Software +Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + + + + +//#pragma interface + + + + + + + + + +struct re_pattern_buffer; // defined elsewhere +struct re_registers; + +class Regex +{ +private: + + Regex(const Regex&) {} // no X(X&) + void operator = (const Regex&) {} // no assignment + +protected: + re_pattern_buffer* buf; + re_registers* reg; + +public: + Regex(const char* t, + int fast = 0, + int bufsize = 40, + const char* transtable = 0); + + ~Regex(); + + int match(const char* s, int len, int pos = 0) const; + int search(const char* s, int len, + int& matchlen, int startpos = 0) const; + int match_info(int& start, int& length, int nth = 0) const; + + int OK() const; // representation invariant +}; + +// some built in regular expressions + +extern const Regex RXwhite; // = "[ \n\t\r\v\f]+" +extern const Regex RXint; // = "-?[0-9]+" +extern const Regex RXdouble; // = "-?\\(\\([0-9]+\\.[0-9]*\\)\\| + // \\([0-9]+\\)\\|\\(\\.[0-9]+\\)\\) + // \\([eE][---+]?[0-9]+\\)?" +extern const Regex RXalpha; // = "[A-Za-z]+" +extern const Regex RXlowercase; // = "[a-z]+" +extern const Regex RXuppercase; // = "[A-Z]+" +extern const Regex RXalphanum; // = "[0-9A-Za-z]+" +extern const Regex RXidentifier; // = "[A-Za-z_][A-Za-z0-9_]*" + + + +//# 27 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/String.h" 2 + + +struct StrRep // internal String representations +{ + unsigned short len; // string length + unsigned short sz; // allocated space + char s[1]; // the string starts here + // (at least 1 char for trailing null) + // allocated & expanded via non-public fcts +}; + +// primitive ops on StrReps -- nearly all String fns go through these. + +StrRep* Salloc(StrRep*, const char*, int, int); +StrRep* Scopy(StrRep*, StrRep*); +StrRep* Sresize(StrRep*, int); +StrRep* Scat(StrRep*, const char*, int, const char*, int); +StrRep* Scat(StrRep*, const char*, int,const char*,int, const char*,int); +StrRep* Sprepend(StrRep*, const char*, int); +StrRep* Sreverse(StrRep*, StrRep*); +StrRep* Supcase(StrRep*, StrRep*); +StrRep* Sdowncase(StrRep*, StrRep*); +StrRep* Scapitalize(StrRep*, StrRep*); + +// These classes need to be defined in the order given + +class String; +class SubString; + +class SubString +{ + friend class String; +protected: + + String& S; // The String I'm a substring of + unsigned short pos; // starting position in S's rep + unsigned short len; // length of substring + + void assign(StrRep*, const char*, int = -1); + SubString(String& x, int p, int l); + SubString(const SubString& x); + +public: + +// Note there are no public constructors. SubStrings are always +// created via String operations + + ~SubString(); + + void operator = (const String& y); + void operator = (const SubString& y); + void operator = (const char* t); + void operator = (char c); + +// return 1 if target appears anywhere in SubString; else 0 + + int contains(char c) const; + int contains(const String& y) const; + int contains(const SubString& y) const; + int contains(const char* t) const; + int contains(const Regex& r) const; + +// return 1 if target matches entire SubString + + int matches(const Regex& r) const; + +// IO + + friend ostream& operator<<(ostream& s, const SubString& x); + +// status + + unsigned int length() const; + int empty() const; + const char* chars() const; + + int OK() const; + +}; + + +class String +{ + friend class SubString; + +protected: + StrRep* rep; // Strings are pointers to their representations + +// some helper functions + + int search(int, int, const char*, int = -1) const; + int search(int, int, char) const; + int match(int, int, int, const char*, int = -1) const; + int _gsub(const char*, int, const char* ,int); + int _gsub(const Regex&, const char*, int); + SubString _substr(int, int); + +public: + +// constructors & assignment + + String(); + String(const String& x); + String(const SubString& x); + String(const char* t); + String(const char* t, int len); + String(char c); + + ~String(); + + void operator = (const String& y); + void operator = (const char* y); + void operator = (char c); + void operator = (const SubString& y); + +// concatenation + + void operator += (const String& y); + void operator += (const SubString& y); + void operator += (const char* t); + void operator += (char c); + + void prepend(const String& y); + void prepend(const SubString& y); + void prepend(const char* t); + void prepend(char c); + + +// procedural versions: +// concatenate first 2 args, store result in last arg + + friend void cat(const String&, const String&, String&); + friend void cat(const String&, const SubString&, String&); + friend void cat(const String&, const char*, String&); + friend void cat(const String&, char, String&); + + friend void cat(const SubString&, const String&, String&); + friend void cat(const SubString&, const SubString&, String&); + friend void cat(const SubString&, const char*, String&); + friend void cat(const SubString&, char, String&); + + friend void cat(const char*, const String&, String&); + friend void cat(const char*, const SubString&, String&); + friend void cat(const char*, const char*, String&); + friend void cat(const char*, char, String&); + +// double concatenation, by request. (yes, there are too many versions, +// but if one is supported, then the others should be too...) +// Concatenate first 3 args, store in last arg + + friend void cat(const String&,const String&, const String&,String&); + friend void cat(const String&,const String&,const SubString&,String&); + friend void cat(const String&,const String&, const char*, String&); + friend void cat(const String&,const String&, char, String&); + friend void cat(const String&,const SubString&,const String&,String&); + friend void cat(const String&,const SubString&,const SubString&,String&); + friend void cat(const String&,const SubString&, const char*, String&); + friend void cat(const String&,const SubString&, char, String&); + friend void cat(const String&,const char*, const String&, String&); + friend void cat(const String&,const char*, const SubString&, String&); + friend void cat(const String&,const char*, const char*, String&); + friend void cat(const String&,const char*, char, String&); + + friend void cat(const char*, const String&, const String&,String&); + friend void cat(const char*,const String&,const SubString&,String&); + friend void cat(const char*,const String&, const char*, String&); + friend void cat(const char*,const String&, char, String&); + friend void cat(const char*,const SubString&,const String&,String&); + friend void cat(const char*,const SubString&,const SubString&,String&); + friend void cat(const char*,const SubString&, const char*, String&); + friend void cat(const char*,const SubString&, char, String&); + friend void cat(const char*,const char*, const String&, String&); + friend void cat(const char*,const char*, const SubString&, String&); + friend void cat(const char*,const char*, const char*, String&); + friend void cat(const char*,const char*, char, String&); + + +// searching & matching + +// return position of target in string or -1 for failure + + int index(char c, int startpos = 0) const; + int index(const String& y, int startpos = 0) const; + int index(const SubString& y, int startpos = 0) const; + int index(const char* t, int startpos = 0) const; + int index(const Regex& r, int startpos = 0) const; + +// return 1 if target appears anyhere in String; else 0 + + int contains(char c) const; + int contains(const String& y) const; + int contains(const SubString& y) const; + int contains(const char* t) const; + int contains(const Regex& r) const; + +// return 1 if target appears anywhere after position pos +// (or before, if pos is negative) in String; else 0 + + int contains(char c, int pos) const; + int contains(const String& y, int pos) const; + int contains(const SubString& y, int pos) const; + int contains(const char* t, int pos) const; + int contains(const Regex& r, int pos) const; + +// return 1 if target appears at position pos in String; else 0 + + int matches(char c, int pos = 0) const; + int matches(const String& y, int pos = 0) const; + int matches(const SubString& y, int pos = 0) const; + int matches(const char* t, int pos = 0) const; + int matches(const Regex& r, int pos = 0) const; + +// return number of occurences of target in String + + int freq(char c) const; + int freq(const String& y) const; + int freq(const SubString& y) const; + int freq(const char* t) const; + +// SubString extraction + +// Note that you can't take a substring of a const String, since +// this leaves open the possiblility of indirectly modifying the +// String through the SubString + + SubString at(int pos, int len); + SubString operator () (int pos, int len); // synonym for at + + SubString at(const String& x, int startpos = 0); + SubString at(const SubString& x, int startpos = 0); + SubString at(const char* t, int startpos = 0); + SubString at(char c, int startpos = 0); + SubString at(const Regex& r, int startpos = 0); + + SubString before(int pos); + SubString before(const String& x, int startpos = 0); + SubString before(const SubString& x, int startpos = 0); + SubString before(const char* t, int startpos = 0); + SubString before(char c, int startpos = 0); + SubString before(const Regex& r, int startpos = 0); + + SubString through(int pos); + SubString through(const String& x, int startpos = 0); + SubString through(const SubString& x, int startpos = 0); + SubString through(const char* t, int startpos = 0); + SubString through(char c, int startpos = 0); + SubString through(const Regex& r, int startpos = 0); + + SubString from(int pos); + SubString from(const String& x, int startpos = 0); + SubString from(const SubString& x, int startpos = 0); + SubString from(const char* t, int startpos = 0); + SubString from(char c, int startpos = 0); + SubString from(const Regex& r, int startpos = 0); + + SubString after(int pos); + SubString after(const String& x, int startpos = 0); + SubString after(const SubString& x, int startpos = 0); + SubString after(const char* t, int startpos = 0); + SubString after(char c, int startpos = 0); + SubString after(const Regex& r, int startpos = 0); + + +// deletion + +// delete len chars starting at pos + void del(int pos, int len); + +// delete the first occurrence of target after startpos + + void del(const String& y, int startpos = 0); + void del(const SubString& y, int startpos = 0); + void del(const char* t, int startpos = 0); + void del(char c, int startpos = 0); + void del(const Regex& r, int startpos = 0); + +// global substitution: substitute all occurrences of pat with repl + + int gsub(const String& pat, const String& repl); + int gsub(const SubString& pat, const String& repl); + int gsub(const char* pat, const String& repl); + int gsub(const char* pat, const char* repl); + int gsub(const Regex& pat, const String& repl); + +// friends & utilities + +// split string into array res at separators; return number of elements + + friend int split(const String& x, String res[], int maxn, + const String& sep); + friend int split(const String& x, String res[], int maxn, + const Regex& sep); + + friend String common_prefix(const String& x, const String& y, + int startpos = 0); + friend String common_suffix(const String& x, const String& y, + int startpos = -1); + friend String replicate(char c, int n); + friend String replicate(const String& y, int n); + friend String join(String src[], int n, const String& sep); + +// simple builtin transformations + + friend String reverse(const String& x); + friend String upcase(const String& x); + friend String downcase(const String& x); + friend String capitalize(const String& x); + +// in-place versions of above + + void reverse(); + void upcase(); + void downcase(); + void capitalize(); + +// element extraction + + char& operator [] (int i); + char elem(int i) const; + char firstchar() const; + char lastchar() const; + +// conversion + + operator const char*() const; + const char* chars() const; + + +// IO + + friend ostream& operator<<(ostream& s, const String& x); + friend ostream& operator<<(ostream& s, const SubString& x); + friend istream& operator>>(istream& s, String& x); + + friend int readline(istream& s, String& x, + char terminator = '\n', + int discard_terminator = 1); + +// status + + unsigned int length() const; + int empty() const; + +// preallocate some space for String + void alloc(int newsize); + +// report current allocation (not length!) + + int allocation() const; + + + volatile void error(const char* msg) const; + + int OK() const; +}; + +typedef String StrTmp; // for backward compatibility + +// other externs + +int compare(const String& x, const String& y); +int compare(const String& x, const SubString& y); +int compare(const String& x, const char* y); +int compare(const SubString& x, const String& y); +int compare(const SubString& x, const SubString& y); +int compare(const SubString& x, const char* y); +int fcompare(const String& x, const String& y); // ignore case + +extern StrRep _nilStrRep; +extern String _nilString; + +// other inlines + +String operator + (const String& x, const String& y); +String operator + (const String& x, const SubString& y); +String operator + (const String& x, const char* y); +String operator + (const String& x, char y); +String operator + (const SubString& x, const String& y); +String operator + (const SubString& x, const SubString& y); +String operator + (const SubString& x, const char* y); +String operator + (const SubString& x, char y); +String operator + (const char* x, const String& y); +String operator + (const char* x, const SubString& y); + +int operator==(const String& x, const String& y); +int operator!=(const String& x, const String& y); +int operator> (const String& x, const String& y); +int operator>=(const String& x, const String& y); +int operator< (const String& x, const String& y); +int operator<=(const String& x, const String& y); +int operator==(const String& x, const SubString& y); +int operator!=(const String& x, const SubString& y); +int operator> (const String& x, const SubString& y); +int operator>=(const String& x, const SubString& y); +int operator< (const String& x, const SubString& y); +int operator<=(const String& x, const SubString& y); +int operator==(const String& x, const char* t); +int operator!=(const String& x, const char* t); +int operator> (const String& x, const char* t); +int operator>=(const String& x, const char* t); +int operator< (const String& x, const char* t); +int operator<=(const String& x, const char* t); +int operator==(const SubString& x, const String& y); +int operator!=(const SubString& x, const String& y); +int operator> (const SubString& x, const String& y); +int operator>=(const SubString& x, const String& y); +int operator< (const SubString& x, const String& y); +int operator<=(const SubString& x, const String& y); +int operator==(const SubString& x, const SubString& y); +int operator!=(const SubString& x, const SubString& y); +int operator> (const SubString& x, const SubString& y); +int operator>=(const SubString& x, const SubString& y); +int operator< (const SubString& x, const SubString& y); +int operator<=(const SubString& x, const SubString& y); +int operator==(const SubString& x, const char* t); +int operator!=(const SubString& x, const char* t); +int operator> (const SubString& x, const char* t); +int operator>=(const SubString& x, const char* t); +int operator< (const SubString& x, const char* t); +int operator<=(const SubString& x, const char* t); + + + + +// status reports, needed before defining other things + +inline unsigned int String::length() const { return rep->len; } +inline int String::empty() const { return rep->len == 0; } +inline const char* String::chars() const { return &(rep->s[0]); } +inline int String::allocation() const { return rep->sz; } +inline void String::alloc(int newsize) { rep = Sresize(rep, newsize); } + +inline unsigned int SubString::length() const { return len; } +inline int SubString::empty() const { return len == 0; } +inline const char* SubString::chars() const { return &(S.rep->s[pos]); } + + +// constructors + +inline String::String() + : rep(&_nilStrRep) {} +inline String::String(const String& x) + : rep(Scopy(0, x.rep)) {} +inline String::String(const char* t) + : rep(Salloc(0, t, -1, -1)) {} +inline String::String(const char* t, int tlen) + : rep(Salloc(0, t, tlen, tlen)) {} +inline String::String(const SubString& y) + : rep(Salloc(0, y.chars(), y.length(), y.length())) {} +inline String::String(char c) + : rep(Salloc(0, &c, 1, 1)) {} + +inline String::~String() { if (rep != &_nilStrRep) delete rep; } + +inline SubString::SubString(const SubString& x) + :S(x.S), pos(x.pos), len(x.len) {} +inline SubString::SubString(String& x, int first, int l) + :S(x), pos(first), len(l) {} + +inline SubString::~SubString() {} + +// assignment + +inline void String::operator = (const String& y) +{ + rep = Scopy(rep, y.rep); +} + +inline void String::operator=(const char* t) +{ + rep = Salloc(rep, t, -1, -1); +} + +inline void String::operator=(const SubString& y) +{ + rep = Salloc(rep, y.chars(), y.length(), y.length()); +} + +inline void String::operator=(char c) +{ + rep = Salloc(rep, &c, 1, 1); +} + + +inline void SubString::operator = (const char* ys) +{ + assign(0, ys); +} + +inline void SubString::operator = (char ch) +{ + assign(0, &ch, 1); +} + +inline void SubString::operator = (const String& y) +{ + assign(y.rep, y.chars(), y.length()); +} + +inline void SubString::operator = (const SubString& y) +{ + assign(y.S.rep, y.chars(), y.length()); +} + +// Zillions of cats... + +inline void cat(const String& x, const String& y, String& r) +{ + r.rep = Scat(r.rep, x.chars(), x.length(), y.chars(), y.length()); +} + +inline void cat(const String& x, const SubString& y, String& r) +{ + r.rep = Scat(r.rep, x.chars(), x.length(), y.chars(), y.length()); +} + +inline void cat(const String& x, const char* y, String& r) +{ + r.rep = Scat(r.rep, x.chars(), x.length(), y, -1); +} + +inline void cat(const String& x, char y, String& r) +{ + r.rep = Scat(r.rep, x.chars(), x.length(), &y, 1); +} + +inline void cat(const SubString& x, const String& y, String& r) +{ + r.rep = Scat(r.rep, x.chars(), x.length(), y.chars(), y.length()); +} + +inline void cat(const SubString& x, const SubString& y, String& r) +{ + r.rep = Scat(r.rep, x.chars(), x.length(), y.chars(), y.length()); +} + +inline void cat(const SubString& x, const char* y, String& r) +{ + r.rep = Scat(r.rep, x.chars(), x.length(), y, -1); +} + +inline void cat(const SubString& x, char y, String& r) +{ + r.rep = Scat(r.rep, x.chars(), x.length(), &y, 1); +} + +inline void cat(const char* x, const String& y, String& r) +{ + r.rep = Scat(r.rep, x, -1, y.chars(), y.length()); +} + +inline void cat(const char* x, const SubString& y, String& r) +{ + r.rep = Scat(r.rep, x, -1, y.chars(), y.length()); +} + +inline void cat(const char* x, const char* y, String& r) +{ + r.rep = Scat(r.rep, x, -1, y, -1); +} + +inline void cat(const char* x, char y, String& r) +{ + r.rep = Scat(r.rep, x, -1, &y, 1); +} + +inline void cat(const String& a, const String& x, const String& y, String& r) +{ + r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), y.chars(), y.length()); +} + +inline void cat(const String& a, const String& x, const SubString& y, String& r) +{ + r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), y.chars(), y.length()); +} + +inline void cat(const String& a, const String& x, const char* y, String& r) +{ + r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), y, -1); +} + +inline void cat(const String& a, const String& x, char y, String& r) +{ + r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), &y, 1); +} + +inline void cat(const String& a, const SubString& x, const String& y, String& r) +{ + r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), y.chars(), y.length()); +} + +inline void cat(const String& a, const SubString& x, const SubString& y, String& r) +{ + r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), y.chars(), y.length()); +} + +inline void cat(const String& a, const SubString& x, const char* y, String& r) +{ + r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), y, -1); +} + +inline void cat(const String& a, const SubString& x, char y, String& r) +{ + r.rep = Scat(r.rep, a.chars(), a.length(), x.chars(), x.length(), &y, 1); +} + +inline void cat(const String& a, const char* x, const String& y, String& r) +{ + r.rep = Scat(r.rep, a.chars(), a.length(), x, -1, y.chars(), y.length()); +} + +inline void cat(const String& a, const char* x, const SubString& y, String& r) +{ + r.rep = Scat(r.rep, a.chars(), a.length(), x, -1, y.chars(), y.length()); +} + +inline void cat(const String& a, const char* x, const char* y, String& r) +{ + r.rep = Scat(r.rep, a.chars(), a.length(), x, -1, y, -1); +} + +inline void cat(const String& a, const char* x, char y, String& r) +{ + r.rep = Scat(r.rep, a.chars(), a.length(), x, -1, &y, 1); +} + + +inline void cat(const char* a, const String& x, const String& y, String& r) +{ + r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), y.chars(), y.length()); +} + +inline void cat(const char* a, const String& x, const SubString& y, String& r) +{ + r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), y.chars(), y.length()); +} + +inline void cat(const char* a, const String& x, const char* y, String& r) +{ + r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), y, -1); +} + +inline void cat(const char* a, const String& x, char y, String& r) +{ + r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), &y, 1); +} + +inline void cat(const char* a, const SubString& x, const String& y, String& r) +{ + r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), y.chars(), y.length()); +} + +inline void cat(const char* a, const SubString& x, const SubString& y, String& r) +{ + r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), y.chars(), y.length()); +} + +inline void cat(const char* a, const SubString& x, const char* y, String& r) +{ + r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), y, -1); +} + +inline void cat(const char* a, const SubString& x, char y, String& r) +{ + r.rep = Scat(r.rep, a, -1, x.chars(), x.length(), &y, 1); +} + +inline void cat(const char* a, const char* x, const String& y, String& r) +{ + r.rep = Scat(r.rep, a, -1, x, -1, y.chars(), y.length()); +} + +inline void cat(const char* a, const char* x, const SubString& y, String& r) +{ + r.rep = Scat(r.rep, a, -1, x, -1, y.chars(), y.length()); +} + +inline void cat(const char* a, const char* x, const char* y, String& r) +{ + r.rep = Scat(r.rep, a, -1, x, -1, y, -1); +} + +inline void cat(const char* a, const char* x, char y, String& r) +{ + r.rep = Scat(r.rep, a, -1, x, -1, &y, 1); +} + + +// operator versions + +inline void String::operator +=(const String& y) +{ + cat(*this, y, *this); +} + +inline void String::operator +=(const SubString& y) +{ + cat(*this, y, *this); +} + +inline void String::operator += (const char* y) +{ + cat(*this, y, *this); +} + +inline void String:: operator +=(char y) +{ + cat(*this, y, *this); +} + +// constructive concatenation + + + +inline String operator + (const String& x, const String& y) return r; +{ + cat(x, y, r); +} + +inline String operator + (const String& x, const SubString& y) return r; +{ + cat(x, y, r); +} + +inline String operator + (const String& x, const char* y) return r; +{ + cat(x, y, r); +} + +inline String operator + (const String& x, char y) return r; +{ + cat(x, y, r); +} + +inline String operator + (const SubString& x, const String& y) return r; +{ + cat(x, y, r); +} + +inline String operator + (const SubString& x, const SubString& y) return r; +{ + cat(x, y, r); +} + +inline String operator + (const SubString& x, const char* y) return r; +{ + cat(x, y, r); +} + +inline String operator + (const SubString& x, char y) return r; +{ + cat(x, y, r); +} + +inline String operator + (const char* x, const String& y) return r; +{ + cat(x, y, r); +} + +inline String operator + (const char* x, const SubString& y) return r; +{ + cat(x, y, r); +} + +inline String reverse(const String& x) return r; +{ + r.rep = Sreverse(x.rep, r.rep); +} + +inline String upcase(const String& x) return r; +{ + r.rep = Supcase(x.rep, r.rep); +} + +inline String downcase(const String& x) return r; +{ + r.rep = Sdowncase(x.rep, r.rep); +} + +inline String capitalize(const String& x) return r; +{ + r.rep = Scapitalize(x.rep, r.rep); +} + +//# 883 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/String.h" + + +// prepend + +inline void String::prepend(const String& y) +{ + rep = Sprepend(rep, y.chars(), y.length()); +} + +inline void String::prepend(const char* y) +{ + rep = Sprepend(rep, y, -1); +} + +inline void String::prepend(char y) +{ + rep = Sprepend(rep, &y, 1); +} + +inline void String::prepend(const SubString& y) +{ + rep = Sprepend(rep, y.chars(), y.length()); +} + +// misc transformations + + +inline void String::reverse() +{ + rep = Sreverse(rep, rep); +} + + +inline void String::upcase() +{ + rep = Supcase(rep, rep); +} + + +inline void String::downcase() +{ + rep = Sdowncase(rep, rep); +} + + +inline void String::capitalize() +{ + rep = Scapitalize(rep, rep); +} + +// element extraction + +inline char& String::operator [] (int i) +{ + if (((unsigned)i) >= length()) error("invalid index"); + return rep->s[i]; +} + +inline char String::elem (int i) const +{ + if (((unsigned)i) >= length()) error("invalid index"); + return rep->s[i]; +} + +inline char String::firstchar() const +{ + return elem(0); +} + +inline char String::lastchar() const +{ + return elem(length() - 1); +} + +// searching + +inline int String::index(char c, int startpos) const +{ + return search(startpos, length(), c); +} + +inline int String::index(const char* t, int startpos) const +{ + return search(startpos, length(), t); +} + +inline int String::index(const String& y, int startpos) const +{ + return search(startpos, length(), y.chars(), y.length()); +} + +inline int String::index(const SubString& y, int startpos) const +{ + return search(startpos, length(), y.chars(), y.length()); +} + +inline int String::index(const Regex& r, int startpos) const +{ + int unused; return r.search(chars(), length(), unused, startpos); +} + +inline int String::contains(char c) const +{ + return search(0, length(), c) >= 0; +} + +inline int String::contains(const char* t) const +{ + return search(0, length(), t) >= 0; +} + +inline int String::contains(const String& y) const +{ + return search(0, length(), y.chars(), y.length()) >= 0; +} + +inline int String::contains(const SubString& y) const +{ + return search(0, length(), y.chars(), y.length()) >= 0; +} + +inline int String::contains(char c, int p) const +{ + return match(p, length(), 0, &c, 1) >= 0; +} + +inline int String::contains(const char* t, int p) const +{ + return match(p, length(), 0, t) >= 0; +} + +inline int String::contains(const String& y, int p) const +{ + return match(p, length(), 0, y.chars(), y.length()) >= 0; +} + +inline int String::contains(const SubString& y, int p) const +{ + return match(p, length(), 0, y.chars(), y.length()) >= 0; +} + +inline int String::contains(const Regex& r) const +{ + int unused; return r.search(chars(), length(), unused, 0) >= 0; +} + +inline int String::contains(const Regex& r, int p) const +{ + return r.match(chars(), length(), p) >= 0; +} + + +inline int String::matches(const SubString& y, int p) const +{ + return match(p, length(), 1, y.chars(), y.length()) >= 0; +} + +inline int String::matches(const String& y, int p) const +{ + return match(p, length(), 1, y.chars(), y.length()) >= 0; +} + +inline int String::matches(const char* t, int p) const +{ + return match(p, length(), 1, t) >= 0; +} + +inline int String::matches(char c, int p) const +{ + return match(p, length(), 1, &c, 1) >= 0; +} + +inline int String::matches(const Regex& r, int p) const +{ + int l = (p < 0)? -p : length() - p; + return r.match(chars(), length(), p) == l; +} + + +inline int SubString::contains(const char* t) const +{ + return S.search(pos, pos+len, t) >= 0; +} + +inline int SubString::contains(const String& y) const +{ + return S.search(pos, pos+len, y.chars(), y.length()) >= 0; +} + +inline int SubString::contains(const SubString& y) const +{ + return S.search(pos, pos+len, y.chars(), y.length()) >= 0; +} + +inline int SubString::contains(char c) const +{ + return S.search(pos, pos+len, 0, c) >= 0; +} + +inline int SubString::contains(const Regex& r) const +{ + int unused; return r.search(chars(), len, unused, 0) >= 0; +} + +inline int SubString::matches(const Regex& r) const +{ + return r.match(chars(), len, 0) == len; +} + + +inline int String::gsub(const String& pat, const String& r) +{ + return _gsub(pat.chars(), pat.length(), r.chars(), r.length()); +} + +inline int String::gsub(const SubString& pat, const String& r) +{ + return _gsub(pat.chars(), pat.length(), r.chars(), r.length()); +} + +inline int String::gsub(const Regex& pat, const String& r) +{ + return _gsub(pat, r.chars(), r.length()); +} + +inline int String::gsub(const char* pat, const String& r) +{ + return _gsub(pat, -1, r.chars(), r.length()); +} + +inline int String::gsub(const char* pat, const char* r) +{ + return _gsub(pat, -1, r, -1); +} + + + +inline ostream& operator<<(ostream& s, const String& x) +{ + s << x.chars(); return s; +} + +// a zillion comparison operators + +inline int operator==(const String& x, const String& y) +{ + return compare(x, y) == 0; +} + +inline int operator!=(const String& x, const String& y) +{ + return compare(x, y) != 0; +} + +inline int operator>(const String& x, const String& y) +{ + return compare(x, y) > 0; +} + +inline int operator>=(const String& x, const String& y) +{ + return compare(x, y) >= 0; +} + +inline int operator<(const String& x, const String& y) +{ + return compare(x, y) < 0; +} + +inline int operator<=(const String& x, const String& y) +{ + return compare(x, y) <= 0; +} + +inline int operator==(const String& x, const SubString& y) +{ + return compare(x, y) == 0; +} + +inline int operator!=(const String& x, const SubString& y) +{ + return compare(x, y) != 0; +} + +inline int operator>(const String& x, const SubString& y) +{ + return compare(x, y) > 0; +} + +inline int operator>=(const String& x, const SubString& y) +{ + return compare(x, y) >= 0; +} + +inline int operator<(const String& x, const SubString& y) +{ + return compare(x, y) < 0; +} + +inline int operator<=(const String& x, const SubString& y) +{ + return compare(x, y) <= 0; +} + +inline int operator==(const String& x, const char* t) +{ + return compare(x, t) == 0; +} + +inline int operator!=(const String& x, const char* t) +{ + return compare(x, t) != 0; +} + +inline int operator>(const String& x, const char* t) +{ + return compare(x, t) > 0; +} + +inline int operator>=(const String& x, const char* t) +{ + return compare(x, t) >= 0; +} + +inline int operator<(const String& x, const char* t) +{ + return compare(x, t) < 0; +} + +inline int operator<=(const String& x, const char* t) +{ + return compare(x, t) <= 0; +} + +inline int operator==(const SubString& x, const String& y) +{ + return compare(y, x) == 0; +} + +inline int operator!=(const SubString& x, const String& y) +{ + return compare(y, x) != 0; +} + +inline int operator>(const SubString& x, const String& y) +{ + return compare(y, x) < 0; +} + +inline int operator>=(const SubString& x, const String& y) +{ + return compare(y, x) <= 0; +} + +inline int operator<(const SubString& x, const String& y) +{ + return compare(y, x) > 0; +} + +inline int operator<=(const SubString& x, const String& y) +{ + return compare(y, x) >= 0; +} + +inline int operator==(const SubString& x, const SubString& y) +{ + return compare(x, y) == 0; +} + +inline int operator!=(const SubString& x, const SubString& y) +{ + return compare(x, y) != 0; +} + +inline int operator>(const SubString& x, const SubString& y) +{ + return compare(x, y) > 0; +} + +inline int operator>=(const SubString& x, const SubString& y) +{ + return compare(x, y) >= 0; +} + +inline int operator<(const SubString& x, const SubString& y) +{ + return compare(x, y) < 0; +} + +inline int operator<=(const SubString& x, const SubString& y) +{ + return compare(x, y) <= 0; +} + +inline int operator==(const SubString& x, const char* t) +{ + return compare(x, t) == 0; +} + +inline int operator!=(const SubString& x, const char* t) +{ + return compare(x, t) != 0; +} + +inline int operator>(const SubString& x, const char* t) +{ + return compare(x, t) > 0; +} + +inline int operator>=(const SubString& x, const char* t) +{ + return compare(x, t) >= 0; +} + +inline int operator<(const SubString& x, const char* t) +{ + return compare(x, t) < 0; +} + +inline int operator<=(const SubString& x, const char* t) +{ + return compare(x, t) <= 0; +} + + +// a helper needed by at, before, etc. + +inline SubString String::_substr(int first, int l) +{ + if (first >= length() ) + return SubString(_nilString, 0, 0) ; + else + return SubString(*this, first, l); +} + + + + + +//# 26 "../../../../mips/include/Gct/GctErrorHandler.h" 2 + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" 1 +// This is part of the iostream library, providing -*- C++ -*- input/output. +// Copyright (C) 1991 Per Bothner. +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Library General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Library General Public License for more details. +// +// You should have received a copy of the GNU Library General Public +// License along with this library; if not, write to the Free +// Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +//# 210 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" + +//# 27 "../../../../mips/include/Gct/GctErrorHandler.h" 2 + + +//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/stuff++.h" 1 +// -*- C++ -*- + + + +// +// Fake up a libstuff++ +// +// This is done as a complete and utter hack; this library has no function +// at all being in the boot area; it is here solely in order to provide a +// libstuff++ against which the Makefiles can resolve link lines. +// +// The only reason that this is done is to allow the STANDARD_C++_LIBRARIES +// as provided by the Makefile templates in the boot area to be the same +// ones that are used by the tools outside this hierarchy. +// +// The tools outside this hierarchy use a different libstuff++; one that is +// written in C++. This one is not written in C++ in order to be simpler. +// + + + + + +//#pragma interface + + +// $Source: /cvs/cvsfiles/devo/gcc/testsuite/g++.old-deja/g++.mike/p785.C,v $ +// $Author: jason $ +// $Revision: 1.8 $ +// $Date: 1995/05/07 18:57:48 $ + +extern "C" { +//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/stuff.h" 1 + + + +/* + * Useful stuff + */ + +/* + * $Source: /cvs/cvsfiles/devo/gcc/testsuite/g++.old-deja/g++.mike/p785.C,v $ + * $Revision: 1.8 $ + * $Author: jason $ + * $Date: 1995/05/07 18:57:48 $ + */ + +//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/ansi.h" 1 + + + + +/* + * ANSI Compiler Support + * + * David Harrison + * University of California, Berkeley + * 1988 + * + * ANSI compatible compilers are supposed to define the preprocessor + * directive __STDC__. Based on this directive, this file defines + * certain ANSI specific macros. + * + * ARGS: + * Used in function prototypes. Example: + * extern int foo + * ARGS((char *blah, double threshold)); + */ + +/* + * $Source: /cvs/cvsfiles/devo/gcc/testsuite/g++.old-deja/g++.mike/p785.C,v $ + * $Author: jason $ + * $Revision: 1.8 $ + * $Date: 1995/05/07 18:57:48 $ + * + * Modifications + * Wendell C Baker + * University of California, Berkeley + */ + +/* Function prototypes */ + + + + + + + + + + + + + + + + + + + + + + + + + + + +//# 15 "/sandbox/wbaker/wbaker0/source/mips/include/stuff.h" 2 + + + +/* + * If g++, then we stub out part of this thing and let the C++ types take + * over and do the same job; some compatibility must be given however + */ + +/* + * Use the GNU libg++ definition + */ +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/bool.h" 1 + + + + + + + +//# 26 "/sandbox/wbaker/wbaker0/source/mips/include/stuff.h" 2 + +//# 35 "/sandbox/wbaker/wbaker0/source/mips/include/stuff.h" + + +/* + * Make various pieces of C code that use the old ``Boolean'' + * be compatible by faking up the definition of Boolean using + * the new bool type. + */ + + +//# 58 "/sandbox/wbaker/wbaker0/source/mips/include/stuff.h" + + +typedef long FitAny; /* can fit any integral type */ + +/* + * typedef char *String; - DO NOT USE THIS - it conflicts with C++ + * typedef char **Stringv; - just use char* and char** instead. + * - void* can be used for arbitrary pointers + */ + + + + +extern int nocase_strcmp (char *, char *) ; +extern int nocase_strncmp (char *, char *, int) ; + +extern bool nocase_strequal (char *, char *) ; +extern bool nocase_strnequal (char *, char *, int) ; + +extern bool lead_strequal (char *, char *) ; +extern bool nocase_lead_strequal (char *, char *) ; + +extern int strhash (char *, int) ; +extern int nocase_strhash (char *, int) ; + +extern int sign (int) ; + +/* + * Some useful macros. + */ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +//# 33 "/sandbox/wbaker/wbaker0/source/mips/include/stuff++.h" 2 + +} + +// +// This is here because we wish to provide externs for the two +// functions btoa(bool, unsigned = 0) and operator<<(ostream&, bool) +// because they are not provided in bool.h. +// +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/bool.h" 1 + + + + + + + +//# 41 "/sandbox/wbaker/wbaker0/source/mips/include/stuff++.h" 2 + +extern const char *stringify(bool b); +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" 1 +// This is part of the iostream library, providing -*- C++ -*- input/output. +// Copyright (C) 1991 Per Bothner. +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Library General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Library General Public License for more details. +// +// You should have received a copy of the GNU Library General Public +// License along with this library; if not, write to the Free +// Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +//# 210 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" + +//# 43 "/sandbox/wbaker/wbaker0/source/mips/include/stuff++.h" 2 + +extern ostream& operator<<(ostream&, bool); + +// Should this be kept separate? bool isn't, but then is +// included here only to define ostream& operator<<(ostream&, bool) +//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/unit.h" 1 +// -*- C++ -*- + + + +// +// unit enum +// +// Wendell Baker, Berkeley CAD Group, 1991 (wbaker@ic.Berkeley.EDU) +// + +// $Source: /cvs/cvsfiles/devo/gcc/testsuite/g++.old-deja/g++.mike/p785.C,v $ +// $Author: jason $ +// $Revision: 1.8 $ +// $Date: 1995/05/07 18:57:48 $ + +// +// unit enum +// +// This _looks_ silly, but it has an important theoretical basis in category +// theory. For the pragmatic reason for its existence, see the example below. +// +enum unit { + UNIT = 1, +}; + +extern const char *stringify(unit u); + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" 1 +// This is part of the iostream library, providing -*- C++ -*- input/output. +// Copyright (C) 1991 Per Bothner. +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Library General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Library General Public License for more details. +// +// You should have received a copy of the GNU Library General Public +// License along with this library; if not, write to the Free +// Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +//# 210 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" + +//# 28 "/sandbox/wbaker/wbaker0/source/mips/include/unit.h" 2 + +extern ostream& operator<<(ostream&, unit); + +// +// A unit is used in cases where the type signature of an overloaded +// function must be differentiated in some stronger way than can be +// denoted unambiguously in the C++ syntax. This enum is used to give +// one of the functions a different type signature, thereby allowing +// the overloading. +// +// The use of ``unit'' instead of int or bool is important because a unit +// has only one possible value; therefore it adds no more information to +// the code. For example, say a bool was used instead, then in the testing +// phase, would have to ask: what if TRUE was given, what if FALSE was given. +// The problem is compounded if char or int is used. +// +// Example: +// +// class ID { +// public: +// ID(); // construct a null ID +// ID(unit); // alloc a ID with a new id +// private: +// static unsigned high_water; +// unsigned id; +// }; +// +// Try working this example save that ID implements all of the generic +// features of the identifier object, but the high_water is stored +// in the heir. That is what originally motivated the creation of unit. +// + + +//# 48 "/sandbox/wbaker/wbaker0/source/mips/include/stuff++.h" 2 + + +// +// In the spirit of the standard GNU error handler functions +// as described in +// typedef void (*one_arg_error_handler_t)(const char*); +// a one argument error handler function pointer +// typedef void (*two_arg_error_handler_t)(const char*, const char*); +// a two argument error handler function pointer +// +// And now the NEW +// +// typedef void (*zero_arg_error_handler_t)(); +// a zero argument error handler function pointer +// +typedef void (*zero_arg_error_handler_t)(); + +// +// In the spirit of the default GNU error handler functions +// as described in +// extern void default_one_arg_error_handler(const char *message); +// print out message on stderr, and do the default thing (abort) +// extern void default_two_arg_error_handler(const char *kind, const char *message); +// print out kind and message on stderr, and do the default thing (abort) +// +// And now the NEW +// +// extern void default_zero_arg_error_handler(const char *message); +// do the default thing (abort) +// +extern void default_zero_arg_error_handler(); + +// Guaranteed to exit (1) +extern void exit_zero_arg_error_handler(); +extern void exit_one_arg_error_handler(const char *message); +extern void exit_two_arg_error_handler(const char *kind, const char *message); + +// Guaranteed to abort() +extern void abort_zero_arg_error_handler(); +extern void abort_one_arg_error_handler(const char *message); +extern void abort_two_arg_error_handler(const char *kind, const char *message); + +// +// In the spirit of the standard GNU error handlers +// as described in +// extern void verbose_File_error_handler(const char*); +// perror and set errno = 0 +// extern void quiet_File_error_handler(const char*); +// set errno = 0 +// extern void fatal_File_error_handler(const char*); +// perror and exit 1 +// +// And now the NEW +// +// extern void preserve_File_error_handler(const char *message); +// no perror, no assignment to errno. +// +extern void preserve_File_error_handler(const char *message); + + +//# 29 "../../../../mips/include/Gct/GctErrorHandler.h" 2 + +//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/tostrstream.h" 1 +// -*- C++ -*- + + + +// +// tostrstream class +// +// A terminated oststream - an ostsrstream that auto-terminates on str() +// +// Wendell Baker, Berkeley CAD Group, 1992 (wbaker@ic.Berkeley.EDU) +// + + + + + +//#pragma interface + + +// $Source: /cvs/cvsfiles/devo/gcc/testsuite/g++.old-deja/g++.mike/p785.C,v $ +// $Author: jason $ +// $Revision: 1.8 $ +// $Date: 1995/05/07 18:57:48 $ + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/strstream.h" 1 +// This is part of the iostream library, providing input/output for C++. +// Copyright (C) 1991 Per Bothner. +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Library General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Library General Public License for more details. +// +// You should have received a copy of the GNU Library General Public +// License along with this library; if not, write to the Free +// Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + + + +//#pragma interface + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" 1 +// This is part of the iostream library, providing -*- C++ -*- input/output. +// Copyright (C) 1991 Per Bothner. +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Library General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Library General Public License for more details. +// +// You should have received a copy of the GNU Library General Public +// License along with this library; if not, write to the Free +// Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +//# 210 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" + +//# 23 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/strstream.h" 2 + + +class strstreambuf : public streambuf { + size_t *lenp; /* current (logical) length (i.e. valid data bytes) */ + size_t *sizep; /* allocated (physical) buffer size */ + char **bufp; + size_t _len; + size_t _size; + char *buf; + int _frozen; + protected: + virtual int overflow(int = (-1) ); + public: + strstreambuf(); + strstreambuf(int initial); + strstreambuf(char *ptr, int size, char *pstart = 0 ); + ~strstreambuf(); + int frozen() { return _frozen; } + void freeze(int n=1) { _frozen = n != 0; } + size_t pcount(); + char *str(); +}; + +class istrstream : public istream { + public: + istrstream(char*); + istrstream(char*, int); + strstreambuf* rdbuf() { return (strstreambuf*)_strbuf; } +}; + +class ostrstream : public ostream { + public: + ostrstream(); + ostrstream(char *cp, int n, int mode=ios::out); + size_t pcount() { return ((strstreambuf*)_strbuf)->pcount(); } + char *str() { return ((strstreambuf*)_strbuf)->str(); } + void freeze(int n = 1) { ((strstreambuf*)_strbuf)->freeze(n); } + int frozen() { return ((strstreambuf*)_strbuf)->frozen(); } + strstreambuf* rdbuf() { return (strstreambuf*)_strbuf; } +}; + + +//# 25 "/sandbox/wbaker/wbaker0/source/mips/include/tostrstream.h" 2 + + +// +// tostrstream class +// +// An isteam class that doesn't have that nasty skipws parameter that +// you have to remember to set. This class simply provides the istream +// functionality with a set of constructors which defaults skipws to +// FALSE (instead of defaulting to TRUE as is the case with plain istream). +// +class tostrstream: public ostrstream { +public: + tostrstream(): ostrstream() + { } + // This constructor defines cp as the buffer to use for the + // stream (instead of one of its own devising); it does NOT + // initialize the ostrstream to contain cp (of length n). + tostrstream(char *cp, int n, int mode=ios::out): ostrstream(cp, n, mode) + { } + char *str() + { + char *s = ostrstream::str(); + s[ostrstream::pcount()] = '\0'; + return s; + } +}; + + +//# 30 "../../../../mips/include/Gct/GctErrorHandler.h" 2 + + +//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttObject.h" 1 +// -*- C++ -*- + + + +// +// GttObject class (is abstract) +// +// Expects to be included where needed explicitly. +// +// Wendell Baker, Berkeley CAD Group, 1992 (wbaker@ic.Berkeley.EDU) +// + + + + + +//#pragma interface + + +// $Source: /cvs/cvsfiles/devo/gcc/testsuite/g++.old-deja/g++.mike/p785.C,v $ +// $Author: jason $ +// $Revision: 1.8 $ +// $Date: 1995/05/07 18:57:48 $ + +//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/tostrstream.h" 1 +// -*- C++ -*- +//# 52 "/sandbox/wbaker/wbaker0/source/mips/include/tostrstream.h" + +//# 25 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttObject.h" 2 + + +//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttErrorHandler.h" 1 +// -*- C++ -*- + + + +// +// GttErrorHandler class +// +// Expects to be included by Gtt.h +// +// Wendell Baker, Berkeley CAD Group, 1992 (wbaker@ic.Berkeley.EDU) +// + + + + + +//#pragma interface + + +// $Source: /cvs/cvsfiles/devo/gcc/testsuite/g++.old-deja/g++.mike/p785.C,v $ +// $Author: jason $ +// $Revision: 1.8 $ +// $Date: 1995/05/07 18:57:48 $ + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/bool.h" 1 + + + + + + + +//# 25 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttErrorHandler.h" 2 + + +//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/stuff++.h" 1 +// -*- C++ -*- +//# 107 "/sandbox/wbaker/wbaker0/source/mips/include/stuff++.h" + +//# 27 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttErrorHandler.h" 2 + +//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/tostrstream.h" 1 +// -*- C++ -*- +//# 52 "/sandbox/wbaker/wbaker0/source/mips/include/tostrstream.h" + +//# 28 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttErrorHandler.h" 2 + + +// +// It is expected that this will be virtually multiply inherited +// into all of the classes that need error reporting services. +// +// The typical way to have that done is by inheriting the GttObject +// as a virtual base class. +// + +// +// GttErrorHandler class +// +class GttErrorHandler { +public: + GttErrorHandler(); + GttErrorHandler(const char *program); + virtual ~GttErrorHandler(); + + // + // Error messages + // - an unacceptable, but expected and recoverable condition + // was was detected (but the test fails) + // - errors are for ``the expected environment was not found'' + // rather than for ``file couldn't be opened'' + // - these messages cannot be shut off + // - the error handler determines the recovery action + // TODO - one day exceptions will be used here + // + static void error(const char *message); + static void error(tostrstream& message); + + static void error(const char *function, const char *message); + static void error(const char *function, tostrstream& message); + + static void error(const char *class_name, const char *method, const char *message); + static void error(const char *class_name, const char *method, tostrstream& message); + + // + // Fatal messages + // - an unacceptable and unexpected error was detected + // the data invariants were violated, there is no recovery + // - these messages cannot be shut off + // - the error handler determines the recovery action + // TODO - one day exceptions will be used here + // + static void fatal(const char *message); + static void fatal(tostrstream& message); + + static void fatal(const char *function, const char *message); + static void fatal(const char *function, tostrstream& message); + + static void fatal(const char *class_name, const char *method, const char *message); + static void fatal(const char *class_name, const char *method, tostrstream& message); +private: + // + // Two underscores are used here in order to prevent confusion of these + // private variables with any of the heir's private variables. Note that + // access control is different than visibility in C++, so all the variable + // names in a class hierarchy must be unique. + // + + static bool __partial_init; + static void __partial_initialize(); + static bool __full_init; + static void __full_initialize(const char *program); + static char *__program; + + static void __handle_error(); + static void __handle_fatal(); + static void __add_newline(const char *message); + + static bool __output_valid(); + static ostream *__output; +}; + + +//# 27 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttObject.h" 2 + + +// +// GttObject class (is abstract) +// +class GttObject: virtual public GttErrorHandler { +protected: + GttObject(); + GttObject(const GttObject&); + virtual ~GttObject(); // ensure descendants have virtual destructors + +public: + // + // I/O Support + // + // The value typically persists only long enough for an i/o operation + // to be performed (see the defintion of output via operator<<(... ) below) + virtual const char *stringify(); +protected: + // This is the buffer into which the printed representation of this + // object will be put when the time comes. It is associated with the + // object so it will never go away (so long as the object exists). + // Use a pointer so that you only pay for the space when I/O is used + tostrstream *stringbuf; + void clear_stringbuf(); + +public: + // + // Consistency + // + // The global data invariant for the whole object (heirs included). + // This OK function will call the local invariant function ok() if + // necessary and in addition the OK functions of the heirs + // This is expected to compute the data invariant of the object. + // It will execute GctErrorHandler::fatal if there is wrong. + virtual void OK() const; + +protected: + // + // consistency + // + // This function computes the invariant which is local to this object. + // It does not call any of the ancestor's OK() or ok() functions. + // It is not a virtual function so that it can be called from within a + // constructor with impunity. Thus this function MUST NOT call any + // virtual functions either; it should call them by their full name if + // that is necessary. The global OK() function will call this function + // as necessary. + // + // This function must NOT NEVER EVER be made virtual. + void ok() const; + +protected: + // + // Class Name + // + // This must return a static (constant) string which is the name + // of the class being declared. By convention, not all classes + // must have one of these, but the major root abstract class must + // have one in order to allow the stringify() to work approximately + // correctly. + virtual const char *class_name() const = 0; +}; + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" 1 +// This is part of the iostream library, providing -*- C++ -*- input/output. +// Copyright (C) 1991 Per Bothner. +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Library General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Library General Public License for more details. +// +// You should have received a copy of the GNU Library General Public +// License along with this library; if not, write to the Free +// Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +//# 210 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" + +//# 91 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttObject.h" 2 + +extern ostream& operator<<(ostream&, GttObject&); + +// There may be other X& operator<<(X&, GttObject&) defined in the +// packages defining class X. For example see the definition of +// GttUnitObject& operator<<(GttUnitObject&, GttObject&) in Unit. + + +//# 32 "../../../../mips/include/Gct/GctErrorHandler.h" 2 + + +// +// It is expected that this will be virtually multiply inherited +// into all of the classes that need error reporting services. +// +// The typical way to have that done is by inheriting the GctObject +// as a virtual base class. +// + +// +// GctErrorHandler class +// +// GPP_1_96_BUG +// NOTE - virtual public GttObject should be MI into GctObject - but that +// causes g++ 1.96 to segfault; so we must inherit GttObject here and use SI +// GPP_1_96_BUG +class GctErrorHandler: virtual public GttObject { +public: + GctErrorHandler(); + GctErrorHandler(const String& program); + virtual ~GctErrorHandler(); + + // + // Debugging messages + // - these are turned off for production code. + // - these messages can be shut off + // + static void debug(const char *message); + static void debug(tostrstream& message); + + static void debug(const char *function, const char *message); + static void debug(const char *function, tostrstream& message); + + static void debug(const char *class_name, const char *method, const char *message); + static void debug(const char *class_name, const char *method, tostrstream& message); + + static bool debug(); // current debug switch + static void debug(bool value); // change the debug switch + + // + // Informational messages + // - these correspond to a ``verbose'' mode + // - these are not errors, just chatty progress reports + // - these messages can be shut off + // + static void note(const char *message); + static void note(tostrstream& message); + + static void note(const char *function, const char *message); + static void note(const char *function, tostrstream& message); + + static void note(const char *class_name, const char *method, const char *message); + static void note(const char *class_name, const char *method, tostrstream& message); + + static bool note(); // current note switch + static void note(bool value); // change the note switch + + // + // Warning messages + // - warnings are system-recoverable errors + // - the system has noticed something and taken some + // corrective action + // - these messages can be shut off + // + static void warning(const char *message); + static void warning(tostrstream& message); + + static void warning(const char *function, const char *message); + static void warning(const char *function, tostrstream& message); + + static void warning(const char *class_name, const char *method, const char *message); + static void warning(const char *class_name, const char *method, tostrstream& message); + + static bool warning(); // current warning switch + static void warning(bool value); // change the warning switch + + // + // Error messages + // - an unacceptable, but expected and recoverable + // condition was was detected + // - errors are for ``the expected environment was not found'' + // rather than for ``file couldn't be opened'' + // - these messages cannot be shut off + // - the error handler determines the recovery action + // TODO - one day exceptions will be used here + // + static void error(const char *message); + static void error(tostrstream& message); + + static void error(const char *function, const char *message); + static void error(const char *function, tostrstream& message); + + static void error(const char *class_name, const char *method, const char *message); + static void error(const char *class_name, const char *method, tostrstream& message); + + // can't turn off errors - no ``static void error(bool value);'' + static zero_arg_error_handler_t error(); // current error handler + static void error(zero_arg_error_handler_t handler);// change the error handler + + static void error_is_lib_error_handler(); // change the error handler + static void error_is_exit(); // change the error handler + + // Describes the fatal handler - WATCHOUT - implicitly uses AllocRing + static const char *error_handler_description(); + + // + // Fatal messages + // - an unacceptable and unexpected error was detected + // the data invariants were violated, there is no recovery + // - these messages cannot be shut off + // - the error handler determines the recovery action + // TODO - one day exceptions will be used here + // + static void fatal(const char *message); + static void fatal(tostrstream& message); + + static void fatal(const char *function, const char *message); + static void fatal(const char *function, tostrstream& message); + + static void fatal(const char *class_name, const char *method, const char *message); + static void fatal(const char *class_name, const char *method, tostrstream& message); + + // can't turn off fatals - no ``static void fatal(bool value);'' + static zero_arg_error_handler_t fatal(); // return the fatal handler + static void fatal(zero_arg_error_handler_t handler); // change the fatal handler + + static void fatal_is_exit(); // change the fatal handler + static void fatal_is_abort(); // change the fatal handler + + // Describes the fatal handler - WATCHOUT - implicitly uses AllocRing + static const char *fatal_handler_description(); +private: + // + // Two underscores are used here in order to prevent confusion of these + // private variables with any of the heir's private variables. Note that + // access control is different than visibility in C++, so all the variable + // names in a class hierarchy must be unique. + // + static bool __debug; + static bool __note; + static bool __warning; + static void (*__error_handler)(); // can't turn off errors + static void (*__fatal_handler)(); // can't turn off fatals + + static bool __partial_init; + static void __partial_initialize(); + static bool __full_init; + static void __full_initialize(const char *program); + static char *__program; + + static void __handle_error(); + static void __handle_fatal(); + static void __add_newline(const char *message); + static void __message_switch(bool value, bool& flag, const char *description); + static void __message_switch(bool value, bool& flag); + static const char *__describe_handler(zero_arg_error_handler_t handler); + + static bool __output_valid(); + static ostream *__output; + + // GPP_1_96_BUG + const char *class_name() const; + // GPP_1_96_BUG +}; + + +//# 27 "../../../../mips/include/Gct/Reference/GctReferenceCount.h" 2 + + +class GctReferenceCount: virtual public GctErrorHandler { +public: + GctReferenceCount(); + + void inc(); + void dec(); + bool zero() const; +private: + unsigned _count; +}; + +inline +GctReferenceCount::GctReferenceCount() +{ + this->_count = 0; +} + +inline void +GctReferenceCount::inc() +{ + this->_count++; +} + +inline void +GctReferenceCount::dec() +{ + if (this->debug()) { + if (this->_count == 0) + this->error("GctReferenceCount", "dec()", + "attempt to decrement a zero refcount"); + } + + // Protect against decrementing off zero in case + // this->debug() is not turned on to signal the error. + if (this->_count) + this->_count--; +} + +inline bool +GctReferenceCount::zero() const +{ + return (bool)(this->_count == 0); +} + + +//# 25 "../../../../mips/include/Gct/Reference.h" 2 + +//# 1 "../../../../mips/include/Gct/Reference/GctReferenceObject.h" 1 +// -*- C++ -*- + + + +// +// GctReferenceObject class +// +// Expects to be included by Gct/Reference.h +// +// Wendell Baker, Berkeley CAD Group, 1992 (wbaker@ic.Berkeley.EDU) +// + + + + + +//#pragma interface + + +// $Source: /cvs/cvsfiles/devo/gcc/testsuite/g++.old-deja/g++.mike/p785.C,v $ +// $Author: jason $ +// $Revision: 1.8 $ +// $Date: 1995/05/07 18:57:48 $ + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/bool.h" 1 + + + + + + + +//# 25 "../../../../mips/include/Gct/Reference/GctReferenceObject.h" 2 + + +//# 1 "../../../../mips/include/Gct/Object/GctHashObject.h" 1 +// -*- C++ -*- + + + +// +// GctHashObject class (is abstract) +// +// Expects to be included by Object.h or where needed explicitly. +// +// Wendell Baker, Berkeley CAD Group, 1992 (wbaker@ic.Berkeley.EDU) +// + + + + + +//#pragma interface + + +// $Source: /cvs/cvsfiles/devo/gcc/testsuite/g++.old-deja/g++.mike/p785.C,v $ +// $Author: jason $ +// $Revision: 1.8 $ +// $Date: 1995/05/07 18:57:48 $ + +//# 1 "../../../../mips/include/Gct/Object/GctObject.h" 1 +// -*- C++ -*- + + + +// +// GctObject class (is abstract) +// +// Expects to be included by Object.h or where needed explicitly. +// +// Wendell Baker, Berkeley CAD Group, 1992 (wbaker@ic.Berkeley.EDU) +// + + + + + +//#pragma interface + + +// $Source: /cvs/cvsfiles/devo/gcc/testsuite/g++.old-deja/g++.mike/p785.C,v $ +// $Author: jason $ +// $Revision: 1.8 $ +// $Date: 1995/05/07 18:57:48 $ + +//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/tostrstream.h" 1 +// -*- C++ -*- +//# 52 "/sandbox/wbaker/wbaker0/source/mips/include/tostrstream.h" + +//# 25 "../../../../mips/include/Gct/Object/GctObject.h" 2 + + +//# 1 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttObject.h" 1 +// -*- C++ -*- +//# 98 "/sandbox/wbaker/wbaker0/source/mips/include/Gtt/GttObject.h" + +//# 27 "../../../../mips/include/Gct/Object/GctObject.h" 2 + + +//# 1 "../../../../mips/include/Gct/GctErrorHandler.h" 1 +// -*- C++ -*- +//# 198 "../../../../mips/include/Gct/GctErrorHandler.h" + +//# 29 "../../../../mips/include/Gct/Object/GctObject.h" 2 + + +// +// GctObject class (is abstract) +// +class GctObject: virtual public GctErrorHandler /*, virtual public GttObject*/ { +protected: + GctObject(); + GctObject(const GctObject&); + virtual ~GctObject(); // ensure descendants have virtual destructors + +public: + // + // I/O Support + // + // The value typically persists only long enough for an i/o operation + // to be performed (see the defintion of output via operator<<(... ) below) + virtual const char *stringify(); +protected: + // This is the buffer into which the printed representation of this + // object will be put when the time comes. It is associated with the + // object so it will never go away (so long as the object exists). + // Use a pointer so that you only pay for the space when I/O is used + tostrstream *stringbuf; + void clear_stringbuf(); + +public: + // + // Consistency (global consistency) + // + // The global data invariant for the whole object (heirs included). + // This OK function will call the local invariant function ok() if + // necessary and in addition the OK functions of the heirs + // This is expected to compute the data invariant of the object. + // It will execute GctErrorHandler::fatal if there is wrong. + virtual void OK() const; + +protected: + // + // consistency (local consistency) + // + // This function computes the invariant which is local to this object. + // It does not call any of the ancestor's OK() or ok() functions. + // It is not a virtual function so that it can be called from within a + // constructor with impunity. Thus this function MUST NOT call any + // virtual functions either; it should call them by their full name if + // that is necessary. The global OK() function will call this function + // as necessary. + // + // This function must NOT NEVER EVER be made virtual. + void ok() const; +protected: + // + // Class Name + // + // This must return a static (constant) string which is the name + // of the class being declared. By convention, not all classes + // must have one of these, but the major root abstract class must + // have one in order to allow the stringify() to work approximately + // correctly. + virtual const char *class_name() const = 0; + +public: + // + // The ``id'' of this object + // + // NOTE - we explicitly allow the situation where this function + // can return the address of the object - the ``this'' pointer + // instead of a computed id field (the __object_id field below). + // + // This function is protected because we don't want too much dependence + // on this notion of object identity. I want to be able to rip it + // out if it becomes to cumbersome. + unsigned objectId() const; +private: + // + // Symbolic ID + // + // NOTE - Normally this would be implemented by the `this' pointer. + // TODO - remove this for production code + // + // However, in order to make the test suites run on all machines, we + // make this into a symbolic id that is maintained with each object. + // Thus the valid outputs are always consistent across all machines. + unsigned __object_id; + static unsigned __next_id; +}; + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" 1 +// This is part of the iostream library, providing -*- C++ -*- input/output. +// Copyright (C) 1991 Per Bothner. +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Library General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Library General Public License for more details. +// +// You should have received a copy of the GNU Library General Public +// License along with this library; if not, write to the Free +// Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +//# 210 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" + +//# 117 "../../../../mips/include/Gct/Object/GctObject.h" 2 + +extern ostream& operator<<(ostream&, GctObject&); + + +//# 25 "../../../../mips/include/Gct/Object/GctHashObject.h" 2 + + +// +// GctHashObject class (is abstract) +// +class GctHashObject: virtual public GctObject { +protected: + GctHashObject(); + GctHashObject(const GctHashObject&); + +public: + // + // hash support + // + virtual unsigned hash() const; +}; + + +//# 27 "../../../../mips/include/Gct/Reference/GctReferenceObject.h" 2 + + +class GctRef; + +// +// GctReferenceObject class +// +class GctReferenceObject: virtual public GctHashObject { +public: + // Aid in using operator new() to allocate dynamic + // instances of heirs to GctReferenceObject. + // An error is reported if result_of_new is nil. + static void ensure_new_succeeded(GctReferenceObject *result_of_new, + const char *class_name, + const char *args_supplied = ""); + + // the stringify() is standard + void OK() const; +protected: + GctReferenceObject(const bool refcounting = FALSE); + GctReferenceObject(const GctReferenceObject&, + const bool refcounting = FALSE); + virtual ~GctReferenceObject(); + + void operator=(const GctReferenceObject&); + + void ok() const; + + // Disallowed (create pointers to objects via new only) + // It is kept protected so that heirs can do *-cast-& tricks to work + // around the contravariance of abstract virtuals. This operator should + // never be used to return an address of a GctReferenceObject. + GctReferenceObject *operator&() const; +private: + const char *class_name() const; + + bool _destructed; // ensure no use of destructed objects + // this bit guards against the destruct-before-copy g++ bug + + bool _refcounting; // was allocated via operator new() + GctReferenceCount _refcount; + + // TODO - these names can never be used again in a derived + // class; should they be obfuscated some to free up the + // names (these are good, commonly-used names). + void reference(); + void dereference(GctReferenceObject *&); + void kill(); + + bool refcounted() const; + void refcounting(); // as if given in the constructor + + // Using this scheme, only GctRef can manipulate the + // reference count via reference(), dereference(). The derived + // classes cannot do such, and the _refcount field is not + // available to be tweaked by GctRef in any way other + // way than the inc/dec/zero interface. + friend class GctRef; +}; + + +//# 26 "../../../../mips/include/Gct/Reference.h" 2 + +//# 1 "../../../../mips/include/Gct/Reference/GctRef.h" 1 +// -*- C++ -*- + + + +// +// GctRef class +// +// Expects to be included by Gct/Reference.h +// +// Wendell Baker, Berkeley CAD Group, 1992 (wbaker@ic.Berkeley.EDU) +// + + + + + +//#pragma interface + + +// $Source: /cvs/cvsfiles/devo/gcc/testsuite/g++.old-deja/g++.mike/p785.C,v $ +// $Author: jason $ +// $Revision: 1.8 $ +// $Date: 1995/05/07 18:57:48 $ + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/bool.h" 1 + + + + + + + +//# 25 "../../../../mips/include/Gct/Reference/GctRef.h" 2 + + +//# 1 "../../../../mips/include/Gct/Object/GctHashObject.h" 1 +// -*- C++ -*- +//# 42 "../../../../mips/include/Gct/Object/GctHashObject.h" + +//# 27 "../../../../mips/include/Gct/Reference/GctRef.h" 2 + + +class GctReferenceObject; + +class GctRef: virtual public GctHashObject { +public: + GctRef(); + GctRef(const GctRef&); + virtual ~GctRef(); + + void operator=(GctRef&); + + // Accessor functions + bool valid() const; // the managed pointer is !null + bool null() const; // the managed pointer is null + + GctReferenceObject *ref() const; // faults if not valid + operator void*() const; // unchecked reference + + void nullify(); // set the managed pointer to null + void invalidate(); // set the managed pointer to null + + unsigned hash() const; + + // the stringify() is standard + void OK() const; +protected: + void ok() const; + + // We want to make sure pointers do not float around for very long. + // This constructor is used by descendants of this class only; it is + // expected that such descendants will have friend functions which + // will call ``new MumbleObject()'' and return a GctRef to THAT. + // MumbleObject would be a descendant of GctReferenceObject + GctRef(GctReferenceObject *); + friend class GctReferenceObject; +private: + const char *class_name() const; + + GctReferenceObject *_pointer; // may store 0 + + bool _destructed; // ensure no use of destructed objects + // this bit guards against the destruct-before-copy g++ bug +}; + +inline +GctRef::operator void*() const +{ return this->_pointer; } + +inline bool +GctRef::valid() const +{ return (bool)(this->_pointer != 0); } + +inline bool +GctRef::null() const +{ return (bool)(this->_pointer == 0); } + +// +// Required operations for the container classes +// +// NOTE: we can't use const here because the genclass code doesn't +// That is the ONLY reason for not using const reference args here. +// +extern int operator==(GctRef&, GctRef&); +extern int operator!=(GctRef&, GctRef&); + +extern int operator<=(GctRef&, GctRef&); +extern int operator<(GctRef&, GctRef&); + +extern int operator>=(GctRef&, GctRef&); +extern int operator>(GctRef&, GctRef&); + +extern unsigned hash(GctRef&); + + +//# 27 "../../../../mips/include/Gct/Reference.h" 2 + + + +//# 47 "../../../../mips/include/Gct/genclasses.h" 2 + + +//# 1 "../../../../mips/include/Gct/Ast/GctAstRef.h" 1 +// -*- C++ -*- + + + +// +// GctAstRef class +// +// Expects to be included by Gct/Ast.h +// +// Wendell Baker, Berkeley CAD Group, 1991 (wbaker@ic.Berkeley.EDU) +// + + + + + +//#pragma interface + + +// $Source: /cvs/cvsfiles/devo/gcc/testsuite/g++.old-deja/g++.mike/p785.C,v $ +// $Author: jason $ +// $Revision: 1.8 $ +// $Date: 1995/05/07 18:57:48 $ + +//# 1 "../../../../mips/include/Gct/Reference.h" 1 +// -*- C++ -*- +//# 29 "../../../../mips/include/Gct/Reference.h" + +//# 25 "../../../../mips/include/Gct/Ast/GctAstRef.h" 2 + + +//# 1 "../../../../mips/include/Gct/Ast/GctAstType.h" 1 +// -*- C++ -*- + + + +// +// GctAstType enum +// +// Wendell Baker, Berkeley CAD Group, 1992 (wbaker@ic.Berkeley.EDU) +// + +// $Source: /cvs/cvsfiles/devo/gcc/testsuite/g++.old-deja/g++.mike/p785.C,v $ +// $Author: jason $ +// $Revision: 1.8 $ +// $Date: 1995/05/07 18:57:48 $ + +// +// GctAstType enum +// +enum GctAstType { + Gct_Leaf, + Gct_Tree +}; + +extern const char *stringify(GctAstType a); + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" 1 +// This is part of the iostream library, providing -*- C++ -*- input/output. +// Copyright (C) 1991 Per Bothner. +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Library General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Library General Public License for more details. +// +// You should have received a copy of the GNU Library General Public +// License along with this library; if not, write to the Free +// Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +//# 210 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" + +//# 26 "../../../../mips/include/Gct/Ast/GctAstType.h" 2 + +extern ostream& operator<<(ostream&, GctAstType); + + +//# 27 "../../../../mips/include/Gct/Ast/GctAstRef.h" 2 + + +class GctAst; +class GctTree; +class GctLeaf; + +class GctAstRef: public GctRef { +public: + GctAstRef(); + GctAstRef(const GctAstRef&); + + GctAst *ref() const; // may return 0 (not requires valid) + + GctAstType concrete_type() const; // requires valid() + GctTree *tree() const; // never return 0 - typechecked + GctLeaf *leaf() const; // never return 0 - typechecked +protected: + // We make sure pointers do not float around for very long. + // This constructor cooperates with Gct{Leaf,Tree}::New + // (all flavors) to allow for the creation of new dynamic structures. + GctAstRef(GctAst *); + friend class GctLeaf; + friend class GctTree; +}; + + +//# 49 "../../../../mips/include/Gct/genclasses.h" 2 + + + +//# 2 "GctNameRef.List.cc" 2 + +//# 1 "../../../../mips/include/Gct/Name/GctNameRef.h" 1 +// -*- C++ -*- + + + +// +// GctNameRef class +// +// Expects to be included by Gct/Name.h +// +// Wendell Baker, Berkeley CAD Group, 1991 (wbaker@ic.Berkeley.EDU) +// + + + + + +//#pragma interface + + +// $Source: /cvs/cvsfiles/devo/gcc/testsuite/g++.old-deja/g++.mike/p785.C,v $ +// $Author: jason $ +// $Revision: 1.8 $ +// $Date: 1995/05/07 18:57:48 $ + +//# 1 "../../../../mips/include/Gct/Reference.h" 1 +// -*- C++ -*- +//# 29 "../../../../mips/include/Gct/Reference.h" + +//# 25 "../../../../mips/include/Gct/Name/GctNameRef.h" 2 + + +//# 1 "../../../../mips/include/Gct/Name/GctNameType.h" 1 +// -*- C++ -*- + + + +// +// GctNameType enum +// +// Wendell Baker, Berkeley CAD Group, 1991 (wbaker@ic.Berkeley.EDU) +// + +// $Source: /cvs/cvsfiles/devo/gcc/testsuite/g++.old-deja/g++.mike/p785.C,v $ +// $Author: jason $ +// $Revision: 1.8 $ +// $Date: 1995/05/07 18:57:48 $ + +// +// GctNameType enum +// +enum GctNameType { + Gct_Identifier, + Gct_Signature, +}; + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" 1 +// This is part of the iostream library, providing -*- C++ -*- input/output. +// Copyright (C) 1991 Per Bothner. +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Library General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Library General Public License for more details. +// +// You should have received a copy of the GNU Library General Public +// License along with this library; if not, write to the Free +// Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +//# 210 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/iostream.h" + +//# 24 "../../../../mips/include/Gct/Name/GctNameType.h" 2 + + +extern char *ntoa(GctNameType n, unsigned width = 0); +extern ostream& operator<<(ostream&, GctNameType); + + +//# 27 "../../../../mips/include/Gct/Name/GctNameRef.h" 2 + + +class GctName; +class GctIdentifier; +class GctSignature; + +class GctNameRef: public GctRef { +public: + GctNameRef(); + GctNameRef(const GctNameRef&); + + GctName *ref() const; // may return 0 (not requires valid()) + + GctNameType concrete_type() const; // requires valid() + GctIdentifier *identifier() const; // never return 0 - typechecked + GctSignature *signature() const; // never return 0 - typechecked +protected: + // We make sure pointers do not float around for very long. + // This constructor cooperates with GctIdentifier::New and + // GctSignature::New (all flavors) to allow for the creation of new + // dynamic structures. + GctNameRef(GctName *); + friend class GctIdentifier; + friend class GctSignature; + +private: + const char *class_name() const; +}; + +// +// Required operations for use by genclass container classes +// +// These are more specific than the ones supplied by GctRef +// because they use the name of the attribute as the key for +// comparison instead of the pointer stored as a void* value. +// +// NOTE: we can't use const here because the genclass code doesn't +// That is the ONLY reason for not using const reference args here. +// +extern int operator==(GctNameRef&, GctNameRef&); +extern int operator!=(GctNameRef&, GctNameRef&); + +extern int operator<=(GctNameRef&, GctNameRef&); +extern int operator<(GctNameRef&, GctNameRef&); + +extern int operator>=(GctNameRef&, GctNameRef&); +extern int operator>(GctNameRef&, GctNameRef&); + +// extern unsigned hash(GctNameRef&) +// is handled by the previous declaration of +// extern unsigned hash(GctRef&); + + +//# 3 "GctNameRef.List.cc" 2 + +// This may look like C code, but it is really -*- C++ -*- +/* +Copyright (C) 1988 Free Software Foundation + written by Doug Lea (dl@rocky.oswego.edu) + +This file is part of GNU CC. + +GNU CC is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY. No author or distributor +accepts responsibility to anyone for the consequences of using it +or for whether it serves any particular purpose or works at all, +unless he says so in writing. Refer to the GNU CC General Public +License for full details. + +Everyone is granted permission to copy, modify and redistribute +GNU CC, but only under the conditions described in the +GNU CC General Public License. A copy of this license is +supposed to have been given to you along with GNU CC so you +can know your rights and responsibilities. It should be in a +file named COPYING. Among other things, the copyright notice +and this notice must be preserved on all copies. +*/ + + +//#pragma implementation + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/builtin.h" 1 +// This may look like C code, but it is really -*- C++ -*- + +/* +Copyright (C) 1988, 1992 Free Software Foundation + written by Doug Lea (dl@rocky.oswego.edu) + +This file is part of the GNU C++ Library. This library is free +software; you can redistribute it and/or modify it under the terms of +the GNU Library General Public License as published by the Free +Software Foundation; either version 2 of the License, or (at your +option) any later version. This library is distributed in the hope +that it will be useful, but WITHOUT ANY WARRANTY; without even the +implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR +PURPOSE. See the GNU Library General Public License for more details. +You should have received a copy of the GNU Library General Public +License along with this library; if not, write to the Free Software +Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +/* + arithmetic, etc. functions on built in types +*/ + + +//# 214 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/builtin.h" + +//# 30 "GctNameRef.List.cc" 2 + +//# 1 "genclasses/GctNameRef.List.h" 1 +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/Pix.h" 1 + + + +typedef void* Pix; + +//# 1 "genclasses/GctNameRef.List.h" 2 + +// This may look like C code, but it is really -*- C++ -*- +/* +Copyright (C) 1988 Free Software Foundation + written by Doug Lea (dl@rocky.oswego.edu) + +This file is part of GNU CC. + +GNU CC is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY. No author or distributor +accepts responsibility to anyone for the consequences of using it +or for whether it serves any particular purpose or works at all, +unless he says so in writing. Refer to the GNU CC General Public +License for full details. + +Everyone is granted permission to copy, modify and redistribute +GNU CC, but only under the conditions described in the +GNU CC General Public License. A copy of this license is +supposed to have been given to you along with GNU CC so you +can know your rights and responsibilities. It should be in a +file named COPYING. Among other things, the copyright notice +and this notice must be preserved on all copies. +*/ + + + + +//#pragma once +//#pragma interface + + + + + +typedef void (*GctNameRefProcedure)(GctNameRef&); +typedef GctNameRef (*GctNameRefMapper)(GctNameRef&); +typedef GctNameRef (*GctNameRefCombiner)(GctNameRef&, GctNameRef&); +typedef int (*GctNameRefPredicate)(GctNameRef&); +typedef int (*GctNameRefComparator)(GctNameRef&, GctNameRef&); + + +//# 1 "/projects/gnu-cygnus/gnu-cygnus-8/common/g++-include/Pix.h" 1 + + + + + +//# 42 "genclasses/GctNameRef.List.h" 2 + + +struct GctNameRefListNode +{ + GctNameRefListNode* tl; + short ref; + GctNameRef hd; +}; + +extern GctNameRefListNode NilGctNameRefListNode; + +class GctNameRefList +{ +protected: + GctNameRefListNode* P; + + GctNameRefList(GctNameRefListNode* p); +public: + GctNameRefList(); + GctNameRefList(GctNameRef& head); + GctNameRefList(GctNameRef& head, GctNameRefList& tl); + GctNameRefList(GctNameRefList& a); + GctNameRefList(Pix p); + ~GctNameRefList(); + + GctNameRefList& operator = (GctNameRefList& a); + + int null(); + int valid(); + operator const void* (); + int operator ! (); + + int length() const; + int list_length(); + + GctNameRef& get(); + GctNameRef& head(); + GctNameRef& operator [] (int n); + + GctNameRefList nth(int n); + GctNameRefList tail(); + GctNameRefList last() const; + + GctNameRefList find(GctNameRef& targ); + GctNameRefList find(GctNameRefList& targ); + int contains(GctNameRef& targ) const; + int contains(GctNameRefList& targ) const; + int position(GctNameRef& targ); + + friend GctNameRefList copy(GctNameRefList& a); + friend GctNameRefList concat(GctNameRefList& a, GctNameRefList& b); + friend GctNameRefList append(GctNameRefList& a, GctNameRefList& b); + friend GctNameRefList map(GctNameRefMapper f, GctNameRefList& a); + friend GctNameRefList merge(GctNameRefList& a, GctNameRefList& b, GctNameRefComparator f); + friend GctNameRefList combine(GctNameRefCombiner f, GctNameRefList& a, GctNameRefList& b); + friend GctNameRefList reverse(GctNameRefList& a); + friend GctNameRefList select(GctNameRefPredicate f, GctNameRefList& a); + friend GctNameRefList remove(GctNameRef& targ, GctNameRefList& a); + friend GctNameRefList remove(GctNameRefPredicate f, GctNameRefList& a); + friend GctNameRefList subst(GctNameRef& old, GctNameRef& repl, GctNameRefList& a); + + void push(GctNameRef& x); + GctNameRef pop(); + + void set_tail(GctNameRefList& p); + void append(GctNameRefList& p); + void prepend(GctNameRefList& p); + void del(GctNameRef& targ); + void del(GctNameRefPredicate f); + void select(GctNameRefPredicate f); + void subst(GctNameRef& old, GctNameRef& repl); + void reverse(); + void sort(GctNameRefComparator f); + + void apply(GctNameRefProcedure f); + GctNameRef reduce(GctNameRefCombiner f, GctNameRef& base); + + friend int operator == (GctNameRefList& a, GctNameRefList& b); + friend int operator != (GctNameRefList& a, GctNameRefList& b); + + Pix first() const; + void next(Pix& p) const; + Pix seek(GctNameRef& item) const; + GctNameRef& operator () (Pix p) const; + int owns(Pix p) const; + + void error(const char*) const; + int OK() const; +}; + + + +inline void reference(GctNameRefListNode* p) +{ + if (p->ref >= 0) ++p->ref; +} + +inline void dereference(GctNameRefListNode* p) +{ + while (p->ref > 0 && --p->ref == 0) + { + GctNameRefListNode* n = p->tl; + delete(p); + p = n; + } +} + + +inline GctNameRefListNode* newGctNameRefListNode(GctNameRef& h) +{ + GctNameRefListNode* p = new GctNameRefListNode; + p->ref = 1; + p->hd = h; + return p; +} + +inline GctNameRefListNode* newGctNameRefListNode(GctNameRef& h, GctNameRefListNode* t) +{ + GctNameRefListNode* p = new GctNameRefListNode; + p->ref = 1; + p->hd = h; + p->tl = t; + return p; +} + + +inline GctNameRefList::~GctNameRefList() +{ + dereference(P); +} + +inline GctNameRefList::GctNameRefList() +{ + P = &NilGctNameRefListNode; +} + +inline GctNameRefList::GctNameRefList(GctNameRefListNode* p) +{ + P = p; +} + +inline GctNameRefList::GctNameRefList(GctNameRef& head) +{ + P = newGctNameRefListNode(head); + P->tl = &NilGctNameRefListNode; +} + +inline GctNameRefList::GctNameRefList(GctNameRef& head, GctNameRefList& tl) +{ + P = newGctNameRefListNode(head, tl.P); + reference(P->tl); +} + +inline GctNameRefList::GctNameRefList(GctNameRefList& a) +{ + reference(a.P); + P = a.P; +} + + +inline GctNameRef& GctNameRefList::get() +{ + return P->hd; +} + +inline GctNameRef& GctNameRefList::head() +{ + return P->hd; +} + + +inline GctNameRefList GctNameRefList::tail() +{ + reference(P->tl); + return GctNameRefList(P->tl); +} + + + +inline int GctNameRefList::null() +{ + return P == &NilGctNameRefListNode; +} + +inline int GctNameRefList::valid() +{ + return P != &NilGctNameRefListNode; +} + +inline GctNameRefList::operator const void* () +{ + return (P == &NilGctNameRefListNode)? 0 : this; +} + +inline int GctNameRefList::operator ! () +{ + return (P == &NilGctNameRefListNode); +} + + +inline void GctNameRefList::push(GctNameRef& head) +{ + GctNameRefListNode* oldp = P; + P = newGctNameRefListNode(head, oldp); +} + + +inline int operator != (GctNameRefList& x, GctNameRefList& y) +{ + return !(x == y); +} + +inline Pix GctNameRefList::first() const +{ + return (P == &NilGctNameRefListNode)? 0 : Pix(P); +} + +inline GctNameRef& GctNameRefList::operator () (Pix p) const +{ + return ((GctNameRefListNode*)p)->hd; +} + +inline void GctNameRefList::next(Pix& p) const +{ + if (p != 0) + { + p = Pix(((GctNameRefListNode*)p)->tl); + if (p == &NilGctNameRefListNode) p = 0; + } +} + +inline GctNameRefList::GctNameRefList(Pix p) +{ + P = (GctNameRefListNode*)p; + reference(P); +} + + + +//# 31 "GctNameRef.List.cc" 2 + + +GctNameRefListNode NilGctNameRefListNode; + +class init_NilGctNameRefListNode +{ +public: + inline init_NilGctNameRefListNode() + { + NilGctNameRefListNode.tl = &NilGctNameRefListNode; + NilGctNameRefListNode.ref = -1; + } +}; + +static init_NilGctNameRefListNode NilGctNameRefListNode_initializer; + +GctNameRefList& GctNameRefList::operator = (GctNameRefList& a) +{ + reference(a.P); + dereference(P); + P = a.P; + return *this; +} + +GctNameRef GctNameRefList::pop() +{ + GctNameRef res = P->hd; + GctNameRefListNode* tail = P->tl; + reference(tail); + dereference(P); + P = tail; + return res; +} + +void GctNameRefList::set_tail(GctNameRefList& a) +{ + reference(a.P); + dereference(P->tl); + P->tl = a.P; +} + +GctNameRefList GctNameRefList::nth(int n) +{ + GctNameRefListNode* p; + for (p = P; n-- > 0; p = p->tl); + reference(p); + return GctNameRefList(p); +} + +GctNameRefList GctNameRefList::last() const +{ + GctNameRefListNode* p = P; + if (p != &NilGctNameRefListNode) while (p->tl != &NilGctNameRefListNode) p = p->tl; + reference(p); + return GctNameRefList(p); +} + +void GctNameRefList::append(GctNameRefList& l) +{ + GctNameRefListNode* p = P; + GctNameRefListNode* a = l.P; + reference(a); + if (p != &NilGctNameRefListNode) + { + while (p->tl != &NilGctNameRefListNode) p = p->tl; + p->tl = a; + } + else + P = a; +} + +int GctNameRefList::length() const +{ + int l = 0; + for (GctNameRefListNode* p = P; p != &NilGctNameRefListNode; p = p->tl) ++l; + return l; +} + +GctNameRef& GctNameRefList::operator [] (int n) +{ + GctNameRefListNode* p; + for (p = P; n-- > 0; p = p->tl); + return (p->hd); +} + +int operator == (GctNameRefList& x, GctNameRefList& y) +{ + GctNameRefListNode* a = x.P; + GctNameRefListNode* b = y.P; + + for (;;) + { + if (a == &NilGctNameRefListNode) + return b == &NilGctNameRefListNode; + else if (b == &NilGctNameRefListNode) + return 0; + else if (a->hd == b->hd) + { + a = a->tl; + b = b->tl; + } + else + return 0; + } +} + + +void GctNameRefList::apply(GctNameRefProcedure f) +{ + for(GctNameRefListNode* p = P; p != &NilGctNameRefListNode; p = p->tl) + (*f)((p->hd)); +} + +void GctNameRefList::subst(GctNameRef& old, GctNameRef& repl) +{ + for(GctNameRefListNode* p = P; p != &NilGctNameRefListNode; p = p->tl) + if (p->hd == old) + p->hd = repl; +} + +GctNameRef GctNameRefList::reduce(GctNameRefCombiner f, GctNameRef& base) +{ + GctNameRef r = base; + for(GctNameRefListNode* p = P; p != &NilGctNameRefListNode; p = p->tl) + r = (*f)(r, (p->hd)); + return r; +} + +int GctNameRefList::position(GctNameRef& targ) +{ + int l = 0; + GctNameRefListNode* p = P; + for (;;) + { + if (p == &NilGctNameRefListNode) + return -1; + else if (p->hd == targ) + return l; + else + { + ++l; + p = p->tl; + } + } +} + +int GctNameRefList::contains(GctNameRef& targ) const +{ + GctNameRefListNode* p = P; + for (;;) + { + if (p == &NilGctNameRefListNode) + return 0; + else if (p->hd == targ) + return 1; + else + p = p->tl; + } +} + +GctNameRefList GctNameRefList::find(GctNameRef& targ) +{ + GctNameRefListNode* p; + for (p = P; p != &NilGctNameRefListNode && !(p->hd == targ); p=p->tl); + reference(p); + return GctNameRefList(p); +} + +Pix GctNameRefList::seek(GctNameRef& targ) const +{ + GctNameRefListNode* p = P; + for (;;) + { + if (p == &NilGctNameRefListNode) + return 0; + else if (p->hd == targ) + return Pix(p); + else + p = p->tl; + } +} + +int GctNameRefList::owns(Pix i) const +{ + GctNameRefListNode* p = P; + for (;;) + { + if (p == &NilGctNameRefListNode) + return 0; + else if (Pix(p) == i) + return 1; + else + p = p->tl; + } +} + +GctNameRefList GctNameRefList::find(GctNameRefList& target) +{ + GctNameRefListNode* targ = target.P; + if (targ == &NilGctNameRefListNode) + return GctNameRefList(targ); + + GctNameRefListNode* p = P; + while (p != &NilGctNameRefListNode) + { + if (p->hd == targ->hd) + { + GctNameRefListNode* a = p->tl; + GctNameRefListNode* t = targ->tl; + for(;;) + { + if (t == &NilGctNameRefListNode) + { + reference(p); + return GctNameRefList(p); + } + else if (a == &NilGctNameRefListNode || !(a->hd == t->hd)) + break; + else + { + a = a->tl; + t = t->tl; + } + } + } + p = p->tl; + } + return GctNameRefList(&NilGctNameRefListNode); +} + +int GctNameRefList::contains(GctNameRefList& target) const +{ + GctNameRefListNode* targ = target.P; + if (targ == &NilGctNameRefListNode) + return 0; + + GctNameRefListNode* p = P; + while (p != &NilGctNameRefListNode) + { + if (p->hd == targ->hd) + { + GctNameRefListNode* a = p->tl; + GctNameRefListNode* t = targ->tl; + for(;;) + { + if (t == &NilGctNameRefListNode) + return 1; + else if (a == &NilGctNameRefListNode || !(a->hd == t->hd)) + break; + else + { + a = a->tl; + t = t->tl; + } + } + } + p = p->tl; + } + return 0; +} + +void GctNameRefList::del(GctNameRef& targ) +{ + GctNameRefListNode* h = P; + + for (;;) + { + if (h == &NilGctNameRefListNode) + { + P = h; + return; + } + else if (h->hd == targ) + { + GctNameRefListNode* nxt = h->tl; + reference(nxt); + dereference(h); + h = nxt; + } + else + break; + } + + GctNameRefListNode* trail = h; + GctNameRefListNode* p = h->tl; + while (p != &NilGctNameRefListNode) + { + if (p->hd == targ) + { + GctNameRefListNode* nxt = p->tl; + reference(nxt); + dereference(p); + trail->tl = nxt; + p = nxt; + } + else + { + trail = p; + p = p->tl; + } + } + P = h; +} + +void GctNameRefList::del(GctNameRefPredicate f) +{ + GctNameRefListNode* h = P; + for (;;) + { + if (h == &NilGctNameRefListNode) + { + P = h; + return; + } + else if ((*f)(h->hd)) + { + GctNameRefListNode* nxt = h->tl; + reference(nxt); + dereference(h); + h = nxt; + } + else + break; + } + + GctNameRefListNode* trail = h; + GctNameRefListNode* p = h->tl; + while (p != &NilGctNameRefListNode) + { + if ((*f)(p->hd)) + { + GctNameRefListNode* nxt = p->tl; + reference(nxt); + dereference(p); + trail->tl = nxt; + p = nxt; + } + else + { + trail = p; + p = p->tl; + } + } + P = h; +} + +void GctNameRefList::select(GctNameRefPredicate f) +{ + GctNameRefListNode* h = P; + for (;;) + { + if (h == &NilGctNameRefListNode) + { + P = h; + return; + } + else if (!(*f)(h->hd)) + { + GctNameRefListNode* nxt = h->tl; + reference(nxt); + dereference(h); + h = nxt; + } + else + break; + } + GctNameRefListNode* trail = h; + GctNameRefListNode* p = h->tl; + while (p != &NilGctNameRefListNode) + { + if (!(*f)(p->hd)) + { + GctNameRefListNode* nxt = p->tl; + reference(nxt); + dereference(p); + trail->tl = nxt; + p = nxt; + } + else + { + trail = p; + p = p->tl; + } + } + P = h; +} + +void GctNameRefList::reverse() +{ + GctNameRefListNode* l = &NilGctNameRefListNode; + GctNameRefListNode* p = P; + while (p != &NilGctNameRefListNode) + { + GctNameRefListNode* nxt = p->tl; + p->tl = l; + l = p; + p = nxt; + } + P = l; +} + + +GctNameRefList copy(GctNameRefList& x) +{ + GctNameRefListNode* a = x.P; + if (a == &NilGctNameRefListNode) + return GctNameRefList(a); + else + { + GctNameRefListNode* h = newGctNameRefListNode(a->hd); + GctNameRefListNode* trail = h; + for(a = a->tl; a != &NilGctNameRefListNode; a = a->tl) + { + GctNameRefListNode* n = newGctNameRefListNode(a->hd); + trail->tl = n; + trail = n; + } + trail->tl = &NilGctNameRefListNode; + return GctNameRefList(h); + } +} + + +GctNameRefList subst(GctNameRef& old, GctNameRef& repl, GctNameRefList& x) +{ + GctNameRefListNode* a = x.P; + if (a == &NilGctNameRefListNode) + return GctNameRefList(a); + else + { + GctNameRefListNode* h = new GctNameRefListNode; + h->ref = 1; + if (a->hd == old) + h->hd = repl; + else + h->hd = a->hd; + GctNameRefListNode* trail = h; + for(a = a->tl; a != &NilGctNameRefListNode; a = a->tl) + { + GctNameRefListNode* n = new GctNameRefListNode; + n->ref = 1; + if (a->hd == old) + n->hd = repl; + else + n->hd = a->hd; + trail->tl = n; + trail = n; + } + trail->tl = &NilGctNameRefListNode; + return GctNameRefList(h); + } +} + +GctNameRefList combine(GctNameRefCombiner f, GctNameRefList& x, GctNameRefList& y) +{ + GctNameRefListNode* a = x.P; + GctNameRefListNode* b = y.P; + if (a == &NilGctNameRefListNode || b == &NilGctNameRefListNode) + return GctNameRefList(&NilGctNameRefListNode); + else + { + GctNameRefListNode* h = newGctNameRefListNode((*f)(a->hd, b->hd)); + GctNameRefListNode* trail = h; + a = a->tl; + b = b->tl; + while (a != &NilGctNameRefListNode && b != &NilGctNameRefListNode) + { + GctNameRefListNode* n = newGctNameRefListNode((*f)(a->hd, b->hd)); + trail->tl = n; + trail = n; + a = a->tl; + b = b->tl; + } + trail->tl = &NilGctNameRefListNode; + return GctNameRefList(h); + } +} + +GctNameRefList reverse(GctNameRefList& x) +{ + GctNameRefListNode* a = x.P; + if (a == &NilGctNameRefListNode) + return GctNameRefList(a); + else + { + GctNameRefListNode* l = newGctNameRefListNode(a->hd); + l->tl = &NilGctNameRefListNode; + for(a = a->tl; a != &NilGctNameRefListNode; a = a->tl) + { + GctNameRefListNode* n = newGctNameRefListNode(a->hd); + n->tl = l; + l = n; + } + return GctNameRefList(l); + } +} + +GctNameRefList append(GctNameRefList& x, GctNameRefList& y) +{ + GctNameRefListNode* a = x.P; + GctNameRefListNode* b = y.P; + reference(b); + if (a != &NilGctNameRefListNode) + { + GctNameRefListNode* h = newGctNameRefListNode(a->hd); + GctNameRefListNode* trail = h; + for(a = a->tl; a != &NilGctNameRefListNode; a = a->tl) + { + GctNameRefListNode* n = newGctNameRefListNode(a->hd); + trail->tl = n; + trail = n; + } + trail->tl = b; + return GctNameRefList(h); + } + else + return GctNameRefList(b); +} + +void GctNameRefList::prepend(GctNameRefList& y) +{ + GctNameRefListNode* b = y.P; + if (b != &NilGctNameRefListNode) + { + GctNameRefListNode* h = newGctNameRefListNode(b->hd); + GctNameRefListNode* trail = h; + for(b = b->tl; b != &NilGctNameRefListNode; b = b->tl) + { + GctNameRefListNode* n = newGctNameRefListNode(b->hd); + trail->tl = n; + trail = n; + } + trail->tl = P; + P = h; + } +} + +GctNameRefList concat(GctNameRefList& x, GctNameRefList& y) +{ + GctNameRefListNode* a = x.P; + GctNameRefListNode* b = y.P; + if (a != &NilGctNameRefListNode) + { + GctNameRefListNode* h = newGctNameRefListNode(a->hd); + GctNameRefListNode* trail = h; + for(a = a->tl; a != &NilGctNameRefListNode; a = a->tl) + { + GctNameRefListNode* n = newGctNameRefListNode(a->hd); + trail->tl = n; + trail = n; + }; + for(;b != &NilGctNameRefListNode; b = b->tl) + { + GctNameRefListNode* n = newGctNameRefListNode(b->hd); + trail->tl = n; + trail = n; + } + trail->tl = &NilGctNameRefListNode; + return GctNameRefList(h); + } + else if (b != &NilGctNameRefListNode) + { + GctNameRefListNode* h = newGctNameRefListNode(b->hd); + GctNameRefListNode* trail = h; + for(b = b->tl; b != &NilGctNameRefListNode; b = b->tl) + { + GctNameRefListNode* n = newGctNameRefListNode(b->hd); + trail->tl = n; + trail = n; + } + trail->tl = &NilGctNameRefListNode; + return GctNameRefList(h); + } + else + return GctNameRefList(&NilGctNameRefListNode); +} + +GctNameRefList select(GctNameRefPredicate f, GctNameRefList& x) +{ + GctNameRefListNode* a = x.P; + GctNameRefListNode* h = &NilGctNameRefListNode; + while (a != &NilGctNameRefListNode) + { + if ((*f)(a->hd)) + { + h = newGctNameRefListNode(a->hd); + GctNameRefListNode* trail = h; + for(a = a->tl; a != &NilGctNameRefListNode; a = a->tl) + { + if ((*f)(a->hd)) + { + GctNameRefListNode* n = newGctNameRefListNode(a->hd); + trail->tl = n; + trail = n; + } + } + trail->tl = &NilGctNameRefListNode; + break; + } + else + a = a->tl; + } + return GctNameRefList(h); +} + +GctNameRefList remove(GctNameRefPredicate f, GctNameRefList& x) +{ + GctNameRefListNode* a = x.P; + GctNameRefListNode* h = &NilGctNameRefListNode; + while (a != &NilGctNameRefListNode) + { + if (!(*f)(a->hd)) + { + h = newGctNameRefListNode(a->hd); + GctNameRefListNode* trail = h; + for(a = a->tl; a != &NilGctNameRefListNode; a = a->tl) + { + if (!(*f)(a->hd)) + { + GctNameRefListNode* n = newGctNameRefListNode(a->hd); + trail->tl = n; + trail = n; + } + } + trail->tl = &NilGctNameRefListNode; + break; + } + else + a = a->tl; + } + return GctNameRefList(h); +} + +GctNameRefList remove(GctNameRef& targ, GctNameRefList& x) +{ + GctNameRefListNode* a = x.P; + GctNameRefListNode* h = &NilGctNameRefListNode; + while (a != &NilGctNameRefListNode) + { + if (!(a->hd == targ)) + { + h = newGctNameRefListNode(a->hd); + GctNameRefListNode* trail = h; + for(a = a->tl; a != &NilGctNameRefListNode; a = a->tl) + { + if (!(a->hd == targ)) + { + GctNameRefListNode* n = newGctNameRefListNode(a->hd); + trail->tl = n; + trail = n; + } + } + trail->tl = &NilGctNameRefListNode; + break; + } + else + a = a->tl; + } + return GctNameRefList(h); +} + +GctNameRefList map(GctNameRefMapper f, GctNameRefList& x) +{ + GctNameRefListNode* a = x.P; + GctNameRefListNode* h = &NilGctNameRefListNode; + if (a != &NilGctNameRefListNode) + { + h = newGctNameRefListNode((*f)(a->hd)); + GctNameRefListNode* trail = h; + for(a = a->tl; a != &NilGctNameRefListNode; a = a->tl) + { + GctNameRefListNode* n = newGctNameRefListNode((*f)(a->hd)); + trail->tl = n; + trail = n; + } + trail->tl = &NilGctNameRefListNode; + } + return GctNameRefList(h); +} + + +GctNameRefList merge(GctNameRefList& x, GctNameRefList& y, GctNameRefComparator f) +{ + GctNameRefListNode* a = x.P; + GctNameRefListNode* b = y.P; + + if (a == &NilGctNameRefListNode) + { + if (b == &NilGctNameRefListNode) + return GctNameRefList(&NilGctNameRefListNode); + else + return copy(y); + } + else if (b == &NilGctNameRefListNode) + return copy(x); + + GctNameRefListNode* h = new GctNameRefListNode; + h->ref = 1; + if ((*f)(a->hd, b->hd) <= 0) + { + h->hd = a->hd; + a = a->tl; + } + else + { + h->hd = b->hd; + b = b->tl; + } + + GctNameRefListNode* r = h; + + for(;;) + { + if (a == &NilGctNameRefListNode) + { + while (b != &NilGctNameRefListNode) + { + GctNameRefListNode* n = new GctNameRefListNode; + n->ref = 1; + n->hd = b->hd; + r->tl = n; + r = n; + b = b->tl; + } + r->tl = &NilGctNameRefListNode; + return GctNameRefList(h); + } + else if (b == &NilGctNameRefListNode) + { + while (a != &NilGctNameRefListNode) + { + GctNameRefListNode* n = new GctNameRefListNode; + n->ref = 1; + n->hd = a->hd; + r->tl = n; + r = n; + a = a->tl; + } + r->tl = &NilGctNameRefListNode; + return GctNameRefList(h); + } + else if ((*f)(a->hd, b->hd) <= 0) + { + GctNameRefListNode* n = new GctNameRefListNode; + n->ref = 1; + n->hd = a->hd; + r->tl = n; + r = n; + a = a->tl; + } + else + { + GctNameRefListNode* n = new GctNameRefListNode; + n->ref = 1; + n->hd = b->hd; + r->tl = n; + r = n; + b = b->tl; + } + } +} + +void GctNameRefList::sort(GctNameRefComparator f) +{ + // strategy: place runs in queue, merge runs until done + // This is often very fast + + if (P == &NilGctNameRefListNode || P->tl == &NilGctNameRefListNode) + return; + + int qlen = 250; // guess a good queue size, realloc if necessary + + GctNameRefListNode** queue = (GctNameRefListNode**)malloc(qlen * sizeof(GctNameRefListNode*)); + + GctNameRefListNode* h = P; + GctNameRefListNode* a = h; + GctNameRefListNode* b = a->tl; + int qin = 0; + + while (b != &NilGctNameRefListNode) + { + if ((*f)(a->hd, b->hd) > 0) + { + if (h == a) // minor optimization: ensure runlen >= 2 + { + h = b; + a->tl = b->tl; + b->tl = a; + b = a->tl; + } + else + { + if (qin >= qlen) + { + qlen *= 2; + queue = (GctNameRefListNode**)realloc(queue, qlen * sizeof(GctNameRefListNode*)); + } + queue[qin++] = h; + a->tl = &NilGctNameRefListNode; + h = a = b; + b = b->tl; + } + } + else + { + a = b; + b = b->tl; + } + } + + int count = qin; + queue[qin] = h; + if (++qin >= qlen) qin = 0; + int qout = 0; + + while (count-- > 0) + { + a = queue[qout]; + if (++qout >= qlen) qout = 0; + b = queue[qout]; + if (++qout >= qlen) qout = 0; + + if ((*f)(a->hd, b->hd) <= 0) + { + h = a; + a = a->tl; + } + else + { + h = b; + b = b->tl; + } + queue[qin] = h; + if (++qin >= qlen) qin = 0; + + for (;;) + { + if (a == &NilGctNameRefListNode) + { + h->tl = b; + break; + } + else if (b == &NilGctNameRefListNode) + { + h->tl = a; + break; + } + else if ((*f)(a->hd, b->hd) <= 0) + { + h->tl = a; + h = a; + a = a->tl; + } + else + { + h->tl = b; + h = b; + b = b->tl; + } + } + } + P = queue[qout]; + free(queue); +} + +int GctNameRefList::list_length() +{ + GctNameRefListNode* fast = P; + if (fast == &NilGctNameRefListNode) + return 0; + + GctNameRefListNode* slow = fast->tl; + if (slow == &NilGctNameRefListNode) + return 1; + + fast = slow->tl; + int n = 2; + + for (;;) + { + if (fast == &NilGctNameRefListNode) + return n; + else if (fast->tl == &NilGctNameRefListNode) + return n+1; + else if (fast == slow) + return -1; + else + { + n += 2; + fast = fast->tl->tl; + slow = slow->tl; + } + } +} + +void GctNameRefList::error(const char* msg) const +{ + (*lib_error_handler)("List", msg); +} + +int GctNameRefList::OK() const +{ + int v = P != 0; // have a node + // check that all nodes OK, even if circular: + + GctNameRefListNode* fast = P; + if (fast != &NilGctNameRefListNode) + { + v &= fast->ref != 0; + GctNameRefListNode* slow = fast->tl; + v &= slow->ref != 0; + if (v && slow != &NilGctNameRefListNode) + { + fast = slow->tl; + v &= fast->ref != 0; + while (v) + { + if (fast == &NilGctNameRefListNode) + break; + else if (fast->tl == &NilGctNameRefListNode) + break; + else if (fast == slow) + break; + else + { + v &= fast->ref != 0 && slow->ref != 0; + fast = fast->tl->tl; + slow = slow->tl; + } + } + } + } + if (!v) error ("invariant failure"); + return v; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p786.C b/gcc/testsuite/g++.old-deja/g++.mike/p786.C new file mode 100644 index 000000000000..258c36511dee --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p786.C @@ -0,0 +1,35 @@ +// prms-id: 786 + +extern "C" void printf (char *, ...); +extern "C" void exit(int); +class C + { + int a; +public: + C() {a = 1;} + }; + +void func(const C& a, C& b) +{ + printf ("in const func\n"); + exit(1); +} + +void func(C& a, C& b) +{ + printf ("in non-const func\n"); +} + +void testit(const C& a, C& b) +{ + func(a,b); +} + +main() +{ + C a; + C b; + + func(a,b); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p7865.C b/gcc/testsuite/g++.old-deja/g++.mike/p7865.C new file mode 100644 index 000000000000..d9a611889b1d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p7865.C @@ -0,0 +1,28 @@ +// prms-id: 7865 + +int count; + +struct A { + A() { ++count; } + ~A() { --count; } +}; + +int foo() { return 1; } + +int bar() +{ + A a; + for (;;) { + A b; + if (foo()) + return 0; + if (foo()) + return 0; + } + return 0; +} + +main() { + bar(); + return count; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p7868.C b/gcc/testsuite/g++.old-deja/g++.mike/p7868.C new file mode 100644 index 000000000000..d8ce95d3c66f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p7868.C @@ -0,0 +1,21 @@ +// Build don't link: +// prms-id: 7868 + +struct DIAGTYP { +}; +struct DIAGTYP1 { + struct DIAGTYP; + void bar() { new struct DIAGTYP; } // ERROR - undefined + void foo() { new struct DIAGTYP1; } +}; + +int main () { + struct DIAGTYP; + struct DIAGTYP *lerror_desc; + lerror_desc= new struct DIAGTYP; // ERROR - undefined +} + +void foo () { + struct DIAGTYP *lerror_desc; + lerror_desc= new struct DIAGTYP; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p789.C b/gcc/testsuite/g++.old-deja/g++.mike/p789.C new file mode 100644 index 000000000000..09815989d5b0 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p789.C @@ -0,0 +1,28 @@ +// prms-id: 789 + +extern "C" void printf (char *, ...); +struct foo +{ + static int count; + virtual void print (int i, int j) { printf ("foo[%d][%d] = %d\n", i, j, x); } + int x; + foo () { x = count++; } +}; +int foo::count; +struct bar : virtual public foo +{ + virtual void print (int i, int j) { printf ("bar[%d][%d] = %d\n", i, j, x); } +}; + +// bar array[3][3]; +foo array[3][3]; + +main () +{ + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) { +// printf("&a[%d][%d] = %x\n", i, j, (void *)&array[i][j]); + array[i][j].print (i, j); + } + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p789a.C b/gcc/testsuite/g++.old-deja/g++.mike/p789a.C new file mode 100644 index 000000000000..9086ff54cfe8 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p789a.C @@ -0,0 +1,43 @@ +// global and local multidimensional array objects are not getting +// constructors called on any dimension, other than the first. Also, +// the destructors are not being called. Seems odd, they probably +// used to work. :-( +// prms-id: 789 + +extern "C" void printf (char *, ...); +struct foo +{ + static int count; + void print (int i, int j) { printf ("foo[%d][%d] = %d\n", i, j, x); } + int x; + foo () { + x = count++; + printf("this %d = %x\n", x, (void *)this); + } + virtual ~foo () { + printf("this %d = %x\n", x, (void *)this); + --count; + } +}; +int foo::count; + + +main () +{ + { + foo array[3][3]; + for (int i = 0; i < 3; i++) + { + for (int j = 0; j < 3; j++) + { + printf("&a[%d][%d] = %x\n", i, j, (void *)&array[i][j]); + } + } + // The count should be nine, if not, fail the test. + if (foo::count != 9) + return 1; + } + if (foo::count != 0) + return 1; + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p7912.C b/gcc/testsuite/g++.old-deja/g++.mike/p7912.C new file mode 100644 index 000000000000..40f45c48c129 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p7912.C @@ -0,0 +1,23 @@ +// Special g++ Options: -fexceptions +// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-* +// prms-id: 7912 + +int count = 0; + +class Foo { +public: + Foo() { ++count; }; + Foo(const Foo&) { ++count; }; + ~Foo() { --count; }; +}; + + +main() +{ + try { + throw Foo(); + } + catch (Foo object) { + } + return count; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p8009.C b/gcc/testsuite/g++.old-deja/g++.mike/p8009.C new file mode 100644 index 000000000000..e8a124b40cf8 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p8009.C @@ -0,0 +1,12 @@ +// prms-id: 8009 + +class A { +public: + int i; +}; + +class B : public A { + B(); +}; + +B::B() : i (-1) {} // ERROR - diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p8018.C b/gcc/testsuite/g++.old-deja/g++.mike/p8018.C new file mode 100644 index 000000000000..37035bcd5918 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p8018.C @@ -0,0 +1,85 @@ +// prms-id: 8018 + +class RefCount { +private: + int nref; + +public: + RefCount() : nref(0) {} + ~RefCount() {} + + int nrefs() const { return nref; } + int reference() { + nref++; + return nref; + } + int unreference() { + nref--; + return nref; + } +}; + +class A : public RefCount { +public: + A() {} + ~A() {} +}; + +class RefA { +private: + A *p; + + void clear() { + if (p) { + p->unreference(); + if (!p->nrefs()) + delete p; + } + } + +public: + RefA(A* a) : p(a) { if (p) p->reference(); } + RefA(const RefA& a) : p(a.p) { if (p) p->reference(); } + ~RefA() { clear(); } + + A* operator->() { return p; } + + RefA& operator=(const RefA& a) { + clear(); + p=a.p; + if (p) + p->reference(); + return *this; + } + + RefA& operator=(A* a) { + clear(); + p=a; + if (p) + p->reference(); + return *this; + } +}; + +class AccRefA { +private: + RefA a; + +public: + AccRefA(A* ap) : a(ap) {} + AccRefA(const RefA& ar) : a(ar) {} + ~AccRefA() {} + + operator RefA&() { return a; } + RefA& result() { return a; } +}; + +int +main() { + RefA a1 = new A; + AccRefA aa1(a1); + RefA a3 = aa1; + + if (a1->nrefs() != 3) + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p8039.C b/gcc/testsuite/g++.old-deja/g++.mike/p8039.C new file mode 100644 index 000000000000..73defeccd97c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p8039.C @@ -0,0 +1,14 @@ +// prms-id: 8039 + +class C { +public: + int func (); +}; + +extern void bar(int*); + +main() +{ + int (C::*mfp)() = &C::func; + bar((int*)mfp); // ERROR - no clear semantics +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p807.C b/gcc/testsuite/g++.old-deja/g++.mike/p807.C new file mode 100644 index 000000000000..59df08e51491 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p807.C @@ -0,0 +1,34 @@ +// prms-id: 807 + +extern "C" int printf(const char*, ...); + +class B; + +class AX +{ + protected: + int x; + + public: + operator B(); +}; + + +class B +{ + private: + int x; + public: + B(const AX&); +}; + + +int foo(B& b); // ERROR - referenced below + + +main() +{ + AX a; + foo(a); // ERROR - Ambiguous B(a) or a.operator B() // See ARM 12.3.2 + +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p807a.C b/gcc/testsuite/g++.old-deja/g++.mike/p807a.C new file mode 100644 index 000000000000..d7b797af8e0f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p807a.C @@ -0,0 +1,22 @@ +// Build don't link: +// prms-id: 807 + +// See ARM page 275 Section 12.3.2 + +extern "C" void printf (char *, ...); +extern "C" void exit(int); + +class B; + +class A { +public: + A(B&); // ERROR - fn ref in err msg +}; + +class B { +public: + operator A(); // ERROR - fn ref in err msg +}; + +B b; +A a = b; // ERROR - should fail as it is ambigious. diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p811.C b/gcc/testsuite/g++.old-deja/g++.mike/p811.C new file mode 100644 index 000000000000..59b15d19823c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p811.C @@ -0,0 +1,549 @@ +// This test case caused the compiler to abort at one point in time. +// Build don't link: +// Special g++ Options: +// prms-id: 811 + +class ostream; class streambuf; + +typedef long streamoff, streampos; + +struct _ios_fields { + streambuf *_strbuf; + ostream* _tie; + int _width; + unsigned long _flags; + char _fill; + unsigned char _state; + unsigned short _precision; +}; + + +enum state_value { _good = 0, _eof = 1, _fail = 2, _bad = 4 }; +enum open_mode { input=1, output=2, append=8 }; + + +class ios : public _ios_fields { + public: + enum io_state { goodbit=0, eofbit=1, failbit=2, badbit=4 }; + enum open_mode { + in=1, + out=2, + ate=4, + app=8, + trunc=16, + nocreate=32, + noreplace=64 }; + enum seek_dir { beg, cur, end}; + enum { skipws=01, left=02, right=04, internal=010, + dec=020, oct=040, hex=0100, + showbase=0200, showpoint=0400, uppercase=01000, showpos=02000, + scientific=04000, fixed=0100000, unitbuf=020000, stdio=040000, + dont_close=0x80000000 + }; + + ostream* tie() const { return _tie; } + ostream* tie(ostream* val) { ostream* save=_tie; _tie=val; return save; } + + + char fill() const { return _fill; } + char fill(char newf) { char oldf = _fill; _fill = newf; return oldf; } + unsigned long flags() const { return _flags; } + unsigned long flags(unsigned long new_val) { + unsigned long old_val = _flags; _flags = new_val; return old_val; } + unsigned short precision() const { return _precision; } + unsigned short precision(int newp) { + unsigned short oldp = _precision; _precision = (unsigned short)newp; + return oldp; } + unsigned long setf(unsigned long val) { + unsigned long oldbits = _flags; + _flags |= val; return oldbits; } + unsigned long setf(unsigned long val, unsigned long mask) { + unsigned long oldbits = _flags; + _flags = (_flags & ~mask) | (val & mask); return oldbits; } + unsigned long unsetf(unsigned long mask) { + unsigned long oldbits = _flags & mask; + _flags &= ~mask; return oldbits; } + int width() const { return _width; } + int width(long val) { long save = _width; _width = val; return save; } + + static const unsigned long basefield; + static const unsigned long adjustfield; + static const unsigned long floatfield; + + streambuf* rdbuf() const { return _strbuf; } + void clear(int state = 0) { _state = state; } + int good() const { return _state == 0; } + int eof() const { return _state & ios::eofbit; } + int fail() const { return _state & (ios::badbit|ios::failbit); } + int bad() const { return _state & ios::badbit; } + int rdstate() const { return _state; } + void set(int flag) { _state |= flag; } + operator void*() const { return fail() ? (void*)0 : (void*)this; } + int operator!() const { return fail(); } + + + void unset(state_value flag) { _state &= ~flag; } + void close(); + int is_open(); + int readable(); + int writable(); + + + protected: + ios(streambuf*sb) { _strbuf=sb; _state=0; _width=0; _fill=' '; + _flags=ios::skipws; _precision=6; } +}; + + + + +typedef ios::seek_dir _seek_dir; + + + + + + + + + + + + + + + + + + + + + + +//# 168 "/usr/latest/lib/g++-include/streambuf.h" 3 + + +struct __streambuf { + + int _flags; + char* _gptr; + char* _egptr; + char* _eback; + char* _pbase; + char* _pptr; + char* _epptr; + char* _base; + char* _ebuf; + struct streambuf *_chain; + + + + +}; + +struct streambuf : private __streambuf { + friend class ios; + friend class istream; + friend class ostream; + protected: + static streambuf* _list_all; + streambuf*& xchain() { return _chain; } + void _un_link(); + void _link_in(); + char* gptr() const { return _gptr; } + char* pptr() const { return _pptr; } + char* egptr() const { return _egptr; } + char* epptr() const { return _epptr; } + char* pbase() const { return _pbase; } + char* eback() const { return _eback; } + char* ebuf() const { return _ebuf; } + char* base() const { return _base; } + void xput_char(char c) { *_pptr++ = c; } + int xflags() { return _flags; } + int xflags(int f) { int fl = _flags; _flags = f; return fl; } + void xsetflags(int f) { _flags |= f; } + void gbump(int n) { _gptr += n; } + void pbump(int n) { _pptr += n; } + void setb(char* b, char* eb, int a=0); + void setp(char* p, char* ep) { _pbase=_pptr=p; _epptr=ep; } + void setg(char* eb, char* g, char *eg) { _eback=eb; _gptr=g; _egptr=eg; } + public: + static int flush_all(); + static void flush_all_linebuffered(); + virtual int underflow(); + virtual int overflow(int c = (-1) ); + virtual int doallocate(); + virtual streampos seekoff(streamoff, _seek_dir, int mode=ios::in|ios::out); + virtual streampos seekpos(streampos pos, int mode = ios::in|ios::out); + int sputbackc(char c); + int sungetc(); + streambuf(); + virtual ~streambuf(); + int unbuffered() { return _flags & 2 ? 1 : 0; } + int linebuffered() { return _flags & 0x4000 ? 1 : 0; } + void unbuffered(int i) + { if (i) _flags |= 2 ; else _flags &= ~2 ; } + void linebuffered(int i) + { if (i) _flags |= 0x4000 ; else _flags &= ~0x4000 ; } + int allocate() { + if (base() || unbuffered()) return 0; + else return doallocate(); } + virtual int sync(); + virtual int pbackfail(int c); + virtual int ungetfail(); + virtual streambuf* setbuf(char* p, int len); + int in_avail() { return _egptr - _gptr; } + int out_waiting() { return _pptr - _pbase; } + virtual int sputn(const char* s, int n); + virtual int sgetn(char* s, int n); + long sgetline(char* buf, int n, char delim, int putback_delim); + int sbumpc() { + if (_gptr >= _egptr && underflow() == (-1) ) return (-1) ; + else return *(unsigned char*)_gptr++; } + int sgetc() { + if (_gptr >= _egptr && underflow() == (-1) ) return (-1) ; + else return *(unsigned char*)_gptr; } + int snextc() { + if (++_gptr >= _egptr && underflow() == (-1) ) return (-1) ; + else return *(unsigned char*)_gptr; } + int sputc(int c) { + if (_pptr >= _epptr) return overflow(c); + return *_pptr++ = c, (unsigned char)c; } + int vscan(char const *fmt0, char* ap); + int vform(char const *fmt0, char* ap); + + + + + + +}; + +struct __file_fields { + char _fake; + char _shortbuf[1]; + short _fileno; + int _blksize; + char* _save_gptr; + char* _save_egptr; + long _offset; +}; + +class filebuf : public streambuf { + struct __file_fields _fb; + void init(); + public: + filebuf(); + filebuf(int fd); + filebuf(int fd, char* p, int len); + ~filebuf(); + filebuf* attach(int fd); + filebuf* open(const char *filename, const char *mode); + filebuf* open(const char *filename, int mode, int prot = 0664); + virtual int underflow(); + virtual int overflow(int c = (-1) ); + int is_open() { return _fb._fileno >= 0; } + int fd() { return is_open() ? _fb._fileno : (-1) ; } + filebuf* close(); + virtual int doallocate(); + virtual streampos seekoff(streamoff, _seek_dir, int mode=ios::in|ios::out); + int sputn(const char* s, int n); + int sgetn(char* s, int n); + virtual int sync(); + protected: + virtual int pbackfail(int c); + int is_reading() { return eback() != egptr(); } + char* cur_ptr() { return is_reading() ? gptr() : pptr(); } + + char* file_ptr() { return _fb._save_gptr ? _fb._save_egptr : egptr(); } + int do_flush(); + + virtual int sys_read(char* buf, int size); + virtual long sys_seek(long , _seek_dir); + virtual long sys_write(const void*, long); + virtual int sys_stat(void*); + virtual int sys_close(); +}; + + +inline int ios::readable() { return rdbuf()->_flags & 4 ; } +inline int ios::writable() { return rdbuf()->_flags & 8 ; } +inline int ios::is_open() {return rdbuf()->_flags & 4 +8 ;} + + + + +//# 25 "/usr/latest/lib/g++-include/iostream.h" 2 3 + + +class istream; class ostream; +typedef istream& (*__imanip)(istream&); +typedef ostream& (*__omanip)(ostream&); + +extern istream& ws(istream& ins); +extern ostream& flush(ostream& outs); +extern ostream& endl(ostream& outs); +extern ostream& ends(ostream& outs); + +class ostream : public ios +{ + void do_osfx(); + public: + ostream(); + ostream(streambuf* sb, ostream* tied=((void*)0) ); + ~ostream(); + + int opfx() { if (!good()) return 0; if (_tie) _tie->flush(); return 1; } + void osfx() { if (flags() & (ios::unitbuf|ios::stdio)) + do_osfx(); } + streambuf* ostreambuf() const { return _strbuf; } + ostream& flush(); + ostream& put(char c); + ostream& write(const char *s, int n); + ostream& write(const unsigned char *s, int n) { return write((char*)s, n);} + ostream& write(const void *s, int n) { return write((char*)s, n);} + ostream& seekp(streampos); + ostream& seekp(streamoff, _seek_dir); + streampos tellp(); + ostream& form(const char *format ...); + ostream& vform(const char *format, char* args); +}; + +extern ostream& operator<<(ostream&, char c); +inline ostream& operator<<(ostream& os, unsigned char c) +{ return os << (char)c; } + +extern ostream& operator<<(ostream&, const char *s); +inline ostream& operator<<(ostream& os, const unsigned char *s) +{ return os << (const char*)s; } + + +extern ostream& operator<<(ostream&, void *p); +extern ostream& operator<<(ostream&, int n); +extern ostream& operator<<(ostream&, long n); +extern ostream& operator<<(ostream&, unsigned int n); +extern ostream& operator<<(ostream&, unsigned long n); +inline ostream& operator<<(ostream& os, short n) {return os << (int)n;} +inline ostream& operator<<(ostream& os, unsigned short n) +{return os << (unsigned int)n;} +extern ostream& operator<<(ostream&, float n); +extern ostream& operator<<(ostream&, double n); +inline ostream& operator<<(ostream& os, __omanip func) { return (*func)(os); } +extern ostream& operator<<(ostream&, streambuf*); + +class istream : public ios +{ + int _gcount; + public: + istream(); + istream(streambuf* sb, ostream*tied=((void*)0) ); + ~istream(); + streambuf* istreambuf() const { return _strbuf; } + istream& get(char& c); + istream& get(unsigned char& c); + istream& read(char *ptr, int n); + istream& read(unsigned char *ptr, int n) { return read((char*)ptr, n); } + istream& read(void *ptr, int n) { return read((char*)ptr, n); } + + istream& getline(char* ptr, int len, char delim = '\n'); + istream& get(char* ptr, int len, char delim = '\n'); + istream& gets(char **s, char delim = '\n'); + int ipfx(int need) { + if (!good()) { set(ios::failbit); return 0; } + if (_tie && (need == 0 || rdbuf()->in_avail() < need)) _tie->flush(); + if (!need && (flags() & ios::skipws) && !ws(*this)) return 0; + return 1; + } + int ipfx0() { + if (!good()) { set(ios::failbit); return 0; } + if (_tie) _tie->flush(); + if ((flags() & ios::skipws) && !ws(*this)) return 0; + return 1; + } + int ipfx1() { + if (!good()) { set(ios::failbit); return 0; } + if (_tie && rdbuf()->in_avail() == 0) _tie->flush(); + return 1; + } + int get() { if (!ipfx1()) return (-1) ; + int ch = _strbuf->sbumpc(); + if (ch == (-1) ) set(ios::eofbit); + return ch; } + int peek() { if (!ipfx1()) return (-1) ; + int ch = _strbuf->sgetc(); + if (ch == (-1) ) set(ios::eofbit); + return ch; } + int gcount() { return _gcount; } + istream& ignore(int n=1, int delim = (-1) ); + istream& seekg(streampos); + istream& seekg(streamoff, _seek_dir); + streampos tellg(); + istream& putback(char ch) { + if (good() && _strbuf->sputbackc(ch) == (-1) ) clear(ios::badbit); + return *this;} + istream& unget() { + if (good() && _strbuf->sungetc() == (-1) ) clear(ios::badbit); + return *this;} + + istream& unget(char ch) { return putback(ch); } + int skip(int i); + +}; + +extern istream& operator>>(istream&, char*); +inline istream& operator>>(istream& is, unsigned char* p) +{ return is >> (char*)p; } + +extern istream& operator>>(istream&, char& c); +extern istream& operator>>(istream&, unsigned char& c); + +extern istream& operator>>(istream&, int&); +extern istream& operator>>(istream&, long&); +extern istream& operator>>(istream&, short&); +extern istream& operator>>(istream&, unsigned int&); +extern istream& operator>>(istream&, unsigned long&); +extern istream& operator>>(istream&, unsigned short&); +extern istream& operator>>(istream&, float&); +extern istream& operator>>(istream&, double&); +inline istream& operator>>(istream& is, __imanip func) { return (*func)(is); } + +inline ostream& ostream::put(char c) { _strbuf->sputc(c); return *this; } + +class iostream : public ios { + int _gcount; + public: + iostream(); + iostream(streambuf* sb, ostream*tied=((void*)0) ); + operator istream&() { return *(istream*)this; } + operator ostream&() { return *(ostream*)this; } + ~iostream(); + + istream& get(char& c) { return ((istream*)this)->get(c); } + istream& get(unsigned char& c) { return ((istream*)this)->get(c); } + istream& read(char *ptr, int n) { return ((istream*)this)->read(ptr, n); } + istream& read(unsigned char *ptr, int n) + { return ((istream*)this)->read((char*)ptr, n); } + istream& read(void *ptr, int n) + { return ((istream*)this)->read((char*)ptr, n); } + istream& getline(char* ptr, int len, char delim = '\n') + { return ((istream*)this)->getline(ptr, len, delim); } + istream& get(char* ptr, int len, char delim = '\n') + { return ((istream*)this)->get(ptr, len, delim); } + istream& gets(char **s, char delim = '\n') + { return ((istream*)this)->gets(s, delim); } + istream& ignore(int n=1, int delim = (-1) ) + { return ((istream*)this)->ignore(n, delim); } + int ipfx(int need) { return ((istream*)this)->ipfx(need); } + int ipfx0() { return ((istream*)this)->ipfx0(); } + int ipfx1() { return ((istream*)this)->ipfx1(); } + int get() { return _strbuf->sbumpc(); } + int peek() { return ipfx1() ? _strbuf->sgetc() : (-1) ; } + int gcount() { return _gcount; } + istream& putback(char ch) { return ((istream*)this)->putback(ch); } + istream& unget() { return ((istream*)this)->unget(); } + istream& seekg(streampos pos) { return ((istream*)this)->seekg(pos); } + istream& seekg(streamoff off, _seek_dir dir) + { return ((istream*)this)->seekg(off, dir); } + streampos tellg() { return ((istream*)this)->tellg(); } + + istream& unget(char ch) { return putback(ch); } + + + + int opfx() { return ((ostream*)this)->opfx(); } + void osfx() { ((ostream*)this)->osfx(); } + ostream& flush() { return ((ostream*)this)->flush(); } + ostream& put(char c) { return ((ostream*)this)->put(c); } + ostream& write(const char *s, int n) + { return ((ostream*)this)->write(s, n); } + ostream& write(const unsigned char *s, int n) + { return ((ostream*)this)->write((char*)s, n); } + ostream& write(const void *s, int n) + { return ((ostream*)this)->write((char*)s, n); } + ostream& form(const char *format ...); + ostream& vform(const char *format, char* args) + { return ((ostream*)this)->vform(format, args); } + ostream& seekp(streampos pos) { return ((ostream*)this)->seekp(pos); } + ostream& seekp(streamoff off, _seek_dir dir) + { return ((ostream*)this)->seekp(off, dir); } + streampos tellp() { return ((ostream*)this)->tellp(); } +}; + +extern istream cin; +extern ostream cout, cerr, clog; + +struct Iostream_init { } ; + +inline ios& dec(ios& i) +{ i.setf(ios::dec, ios::dec|ios::hex|ios::oct); return i; } +inline ios& hex(ios& i) +{ i.setf(ios::hex, ios::dec|ios::hex|ios::oct); return i; } +inline ios& oct(ios& i) +{ i.setf(ios::oct, ios::dec|ios::hex|ios::oct); return i; } + + +//# 7 "/usr/latest/lib/g++-include/stream.h" 2 3 + + +extern char* form(const char*, ...); + +extern char* dec(long, int=0); +extern char* dec(int, int=0); +extern char* dec(unsigned long, int=0); +extern char* dec(unsigned int, int=0); + +extern char* hex(long, int=0); +extern char* hex(int, int=0); +extern char* hex(unsigned long, int=0); +extern char* hex(unsigned int, int=0); + +extern char* oct(long, int=0); +extern char* oct(int, int=0); +extern char* oct(unsigned long, int=0); +extern char* oct(unsigned int, int=0); + +inline istream& WS(istream& str) { return ws(str); } + + +//# 9 "test.C" 2 + + +class Y { +public: + Y() {} + virtual const char *stringify() = 0; + virtual char *stringify2() const = 0; // ERROR - +}; + +class X: public Y { +public: + X(): Y() {} + char *stringify(); // ERROR - ok + const char *stringify2() const; // ERROR - ok +}; + +char * +X::stringify() const +{ // ERROR - ok + return "stringify"; +} + +const char * +X::stringify2() +{ // ERROR - ok + return "stringify2"; +} + +main() +{ + X x; + Y& y = x; + + cout << "x\n"; + cout << x.stringify() << '\n'; + cout << x.stringify2() << '\n'; + + cout << "y\n"; + cout << y.stringify() << '\n'; + cout << y.stringify2() << '\n'; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p8154.C b/gcc/testsuite/g++.old-deja/g++.mike/p8154.C new file mode 100644 index 000000000000..b68ea5dd194c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p8154.C @@ -0,0 +1,19 @@ +// Build don't link: +// Special g++ Options: +// prms-id: 8154 + +class QvFieldData; +class QvNode { + QvFieldData *fieldData; +}; +class QvGroup : public QvNode { + static QvFieldData *fieldData; +}; +class QvUnknownNode : public QvGroup +{ +public: + QvUnknownNode :: QvUnknownNode (); +private: + static QvFieldData *fieldData; + virtual QvFieldData *getFieldData() { return fieldData; } +}; diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p8155.C b/gcc/testsuite/g++.old-deja/g++.mike/p8155.C new file mode 100644 index 000000000000..f62291062f16 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p8155.C @@ -0,0 +1,147 @@ +// prms-id: 8155 + +int fail = 1; + +class CMainWindow; +class CFrameWnd; +class CWnd; +class CCmdTarget; + +typedef void (CCmdTarget::*AFX_PMSG)( void); +typedef void (CWnd::*AFX_PMSGW)( void); + +struct AFX_MSGMAP_ENTRY { + unsigned int nMessage; + AFX_PMSG pfn; +}; + +struct AFX_MSGMAP { + const AFX_MSGMAP* pBaseMap; + const AFX_MSGMAP_ENTRY* lpEntries; +}; + +class CCmdTarget { +public: + CCmdTarget(); +private: + static AFX_MSGMAP_ENTRY _messageEntries[]; +protected: + static const AFX_MSGMAP messageMap; + virtual const AFX_MSGMAP* GetMessageMap() const; +}; + +const AFX_MSGMAP CCmdTarget::messageMap = { + 0, &CCmdTarget::_messageEntries[0] +}; + +const AFX_MSGMAP* CCmdTarget::GetMessageMap() const { + return &CCmdTarget::messageMap; +} + +AFX_MSGMAP_ENTRY CCmdTarget::_messageEntries[] = +{ + { 0, 0 } +}; + +CCmdTarget :: CCmdTarget() { } + +class CWnd : public CCmdTarget { +public: + CWnd(); + +protected: + void OnPaint(); +private: + static AFX_MSGMAP_ENTRY _messageEntries[]; +protected: + static const AFX_MSGMAP messageMap; + virtual const AFX_MSGMAP* GetMessageMap() const; +}; + +CWnd :: CWnd() { +} + +void CWnd :: OnPaint() { +} + +const AFX_MSGMAP* CWnd ::GetMessageMap() const { + return & CWnd ::messageMap; +} +const AFX_MSGMAP CWnd ::messageMap = { + & CCmdTarget ::messageMap, & CWnd ::_messageEntries[0] + }; +AFX_MSGMAP_ENTRY CWnd ::_messageEntries[] = { + {0, (AFX_PMSG)0 } }; + +class CFrameWnd : public CWnd { +public: + CFrameWnd(); +protected: +private: + static AFX_MSGMAP_ENTRY _messageEntries[]; +protected: + static const AFX_MSGMAP messageMap; + virtual const AFX_MSGMAP* GetMessageMap() const; +}; + +CFrameWnd :: CFrameWnd() { } + +const AFX_MSGMAP* CFrameWnd ::GetMessageMap() const { + return & CFrameWnd ::messageMap; +} +const AFX_MSGMAP CFrameWnd ::messageMap = { + & CWnd ::messageMap, & CFrameWnd ::_messageEntries[0] + }; +AFX_MSGMAP_ENTRY CFrameWnd ::_messageEntries[] = { + {0, (AFX_PMSG)0 } }; + +class CMainWindow : public CFrameWnd { +public: + CMainWindow(); + void OnPaint(); + void callProc(); +private: + static AFX_MSGMAP_ENTRY _messageEntries[]; +protected: + static const AFX_MSGMAP messageMap; + virtual const AFX_MSGMAP* GetMessageMap() const; +}; + +CMainWindow :: CMainWindow() +{ +} +void CMainWindow :: OnPaint() +{ + fail = 0; +} + +void CMainWindow :: callProc() +{ + const AFX_MSGMAP* pMessageMap; + const AFX_MSGMAP_ENTRY *lpEntry; + + pMessageMap = GetMessageMap(); + lpEntry = pMessageMap->lpEntries; + + if( lpEntry->nMessage == 100) { + (this->*lpEntry->pfn)(); + } +} + +const AFX_MSGMAP* CMainWindow ::GetMessageMap() const { + return & CMainWindow ::messageMap; +} +const AFX_MSGMAP CMainWindow ::messageMap = { + & CFrameWnd ::messageMap, & CMainWindow ::_messageEntries[0] + }; +AFX_MSGMAP_ENTRY CMainWindow ::_messageEntries[] = { + { 100, (AFX_PMSG)(AFX_PMSGW)(void (CWnd::*)(void))&CMainWindow::OnPaint }, + {0, (AFX_PMSG)0 } +}; + +main( int argc, char **argv) { + CMainWindow myWindow; + + myWindow.callProc(); + return fail; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p8175.C b/gcc/testsuite/g++.old-deja/g++.mike/p8175.C new file mode 100644 index 000000000000..8ae40588ad8d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p8175.C @@ -0,0 +1,14 @@ +// prms-id: 8175 + +class AtoBoolC { +public: + AtoBoolC(const AtoBoolC& aBool); +private: + int myValue; +}; + +struct TestCase { + AtoBoolC is_call_on_unack; +}; + +static TestCase the_cases[] = { { 0 } }; // ERROR - diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p8269.C b/gcc/testsuite/g++.old-deja/g++.mike/p8269.C new file mode 100644 index 000000000000..f886fe78fca4 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p8269.C @@ -0,0 +1,11 @@ +// Build don't link: +// prms-id: 8269 + +typedef char* const char_ptr; + +class Foo_Bar { +public: + static char* const counter; +}; + +char_ptr Foo_Bar::counter = 0; diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p8460.C b/gcc/testsuite/g++.old-deja/g++.mike/p8460.C new file mode 100644 index 000000000000..542921c5738f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p8460.C @@ -0,0 +1,17 @@ +// Build don't link: +// prms-id: 8460 + +class A { +public: + A(); + A(int) { } + A(const A&) { } +private: +}; + +main() +{ + A a; + + a.A(1); // ERROR - cannot find name this way +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p8483.C b/gcc/testsuite/g++.old-deja/g++.mike/p8483.C new file mode 100644 index 000000000000..b04901844faf --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p8483.C @@ -0,0 +1,35 @@ +// prms-id: 8483 + +int count; + +class A { +public: + A() { ++count; } + ~A() { } +}; + +class B { +private: + A b[2]; +}; + +class C { +public: +private: + A c[2][2]; +}; + +class D { +public: +private: + A d[2][2][2]; +}; + +main() { + { A a; } + { B b; } + { C c; } + { D d; } + if (count != 15) + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p8620.C b/gcc/testsuite/g++.old-deja/g++.mike/p8620.C new file mode 100644 index 000000000000..dc6f017adffb --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p8620.C @@ -0,0 +1,14 @@ +// Build don't link: +// prms-id: 8620 + +struct S { + long l; +}; + +typedef unsigned long l; + +void f() { + S* p; + if (p->l < 0) + return; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p8785.C b/gcc/testsuite/g++.old-deja/g++.mike/p8785.C new file mode 100644 index 000000000000..9c977fdcd301 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p8785.C @@ -0,0 +1,25 @@ +// Build don't link: +// prms-id: 8785 + +class Outer { +private: + int x; +public: + struct Inner { + int y; + void f( Outer * p, int i) { + p->x = i; // ERROR - + }; + void f( Outer & p) { + p.x = y; // ERROR - + }; + }; +}; + +main() { + Outer::Inner A; + Outer Thing; + + A.f(Thing); + A.f(&Thing,2); +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p8786.C b/gcc/testsuite/g++.old-deja/g++.mike/p8786.C new file mode 100644 index 000000000000..b5443c0fa6ba --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p8786.C @@ -0,0 +1,24 @@ +// Build don't link: +// Special g++ Options: -O +// prms-id: 8786 + +class B { +public: + inline ~B(); +}; + +class D : public B { +public: + D(int); +}; + +int foo() { + D t(0); + + bool h = 1; + if (h) { + D p(0); + return 0; + } + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p8804.C b/gcc/testsuite/g++.old-deja/g++.mike/p8804.C new file mode 100644 index 000000000000..e46a4c677ec6 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p8804.C @@ -0,0 +1,18 @@ +// prms-id: 8804 + +extern "C" int printf (const char *, ...); + +struct Fails { + int i; + union { + union { + int c; + }; + }; +}; + +Fails d; + +main() { + return &d.i == &d.c; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p8825.C b/gcc/testsuite/g++.old-deja/g++.mike/p8825.C new file mode 100644 index 000000000000..11de74e78d28 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p8825.C @@ -0,0 +1,14 @@ +// Build don't link: +// prms-id: 8825 + +class A { + typedef A x; +}; + +class B { + typedef B x; +}; + +class C : public A, public B { + typedef C x; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p9068.C b/gcc/testsuite/g++.old-deja/g++.mike/p9068.C new file mode 100644 index 000000000000..67e879fbd940 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p9068.C @@ -0,0 +1,21 @@ +// prms-id: 9068 + +struct ostream { + void operator<< (int); // ERROR - fn ref in err msg +}; + +class C { +public: + static int& i (); + static int& i (int signatureDummy); +}; + +void foo (ostream& lhs, const C& rhs) +{ + lhs << rhs.i; // ERROR - no such i for any opr << () +} + +int& C::i () { + static int _i = 4711; + return _i; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p9129.C b/gcc/testsuite/g++.old-deja/g++.mike/p9129.C new file mode 100644 index 000000000000..d94f46fa0972 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p9129.C @@ -0,0 +1,12 @@ +// Build don't link: +// Special g++ Options: -ansi -pedantic-errors +// prms-id: 9129 + +class Foo { +public: + int DoSomething(); +}; + +int (Foo::*pA)() = { &Foo::DoSomething }; // ERROR - +int (Foo::*X[1])(int) = { { &Foo::DoSomething } }; // ERROR - +int (Foo::*Y[])(int) = { { &Foo::DoSomething, &Foo::DoSomething, 0 } }; // ERROR - diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p9206.C b/gcc/testsuite/g++.old-deja/g++.mike/p9206.C new file mode 100644 index 000000000000..5c4b578b8667 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p9206.C @@ -0,0 +1,21 @@ +// prms-id: 9206 + +class X { +public: + void xtest() { } +}; + +class Y { }; + +typedef void (X::*Xptr)(); +typedef void (Y::*Yptr)(); + +int main() { + X xx; + + Xptr xp = &X::xtest; + Yptr yp = reinterpret_cast<Yptr>(xp); + xp = reinterpret_cast<Xptr>(yp); + + (xx.*xp)(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p9506.C b/gcc/testsuite/g++.old-deja/g++.mike/p9506.C new file mode 100644 index 000000000000..7c6e47b8e473 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p9506.C @@ -0,0 +1,7 @@ +// Build don't link: +// prms-id: 9506 + +char * volatile p; +void foo() { + --p = 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p9706.C b/gcc/testsuite/g++.old-deja/g++.mike/p9706.C new file mode 100644 index 000000000000..c21f6c6585c9 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p9706.C @@ -0,0 +1,33 @@ +// Special g++ Options: -fexceptions +// excess errors test - XFAIL a29k-*-* sparc64-*-elf sh-*-* arm-*-pe**-* +// prms-id: 9706 + +#include <stdlib.h> + +int count, acount; + +void *operator new(size_t sz) { ++count; return malloc (sz); } +void operator delete(void *p) throw() { --count; free (p); } + +class A { +public: + A() { ++acount; } + A(const A&) { ++acount; } + ~A() { --acount; } +}; + +int main() { + int i; + + for( i = 0; i < 10; i++ ) { + try { + throw A(); + } + catch (A& a) { + } + } + if (acount) + return 1; + if (count) + return 2; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p9732a.C b/gcc/testsuite/g++.old-deja/g++.mike/p9732a.C new file mode 100644 index 000000000000..13c89892b847 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p9732a.C @@ -0,0 +1,36 @@ +// prms-id: 9732 + +class A { + int i; +public: + A() { i = 1; } + ~A() { } +}; + +struct value { + A x,y,z; +}; + +int crash(const value* capt, value* jet) { + return capt == jet; +} + +class euler { +public: + value number() const { return _value; } + int distance(); + +private: + value _value; +}; + +int euler::distance() { + const value& capt = number(); + value jet; + return crash (&capt, &jet); +} + +int main() { + euler e; + return e.distance(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p9732b.C b/gcc/testsuite/g++.old-deja/g++.mike/p9732b.C new file mode 100644 index 000000000000..aadb374b996d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p9732b.C @@ -0,0 +1,42 @@ +// prms-id: 9732 + +int count; +int bail = 0; + +struct base { + base () { ++count; } + ~base () { --count; } + base(const base&o) { ++count; } +}; + +class D { +public: + ~D() { + if (bail++) + { + // On some Linux boxes, we run the dtor for d twice, + // once before exit, and once after! + abort (); + } + else + { + if (count != 0) + exit (1); + exit (0); + } + } +} d; + +base base_object; + +base base_returning_function (); + +const base& base_ref = base_returning_function (); + +int main () { +} + +base base_returning_function () { + base local_base_object; + return local_base_object; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p9732c.C b/gcc/testsuite/g++.old-deja/g++.mike/p9732c.C new file mode 100644 index 000000000000..9ec773cc9afa --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p9732c.C @@ -0,0 +1,5 @@ +// Build don't link: +// prms-id: 9732 + +struct foo {}; +foo& x() { return foo(); } // WARNING - diff --git a/gcc/testsuite/g++.old-deja/g++.mike/p991.C b/gcc/testsuite/g++.old-deja/g++.mike/p991.C new file mode 100644 index 000000000000..037227c4f3e5 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/p991.C @@ -0,0 +1,22 @@ +// Build don't link: +// prms-id: 991 + +class Complex { +public: + double re; + double im; + Complex(double r,double i) : re(r), im(i) {} +}; + +Complex cos(const Complex&); + +extern "C" double cos (double); // not the same as the above +extern "C" double cosh (double); +extern "C" double sin (double); +extern "C" double sinh (double); + +Complex cos(const Complex& arg) { + double nr = cos(arg.re)*cosh(arg.im); + double ni = -sin(arg.re)*sinh(arg.im); + return Complex(nr,ni); +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/parse1.C b/gcc/testsuite/g++.old-deja/g++.mike/parse1.C new file mode 100644 index 000000000000..12e26cf26ea7 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/parse1.C @@ -0,0 +1,7 @@ +// Build don't link: + +enum { name1 }; +struct name0 { }; +struct name1 { }; +struct derived1 : public name1 { }; +struct derived2 : public name0, public name1 { }; diff --git a/gcc/testsuite/g++.old-deja/g++.mike/pmd1.C b/gcc/testsuite/g++.old-deja/g++.mike/pmd1.C new file mode 100644 index 000000000000..260dc095eba5 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/pmd1.C @@ -0,0 +1,12 @@ +// Build don't link: + +class A; +struct XX { int A::*py; }; + +class A { +public: + int p; + void setp(XX *xp); +}; + +void A::setp(XX *xp) { xp->py = &A::p; } diff --git a/gcc/testsuite/g++.old-deja/g++.mike/pmf1.C b/gcc/testsuite/g++.old-deja/g++.mike/pmf1.C new file mode 100644 index 000000000000..5b2dde87543d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/pmf1.C @@ -0,0 +1,90 @@ +// extern "C" printf(const char *, ...); + +class X +{ +public: + int a; + int f(int); +}; + +class Y +{ +public: + int b; + int c; + int g(int); +}; + +class MD : public X, public Y +{ +public: + int c; + int hf(int); +}; + +int MD::* pmi0 = &MD::a; +int MD::* pmi1 = &MD::b; +int MD::* pmi2 = &MD::c; + +int (MD::* pmf0)(int) = &MD::f; +int (MD::* pmf1)(int) = &MD::g; +int (MD::* pmf2)(int) = &MD::hf; + +main() +{ + MD obj; + int fail = 0; + + obj.a = 1; + obj.b = 2; + obj.c = 3; + + obj.*pmi0 = 7; + obj.*pmi1 = 8; + obj.*pmi2 = 9; + + fail += (obj.*pmf0)(7); + fail += (obj.*pmf1)(8); + fail += (obj.*pmf2)(9); + +#if 0 + if (fail != 0) + printf ("failed %d tests\n", fail); + else + printf ("passed\n"); + + printf ("sizeof(X) = %d, sizeof(Y) = %d, sizeof(MD) = %d\n", + sizeof(X), sizeof(Y), sizeof(MD)); +#endif + return fail; +} + +int X::f(int v) +{ + if (v != a) + { +// printf ("failed in X::f, a = %d\n", a); + return 1; + } + return 0; +} + +int Y::g(int v) +{ + if (v != b) + { +// printf ("failed in Y::g, b = %d\n", b); + return 1; + } + return 0; +} + +int MD::hf(int v) +{ + if (v != c) + { +// printf ("failed in MD::hf, c = %d\n", c); + return 1; + } + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/pmf2.C b/gcc/testsuite/g++.old-deja/g++.mike/pmf2.C new file mode 100644 index 000000000000..2f1bec51e95d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/pmf2.C @@ -0,0 +1,54 @@ +extern "C" int printf(const char *, ...); + +class A_table { + int c; +public: + A_table() { c = 3;} + virtual void func2(int &item) { printf("func2(%d,) c=%d\n",item,c);} +}; + +class B_table : private A_table { + typedef void (B_table::* B_ti_fn) (int &item); +public: + B_table() { j = 0x4321;} + virtual void call_fn_fn1(int &item, void *pfn1); + void func1(int &item) { printf("func1(%d)\n",item);} + virtual void func2(int &item) { printf("func2(%d) j=%d\n",item,j);} + int j; +}; + +class foo : public A_table { +public: + int i; + virtual ~foo(); + virtual void func2(int &item) { printf("func2(%d) i=%d\n",item,i);} +}; +foo::~foo() { i = 0;} + +class bar :public foo,public B_table { +public: + int w; + virtual ~bar(); + virtual void func2(int &item) { printf("func2(%d) w=%d\n",item,w);} +}; +bar::~bar() { w = 0;} + +void B_table::call_fn_fn1(int &item, void *pfn1) { + (this->*(*(B_ti_fn*)pfn1))(item); +} + +B_table b; +bar jar; + +main() { + printf("ptr to B_table=%x, ptr to A_table=%x\n",&b,(A_table*)&b); + B_table::B_ti_fn z = &B_table::func1; + int j = 1; + jar.call_fn_fn1(j,(void *)&z); + j++; + z = &B_table::func2; + b.call_fn_fn1(j,(void *)&z); + j++; + jar.call_fn_fn1(j,(void *)&z); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/pmf3.C b/gcc/testsuite/g++.old-deja/g++.mike/pmf3.C new file mode 100644 index 000000000000..24753eb1f9a2 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/pmf3.C @@ -0,0 +1,19 @@ +struct Fooey { + void f(char* pX); + void f(int in); + void f(float fx); + void h(double dx); +}; + +void Fooey::f(char*) { } +void Fooey::f(int) { } +void Fooey::f(float) { } +void Fooey::h(double zahl) { } + +int main() { + Fooey Blah; + void (Fooey::*pointer)(double); + pointer = &Fooey::f; // ERROR - don't call Fooey::h + (Blah.*pointer)(42.5); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/pmf4.C b/gcc/testsuite/g++.old-deja/g++.mike/pmf4.C new file mode 100644 index 000000000000..02e5b10c1ac2 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/pmf4.C @@ -0,0 +1,13 @@ +// Build don't link: + +class NF { }; + +struct QF { + NF nf; + + typedef float(NF::* const NPF)() const; + + void p (NPF npf) const { + float q = (nf.*npf)(); + } +}; diff --git a/gcc/testsuite/g++.old-deja/g++.mike/pmf5.C b/gcc/testsuite/g++.old-deja/g++.mike/pmf5.C new file mode 100644 index 000000000000..685801a8591a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/pmf5.C @@ -0,0 +1,31 @@ +// Special g++ Options: -w + +class A { + int j; +}; + +class Space { + int j; +}; + +typedef int (A::*pma)(); + +class B : public Space, virtual public A { +public: + int i; + int foo () { + return i!=42; + } + B() { + i = 42; + } +}; + +int call_base (A* ap, pma pmf) { + return (ap->*pmf)(); +} + +int main() { + B b; + return call_base ((A*)&b, (pma)&B::foo); +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/pmf6.C b/gcc/testsuite/g++.old-deja/g++.mike/pmf6.C new file mode 100644 index 000000000000..c53270706176 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/pmf6.C @@ -0,0 +1,12 @@ +// Special g++ Options: + +class S { +public: + void (S::*pmf)(); + void foo() { + pmf(); // WARNING - + } + static foo1(S* sp) { + (sp->pmf)(); // ERROR - + } +}; diff --git a/gcc/testsuite/g++.old-deja/g++.mike/pmf7.C b/gcc/testsuite/g++.old-deja/g++.mike/pmf7.C new file mode 100644 index 000000000000..b238171ba5ff --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/pmf7.C @@ -0,0 +1,29 @@ +class A; +typedef int (A::*f_ptr) (void); + +class B { +public: + B() {}; ~B() {}; + B& dummy(f_ptr cb) { return *this; }; +}; + +template<class SP, class CB> SP& call_dummy(SP* sp, CB cb) { + sp->dummy(cb); + return *sp; +}; + +class A { +public: + A() {}; ~A() {}; + int ok() { return 0; }; + A& call_it(B* s) { + call_dummy(s, &A::ok); + return *this; + }; +}; + +int main() { + A a; B b; + a.call_it(&b); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/pmf8.C b/gcc/testsuite/g++.old-deja/g++.mike/pmf8.C new file mode 100644 index 000000000000..41a4c0194fbb --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/pmf8.C @@ -0,0 +1,31 @@ +int fail; + +class A *ptr_a; + +class A { +public: + char space1[24]; + virtual void foo() { + if (this != ptr_a) + fail = 1; + } +}; + +class Space { + char space2[36]; +}; + +class B : public Space, public A { +} b; + +void (B::*pmf1)() = &A::foo; +void (A::*pmf2)() = &A::foo; + +int main() { + ptr_a = &b; + (b .* (void (B::*) ()) &A::foo) (); + (b .* pmf1) (); + (b .* pmf2) (); + (b .* &A::foo) (); + return fail; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/pmf9.C b/gcc/testsuite/g++.old-deja/g++.mike/pmf9.C new file mode 100644 index 000000000000..800618ff6c68 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/pmf9.C @@ -0,0 +1,23 @@ +class K { +public: + int f(int i) { return i; } +}; + +class Q { +public: + Q() { kp = new K; } + int g(); +private: + K * kp; +}; + +int Q::g() { + return (kp->f)(42); +}; + + +int main () { + Q q; + if (q.g() != 42) + return 1; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/pt1.C b/gcc/testsuite/g++.old-deja/g++.mike/pt1.C new file mode 100644 index 000000000000..2ef8556b13d4 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/pt1.C @@ -0,0 +1,36 @@ +template <class T, class V> +class A { +public: + A (T at, V av); + void print () { } +protected: + T t; + V v; +}; + +template <class T, class V> +A<T, V>::A (T at, V av) { + t = at; + v = av; +} + + +template <class T, class V> +class B: public virtual A<T, V> { +public: + B (T at, V av); + void print () { } +}; + +template <class T, class V> +B<T, V>::B (T at, V av) : A<T, V> (at, av) { } // gets bogus error - + +int main () { + int i = 2; + double x = 2; + + B<int, double> ab(i, x); + ab.print(); + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/pt2.C b/gcc/testsuite/g++.old-deja/g++.mike/pt2.C new file mode 100644 index 000000000000..7c96cabff4de --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/pt2.C @@ -0,0 +1,22 @@ +class A { +public: +}; + +template <class T> +class B: public virtual A { +public: + B (); + ~B (); +}; + +template <class T> +B<T>::B () { } + +template <class T> +B<T>::~B () { } + +int main () { + B<int> ab; + + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/pt3.C b/gcc/testsuite/g++.old-deja/g++.mike/pt3.C new file mode 100644 index 000000000000..b2abc2bdc463 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/pt3.C @@ -0,0 +1,26 @@ +// Build don't link: + +template<class Repr> +class syHandle +{ +protected: + syHandle(); + ~syHandle(); + Repr *_repr; +}; + +template<class Repr> +syHandle<Repr>::~syHandle() +{ +} + +typedef char * char_ptr_t; +syHandle<char_ptr_t>::syHandle() +{ + _repr = 0; +} + +syHandle<char_ptr_t>::~syHandle() +{ + _repr = 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/pt4.C b/gcc/testsuite/g++.old-deja/g++.mike/pt4.C new file mode 100644 index 000000000000..00e8ad052df8 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/pt4.C @@ -0,0 +1,4 @@ +// Build don't link: + +template <char* c> struct B { B() { } }; +B<0> bnull; diff --git a/gcc/testsuite/g++.old-deja/g++.mike/ref1.C b/gcc/testsuite/g++.old-deja/g++.mike/ref1.C new file mode 100644 index 000000000000..054c9850c67f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/ref1.C @@ -0,0 +1,21 @@ +int count; + +struct base { + base () { ++count; } + ~base () { --count; } + base(const base&o) { ++count; } +}; + +base base_returning_function (); + +const base& base_ref = base_returning_function (); + +int main () { + if (count != 1) + return 1; +} + +base base_returning_function () { + base local_base_object; + return local_base_object; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/rtti1.C b/gcc/testsuite/g++.old-deja/g++.mike/rtti1.C new file mode 100644 index 000000000000..e44c5fafdc5e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/rtti1.C @@ -0,0 +1,4 @@ +// Build don't link: + +#include <typeinfo> +#include <iostream.h> diff --git a/gcc/testsuite/g++.old-deja/g++.mike/rtti2.C b/gcc/testsuite/g++.old-deja/g++.mike/rtti2.C new file mode 100644 index 000000000000..bf08ede33fd0 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/rtti2.C @@ -0,0 +1,5 @@ +#include <typeinfo> + +main() { + typeid(bool); +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/rtti3.C b/gcc/testsuite/g++.old-deja/g++.mike/rtti3.C new file mode 100644 index 000000000000..a250a26b0f4b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/rtti3.C @@ -0,0 +1,23 @@ +class base { +public: + virtual ~base() {} + virtual void m1() = 0; + virtual void m2() = 0; +}; + +class intermediate : public virtual base { +public: + virtual ~intermediate() {} + virtual void m1() {} + virtual void m2() {} +}; + +class derived : public intermediate { +public: + virtual int IwantedThisMethod() { return 0; } + virtual int ButIgotThisOne() { return 1; } +}; + +int main() { + return derived().IwantedThisMethod(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/scast1.C b/gcc/testsuite/g++.old-deja/g++.mike/scast1.C new file mode 100644 index 000000000000..dbc5efc4e409 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/scast1.C @@ -0,0 +1,7 @@ +class A {}; +class C {}; + +main() { + A* a = 0; + C* c = static_cast<C*>(a); // ERROR - bad static cast +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/temp.C b/gcc/testsuite/g++.old-deja/g++.mike/temp.C new file mode 100644 index 000000000000..8ca31f345b3e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/temp.C @@ -0,0 +1,31 @@ +extern "C" int printf(const char *, ...); +extern "C" const char *getenv(const char *); + +class T { + int i; +public: + T() { + i = 1; + printf("T() at %x\n", this); + } + T(const T& o) { + i = o.i; + printf("T(const T&) at %x <-- %x\n", this, &o); + } + T operator +(const T& o) { + T r; + r.i = this->i + o.i; + return r; + } + operator int () { + return i; + } + ~T() { printf("~T() at %x\n", this); } +} s, b; + +int foo() { return getenv("TEST") == 0; } + +main() { + int i = foo() ? s+b : s; + return i != 2; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/thunk1.C b/gcc/testsuite/g++.old-deja/g++.mike/thunk1.C new file mode 100644 index 000000000000..9780c05bc971 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/thunk1.C @@ -0,0 +1,19 @@ +// Build don't link: +// Special g++ Options: -fvtable-thunks + +struct C1 +{ + virtual ~C1(); +}; + +struct C2 : public virtual C1 +{ + virtual ~C2(); +}; + +struct C3 : public virtual C2 +{ + virtual ~C3(); +}; + +C3::~C3() {} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/thunk2.C b/gcc/testsuite/g++.old-deja/g++.mike/thunk2.C new file mode 100644 index 000000000000..9bc4558d9f7a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/thunk2.C @@ -0,0 +1,39 @@ +// Special g++ Options: -fvtable-thunks + +#include <typeinfo> + +int state; +int fail; + +class A { +public: + A() { + if (++state != 1) + fail = 1; + } + virtual int foo() { + if (++state != 2) + fail = 1; + } + virtual ~A() { + if (++state != 3) + fail = 1; + } +}; + +A* bar() { + return new A; +} + +main() { + A *aptr = bar(); + aptr->foo(); + if (dynamic_cast <void*> (aptr) != aptr) + fail = 1; + if (typeid (*aptr) != typeid (A)) + fail = 1; + delete aptr; + if (++state != 4) + fail = 1; + return fail; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/thunk3.C b/gcc/testsuite/g++.old-deja/g++.mike/thunk3.C new file mode 100644 index 000000000000..9a52c9d69162 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/thunk3.C @@ -0,0 +1,35 @@ +// Special g++ Options: -fvtable-thunks + +int state; +int fail; + +class A { +public: + A() { + if (++state != 1) + fail = 1; + } + virtual int foo() { + if (++state != 2) + fail = 1; + } + virtual ~A() { + if (++state != 3) + fail = 1; + } +}; + +A* bar() { + return new A; +} + +main() { + A *aptr = bar(); + aptr->foo(); + if (dynamic_cast <void*> (aptr) != aptr) + fail = 1; + delete aptr; + if (++state != 4) + fail = 1; + return fail; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/unroll1.C b/gcc/testsuite/g++.old-deja/g++.mike/unroll1.C new file mode 100644 index 000000000000..90f37f1ef921 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/unroll1.C @@ -0,0 +1,11 @@ +// Build don't link: +// Special g++ Options: -g -O -funroll-loops + +struct A { + inline ~A() { } +}; + +void foo (A) { + while (1) + A bar; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/virt1.C b/gcc/testsuite/g++.old-deja/g++.mike/virt1.C new file mode 100644 index 000000000000..28483177bf9b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/virt1.C @@ -0,0 +1,13 @@ +// Build don't link: + +struct S0 { virtual void f1 () { } }; + +struct S1 : virtual public S0 { virtual void f1 () { } }; + +struct S2 : public S1 { virtual void f1 () { } }; + +struct S3 : virtual public S0 { virtual void f1 () { } }; + +struct S4 : public S3 { }; + +void creator () { new S4; } diff --git a/gcc/testsuite/g++.old-deja/g++.mike/virt2.C b/gcc/testsuite/g++.old-deja/g++.mike/virt2.C new file mode 100644 index 000000000000..612d07e49e37 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/virt2.C @@ -0,0 +1,25 @@ +struct S0 { + virtual int is_kind_of_S1 () const { return 0; } + virtual void dummy () { } +}; + +struct S1 : virtual public S0 { + virtual int is_kind_of_S1 () const { return 1; } + virtual void dummy () { } +}; + +struct S2 : virtual public S0 { + virtual void dummy () { } +}; + +struct S3 : public S2, public S1 { + virtual void dummy () { } +}; + +static struct S0 *var = new S3 (); + +int main () { + if (var->is_kind_of_S1() != 1) + return 1; + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/virt3.C b/gcc/testsuite/g++.old-deja/g++.mike/virt3.C new file mode 100644 index 000000000000..de3ea3d07e26 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/virt3.C @@ -0,0 +1,17 @@ +// Build don't link: + +class B { +public: + int Bi; + virtual int g() { }; +}; + +class D : private B { + int Di; +}; + +class E : public virtual D, public B { + int Ei; +}; // WARNING - direct base inaccessible due to ambiguity + +E e; diff --git a/gcc/testsuite/g++.old-deja/g++.mike/virt4.C b/gcc/testsuite/g++.old-deja/g++.mike/virt4.C new file mode 100644 index 000000000000..989701833b63 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/virt4.C @@ -0,0 +1,25 @@ +void Foo () {} + +class B { +public: + virtual void foo() = 0; +}; + +class D: virtual public B { +public: + void foo() { Foo(); } +}; + +class D1: public D {}; + +class D2: public D {}; + +class D1_2: public D1, public D2 { +public: + void foo() { D1::foo(); D2::foo(); } +}; + +main() { + D1_2 h; + h.foo(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/virt5.C b/gcc/testsuite/g++.old-deja/g++.mike/virt5.C new file mode 100644 index 000000000000..a9040c958792 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/virt5.C @@ -0,0 +1,53 @@ +// Ensure that virtual base upcast and downcasting works on this +// conversions during virtual function dispatch at ctor/dtor time +// when dynamic vtable fixups for deltas are needed. + +int fail = 0; + +struct BASE1 { + virtual ~BASE1 () { } +}; + +class MID; + +class BASE2 { +public: + virtual MID *VFN (){ return 0; } +}; + +class MIBASE : public BASE1, public BASE2 { }; + +class VBB : public MIBASE { +public: + virtual long get_STATE () const = 0; + void print_STATE() { if (get_STATE () != 87654321) fail = 1; } +}; + +class VBD : public virtual VBB { + long STATE; +public: + long get_STATE() const { return STATE; } + VBD() { STATE = 87654321; } + ~VBD() { STATE = 87654321; } +}; + +class MID : public virtual VBD { +public: + MID () { print_STATE(); } + ~MID () { print_STATE(); } + virtual MID *VFN() { return this; } +}; + +class LAST : public MID { +public: + LAST () { print_STATE(); } + ~LAST () { print_STATE(); } +}; + +main() { + MIBASE *o = new LAST; + MID *p = o->VFN(); + p->print_STATE(); + delete o; + return fail; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/warn1.C b/gcc/testsuite/g++.old-deja/g++.mike/warn1.C new file mode 100644 index 000000000000..206042cb962a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/warn1.C @@ -0,0 +1,13 @@ +// Build don't link: +// Special g++ Options: -Wall + +typedef char * charptr; +char c[]={'A','B','C','D'}; +int i=int(&c); +int *pp=&i; +void foo() { } +int main() +{ + charptr(*pp)++; // WARNING - + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/warn2.C b/gcc/testsuite/g++.old-deja/g++.mike/warn2.C new file mode 100644 index 000000000000..a7ce899a31ed --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/warn2.C @@ -0,0 +1,24 @@ +// Build don't link: +// Special g++ Options: -Wall + +enum Boolean { + Ok = 0, + NotOk = 1, +}; + +enum OpResult { + Succeeded = 0, + TempFail = 1, + PermFail = 2, +}; + +OpResult fn1() { + return TempFail; +} + +extern void foo(); +main () { + if (fn1() == Ok) { // WARNING - + foo(); + } +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/warn3.C b/gcc/testsuite/g++.old-deja/g++.mike/warn3.C new file mode 100644 index 000000000000..7adc8a1c37f1 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/warn3.C @@ -0,0 +1,12 @@ +// Build don't link: +// Special g++ Options: -Wall + +class B { +public: + B(int) { } +}; + +class D : public B { + int member; + D() : member(0), B(member) { } // WARNING - reordered +}; diff --git a/gcc/testsuite/g++.old-deja/g++.mike/warn4.C b/gcc/testsuite/g++.old-deja/g++.mike/warn4.C new file mode 100644 index 000000000000..9b959b0316fa --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/warn4.C @@ -0,0 +1 @@ +void foo (int a, int a) { } // ERROR - diff --git a/gcc/testsuite/g++.old-deja/g++.mike/warn5.C b/gcc/testsuite/g++.old-deja/g++.mike/warn5.C new file mode 100644 index 000000000000..742c4bc18070 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/warn5.C @@ -0,0 +1,21 @@ +// Build don't link: +// Special g++ Options: -Wpointer-arith + +double X(const double x) { return x; } +double Y() { return 1.0; } +double Z() { return 2.0; } + +struct A { + void bar() { } + void foo() { } +}; + +typedef void (A::*pmf)(); + +static int mememe = &A::foo - &A::bar; // WARNING - +pmf b = &A::foo-1; // WARNING - + +int main() { + double y; + y=X(Y-Z); // WARNING - +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/warn6.C b/gcc/testsuite/g++.old-deja/g++.mike/warn6.C new file mode 100644 index 000000000000..381a3424da23 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/warn6.C @@ -0,0 +1,42 @@ +// Build don't link: +// Special g++ Options: -Woverloaded-virtual + +struct B4 { + virtual void bothfardiff(float); // WARNING - was hidden +}; + +struct B3 : public B4 { +}; + +struct B2 { +}; + +struct B { + virtual void baseonly(int); + + virtual void bothsame(int); + + virtual void bothdiff(float); // WARNING - was hidden + + virtual void both2same(int); + virtual void both2same(float); + + virtual void both12diff(int); + virtual void both12diff(float); // WARNING - was hidden +}; + +struct D : public B, public B2, public B3 { + virtual void derivedonly(int); + + virtual void bothsame(int); + + virtual void bothdiff(int); // WARNING - + + virtual void both2same(int); + virtual void both2same(float); + + virtual void both12diff(int); // WARNING - + + virtual void bothfardiff(int); // WARNING - +}; + diff --git a/gcc/testsuite/g++.old-deja/g++.mike/warn7.C b/gcc/testsuite/g++.old-deja/g++.mike/warn7.C new file mode 100644 index 000000000000..6772f9585f5a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/warn7.C @@ -0,0 +1,14 @@ +// Build don't link: +// Special g++ Options: -Wall + +const int& foo() { + extern int bar; + + return bar; +} + +const int* baz() { + extern int bar; + + return &bar; +} diff --git a/gcc/testsuite/g++.old-deja/g++.mike/warn8.C b/gcc/testsuite/g++.old-deja/g++.mike/warn8.C new file mode 100644 index 000000000000..3c61c8e0afb4 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.mike/warn8.C @@ -0,0 +1,19 @@ +// Build don't link: + +struct foo { + bool test(); +}; +bool func(); + +void test() { + foo A; + bool (foo::* pmf)() = &foo::test; + bool (*pf)() = func; + + if (A.test) ; // WARNING - + if (func) ; // WARNING - + if (bool(A.test)) ; // WARNING - + if (bool(func)) ; + if (pmf) ; + if (pf) ; +} diff --git a/gcc/testsuite/g++.old-deja/g++.niklas/.cvsignore b/gcc/testsuite/g++.old-deja/g++.niklas/.cvsignore new file mode 100644 index 000000000000..7abff1dbead4 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.niklas/.cvsignore @@ -0,0 +1,2 @@ +Makefile +config.status diff --git a/gcc/testsuite/g++.old-deja/g++.niklas/Makefile.in b/gcc/testsuite/g++.old-deja/g++.niklas/Makefile.in new file mode 100644 index 000000000000..d5eb149dbee0 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.niklas/Makefile.in @@ -0,0 +1,12 @@ +#### host, target, and site specific Makefile frags come in here. + +srcdir = . + +# Nothing to do... +all: + +clean: + -rm -f *.o *.diff *~ *.bad core + +distclean: clean + -rm -f Makefile config.status diff --git a/gcc/testsuite/g++.old-deja/g++.niklas/README b/gcc/testsuite/g++.old-deja/g++.niklas/README new file mode 100644 index 000000000000..b729b9a0cd05 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.niklas/README @@ -0,0 +1,18 @@ +Date: Fri, 22 Jan 93 15:20:55 +0100 +From: niklas@della.appli.se (Niklas Hallqvist) +Message-Id: <9301221420.AA18489@della.appli.se> +Subject: g++.niklas DejaGnu sharfile + +These are my test-cases in DejaGnu format. + +The tests which have "passed" in the groups variable do actually pass +on my local G++ so if there is a specific "passed" test you'd like to +see working in your version of G++ but it doesn't pass, contact me and +I'll dig up the specific patches you'll need. + +I have about a hundred or so unsorted test-cases which are not +included in this archive, due to lack of time and boredom stemming +from writing .exp-files. But they will show up eventually. + +All these files, and this file are Copyright FSF 1993, and fall under +the GPL version 2.0 or later. diff --git a/gcc/testsuite/g++.old-deja/g++.niklas/configure.in b/gcc/testsuite/g++.old-deja/g++.niklas/configure.in new file mode 100644 index 000000000000..2ec1354c91ff --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.niklas/configure.in @@ -0,0 +1,15 @@ +# This file is a shell script fragment that supplies the information +# necessary to tailor a template configure script into the configure +# script appropriate for this directory. For more information, check +# any existing configure script. + +srctrigger=t131.exp +srcname="DejaGnu" + +# per-host: + +# per-target: + +target_makefile_frag=../config/mt-${target_alias} + +# post-target: diff --git a/gcc/testsuite/g++.old-deja/g++.niklas/t113.C b/gcc/testsuite/g++.old-deja/g++.niklas/t113.C new file mode 100644 index 000000000000..fdbf4550dced --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.niklas/t113.C @@ -0,0 +1,7 @@ +// Build don't link: +// GROUPS passed niklas explicit-construct virtual-base +struct A {}; +struct B : virtual A { B(); }; +struct C : B {}; +struct D { D(C&); }; +D d(C()); diff --git a/gcc/testsuite/g++.old-deja/g++.niklas/t114.C b/gcc/testsuite/g++.old-deja/g++.niklas/t114.C new file mode 100644 index 000000000000..c5b458a4e15b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.niklas/t114.C @@ -0,0 +1,5 @@ +// Build don't link: +// GROUPS passed niklas explicit-construct +struct A { A(); }; +struct B { B(A&); }; +B b(A()); diff --git a/gcc/testsuite/g++.old-deja/g++.niklas/t115.C b/gcc/testsuite/g++.old-deja/g++.niklas/t115.C new file mode 100644 index 000000000000..7ec5b4699dd1 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.niklas/t115.C @@ -0,0 +1,7 @@ +// Build don't link: +// GROUPS passed niklas virtual-base +struct A { A(); virtual void f(); }; +struct B : virtual A { B(); }; +struct C : B {}; +C *c = new C; + diff --git a/gcc/testsuite/g++.old-deja/g++.niklas/t118.C b/gcc/testsuite/g++.old-deja/g++.niklas/t118.C new file mode 100644 index 000000000000..255747f5498d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.niklas/t118.C @@ -0,0 +1,4 @@ +// Build don't link: +// GROUPS niklas pt +template <class T> class C1 {}; +class C1<int> C1_int_object; diff --git a/gcc/testsuite/g++.old-deja/g++.niklas/t119.C b/gcc/testsuite/g++.old-deja/g++.niklas/t119.C new file mode 100644 index 000000000000..522e514f811f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.niklas/t119.C @@ -0,0 +1,6 @@ +// Build don't link: +// GROUPS passed niklas i386 +unsigned long foo(unsigned long x) +{ + return x & ~0104000; +} diff --git a/gcc/testsuite/g++.old-deja/g++.niklas/t120.C b/gcc/testsuite/g++.old-deja/g++.niklas/t120.C new file mode 100644 index 000000000000..c04158047bea --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.niklas/t120.C @@ -0,0 +1,5 @@ +// Build don't link: +// GROUPS passed niklas ellipsis +typedef void (*T) (...); +void f (); +struct S { void g (T); void h() { g(f); } };// ERROR - diff --git a/gcc/testsuite/g++.old-deja/g++.niklas/t121.C b/gcc/testsuite/g++.old-deja/g++.niklas/t121.C new file mode 100644 index 000000000000..e99c940110de --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.niklas/t121.C @@ -0,0 +1,5 @@ +// Build don't link: +// GROUPS passed niklas ellipsis +void f (); +void g1 (void (*) (...)); void h1 () { g1 (f); }// ERROR - .* +struct S { void g2 (void (*) (...)); void h2 () { g2 (f); } };// ERROR - diff --git a/gcc/testsuite/g++.old-deja/g++.niklas/t122.C b/gcc/testsuite/g++.old-deja/g++.niklas/t122.C new file mode 100644 index 000000000000..a4ec04547128 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.niklas/t122.C @@ -0,0 +1,14 @@ +// Build don't link: +// GROUPS passed niklas dwarf +struct S { S(); }; + +inline void +foo ( + S a, + S b + ) +{} + +void +bar (S s1, S s2) +{ foo (s1, s2); } diff --git a/gcc/testsuite/g++.old-deja/g++.niklas/t123.C b/gcc/testsuite/g++.old-deja/g++.niklas/t123.C new file mode 100644 index 000000000000..37db7875eb83 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.niklas/t123.C @@ -0,0 +1,4 @@ +// Build don't link: +// GROUPS passed niklas dwarf +struct S { S(); }; +void f(S) {} diff --git a/gcc/testsuite/g++.old-deja/g++.niklas/t124.C b/gcc/testsuite/g++.old-deja/g++.niklas/t124.C new file mode 100644 index 000000000000..ba1aa55cc7d3 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.niklas/t124.C @@ -0,0 +1,10 @@ +// Build don't link: +// GROUPS passed niklas nested-types static-members +struct A +{ + static void f (); + struct B + { + static void g () { f (); } + }; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.niklas/t125.C b/gcc/testsuite/g++.old-deja/g++.niklas/t125.C new file mode 100644 index 000000000000..e5947ef9ce12 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.niklas/t125.C @@ -0,0 +1,10 @@ +// Build don't link: +// GROUPS passed niklas nested-types static-members +struct A +{ + static void f (); + struct B + { + void h () { f (); } + }; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.niklas/t126.C b/gcc/testsuite/g++.old-deja/g++.niklas/t126.C new file mode 100644 index 000000000000..7313a6abab19 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.niklas/t126.C @@ -0,0 +1,11 @@ +// Build don't link: +// GROUPS passed niklas nested-types static-members +struct A +{ + static void f (); + struct B + { + void g () {} + void h () {} + }; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.niklas/t127.C b/gcc/testsuite/g++.old-deja/g++.niklas/t127.C new file mode 100644 index 000000000000..a53d2d4a3b7e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.niklas/t127.C @@ -0,0 +1,4 @@ +// Build don't link: +// GROUPS passed niklas nested-types +struct A { struct B { ~B (); }; }; +A::B::~B () {} diff --git a/gcc/testsuite/g++.old-deja/g++.niklas/t128.C b/gcc/testsuite/g++.old-deja/g++.niklas/t128.C new file mode 100644 index 000000000000..7ada1dc685e6 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.niklas/t128.C @@ -0,0 +1,5 @@ +// Build don't link: +// GROUPS niklas uncaught default-construct +struct A { A (int); }; +struct B : A {}; // ERROR - +void f () { B (0); }// ERROR - .* diff --git a/gcc/testsuite/g++.old-deja/g++.niklas/t129.C b/gcc/testsuite/g++.old-deja/g++.niklas/t129.C new file mode 100644 index 000000000000..11e316aef21c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.niklas/t129.C @@ -0,0 +1,6 @@ +// Build don't link: +// GROUPS passed niklas nested-types +struct X { +struct A { A (int); }; +struct B : A { B (int a) : A (a) {} }; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.niklas/t130.C b/gcc/testsuite/g++.old-deja/g++.niklas/t130.C new file mode 100644 index 000000000000..7b2fb433b85a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.niklas/t130.C @@ -0,0 +1,4 @@ +// Build don't link: +// GROUPS passed niklas nested-types +struct A; +struct B { struct A { A(int); }; struct C : A { C() : A (0) {} }; }; diff --git a/gcc/testsuite/g++.old-deja/g++.niklas/t131.C b/gcc/testsuite/g++.old-deja/g++.niklas/t131.C new file mode 100644 index 000000000000..75283a828a3f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.niklas/t131.C @@ -0,0 +1,4 @@ +// Build don't link: +// GROUPS passed niklas static-members +struct A { static A a; }; +A f () { return A::a; } diff --git a/gcc/testsuite/g++.old-deja/g++.niklas/t132.C b/gcc/testsuite/g++.old-deja/g++.niklas/t132.C new file mode 100644 index 000000000000..18cd01c4b5e7 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.niklas/t132.C @@ -0,0 +1,5 @@ +// Build don't link: +// GROUPS passed niklas construct-destruct +struct S { S (); ~S (); }; +void f () { while (1) S s; } + diff --git a/gcc/testsuite/g++.old-deja/g++.niklas/t133.C b/gcc/testsuite/g++.old-deja/g++.niklas/t133.C new file mode 100644 index 000000000000..f79c6dbdef15 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.niklas/t133.C @@ -0,0 +1,4 @@ +// Build don't link: +// GROUPS passed niklas nested-types +struct A { struct B { void operator = (const B&); }; }; +void A::B::operator = (const B&) {} diff --git a/gcc/testsuite/g++.old-deja/g++.niklas/t134.C b/gcc/testsuite/g++.old-deja/g++.niklas/t134.C new file mode 100644 index 000000000000..faa15555e227 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.niklas/t134.C @@ -0,0 +1,4 @@ +// Build don't link: +// GROUPS passed niklas static-members +extern "C" int f (); +struct A { static void f () {} }; diff --git a/gcc/testsuite/g++.old-deja/g++.niklas/t135.C b/gcc/testsuite/g++.old-deja/g++.niklas/t135.C new file mode 100644 index 000000000000..138c27802c9e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.niklas/t135.C @@ -0,0 +1,28 @@ +// Build don't link: +// GROUPS niklas pt friend +// excess errors test - XFAIL *-*-* +template <class T> class C1 +{ +public: + void diddle_C2 (); +}; + +class C2 +{ + int data_member; + friend class C1; +}; + +class C2 C2_object; + +template <class T> void C1<T>::diddle_C2 () +{ + C2_object.data_member = 99; +} + +C1<int> C1_int_object; + +void foobar () +{ + C1_int_object.diddle_C2 (); +} diff --git a/gcc/testsuite/g++.old-deja/g++.niklas/t136.C b/gcc/testsuite/g++.old-deja/g++.niklas/t136.C new file mode 100644 index 000000000000..4890f61e25fe --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.niklas/t136.C @@ -0,0 +1,4 @@ +// Build don't link: +// GROUPS niklas overloading +extern "C" void f (char*); +void f (const char*) {} diff --git a/gcc/testsuite/g++.old-deja/g++.niklas/t137.C b/gcc/testsuite/g++.old-deja/g++.niklas/t137.C new file mode 100644 index 000000000000..9a64f0fe154c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.niklas/t137.C @@ -0,0 +1,6 @@ +// Build don't link: +// GROUPS passed niklas nested-types +struct A { + struct B { void f (); }; + struct C : B { void f () { B::f (); } }; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.niklas/t138.C b/gcc/testsuite/g++.old-deja/g++.niklas/t138.C new file mode 100644 index 000000000000..0f30d9534206 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.niklas/t138.C @@ -0,0 +1,6 @@ +// Build don't link: +// GROUPS passed niklas hiding +struct A; +void f (A*); +A* A; +void g () { f (A); } diff --git a/gcc/testsuite/g++.old-deja/g++.niklas/t139.C b/gcc/testsuite/g++.old-deja/g++.niklas/t139.C new file mode 100644 index 000000000000..702d065f2adb --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.niklas/t139.C @@ -0,0 +1,7 @@ +// GROUPS passed niklas hiding ARM +// Build don't link: +// Special g++ Options: -w +struct stat {}; +stat gstat; +int stat (struct stat*); +void f () { struct stat* ps; stat (ps); } diff --git a/gcc/testsuite/g++.old-deja/g++.niklas/t140.C b/gcc/testsuite/g++.old-deja/g++.niklas/t140.C new file mode 100644 index 000000000000..f840c62a82e3 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.niklas/t140.C @@ -0,0 +1,11 @@ +// GROUPS passed niklas hiding local-types +extern "C" int printf (const char*, ...); +int val = 1; +void S () { printf ("FAIL\n"); } +void f () { printf ("PASS\n"); val = 0; } +int main () +{ + struct S { S () { f (); } }; + S (); + return val; +} diff --git a/gcc/testsuite/g++.old-deja/g++.niklas/t141.C b/gcc/testsuite/g++.old-deja/g++.niklas/t141.C new file mode 100644 index 000000000000..dda60f549eb6 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.niklas/t141.C @@ -0,0 +1,6 @@ +// Build don't link: +// Special g++ Options: -Wshadow +// GROUPS passed niklas scoping ARM +class X { X (int); }; // WARNING - private +void X (int);// ERROR - .*hides constructor.* +void f () { X (1); } diff --git a/gcc/testsuite/g++.old-deja/g++.other/.cvsignore b/gcc/testsuite/g++.old-deja/g++.other/.cvsignore new file mode 100644 index 000000000000..7abff1dbead4 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.other/.cvsignore @@ -0,0 +1,2 @@ +Makefile +config.status diff --git a/gcc/testsuite/g++.old-deja/g++.other/900403_04.C b/gcc/testsuite/g++.old-deja/g++.other/900403_04.C new file mode 100644 index 000000000000..9d55a37976be --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.other/900403_04.C @@ -0,0 +1,12 @@ +// GROUPS passed abort +// Build don't link: +// g++ 1.37.1 bug 900403_04 + +// The following erroneous code causes g++ to abort. + +// keywords: abort, bit-fields, zero length + +struct s { + unsigned int foo:0; // ERROR - causes abort + unsigned int field; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.other/900519_12.C b/gcc/testsuite/g++.old-deja/g++.other/900519_12.C new file mode 100644 index 000000000000..1170b068b2f2 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.other/900519_12.C @@ -0,0 +1,11 @@ +// GROUPS abort +// Build don't link: +// g++ 1.37.1 bug 900519_12 + +// The following erroneous code causes g++ to segfault. + +// cfront 2.0 passes this test. + +// keywords: segfault, typedef, pointer type, function type + +typedef eek void (*)(); // ERROR - diff --git a/gcc/testsuite/g++.old-deja/g++.other/Makefile.in b/gcc/testsuite/g++.old-deja/g++.other/Makefile.in new file mode 100644 index 000000000000..d5eb149dbee0 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.other/Makefile.in @@ -0,0 +1,12 @@ +#### host, target, and site specific Makefile frags come in here. + +srcdir = . + +# Nothing to do... +all: + +clean: + -rm -f *.o *.diff *~ *.bad core + +distclean: clean + -rm -f Makefile config.status diff --git a/gcc/testsuite/g++.old-deja/g++.other/configure.in b/gcc/testsuite/g++.old-deja/g++.other/configure.in new file mode 100644 index 000000000000..e198b4f0d455 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.other/configure.in @@ -0,0 +1,15 @@ +# This file is a shell script fragment that supplies the information +# necessary to tailor a template configure script into the configure +# script appropriate for this directory. For more information, check +# any existing configure script. + +srctrigger=g++-03.exp +srcname="DejaGnu" + +# per-host: + +# per-target: + +target_makefile_frag=../config/mt-${target_alias} + +# post-target: diff --git a/gcc/testsuite/g++.old-deja/g++.other/dll-1.C b/gcc/testsuite/g++.old-deja/g++.other/dll-1.C new file mode 100644 index 000000000000..0c66b7faf4bf --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.other/dll-1.C @@ -0,0 +1,10 @@ +// Build don't link: +// Special g++ Options: -mno-nop-fun-dllimport +// Skip if not target: arm-*pe +// declspec test #1 +// set compiler_result "__imp_imp.*\.section${spaces}.drectve\n\[^\n\]*-export:exp" +// set not_compiler_result "__imp_exp" + +__declspec (dllimport) void imp (); + +__declspec (dllexport) void exp () { imp (); } diff --git a/gcc/testsuite/g++.old-deja/g++.other/dll-2.C b/gcc/testsuite/g++.old-deja/g++.other/dll-2.C new file mode 100644 index 000000000000..f5c7b2eb8e84 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.other/dll-2.C @@ -0,0 +1,19 @@ +// Skip if not target: arm-*pe +// Build don't link: +// Microsoft's MSVC 2.0 allows dllimport followed by dllexport for variables, +// but does not allow dllexport followed by dllimport. +// +// Switching between dll{export,import} works for functions. +// We test for that too (by ensuring no error is produced). + +__declspec (dllimport) int foo1 (); +__declspec (dllexport) int foo1 (); + +__declspec (dllexport) int foo2 (); +__declspec (dllimport) int foo2 (); + +__declspec (dllimport) int bar1; +__declspec (dllexport) int bar1; + +__declspec (dllexport) int bar2; // ERROR - previously declared +__declspec (dllimport) int bar2; // ERROR - redefinition diff --git a/gcc/testsuite/g++.old-deja/g++.other/dll-3.C b/gcc/testsuite/g++.old-deja/g++.other/dll-3.C new file mode 100644 index 000000000000..469ea1c6b78d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.other/dll-3.C @@ -0,0 +1,17 @@ +// Build don't link: +// Skip if not target: arm-*pe +// Special g++ Options: -mno-nop-fun-dllimport +// set compiler_result "__imp_f1.*\.section${spaces}.drectve\n\[^\n\]*-export:f2" +// set not_compiler_result "__imp_f2" + +class aClass +{ +public: + __declspec(dllimport) int f1(); + __declspec(dllexport) int f2(); +}; + +__declspec(dllexport) int aClass::f2() +{ + return f1(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.other/dll-4.C b/gcc/testsuite/g++.old-deja/g++.other/dll-4.C new file mode 100644 index 000000000000..322f003dbde9 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.other/dll-4.C @@ -0,0 +1,14 @@ +// Build don't link: +// Skip if not target: arm-*pe +// Ensure dllexport overrides dllimport. +// set compiler_result "\.section${spaces}\.drectve\n\[^\n\]*-export:foo1.*\.section${spaces}\.drectve\n\[^\n\]*-export:foo2" +// set not_compiler_result "(__imp_foo1|__imp_foo2)" + +__declspec (dllimport) int foo1 (); +__declspec (dllexport) int foo1 (); + +__declspec (dllexport) int foo2 (); +__declspec (dllimport) int foo2 (); + +__declspec (dllexport) int foo1 () { return foo2 (); } +__declspec (dllexport) int foo2 () { return foo1 (); } diff --git a/gcc/testsuite/g++.old-deja/g++.other/dll-5.C b/gcc/testsuite/g++.old-deja/g++.other/dll-5.C new file mode 100644 index 000000000000..b2ad9f51bac1 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.other/dll-5.C @@ -0,0 +1,13 @@ +// Build don't link: +// Skip if not target: arm-*pe +// dllimport is "sorta like" to "extern". +// set compiler_result "(\nfoo1:.*\nfoo2:|\nfoo2:.*\nfoo1:)" +// set not_compiler_result "__imp_" + +__declspec (dllimport) int foo1; +int foo1; + +__declspec (dllimport) int foo2; +int foo2 = 5; + +int f () { return foo1 + foo2; } diff --git a/gcc/testsuite/g++.old-deja/g++.other/dll-6.C b/gcc/testsuite/g++.old-deja/g++.other/dll-6.C new file mode 100644 index 000000000000..b4e0b42edbf1 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.other/dll-6.C @@ -0,0 +1,15 @@ +// Build don't link: +// Skip if not target: arm-*pe +// set not_compiler_result "__imp_" +// dll.h +class aClass + { +public: + __declspec(dllimport) aClass(); + }; + +// dll.cpp + +__declspec(dllexport) aClass::aClass() + { + } diff --git a/gcc/testsuite/g++.old-deja/g++.other/rtti1.C b/gcc/testsuite/g++.old-deja/g++.other/rtti1.C new file mode 100644 index 000000000000..7377e156dba5 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.other/rtti1.C @@ -0,0 +1,121 @@ +// test of rtti of non-class types +// Special g++ Options: -frtti + +#include <typeinfo> + +extern "C" { + int printf(const char *, ...); + void exit(int); +} + +int i; +short s; +char c; +long l; + +unsigned int ui; +unsigned short us; +unsigned char uc; +unsigned long ul; + +float f; +double d; + +int& ri = i; +const volatile int cvi = 10; +volatile const int vci = 20; +const int ci = 100; + +int *pi; +int ai[10]; + +enum color { red, blue, green, yellow}; + +int (*fp)(); +int (*gp)(); +int (*hp)(int); + +class XX { +public: + int xxi; + float xxf; + int xxf1 () {}; + int xxf2 (int k) {}; +}; + +class YY { +public: + int yyi; + double yyd; + int yyf1 (float f) {}; + double yyf2 () {return yyd;}; +}; + +int XX::*ptmd1; +int XX::*ptmd2; +float XX::*ptmd3; +int YY::*ptmd4; + +int (XX::*ptmf1) (); +int (XX::*ptmf2) (); +int (XX::*ptmf3) (int); +int (YY::*ptmf4) (); + +int func1 () +{ return 0;} + +int func2 () +{ return 1;} + +int func3 (int i) +{ return i;} + +short func4 () +{ return 99;} + +void error (int i) +{ + exit(i); +} + +int main () +{ + if (typeid(i) != typeid(int)) error(1); + if (typeid(s) != typeid(short)) error(2); + if (typeid(c) != typeid(char)) error(3); + if (typeid(l) != typeid(long)) error(4); + if (typeid(ui) != typeid(unsigned int)) error(5); + if (typeid(us) != typeid(unsigned short)) error(6); + if (typeid(uc) != typeid(unsigned char)) error(7); + if (typeid(ul) != typeid(unsigned long)) error(8); + if (typeid(f) != typeid(float)) error(9); + if (typeid(d) != typeid(double)) error(10); + + if (typeid(*pi) != typeid(int)) error(51); + if (typeid(pi) == typeid(ai)) error(52); + if (typeid(ri) != typeid(i)) error(53); + if (typeid(cvi) != typeid(vci)) error (54); + if (typeid(vci) != typeid(i)) error(55); + if (typeid(ci) != typeid(cvi)) error (56); + if (typeid(ci) != typeid(const int)) error(57); + + if (typeid(func1) != typeid(func2)) error (81); + if (typeid(func2) == typeid(func3)) error (82); + if (typeid(func1) == typeid(func4)) error (83); + if (typeid(func3) == typeid(func4)) error (84); + + if (typeid(red) != typeid(color)) error (101); + if (typeid(green) != typeid(blue)) error (102); + + if (typeid(fp) != typeid(gp)) error (103); + if (typeid(gp) == typeid(hp)) error (104); + + if (typeid(ptmd1) != typeid(ptmd2)) error (105); + if (typeid(ptmd1) == typeid(ptmd3)) error (106); + if (typeid(ptmd2) == typeid(ptmd4)) error (107); + + if (typeid(ptmf1) != typeid(ptmf2)) error (108); + if (typeid(ptmf2) == typeid(ptmf3)) error (109); + if (typeid(ptmf1) == typeid(ptmf4)) error (110); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.other/rtti2.C b/gcc/testsuite/g++.old-deja/g++.other/rtti2.C new file mode 100644 index 000000000000..a7a218b06e63 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.other/rtti2.C @@ -0,0 +1,88 @@ +// test of rtti of single inheritance and multiple inheritance classes +// Special g++ Options: -frtti + +#include <typeinfo> + +extern "C" { + int printf(const char *, ...); + void exit(int); +} + +class X { + public: + int xi; +}; + +class Y : public X { + short ys; +}; + +class Z : public Y { + int zi; +}; + +Z z; +Y y; +Y *yp = &z; +X *xp = &z; +Z *zp = &z; + +class A { + public: + int Ai; +}; + +class B { + public: + int Bi; +}; + +class D : public A, public B { + int Di; +}; + +/* +class E : public D, public B { + int Ei; +}; +*/ +class E { + int Ei; +}; + +class F : public E, public D { + int Fi; +}; + +D d; +A *ap = &d; +B *bp = &d; +F f; +A *aap = &f; +D *dp = &f; +B *bbp = dp; + +void *vp = zp; + +void error (int i) +{ + exit(i); +} + +int main () +{ + if (typeid(z) != typeid(Z)) error(1); + if (typeid(*yp) == typeid(Z)) error(2); + if (typeid(*yp) == typeid(*zp)) error(3); + if (typeid(xp) == typeid(yp)) error(4); + + xp = (X *)&y; + if (typeid(*xp) == typeid(*yp)) error(5); + if (typeid(*xp) == typeid(Y)) error(6); + + if (typeid(*ap) == typeid(*bp)) error (31); + if (typeid(*ap) == typeid(D)) error(32); + + if (typeid(*aap) == typeid(*bbp)) error(33); + if (typeid(*dp) == typeid(*aap)) error(34); +} diff --git a/gcc/testsuite/g++.old-deja/g++.other/rtti3.C b/gcc/testsuite/g++.old-deja/g++.other/rtti3.C new file mode 100644 index 000000000000..fdb1f9e090d8 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.other/rtti3.C @@ -0,0 +1,96 @@ +// test of rtti of single inheritance and multiple inheritance with +// virtual functions +// Special g++ Options: -frtti + +#include <typeinfo> + +extern "C" { + int printf(const char *, ...); + void exit(int); +} + +class X { + public: + int xi; + virtual int f() {}; +}; + +class Y : public X { + short ys; +}; + +class Z : public Y { + int zi; +}; + +Z z; +Y y; +Y *yp = &z; +X *xp = &z; +Z *zp = &z; + +class A { + public: + int Ai; + virtual int a() {}; +}; + +class B { + public: + int Bi; + virtual int g() {}; +}; + +class D : public A, public B { + int Di; +}; + +/* +class E : public D, public B { + int Ei; +}; +*/ +class E { + int Ei; +}; + +class F : public E, public D { + int Fi; +}; + +D d; +A *ap = &d; +B *bp = &d; +D *dp = &d; +F f; +A *aap = &f; +B *bbp = &f; + +void *vp = zp; + +void error (int i) +{ + exit(i); +} + +int main () +{ + if (typeid(z) != typeid(Z)) error(1); + if (typeid(*yp) != typeid(Z)) error(2); + if (typeid(*yp) != typeid(*zp)) error(3); + if (typeid(xp) == typeid(yp)) error(4); + + xp = (X *)&y; + if (typeid(*xp) == typeid(*yp)) error(5); + if (typeid(*xp) != typeid(Y)) error(6); + + if (typeid(*ap) != typeid(*bp)) error (31); + if (typeid(*ap) != typeid(D)) error(32); + vp = dp; + vp = dynamic_cast<void*> ((B *)vp); + if (dp != (D *)vp) error(35); + + dp = (D *)&f; + if (typeid(*aap) != typeid(*bbp)) error(37); + if (typeid(*dp) != typeid(*aap)) error(38); +} diff --git a/gcc/testsuite/g++.old-deja/g++.other/rtti4.C b/gcc/testsuite/g++.old-deja/g++.other/rtti4.C new file mode 100644 index 000000000000..571ed68fd9ff --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.other/rtti4.C @@ -0,0 +1,86 @@ +// test of rtti of single inheritance and multiple inheritance with +// virtual inheritance +// Special g++ Options: -frtti -w + +#include <typeinfo> + +extern "C" { + int printf(const char *, ...); + void exit(int); +} + +class X { + public: + int xi; + virtual int f() {}; +}; + +class Y : public virtual X { + short ys; +}; + +class Z : public virtual Y { + int zi; +}; + +Z z; +Y y; +Y *yp = &z; +X *xp = &z; +Z *zp = &z; + +class A { +public: + int Ai; + virtual int a() {}; +}; + +class B { +public: + int Bi; + virtual int g() {}; +}; + +class D : public virtual A, private B { + int Di; +}; + +class E : public virtual D, public B { + int Ei; +}; + +class F : public E, public virtual D { + int Fi; +}; + +D d; +A *ap = &d; +B *bp = (B *)&d; +F f; +A *aap = &f; +D *dp = &f; +B *bbp = (B *)dp; + +void *vp = zp; + +void error (int i) +{ + exit(i); +} + +int main () +{ + if (typeid(z) != typeid(Z)) error(1); + if (typeid(*yp) != typeid(Z)) error(2); + if (typeid(*yp) != typeid(*zp)) error(3); + if (typeid(xp) == typeid(yp)) error(4); + + xp = (X *)&y; + if (typeid(*xp) == typeid(*yp)) error(5); + if (typeid(*xp) != typeid(Y)) error(6); + + if (typeid(*ap) != typeid(*bp)) error (31); + if (typeid(*ap) != typeid(D)) error(32); + if (typeid(*aap) != typeid(*bbp)) error(33); + if (typeid(*dp) != typeid(*aap)) error(34); +} diff --git a/gcc/testsuite/g++.old-deja/g++.other/rttid2.C b/gcc/testsuite/g++.old-deja/g++.other/rttid2.C new file mode 100644 index 000000000000..50c1867c2676 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.other/rttid2.C @@ -0,0 +1,100 @@ +// test of rtti of single inheritance and multiple inheritance classes +// dynamic casting +// Special g++ Options: -frtti + +#include <typeinfo> + +extern "C" { + int printf(const char *, ...); + void exit(int); +} + +class X { + public: + int xi; +}; + +class Y : public X { + short ys; +}; + +class Z : public Y { + int zi; +}; + +Z z; +Y y; +Y *yp = &z; +X *xp = &z; +Z *zp = &z; + +class A { + public: + int Ai; +}; + +class B { + public: + int Bi; +}; + +class D : public A, public B { + int Di; +}; + +/* +class E : public D, public B { + int Ei; +}; +*/ +class E { + int Ei; +}; + +class F : public E, public D { + int Fi; +}; + +D d; +A *ap = &d; +B *bp = &d; +F f; +F *fp = &f; +A *aap = &f; +D *dp = &f; +B *bbp = dp; + +void *vp = zp; + +/* +void error (int i) +{ + printf("FAIL\n"); + exit(i); +} +*/ + +void error (int i) +{ + exit(i); +} + +int main () +{ + + vp = (void *)0; + + vp = dynamic_cast<Y *> (&z); + if (vp == 0) error(11); + + vp = dynamic_cast<X *> (yp); + if (vp == 0) error(12); + + vp = dynamic_cast<D *> (dp); + if (vp != (void *)dp) error(21); + + vp = dynamic_cast<B *> (fp); + if (vp != (void *)bbp) error(22); + +} + diff --git a/gcc/testsuite/g++.old-deja/g++.other/rttid3.C b/gcc/testsuite/g++.old-deja/g++.other/rttid3.C new file mode 100644 index 000000000000..69b7fc5c38af --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.other/rttid3.C @@ -0,0 +1,115 @@ +// test of rtti of single inheritance and multiple inheritance with +// virtual functions +// dynamic casting +// Special g++ Options: -frtti + +#include <typeinfo> + +extern "C" { + int printf(const char *, ...); + void exit(int); +} + +class X { + public: + int xi; + virtual int f() {}; +}; + +class Y : public X { + short ys; +}; + +class Z : public Y { + int zi; +}; + +Z z; +Y y; +Y *yp = &z; +X *xp = &z; +Z *zp = &z; + +class A { + public: + int Ai; + virtual int a() {}; +}; + +class B { + public: + int Bi; + virtual int g() {}; +}; + +class D : public A, public B { + int Di; +}; + +/* +class E : public D, public B { + int Ei; +}; +*/ +class E { + int Ei; +}; + +class F : public E, public D { + int Fi; +}; + +D d; +A *ap = &d; +B *bp = &d; +D *dp = &d; +F f; +F *fp = &f; +A *aap = &f; +B *bbp = &f; + +void *vp = zp; + +/* +void error (int i) +{ + printf("FAIL\n"); + exit(i); +} +*/ + +void error (int i) +{ + exit(i); +} + +int main () +{ + vp = (void *)0; + + vp = dynamic_cast<Y *> (&z); + if (vp == 0) error(11); + + vp = dynamic_cast<Z *> (yp); + if (vp == 0) error(11); + + vp = dynamic_cast<X *> (yp); + if (vp == 0) error(12); + + vp = dynamic_cast<D *> (dp); + if (vp != (void *)dp) error(21); + + vp = dynamic_cast<B *> (dp); + if (vp == (void *)dp) error(21); + + vp = dynamic_cast<B *> (fp); + if (vp != (void *)bbp) error(22); + + vp = dynamic_cast<void *> (aap); + if (vp != (void *)fp) error(23); + + vp = dynamic_cast<B *> (aap); + if (vp != (void *)bbp) error(24); + +} + diff --git a/gcc/testsuite/g++.old-deja/g++.other/rttid4.C b/gcc/testsuite/g++.old-deja/g++.other/rttid4.C new file mode 100644 index 000000000000..72100b7409de --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.other/rttid4.C @@ -0,0 +1,111 @@ +// test of rtti of single inheritance and multiple inheritance with +// virtual inheritance +// dynamic casting +// Special g++ Options: -frtti -w + +#include <typeinfo> + +extern "C" { + int printf(const char *, ...); + void exit(int); +} + +class X { + public: + int xi; + virtual int f() {}; +}; + +class Y : public virtual X { + short ys; +}; + +class Z : public virtual Y { + int zi; +}; + +Z z; +Y y; +Y *yp = &z; +X *xp = &z; +Z *zp = &z; + +class A { +public: + int Ai; + virtual int a() {}; +}; + +class B { +public: + int Bi; + virtual int g() {}; +}; + +class D : public virtual A, private B { + int Di; +}; + +class E : public virtual D, public B { + int Ei; +}; + +class F : public E, public virtual D { + int Fi; +}; + +D d; +A *ap = &d; +B *bp = (B *)&d; +F f; +F *fp = &f; +A *aap = &f; +D *dp = &f; +E *ep = &f; +B *bbp = (B *)dp; + +void *vp = zp; + +/* +void error (int i) +{ + printf("FAIL\n"); + exit(i); +} +*/ + +void error (int i) +{ + exit(i); +} + +int main () +{ + vp = (void *)0; + + vp = dynamic_cast<Y *> (&z); + if (vp == 0) error(11); + + vp = dynamic_cast<Z *> (yp); + if (vp == 0) error(11); + + vp = dynamic_cast<X *> (yp); + if (vp == 0) error(12); + + vp = dynamic_cast<D *> (dp); + if (vp != (void *)dp) error(21); + + vp = dynamic_cast<B *> (dp); + if (vp == (void *)dp) error(21); + + vp = dynamic_cast<B *> (fp); + if (vp == (void *)bbp) error(22); + + vp = dynamic_cast<void *> (aap); + if (vp != (void *)fp) error(23); + + vp = dynamic_cast<B *> (aap); + if (vp == (void *)bbp) error(24); + +} + diff --git a/gcc/testsuite/g++.old-deja/g++.pt/eichin01.C b/gcc/testsuite/g++.old-deja/g++.pt/eichin01.C new file mode 100644 index 000000000000..154587b0ac90 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/eichin01.C @@ -0,0 +1,27 @@ +// Build don't run: + +/* + + +*/ + + +template <class X> class TC { +public: + X aaa; + static X sss; + TC(X a) { aaa = a; } + TC(X a, X s) { aaa = a; sss = s; } + void sz(X s) { sss = s; } +}; + +float TC<float>::sss; +long TC<long>::sss; + +TC<long> xjj(1,2); + +int main(int,char*) { + TC<float> xff(9.9,3.14); + xjj.sz(123); + xff.sz(2.71828); +} diff --git a/gcc/testsuite/g++.old-deja/g++.pt/eichin01a.C b/gcc/testsuite/g++.old-deja/g++.pt/eichin01a.C new file mode 100644 index 000000000000..1a37eebfc23f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/eichin01a.C @@ -0,0 +1,21 @@ +template <class X> class TC { +public: + X aaa; + static X sss; + TC(X a) {aaa = a; } + TC(X a, X s) {aaa = a; sss = s; } + void sz(X s) { sss = s; } +}; + + +long TC<long>::sss; +float TC<float>::sss; + +TC<long> xjj(1,2); + +int main(int,char*) { + TC<float> xff(9.9,3.14); + xjj.sz(123); + xff.sz(2.71828); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.pt/eichin01b.C b/gcc/testsuite/g++.old-deja/g++.pt/eichin01b.C new file mode 100644 index 000000000000..51bb4474c8fe --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/eichin01b.C @@ -0,0 +1,21 @@ +template <class X> class TC { +public: + X aaa; + static X sss; + TC(X a) {aaa = a; } + TC(X a, X s) {aaa = a; sss = s; } + void sz(X s) { sss = s; } + void syy(X syarg) { sss = syarg; } +}; + +long TC<long>::sss; +float TC<float>::sss; + +TC<long> xjj(1,2); + +int main(int,char*) { + TC<float> xff(9.9,3.14); + xjj.sz(123); + xff.sz(2.71828); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.pt/m1.C b/gcc/testsuite/g++.old-deja/g++.pt/m1.C new file mode 100644 index 000000000000..2d1321380be2 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/m1.C @@ -0,0 +1,16 @@ +// Build don't link: + +int f1 () { + struct A { + A() : b (2) { } + fred () { return b.hi_mom; } + struct B { + int hi_mom; + B (int a) { hi_mom = a; } + }; + B b; + }; + A aa; + return aa.fred(); +} +/* crashes with signal 11 */ diff --git a/gcc/testsuite/g++.old-deja/g++.pt/m2.C b/gcc/testsuite/g++.old-deja/g++.pt/m2.C new file mode 100644 index 000000000000..00fdbadea0bb --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/m2.C @@ -0,0 +1,9 @@ +// Build don't link: + +struct A { A() { a = 2; } int a; }; + +int f1 () { + struct A { A() { a = 2; } int a; }; + A aa; + return aa.a; +} diff --git a/gcc/testsuite/g++.old-deja/g++.pt/m3.C b/gcc/testsuite/g++.old-deja/g++.pt/m3.C new file mode 100644 index 000000000000..492b2611a310 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/m3.C @@ -0,0 +1,9 @@ +// Build don't link: + +struct A { A() { a = 2; } int a; }; + +struct B { + struct A { A() { a = 2; } int a; }; + A aa; +}; +char xx[]="../tests/m3.cc:4: redefinition of `struct A'"; diff --git a/gcc/testsuite/g++.old-deja/g++.pt/m4.C b/gcc/testsuite/g++.old-deja/g++.pt/m4.C new file mode 100644 index 000000000000..bbfb2272e61b --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/m4.C @@ -0,0 +1,7 @@ +// Build don't link: + +struct A1 { struct B { B(); } b; }; +struct A2 { struct B { ~B(); } b; }; +char xx[] ="../tests/m4.cc:1: warning: return type specification for constructor invalid"; + + diff --git a/gcc/testsuite/g++.old-deja/g++.pt/m5.C b/gcc/testsuite/g++.old-deja/g++.pt/m5.C new file mode 100644 index 000000000000..e8349704cae1 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/m5.C @@ -0,0 +1,6 @@ +// Build don't link: + +struct B { struct A { A(); int a; } aa; }; +struct A { A(); int a; }; +B::A::A () { a = 37; } +char xx[]="../tests/m5.cc:3: Segmentation violation"; diff --git a/gcc/testsuite/g++.old-deja/g++.pt/m6.C b/gcc/testsuite/g++.old-deja/g++.pt/m6.C new file mode 100644 index 000000000000..5d0c81e0d1e7 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/m6.C @@ -0,0 +1,14 @@ +// Build don't link: + +struct B { struct A { A(); int a; } aa; }; +B::A::A () { a = 37; } +char* xx[] = { +"../tests/m6.cc:1: warning: return type specification for constructor invalid", +"../tests/m6.cc:2: semicolon missing after declaration of `A'", +"../tests/m6.cc:2: warning: empty declaration", +"../tests/m6.cc: In function int A ():", +"../tests/m6.cc:2: `a' undeclared (first use this function)", +"../tests/m6.cc:2: (Each undeclared identifier is reported only once", +"../tests/m6.cc:2: for each function it appears in.)", +"../tests/m6.cc:2: warning: control reaches end of non-void function" }; + diff --git a/gcc/testsuite/g++.old-deja/g++.pt/m7.C b/gcc/testsuite/g++.old-deja/g++.pt/m7.C new file mode 100644 index 000000000000..06d2ba337a2c --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/m7.C @@ -0,0 +1,13 @@ +// Build don't link: + +struct B { struct A { A(); int a; }; A aa; }; +B::A::A () { a = 37; } +char *xx[]= {"/*", +"../tests/m7.cc:1: warning: return type specification for constructor invalid", +"../tests/m7.cc: In function struct A A ():", +"../tests/m7.cc:2: `a' undeclared (first use this function)", +"../tests/m7.cc:2: (Each undeclared identifier is reported only once", +"../tests/m7.cc:2: for each function it appears in.)", +"../tests/m7.cc:2: warning: control reaches end of non-void function", + "*/" }; + diff --git a/gcc/testsuite/g++.old-deja/g++.pt/m8.C b/gcc/testsuite/g++.old-deja/g++.pt/m8.C new file mode 100644 index 000000000000..22d01441bb10 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/m8.C @@ -0,0 +1,22 @@ +// Build don't link: + +class A { + int a; + public: + A (int aa = 3); +}; + +class B { + class A { + public: + A (int, int); + }; + A aa; + public: + B (int); +}; + +extern void foo(); +B::B (int z) : aa (1, z) { + foo (); +} diff --git a/gcc/testsuite/g++.old-deja/g++.pt/m9.C b/gcc/testsuite/g++.old-deja/g++.pt/m9.C new file mode 100644 index 000000000000..d519dbdc728f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/m9.C @@ -0,0 +1,16 @@ +// Build don't link: + +struct A { A() { a = 1; } int a; }; +struct Q { + struct A { A() { a = 2; } int a; }; + struct R { + struct A { A() { a = 3; } int a; }; + A aaz; + }; + R rrr; + A aay; +} +; + +Q qqq; +A aav; diff --git a/gcc/testsuite/g++.old-deja/g++.pt/m9a.C b/gcc/testsuite/g++.old-deja/g++.pt/m9a.C new file mode 100644 index 000000000000..9118306d6977 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/m9a.C @@ -0,0 +1,5 @@ +// Build don't link: + +struct A { A() { a = 1; } int a; }; // ERROR - +struct A { A() { a = 2; } int a; }; // ERROR - +A aavv; diff --git a/gcc/testsuite/g++.old-deja/g++.pt/niklas01.C b/gcc/testsuite/g++.old-deja/g++.pt/niklas01.C new file mode 100644 index 000000000000..6dcf9d3efaf2 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/niklas01.C @@ -0,0 +1,6 @@ +// Build don't link: + +template <class T> struct A {}; +template <class T> struct B : A<B<T> > {}; + +B<int> x; diff --git a/gcc/testsuite/g++.old-deja/g++.pt/niklas01a.C b/gcc/testsuite/g++.old-deja/g++.pt/niklas01a.C new file mode 100644 index 000000000000..027f2ae95951 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/niklas01a.C @@ -0,0 +1,8 @@ +// Build don't link: + +struct A { + friend struct B : A { // ERROR - + int x; + }; + int y; +}; diff --git a/gcc/testsuite/g++.old-deja/g++.pt/niklas01b.C b/gcc/testsuite/g++.old-deja/g++.pt/niklas01b.C new file mode 100644 index 000000000000..fa2e5ac884a7 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/niklas01b.C @@ -0,0 +1,6 @@ +// Build don't link: + +template <class T> struct A { T *t; inline A() { t = 0; } }; +template <class T> struct B : A<B<T> > { int x; inline B() { x = 3; } }; + +B<int> x; diff --git a/gcc/testsuite/g++.old-deja/g++.pt/niklas02.C b/gcc/testsuite/g++.old-deja/g++.pt/niklas02.C new file mode 100644 index 000000000000..b4d300deaed5 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/niklas02.C @@ -0,0 +1,15 @@ +// Build don't link: + +struct B { int foo (); }; +int B::foo() { return 37; } + +template <class A> struct X { + void f(int); +}; + +template <class A> void X<A>::f (int jj) +{} + +X<int> x; + +void xxx () { x.f (1); } diff --git a/gcc/testsuite/g++.old-deja/g++.pt/niklas03.C b/gcc/testsuite/g++.old-deja/g++.pt/niklas03.C new file mode 100644 index 000000000000..29b19726a2d1 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/niklas03.C @@ -0,0 +1,12 @@ +// Build don't link: + +template <class A> struct X { + A operator[] (int); +}; + +template <class A> A X<A>::operator[] (int i) +{ + return A(); // gets bogus error +} + +X<int> x; diff --git a/gcc/testsuite/g++.old-deja/g++.pt/t00.C b/gcc/testsuite/g++.old-deja/g++.pt/t00.C new file mode 100644 index 000000000000..14bfcf82ca62 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/t00.C @@ -0,0 +1,12 @@ +// Build don't link: + +int f1 () { + struct A { A() { a = 2; } int a; } ; + A aa; + return aa.a; +} +int f2 () { + struct A { A() { a = 2; } int a; } ; + A ab; + return ab.a; +} diff --git a/gcc/testsuite/g++.old-deja/g++.pt/t01.C b/gcc/testsuite/g++.old-deja/g++.pt/t01.C new file mode 100644 index 000000000000..b1d7d386cd95 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/t01.C @@ -0,0 +1,6 @@ +// Build don't link: + +template <class A> class B { public: A a; }; +static B<int> b_int; + +int foo () { return b_int.a; } diff --git a/gcc/testsuite/g++.old-deja/g++.pt/t03.C b/gcc/testsuite/g++.old-deja/g++.pt/t03.C new file mode 100644 index 000000000000..29f687ae1bcf --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/t03.C @@ -0,0 +1,7 @@ +// Build don't link: + +template <class A> class B { public: A a; }; +static B<int> b_int; +static B<char> b_char; + +int foo () { return b_int.a + b_char.a; } diff --git a/gcc/testsuite/g++.old-deja/g++.pt/t04.C b/gcc/testsuite/g++.old-deja/g++.pt/t04.C new file mode 100644 index 000000000000..faa04fc5771d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/t04.C @@ -0,0 +1,8 @@ +// Build don't link: + +template <class A> class B { public: A a; }; +static B<int> b_int; +static B<char> b_char; +static B<unsigned char> b_uchar; + +int foo () { return b_int.a + b_char.a + b_uchar.a; } diff --git a/gcc/testsuite/g++.old-deja/g++.pt/t05.C b/gcc/testsuite/g++.old-deja/g++.pt/t05.C new file mode 100644 index 000000000000..888f1de95eaf --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/t05.C @@ -0,0 +1,9 @@ +// Build don't link: + +template <class A> class B { + A a; + public: + B(A&aa); // ERROR - + ~B(); +}; +static B<int> b_int (3); // ERROR - diff --git a/gcc/testsuite/g++.old-deja/g++.pt/t06.C b/gcc/testsuite/g++.old-deja/g++.pt/t06.C new file mode 100644 index 000000000000..8681f5332fa9 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/t06.C @@ -0,0 +1,25 @@ +// Build don't link: + +typedef int I; +int i; + +template <class A> class B { + A a; + public: + B(A&aa); + B(); + ~B(); +}; + +template <class B> class C { public: B b; }; + +template <class I, class i> class D : I { public: i ii; }; + +typedef B<int> b_int; +typedef C<int> c_int; +typedef C<b_int> c_b_int2; + +c_b_int2 x2; +int z; +D<c_b_int2,b_int> d; +int q; diff --git a/gcc/testsuite/g++.old-deja/g++.pt/t07.C b/gcc/testsuite/g++.old-deja/g++.pt/t07.C new file mode 100644 index 000000000000..3cdb3dafdb29 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/t07.C @@ -0,0 +1,10 @@ +// Build don't link: + +template <class A> class B { + A a; + public: + const A& value () { return a; } +}; +static B<int> b_int; + +int foo () { return b_int.value(); } diff --git a/gcc/testsuite/g++.old-deja/g++.pt/t08.C b/gcc/testsuite/g++.old-deja/g++.pt/t08.C new file mode 100644 index 000000000000..ce24cca7e364 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/t08.C @@ -0,0 +1,10 @@ +// Build don't link: + +template <class A> class B { + A a; + public: + B (); + ~B (); +}; +B<int> b_int; +B<int> *bp = &b_int; diff --git a/gcc/testsuite/g++.old-deja/g++.pt/t09.C b/gcc/testsuite/g++.old-deja/g++.pt/t09.C new file mode 100644 index 000000000000..dab4730e0918 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/t09.C @@ -0,0 +1,6 @@ +// Build don't link: + +struct bs_1 { + typedef int (*pfi) (void); +}; +static bs_1::pfi fp; diff --git a/gcc/testsuite/g++.old-deja/g++.pt/t10.C b/gcc/testsuite/g++.old-deja/g++.pt/t10.C new file mode 100644 index 000000000000..4f3fc182e046 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/t10.C @@ -0,0 +1,6 @@ +// Build don't link: + +template <class A> class B { public: A a; B(); }; +class B<char> { public: int y[10]; }; +static B<int> bi; +static B<char> bc; diff --git a/gcc/testsuite/g++.old-deja/g++.pt/t11.C b/gcc/testsuite/g++.old-deja/g++.pt/t11.C new file mode 100644 index 000000000000..81373498df86 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/t11.C @@ -0,0 +1,9 @@ +// Build don't link: + +template <class A> +class B { +public: + A a; + B() { x = 2; } // ERROR - no x +}; +static B<int> bi; diff --git a/gcc/testsuite/g++.old-deja/g++.pt/t11a.C b/gcc/testsuite/g++.old-deja/g++.pt/t11a.C new file mode 100644 index 000000000000..0dcd297fa150 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/t11a.C @@ -0,0 +1,9 @@ +// Build don't link: + +template <class A> +class B { +public: + A a; + B() { a = 2; } +}; +static B<int> bi; diff --git a/gcc/testsuite/g++.old-deja/g++.pt/t12.C b/gcc/testsuite/g++.old-deja/g++.pt/t12.C new file mode 100644 index 000000000000..0ebb0451f79d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/t12.C @@ -0,0 +1,25 @@ +// Build don't link: + +class OBJECT {int a;}; +class STDFILE {int b;}; + +template <class T> class VECTOR { + T *v; + int sz; +public: + T& elem(int i) { return v[i]; } + T& operator[] (int i); +}; + +template <class T> +class PVECTOR : VECTOR<void *> { +public: + T*& elem(int i) + {return (T*&) VECTOR<void *>::elem(i); } + T*& operator[] (int i) + {return (T*&) VECTOR<void *>::operator[](i);} +}; + +PVECTOR<OBJECT *> *foo; + +PVECTOR<STDFILE *> *goo; diff --git a/gcc/testsuite/g++.old-deja/g++.pt/t12a.C b/gcc/testsuite/g++.old-deja/g++.pt/t12a.C new file mode 100644 index 000000000000..e0f1e65d50b1 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/t12a.C @@ -0,0 +1,5 @@ +// Build don't link: + +int a (void * x) { return 1; } +typedef void *T; +int b (T x) { return 2; } diff --git a/gcc/testsuite/g++.old-deja/g++.pt/t13.C b/gcc/testsuite/g++.old-deja/g++.pt/t13.C new file mode 100644 index 000000000000..2f589a7d2278 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/t13.C @@ -0,0 +1,19 @@ +// Build don't link: + +template <class A> class B { +public: + B(); + A a; + int i; +}; + +void *f () { + return new B<char *>; +} + +struct foo { int i[10]; }; +extern B<foo> *foop; + +void f2 () { + foop = new B<foo>; +} diff --git a/gcc/testsuite/g++.old-deja/g++.pt/t14.C b/gcc/testsuite/g++.old-deja/g++.pt/t14.C new file mode 100644 index 000000000000..8532f2b35010 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/t14.C @@ -0,0 +1,24 @@ +// Build don't link: + +class OBJECT +{ + int a; +}; + + + +template <class T> class TESTA +{ +public: + TESTA(); + T foo(int i) {T t = 0; return t}; // ERROR - no semi +}; + + + +void foo() +{ + TESTA<OBJECT *> *foo; + + foo = new TESTA<OBJECT *>; +} diff --git a/gcc/testsuite/g++.old-deja/g++.pt/t14a.C b/gcc/testsuite/g++.old-deja/g++.pt/t14a.C new file mode 100644 index 000000000000..694f846fbe56 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/t14a.C @@ -0,0 +1,25 @@ +// Build don't link: + +class OBJECT +{ + int a; +}; + + + +template <class T> class TESTA +{ +public: + TESTA(); + T foo(int i) {T t = 0; return t;} +}; + + + +void foo() +{ + TESTA<OBJECT *> *foo; + + foo = new TESTA<OBJECT *>; +} + diff --git a/gcc/testsuite/g++.old-deja/g++.pt/t16.C b/gcc/testsuite/g++.old-deja/g++.pt/t16.C new file mode 100644 index 000000000000..a5b19e43fa6d --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/t16.C @@ -0,0 +1,30 @@ +extern "C" void printf (char *, ...); +template <class T> T max (const T&x, const T&y) +{ + return (x>y)?x:y; +} +int min (const float&, const float&); +int min (const int& i1, const int& i2) { + return (i1 < i2) ? i1 : i2; +} + +class complex +{ + double re, im; + public: + complex (double r, double i=0) { re = r; im = i; } + friend int operator > (const complex& x, const complex &y) { return 0; } + void print () { } +}; + +main () +{ + complex c1 (1, 0); + complex c2 (2, 0); + + int j = max (1, 37); + complex m1 = max (c1, c2); + m1.print (); + printf ("j=%d\n", j); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.pt/t18.C b/gcc/testsuite/g++.old-deja/g++.pt/t18.C new file mode 100644 index 000000000000..760747eeceb5 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/t18.C @@ -0,0 +1,19 @@ +// Build don't link: + +extern void byebye (); +template <class T1, class T2> +struct A +{ + T1 t1; + T2 t2; + A() { t1 = 0; t2 = 0; } + ~A() { byebye(); } +}; + +template <class Q> +int f (A<int, Q> a) { + return a.t1; +} + +extern A<int,double*> aa; +int foop () { return f(aa); } diff --git a/gcc/testsuite/g++.old-deja/g++.pt/t20.C b/gcc/testsuite/g++.old-deja/g++.pt/t20.C new file mode 100644 index 000000000000..07a86fa2d6ec --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/t20.C @@ -0,0 +1,15 @@ +// Build don't link: + +template <class X> class A { +public: + X aaa; + int foo(); +}; + +template <class X> A<X> f(X); + +void frep() { + int x; + x = f(6.4).foo(); +} + diff --git a/gcc/testsuite/g++.old-deja/g++.pt/t21.C b/gcc/testsuite/g++.old-deja/g++.pt/t21.C new file mode 100644 index 000000000000..f05f89ff4c26 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/t21.C @@ -0,0 +1,8 @@ +// Build don't link: + +template <class X> class A { public: int a; X x; }; +template <class X> X f (A<X> a) { return a.x; } + +extern A<double> a_dbl; + +double fred () { return f (a_dbl); } diff --git a/gcc/testsuite/g++.old-deja/g++.pt/t22.C b/gcc/testsuite/g++.old-deja/g++.pt/t22.C new file mode 100644 index 000000000000..1102baabef30 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/t22.C @@ -0,0 +1,10 @@ +// Build don't link: + +class AA { public: static int xx; }; +template <class X> class A { + public: + static int x; +}; + +int AA::xx; +template <class Y> int A<Y>::x; // gets bogus error diff --git a/gcc/testsuite/g++.old-deja/g++.pt/t23.C b/gcc/testsuite/g++.old-deja/g++.pt/t23.C new file mode 100644 index 000000000000..82221b327157 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/t23.C @@ -0,0 +1,18 @@ +// Build don't link: + +template <class T> class temp1 +{ +public: + T tvar; +}; + + +template <class T2> class temp2 +{ +public : + temp1<T2> t1var; +}; + + +temp1<int> temp1var; +temp2<int> temp2var; diff --git a/gcc/testsuite/g++.old-deja/g++.pt/t24.C b/gcc/testsuite/g++.old-deja/g++.pt/t24.C new file mode 100644 index 000000000000..60322706389f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/t24.C @@ -0,0 +1,8 @@ +// Build don't link: +// Special g++ Options: + +template <class X> int f (X x, X y) { return 23; } + +int foo () { + return f (7); // ERROR - +} diff --git a/gcc/testsuite/g++.old-deja/g++.pt/t25.C b/gcc/testsuite/g++.old-deja/g++.pt/t25.C new file mode 100644 index 000000000000..231977468257 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/t25.C @@ -0,0 +1,8 @@ +// Build don't link: + +template <class X> int f (X x, X y) { return 23; } +template <class X> int f (X x, int j = 3) { return 29; } + +int foo () { + return f (7); // gets bogus error - +} diff --git a/gcc/testsuite/g++.old-deja/g++.pt/t26.C b/gcc/testsuite/g++.old-deja/g++.pt/t26.C new file mode 100644 index 000000000000..cfc1591df2da --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/t26.C @@ -0,0 +1,8 @@ +// Build don't link: + +template <class X> int f (X x, unsigned int j = 3) { return 29; } +template <class X> int f (X x, X y) { return 23; } + +int foo () { + return f (7.0, 9.0); +} diff --git a/gcc/testsuite/g++.old-deja/g++.pt/t27.C b/gcc/testsuite/g++.old-deja/g++.pt/t27.C new file mode 100644 index 000000000000..f3246e812045 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/t27.C @@ -0,0 +1,8 @@ +// Build don't link: + +template <class X> int f (X x, int * j) { return 29; } +template <class X> int f (X x, ...) { return 23; } + +int foo () { + return f (7.0, 9.0); +} diff --git a/gcc/testsuite/g++.old-deja/g++.pt/t28.C b/gcc/testsuite/g++.old-deja/g++.pt/t28.C new file mode 100644 index 000000000000..dd524cb781ac --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/t28.C @@ -0,0 +1,10 @@ +// Build don't link: + +template <class X> class B; +template <class X> int f (B<X> b) { return 37; } +template <class Y> class B { public: Y y; B() { y = 1; } }; + +int foo () { + B<double> bd; + return f(bd); +} diff --git a/gcc/testsuite/g++.old-deja/g++.pt/t29.C b/gcc/testsuite/g++.old-deja/g++.pt/t29.C new file mode 100644 index 000000000000..54a5052ff026 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/t29.C @@ -0,0 +1,8 @@ +// Build don't link: + +template <class X, int n> X f (auto X (*x)[n]) { return (*x)[n/2]; } +extern int i[30]; +extern double d[99]; + +int foo (int ii) { return f (&i); } // causes abort +double foo (double dd) { return f (&d); } diff --git a/gcc/testsuite/g++.old-deja/g++.pt/t30.C b/gcc/testsuite/g++.old-deja/g++.pt/t30.C new file mode 100644 index 000000000000..42d88eaee299 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/t30.C @@ -0,0 +1,8 @@ +// Build don't link: + +template <class X, int n> X f (auto X (*x)[n]) { return (*x)[n/2]; } +extern int i[30], i2[33]; +extern double d[99]; + +int foo (int ii) { return f (&i) + f(&i2); } // causes abort +double foo (double dd) { return f (&d); } diff --git a/gcc/testsuite/g++.old-deja/g++.pt/t31.C b/gcc/testsuite/g++.old-deja/g++.pt/t31.C new file mode 100644 index 000000000000..8800ebe7ca89 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/t31.C @@ -0,0 +1,17 @@ +// Build don't link: + +struct B { int foo (); }; +int B::foo() { return 37; } + +template <class A> struct X { + void f(); +}; + +template <class A> void X<A>::f () +{} + +X<int> x; + +void xyzzy () { + x.f (); +} diff --git a/gcc/testsuite/g++.old-deja/g++.pt/t32.C b/gcc/testsuite/g++.old-deja/g++.pt/t32.C new file mode 100644 index 000000000000..89f8db191086 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/t32.C @@ -0,0 +1,14 @@ +// Build don't link: + +template <class X> struct A { + int fooo (int x); + int x; + inline int y () { return 3; } + inline int z () { return 5; } +}; + +template <class Y> int A<Y>::fooo (int t) { return (this->*(x?&A<Y>::y : &A<Y>::z))() + t; }; // gets bogus error + +A<int> ai; + +int frop () { return ai.fooo (100); } diff --git a/gcc/testsuite/g++.old-deja/g++.pt/t32a.C b/gcc/testsuite/g++.old-deja/g++.pt/t32a.C new file mode 100644 index 000000000000..13dfda122b6e --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/t32a.C @@ -0,0 +1,10 @@ +// Build don't link: + +struct A { + int x; + int y (); + int z (); + int foo (int j); +}; + +int A::foo (int q) { return q + (this->*(x ? &A::y : &A::z)) (); } // gets bogus error diff --git a/gcc/testsuite/g++.old-deja/g++.pt/t34.C b/gcc/testsuite/g++.old-deja/g++.pt/t34.C new file mode 100644 index 000000000000..acf858adf935 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/t34.C @@ -0,0 +1,8 @@ +// Build don't link: + +template <class X> struct A { int operator [] (int); }; +template <class Y> int A<Y>::operator[] (int j) { return j * j; } + +extern A<void **> avpp; + +int q () { return avpp[99]; } diff --git a/gcc/testsuite/g++.old-deja/g++.pt/t34a.C b/gcc/testsuite/g++.old-deja/g++.pt/t34a.C new file mode 100644 index 000000000000..7d5aebf598a0 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/t34a.C @@ -0,0 +1,16 @@ +// Build don't link: + +struct A { + int operator[] (int); +}; + +//int A::operator[] (int); + +int A::operator[] (int j) +{ + return j * j; +} + +extern A a; + +int q () { return a[99]; } diff --git a/gcc/testsuite/g++.old-deja/g++.pt/t35.C b/gcc/testsuite/g++.old-deja/g++.pt/t35.C new file mode 100644 index 000000000000..f0ed971ae470 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/t35.C @@ -0,0 +1,12 @@ +// Build don't link: +// Special g++ Options: +template<class X> struct A { + A (); + ~A(); + int x, y, z; +}; + +template <class Y> inline A<Y>::A () { x = y = 3; z = 99; } +template <class Z> inline A<Z>::~A() { y = 9999; } + +A<int> ai; diff --git a/gcc/testsuite/g++.old-deja/g++.pt/t36.C b/gcc/testsuite/g++.old-deja/g++.pt/t36.C new file mode 100644 index 000000000000..bb791b9df750 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/t36.C @@ -0,0 +1,6 @@ +// Build don't link: + +void * foo () { + typedef int * ip; + return new ip; +} diff --git a/gcc/testsuite/g++.old-deja/g++.pt/t37.C b/gcc/testsuite/g++.old-deja/g++.pt/t37.C new file mode 100644 index 000000000000..434dadd82284 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/t37.C @@ -0,0 +1,17 @@ +// Build don't link: + +class A { +public: + A(int); // ERROR - referenced below + A(float); // ERROR - referenced below + ~A(); +}; // ERROR - synthesized copy ctor + +A::A() { // ERROR - +} + +A::A(int) { +} + +A::~A() { +} diff --git a/gcc/testsuite/g++.old-deja/g++.pt/t37a.C b/gcc/testsuite/g++.old-deja/g++.pt/t37a.C new file mode 100644 index 000000000000..797b78df5ac4 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/t37a.C @@ -0,0 +1,18 @@ +// Build don't link: + +class A { +public: + A(int); + A(float); + ~A(); +}; + +A::A(float f) { +} + +A::A(int i) { +} + +A::~A() { +} + diff --git a/gcc/testsuite/g++.old-deja/g++.pt/t38.C b/gcc/testsuite/g++.old-deja/g++.pt/t38.C new file mode 100644 index 000000000000..cd892822b143 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/t38.C @@ -0,0 +1,19 @@ +// Build don't link: +// Special g++ Options: +extern "C" int printf (const char *, ...); + +template<class X> struct A { + A (int, char); + ~A (); + A (X *, float); +}; + +template<class Y> inline A<Y>::A (int i, char c) { + printf ("%d, %d\n", i, c); +} +template<class Z> A<Z>::~A() {} +template<class W> A<W>::A (W * d, float f) { + printf ("%x, %e\n", d, f); +} + +A<void> avoid (9, 0); diff --git a/gcc/testsuite/g++.old-deja/g++.pt/t39.C b/gcc/testsuite/g++.old-deja/g++.pt/t39.C new file mode 100644 index 000000000000..d12ef8140633 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/t39.C @@ -0,0 +1,25 @@ +extern "C" int printf (const char *, ...); + +template <class T> +struct frob { + T *ptr; + void print (); + frob (T* init) { ptr = init; } +}; + +template <class T> +void frob<T>::print () { + printf ("this = %08x\n", this); + printf (" ptr = %08x\n", ptr); + printf (" values = %x %x %x ...\n", ptr[0], ptr[1], ptr[2]); +} + + static int x[10]; + frob<char> fc ("hello"); + frob<int> fi (x); + +int main () { + fc.print (); + fi.print (); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.pt/t40.C b/gcc/testsuite/g++.old-deja/g++.pt/t40.C new file mode 100644 index 000000000000..34768a995fff --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/t40.C @@ -0,0 +1,11 @@ +// Build don't link: + +struct A { + struct B { + B (int); + }; + static int foop (B); + static int splat () { + return foop (B (1)); + } +}; diff --git a/gcc/testsuite/g++.old-deja/g++.pt/t41.C b/gcc/testsuite/g++.old-deja/g++.pt/t41.C new file mode 100644 index 000000000000..c02f6779a39a --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/t41.C @@ -0,0 +1,11 @@ +// Build don't link: + +struct A { + struct B { + B (int); + }; + static int foop (B); + int splat () { + return foop (B (1)); + } +}; diff --git a/gcc/testsuite/g++.old-deja/g++.pt/t42.C b/gcc/testsuite/g++.old-deja/g++.pt/t42.C new file mode 100644 index 000000000000..55459949b771 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/t42.C @@ -0,0 +1,17 @@ +extern "C" void abort (); + +struct A { + struct stat { + int x; + stat (int j) { abort (); } + }; + static int stat (double d) { return 0; } // gets bogus error - cfront takes it + static int zap () { + stat (0); + return stat (1); // gets bogus error - this should work + } +}; + +int main () { + return A::zap (); +} diff --git a/gcc/testsuite/g++.old-deja/g++.pt/test5.C b/gcc/testsuite/g++.old-deja/g++.pt/test5.C new file mode 100644 index 000000000000..dc74c2d88f75 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/test5.C @@ -0,0 +1,3 @@ +// Build don't link: + +template <char *a, const char *b, char *const c> class A{int x;}; diff --git a/gcc/testsuite/g++.old-deja/g++.pt/tiemann1r.C b/gcc/testsuite/g++.old-deja/g++.pt/tiemann1r.C new file mode 100644 index 000000000000..65e6807da986 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/tiemann1r.C @@ -0,0 +1,8 @@ +// Build don't link: + +struct bs_1 +{ + typedef int (*p_user_hashf)(int); +}; + +bs_1::p_user_hashf i_user_hashf; diff --git a/gcc/testsuite/g++.old-deja/g++.pt/tiemann2.C b/gcc/testsuite/g++.old-deja/g++.pt/tiemann2.C new file mode 100644 index 000000000000..31465d860253 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/tiemann2.C @@ -0,0 +1,34 @@ +extern "C" void printf (char *, ...); +template <class T> T max (const T&x, const T&y) +{ + return (x>y)?x:y; +} + +class complex +{ + double re, im; + public: + complex (double r, double i=0) { re = r; im = i; } + friend int operator > (const complex& x, const complex &y); + void print () { printf ("re = %g; im = %g;\n", re, im); } +}; +int operator >(const complex& x, const complex &y) +{ + double c1 = x.re * x.re + x.im * x.im; + double c2 = y.re * y.re + y.im * y.im; + return c1 > c2; +} + +main () +{ + complex c1 (1, 0); + complex c2 (2, 0); + complex c3 (2, 3); + complex c4 (2, 1); + + complex m1 = max (c1, c2); + complex m2 = max (c3, c4); + m1.print (); + m2.print (); + return 0; +} diff --git a/gcc/testsuite/g++.old-deja/g++.pt/to2.C b/gcc/testsuite/g++.old-deja/g++.pt/to2.C new file mode 100644 index 000000000000..936729c6b181 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/to2.C @@ -0,0 +1,7 @@ +// Build don't link: + +template <class A> class B { public: A a; }; +static B<int> b_int; +static B<int> b_int2; + +int foo () { return b_int.a + b_int2.a; } diff --git a/gcc/testsuite/g++.old-deja/g++.pt/tt.C b/gcc/testsuite/g++.old-deja/g++.pt/tt.C new file mode 100644 index 000000000000..e597875a05a5 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/tt.C @@ -0,0 +1,33 @@ +// Build don't link: + +#define DEF_A struct A { A() { a = 2; } int a; } + +#if 1 +int f1 () { + DEF_A; + A aa; + return aa.a; +} + +int f2 () { + DEF_A; + A ab; + return ab.a; +} +/* results: +tt.cc: In function int f2 (): +tt.cc:9: conflicting types for `A::A ()' +tt.cc:3: previous declaration of `A::A ()' +/u2/projects/gcc2/src/cplus-cvt.c:1149: failed assertion `distance >= 0' +gcc2: Program cc1plus got fatal signal 6. +*/ +#else + +struct B1 { DEF_A; A aa; }; + +struct B2 { DEF_A; A aa; }; +/* results: +/u2/projects/gcc2/src/cplus-decl.c:5469: failed assertion `return_type == return_ctor' +gcc2: Program cc1plus got fatal signal 6. +*/ +#endif diff --git a/gcc/testsuite/g++.old-deja/g++.pt/tt2.C b/gcc/testsuite/g++.old-deja/g++.pt/tt2.C new file mode 100644 index 000000000000..c4323a50340f --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/tt2.C @@ -0,0 +1,22 @@ +// Build don't link: + +int f1 () { + struct A { + A() : b (2) { } + fred () { return b.hi_mom; } + struct B { + int hi_mom; + B (int a) { hi_mom = a; } + }; + B b; + }; + A aa; + return aa.fred(); +} + +int f2 () { + struct A { ~A() { a = 3; } int a; fred () { return a + 1; } }; + A ab; + ab.a = 12; + return ab.fred(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.rfg/00321_01-.C b/gcc/testsuite/g++.old-deja/g++.rfg/00321_01-.C new file mode 100644 index 000000000000..d7e08a3876f0 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.rfg/00321_01-.C @@ -0,0 +1,14 @@ +// Here is a simple one. GCC correctly gives errors for this code when the +// - -pedantic-errors option is used, whereas g++ doesn't. + +// Build don't link: + +int (*p1)[3]; +int (*p2)[5]; + +void +test () +{ + p1 == p2; // ERROR - comparison.* + p1 > p2; // ERROR - comparison.* +} diff --git a/gcc/testsuite/g++.old-deja/g++.rfg/00324_02-.C b/gcc/testsuite/g++.old-deja/g++.rfg/00324_02-.C new file mode 100644 index 000000000000..4055ba8432e1 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.rfg/00324_02-.C @@ -0,0 +1,16 @@ +// Another simple one. GCC corerctly gives errors for this code when the +// - -pedantic-errors options is used. g++ doesn't. + +// Build don't link: + +void f (int i) { } + +void (*fp)(void); + +int i; + +void +test () +{ + i ? f : fp; // ERROR - +} diff --git a/gcc/testsuite/g++.old-deja/g++.rfg/README b/gcc/testsuite/g++.old-deja/g++.rfg/README new file mode 100644 index 000000000000..9e0e377dff49 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.rfg/README @@ -0,0 +1,30 @@ +From segfault!rfg@netcom.com Mon Feb 15 10:42:26 1993 +Return-Path: <segfault!rfg@netcom.com> +Received: from netcomsv.netcom.com (uucp3.netcom.com) by cygnus.com (4.1/SMI-4.1) + id AA03498; Mon, 15 Feb 93 10:42:25 PST +Received: from segfault.UUCP by netcomsv.netcom.com with UUCP (4.1/SMI-4.1) + id AA22925; Mon, 15 Feb 93 10:42:24 PST +From: segfault!rfg@netcom.com +Received: by segfault.uucp (4.1/SMI-4.1) + id AA11458; Mon, 15 Feb 93 10:40:56 PST +To: cygnus.com!mrs@netcom.com (Mike Stump) +Subject: Re: g++ errors +Reply-To: segfault!rfg@netcom.com +Date: Mon, 15 Feb 93 10:40:56 PST +Message-Id: <11457.729801656@segfault> + +I hereby grant you limited permission to use this test case (and the +others I have previously posted the the gcc2 list) for the sole +purpose of finding and fixing bugs in the g++ compiler. You may look +at it, save a copy of it online, and compile it (as often as you like) +but in all cases, my copyright notice must be maintained. In no case +may you redistribute it outside of Cygnus Support, or make it +available for redistribution outside of Cygnus Support (e.g. via FTP +or UUCP), either alone, or as part of any larger package or test +suite. This test case and the other test cases I have previously +posted to the gcc2 list are provided on an "as is" basis, and there is +no warrantee of any kind, either express or implied. Neither Ron +Guilmette, nor Ron Guilmette Computing will be responsible or liable +in any way for any damages, either direct, consequential, or +incidental, arising from the use of any of the aforementioned test +cases. diff --git a/gcc/testsuite/g++.old-deja/old-deja.exp b/gcc/testsuite/g++.old-deja/old-deja.exp new file mode 100644 index 000000000000..87cdb2eeadc8 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/old-deja.exp @@ -0,0 +1,64 @@ +# Copyright (C) 1988, 90, 91, 92, 1994, 1997 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +# Please email any bugs, comments, and/or additions to this file to: +# bug-g++@prep.ai.mit.edu + +# This file was written by Rob Savoye. (rob@cygnus.com) + +# +# these tests come from the original DejaGnu test suite +# developed at Cygnus Support. If this isn't deja gnu, I +# don't know what is... +# + +# load support procs +load_lib old-dejagnu.exp +load_lib g++.exp + + +# When a testcase doesn't have any special options, use these. +if ![info exists DEFAULT_CXXFLAGS] { + set DEFAULT_CXXFLAGS "-ansi -pedantic-errors" + +} + +old-dejagnu-init +global GXX_UNDER_TEST + +# +# main test loop +# + + +foreach file [lsort [find $srcdir/$subdir *.C]] { + # If we're only testing specific files and this isn't one of them, skip it. + if ![runtest_file_p $runtests $file] then { + continue + } + verbose "Testing $file" + + # We don't want old-dejagnu.exp to have to know about all the global + # variables we use. For now we tell it about CXXFLAGS and LIBS and + # leave LDFLAGS alone. + old-dejagnu $GXX_UNDER_TEST "$file" "" "$DEFAULT_CXXFLAGS" "-lstdc++" +} + +# The framework doesn't like to see any error remnants, +# so remove them. +if [info exists errorInfo] then { + unset errorInfo +} diff --git a/gcc/testsuite/gcc.c-torture/ChangeLog b/gcc/testsuite/gcc.c-torture/ChangeLog new file mode 100644 index 000000000000..0ee0fa70ed9a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/ChangeLog @@ -0,0 +1,659 @@ +Thu May 15 14:00:04 1997 Mike Meissner <meissner@cygnus.com> + + * execute/va-arg-3.c: If NO_VARARGS is defined, nop test. + + * execute/strct-varg-1.c: If NO_VARARGS is defined, use stdargs.h + interface. + +Fri Mar 21 16:34:52 1997 Michael Meissner <meissner@cygnus.com> + + * execute/920501-7.c (main,x): If NO_LABELS_VALUES is defined, + don't do test. + +Wed Mar 19 13:06:26 1997 Michael Meissner <meissner@cygnus.com> + + * execute/ieee/rbug.c (main): Don't do long long to double + conversion if double isn't at least 8 bytes. + + * execute/cvt-1.c: Make all functions use long, not int to work + with targets where int is 16 bits. + + * execute/920715-1.c (main): If double isn't at least 8 bytes, + just exit, since 4 byte doubles don't have enough bits of + precision for the test to complete. + +Fri Mar 14 17:51:02 1997 Michael Meissner <meissner@cygnus.com> + + * execute/920715-1.cexp (d10v-*-*): Expect to fail if d10v is not + compiled with the -mdouble64 flag. + * execute/ieee/rbug.cexp (d10v-*-*): Ditto. + + * execute/cvt-1.cexp (d10v-*-*): Expect to fail if d10v is not + compiled with the -mint32 flag. + +Wed Mar 12 01:23:08 1997 Torbjorn Granlund <tege@pdc.kth.se> + + * execute/961213-1.c: New test (from hjl@lucon.org). + + * execute/complex-5.c: New test (from moshier@world.std.com). + + * execute/970217-1.c: New test (from eggert@twinsun.com). + + * execute/970214-[12].c: New tests (from eggert@twinsun.com). + + * compile/970214-1.c: New test (from wilson@cygnus.com). + + * execute/ieee/930529-1.c: Also handle arm's unusual byte/word + ordering (from amylaar@cygnus.com). + + * execute/index-1.c: Make large vars and values `long' + (from law@cygnus.com). + + * execute/941014-2.c: Declare malloc. + + * compile/970206-1.c: New test (from dje@cygnus.com). + + * execute/960521-1.c: Rewrite to take STACK_SIZE into account + (from amylaar@cygnus.co.uk). + + * execute/961223-1.c: New test (from wilson@cygnus.com). + + * compile/961203-1.c: New test (from amylaar@cygnus.co.uk). + + * compile/961126-1.c: New test (from wilson@cygnus.com). + + * execute/961125-1.c: New test (from meyering@asic.sc.ti.com). + + * execute/961122-2.c: New test (from + schwab@issan.informatik.uni-dortmund.de). + + * execute/961122-1.c: New test (from Philippe De Muyter). + + * execute/loop-2[ef].c: Default MAP_FIXED to 0 (from + amylaar@cygnus.co.uk). + + Changes from meissner@cygnus.com: + * execute/920501-9.c (print_longlong): Print pieces as a long, not int. + * execute/950915-1.c: (a,b): Make types long to prevent implicit + overflow on 16-bit systems. + * execute/dbra-1.c: Pass long values to functions expecting + long values. + * execute/950607-2.c: (Point): Make field type long, since 23250 - + (-23250) is larger than 16 bits. + * execute/960416-1.c: Make st type unsigned long, not unsigned int. + * execute/bf-sign-2.c: Make bitfields whose size is > 16 bits + long, not int for 16-bit hosts. + * execute/961017-2.c: Make z unsigned long, not unsigned int. + + * execute/cmpsi-1.c: Rewrite not to depend on type sizes. + + * execute/960909-1.c (ffs): New function (from law@cygnus.com). + + * execute/fp-cmp-1.c: Add test for SIGNAL_SUPPRESS around signal call. + Move to execute/ieee. + + * execute/970312-1.c: New test. + * execute/cvt-1.c: New test. + +Thu Feb 13 13:52:23 1997 Michael Meissner <meissner@cygnus.com> + + * compile/920301-1.c: If NO_LABEL_VALUES is defined, nop test + using labels as values extension. + * compile/920415-1.c: Ditto. + * compile/920428-3.c: Ditto. + * compile/920501-1.c: Ditto. + * compile/920501-7.c: Ditto. + * compile/941014-4.c: Ditto. + * compile/950613-1.c: Ditto. + * compile/labels-1.c: Ditto. + * execute/920302-1.c: Ditto. + * execute/920415-1.c: Ditto. + * execute/920428-2.c: Ditto. + * execute/920501-3.c: Ditto. + * execute/920501-4.c: Ditto. + * execute/920501-5.c: Ditto. + * execute/920721-4.c: Ditto. + * execute/comp-goto-1.c: Ditto. + + * compile/930506-2.c: If NO_TRAMPOLINES is defined, nop the test. + * execute/921215-1.c: Ditto. + * execute/931002-1.c: Ditto. + * execute/nestfunc-1.c: Ditto. + +Wed Jan 22 00:04:53 1997 Torbjorn Granlund <tege@quiet.matematik.su.se> + + * execute/961017-1.c: Add missing exit (0). + +Fri Dec 6 19:38:57 1996 Torbjorn Granlund <tege@quiet.matematik.su.se> + + * execute/961206-1.c: New test. + +Wed Nov 13 17:13:05 1996 Torbjorn Granlund <tege@quiet.matematik.su.se> + + * execute/loop-2[ef].c: Misc portability changes + (from amylaar@cygnus.co.uk). + +Tue Nov 12 15:00:42 1996 Torbjorn Granlund <tege@quiet.matematik.su.se> + + * execute/961112-1.c: New test (based on a test by wilson@cygnus.com). + + * execute/ieee/DESC: New file. + + * execute/{loop-2[bcdef].c,loop-3[bc].c}: + New tests (from amylaar@cygnus.co.uk). + + * execute/ieee/nan.c: Delete test. + + * execute/fp-cmp-1.c: Disable for Cray and VAX. + + * execute/960416-1.c: Make it work for big-endian machines (from + amylaar@cygnus.co.uk). + +Mon Nov 11 18:00:35 1996 Torbjorn Granlund <tege@quiet.matematik.su.se> + + * execute/960830-1.c: Make it work for non-x86 machines. + + * execute/961017-2.c: Call exit(0). + +Fri Nov 8 19:19:17 1996 Torbjorn Granlund <tege@quiet.matematik.su.se> + + * execute/960311-3.c: #include <stdio.h>. + * execute/920501-8.c: Likewise. + * execute/920501-9.c: Likewise. + * execute/941014-2.c: Likewise. + * execute/960311-1.c: Likewise. + * execute/960311-2.c: Likewise. + + * execute/961017-[12].c: New test (from wilson@cygnus.com). + * compile/961031-1.c: New test (from wilson@cygnus.com). + * compile/961019-1.c: New test (from wilson@cygnus.com). + * utils/ctest.c: Print and pass (to run_a_test) all arguments. + * execute/{920711-1.c,920810-1.c,920922-1.c,930603-3.c,931018-1.c} + * execute/{941025-1.c,950221-1.c,950426-2.c,960209-1.c,960321-1.c} + * execute/{960327-1.c,arith-rand.c,bf-pack-1.c,cbrt.c,divconst-2.c} + * execute/memcpy-1.c: 16-bit changes (from law@cygnus.com). + + * compile/960514-1.c: New test (from rwilhelm@physik.tu-muenchen.de). + + * execute/960512-1.c: New test (from amylaar@meolyon.hanse.de). + + * execute/960513-1.c: New test (from amylaar@meolyon.hanse.de). + + * execute/960405-1.c: New test (from moshier@world.std.com). + +Fri Nov 1 13:06:28 1996 Torbjorn Granlund <tege@quiet.matematik.su.se> + + * execute/dbra-1.c: New test. + +Mon Oct 28 02:31:10 1996 Torbjorn Granlund <tege@quiet.matematik.su.se> + + * execute/961026-1.c: New test (from rankin@eql.caltech.edu). + + * execute/enum-1.c: New test (from law@cygnus.com). + +Tue Oct 22 22:13:12 1996 Torbjorn Granlund <tege@quiet.matematik.su.se> + + * execute/960801-1.c: Generalize. + +Fri Oct 18 04:14:01 1996 Torbjorn Granlund <tege@quiet.matematik.su.se> + + * utils/ctest.c (run_a_test): Don't call `fatal' when the compiler + returns non-zero, but there is no error message from the compiler. + +Wed Oct 16 01:39:57 1996 Torbjorn Granlund <tege@quiet.matematik.su.se> + + * execute/arith-rand.c (main): Decrease the number of iteration to + 1000. + +Fri Oct 11 16:40:44 1996 Torbjorn Granlund <tege@quiet.matematik.su.se> + + * compile/961010-1.c: New test (from ian@cygnus.com). + +Fri Oct 4 18:29:00 1996 Torbjorn Granlund <tege@quiet.matematik.su.se> + + * execute/961004-1.c: New test (from wilson@cygnus.com). + + * compile/961004-1.c: New test (from amylaar@cygnus.co.uk). + +Thu Oct 3 02:51:24 1996 Torbjorn Granlund <tege@quiet.matematik.su.se> + + * execute/fp-cmp-1.c: Move signal handler setup to after == and != + compares. + +Wed Oct 2 04:53:54 1996 Torbjorn Granlund <tege@quiet.matematik.su.se> + + * execute/fp-cmp-1.c: New test. + +Mon Sep 30 01:11:06 1996 Torbjorn Granlund <tege@quiet.matematik.su.se> + + * compile/960620-1.c: Delete test. + +Fri Sep 13 12:12:30 1996 Ian Lance Taylor <ian@cygnus.com> + + * execute/ieee/920810-1.c: Include <stdio.h>. + +Mon Sep 9 18:56:33 1996 Torbjorn Granlund <tege@quiet.matematik.su.se> + + * execute/960909-1.c: New test. + +Fri Aug 30 06:31:25 1996 Torbjorn Granlund <tege@quiet.tmg.se> + + * execute/960830-1.c: New test. + +Thu Aug 29 22:06:49 1996 Torbjorn Granlund <tege@quiet.tmg.se> + + * compile/960829-1.c: New test. + +Tue Aug 13 19:23:06 1996 Torbjorn Granlund <tege@noisy.tmg.se> + + * utils/ctest.c (run_a_test): Call wait repeatedly until + we get back the right pid. + +Sat Aug 3 16:36:43 1996 Torbjorn Granlund <tege@noisy.tmg.se> + + * execute/960416-1.c: New test (from amylaar@meolyon.hanse.de). + + * execute/960419-[12].c: New tests (from jtc@cygnus.com). + + * execute/960416-1.c: New test (from amylaar@meolyon.hanse.de). + + * execute/920721-1.c: Make it work for 16-bit systems + (from law@cygnus.com). + * execute/920728-1.c: Likewise. + + * compile/960201-1.c: New test (from eggert@twinsun.com). + * compile/960130-1.c: New test (from eggert@twinsun.com). + +Sat Aug 3 16:10:20 1996 Andrew Cagney <cagney@highland.com.au> + + * utils/ctest.c (run_a_test): Flush output before first fork to + avoid later duplication. + + * utils/ctest.c (run_a_test): If really verbose, and a run command + was specified (-run), print the command to be executed out. + * (run_a_test): For the -run option, accept an argument list. + + * utils/ctest.c (main): Change verbose flag so it increments the + verbosity instead of just setting it. Backward compatible hack + that allows multiple levels of tracing. Perhaphs a separate flag + would be better. + (main): If really verbose, print the GCC command that is to be executed. + (run_a_test): If really verbose, print the output from compiler + and allow the output from the run to be displayed. + + * utils/ctest.c (main): New option -postopts added. This allows + the user to specify arguments that should be appended to the GCC + command (in addition to the -options flag that specfies arguments + that are to be prepended). + (usage): Adjust. + +Sat Aug 3 16:10:20 1996 Torbjorn Granlund <tege@noisy.tmg.se> + + From Mike Meissner: + * utils/ctest.c: Sort test files by calling `ls -r'. + * utils/ctest.c: Flush stdout after each printf. + * utils/ctest.c: When `-run', up timeout to 1000. Allow + explicit setting of timeout through new -cc-timeout option. + +Fri Aug 2 19:53:27 1996 Torbjorn Granlund <tege@noisy.tmg.se> + + * execute/960521-1.c: New test + (from eggert@twinsun.com and Andreas Schwab). + + * compile/960620-1.c: New test (from rwilhelm@physik.tu-muenchen.de). + + * compile/960704-1.c: New test (from wilson@cygnus.com). + + * execute/bf-sign-2.c: New test (from gavin@nando.net). + + * execute/960802-1.c: New test (from law@cygnus.com). + + * execute/960801-1.c: New test (from dje@cygnus.com). + +Sun Jun 9 17:35:56 1996 Torbjorn Granlund <tege@noisy.tmg.se> + + * execute/960608-1.c: New test (from law@cygnus.com). + +Tue Apr 2 23:18:51 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> + + * execute/900409-1.c: Change types from int to long + (from law@cygnus.com). + + * execute/960402-1.c: New test. + +Fri Mar 29 23:40:01 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> + + * execute/960327-1.c: New test (from law@cygnus.com). + +Tue Mar 26 22:57:34 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> + + * execute/960326-1.c: New test (from wilson@cygnus.com). + * execute/960321-1.c: New test (from law@cygnus.com). + * compile/960319-1.c: New test (from amylaar@meolyon.hanse.de). + * execute/960317-1.c: New test (from amylaar@meolyon.hanse.de). + * execute/960312-1.c: New test (from amylaar@meolyon.hanse.de). + * execute/960311-[123].c: New tests (from dje@cygnus.com). + * execute/960302-1.c: New test (from law@cygnus.com). + * execute/960215-1.c: New test (from moshier@world.std.com). + +Fri Mar 1 06:01:58 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> + + * execute/regstack-1.c: New test (from moshier@world.std.com). + * execute/960301-1.c: New test (from rankin@eql.caltech.edu). + * execute/struct-ini-4.c: New test (from wilson@cygnus.com). + +Sun Feb 25 01:10:12 1996 Paul Eggert <eggert@twinsun.com> + + * special/doit (960224-1, 960224-2): New tests. + +Wed Feb 21 07:18:19 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> + + * compile/960221-1.c: New test (from law@cygnus.com). + * compile/960220-1.c: New test. + +Mon Feb 19 03:14:18 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> + + * execute/960219-1.c: New test. + * compile/960218-1.c: New test (from eggert@twinsun.com). + +Sun Feb 18 04:01:54 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> + + * execute/960218-1.c: New test. + +Sat Feb 10 03:07:04 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> + + * execute/960209-1.c: New test (from law@cygnus.com). + +Wed Jan 24 23:23:05 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> + + * execute/960117-1.c: New test (from dje@cygnus.com). + * execute/960116-1.c: New test (from Philippe De Muyter). + +Mon Jan 22 23:46:17 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> + + * noncompile/930714-1.c: Moved from compile. + +Mon Jan 22 19:08:04 1996 Paul Eggert <eggert@twinsun.com> + + * special/doit (920717-1): Make sure `not found' message is ignored + when invoking cc. + +Tue Jan 16 14:24:36 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> + + * noncompile/951227-1.c: New test (from eggert). + * special/doit (951130-1): New test (from eggert). + * noncompile/951025-1.c: New test. + +Thu Jan 11 09:36:49 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> + + * execute/widechar-1.c: New test (from eggert). + +Tue Jan 9 12:44:21 1996 Torbjorn Granlund <tege@noisy.matematik.su.se> + + * compile/960106-1.c: New test. + +Mon Dec 25 19:21:08 1995 Torbjorn Granlund <tege@noisy.matematik.su.se> + + * compile/951222-1.c: New test (from kenner). + +Wed Dec 20 14:45:42 1995 Torbjorn Granlund <tege@noisy.tmg.se> + + * compile/951220-1.c: New test. + +Wed Dec 6 13:46:17 1995 Torbjorn Granlund <tege@noisy.tmg.se> + + From Alan Modra: + * utils/ctest.c (main): mktemp needs 6 X's on some systems. + +Mon Dec 4 21:39:39 1995 Torbjorn Granlund <tege@noisy.tmg.se> + + * compile/widechar-1.c: New test. + + * unsorted/{bugx.c,bugy.c,inline.c}: Delete huge/duplicate tests. + + * execute/951204-1.c: New test. + * compile/951128-1.c: New test. + +Mon Nov 27 00:16:37 1995 Torbjorn Granlund <tege@noisy.tmg.se> + + * execute/bf-layout-1.c: New test. + +Wed Nov 22 21:38:25 1995 Torbjorn Granlund <tege@noisy.tmg.se> + + * noncompile/951123-1.c: New test. + +Wed Nov 16 23:31:23 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> + + * compile/951116-1.c: New test. + +Wed Nov 15 20:34:03 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> + + * utils/ctest.c: New name for runtests.c (not to confuse it with + DejaGNU runtest). + + * utils/runtests.c (RLIMIT_CORE): Default to 4. + + * execute/951115-1.c: New test (PA delay slot filling bug). + +Tue Nov 14 00:27:10 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> + + * utils/runtests.c (run_a_test): Read from errmess pipe before + blocking on child process. Also, loop calling read(2) until pipe + is empty or 8000 chars are read. + (usage): New function. + (main): Call usage for -help. + +Sun Nov 7 17:15:12 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> + + * compile/951106-1.c: New test (MIPS3). + +Sun Nov 5 12:22:20 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> + + * utils/runtests.c (run_a_test): Don't print exit status for failing + noncompile test. + +Thu Oct 26 00:45:43 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> + + * utils/runtests.c (run_a_test): Save and restore filedesc for + stdout, so that failure in execve is reported properly. + From Arne Juul: + (run_a_test): To work around NetBSD bug, don't pass NULL as 2nd + execve argument. + +Wed Oct 25 16:13:46 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> + + * utils/runtests.c (main): Fix typo testing `execute_these_files'. + +Tue Oct 10 17:41:47 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> + + * execute/950714-1.c (main): Call exit(0). + + * compile/951004-1.c: New test. + +Tue Oct 3 22:59:13 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> + + * execute/950929-1.c: New test (from ian@cygnus.com). + + * execute/951003-1.c: New test (from dje@cygnus.com). + +Tue Sep 26 15:31:49 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> + + * execute/950714-1.c: New test (from wilson@cygnus.com). + + * execute/950706-1.c: New test (from rearnsha) + + * execute/ieee/{minuszero.c,rbug.c,nan.c}: New tests (from moshier). + + * execute/scope-2.c: New test (from rfg). + + * execute/bf-sign-1.c: New test (from jtc@cygnus.com). + + * noncompile/930927-1.c: Delete this duplicated test. + + * unsorted/gdb.c: Delete this test. + * */*.c: Delete whitespace at the end of lines. + + * execute/loop-3.c: New test (from amylaar@meolyon.hanse.de). + +Mon Sep 25 14:08:32 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> + + * Make file permissions be regular. + + * utils/runtests.c (main): Combine `flag_execute' and + `execute_these_files' into the latter. + (run_a_test): Test only `execute_these_files'. + + * execute/920411-1.c: Generalize to work even for big-endian + 64-bit machines (from amylaar@meolyon.hanse.de). + +Sun Sep 24 16:26:03 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> + + * utils/runtests.c (set_watchdog): Actually use `seconds' parameter. + +Sat Sep 23 00:08:33 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> + + * compile/950922-1.c: New test. + +Thu Sep 21 12:25:40 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> + + * utils/runtests.c (environ): Declare. + (run_a_test): Pass environ to execve calls. + (main): Don't NULL-terminate `passes' array. + (main): Make ii loop's termination condition depend on n_passes. + (run_a_test): Check result from read; '\0'-terminate buf. + (main): Avoid d_namlen, use strlen of d_name instead (from meyering). + + * compile/950919-1.c: New test. + + * execute/conversion.c (test_longlong_integer_to_float): Modify + some tests conditionally for __HAVE_68881__. + + * execute/950915-1.c: New test. + + * utils/runtests.c: New file to run tests faster. + * {execute/compile/unsorted/noncompile}/DESC: New files. + + * compile/950921-1.c: New test (from Ian Taylor). + +Wed Sep 20 14:53:33 1995 Doug Evans <dje@canuck.cygnus.com> + + * execute/920501-7.c (STACK_SIZE): Check for and use to limit + depth of recursion. + +Mon Sep 18 23:43:28 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> + + * compile/gcc-failure/940409-1.c: Moved from compile. + + * execute/920411-1.c: Moved from execute/gcc_failure. + * execute/gcc_failure/920627-2.c: Delete spurious test. + + * utils/runtests.c: New program. + +Tue Sep 12 22:05:15 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> + + * execute/divconst-3.c: New test. + +Mon Sep 11 12:48:04 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> + + * compat/struct-ret-1.c: Add prototype for f. + * compat/strct-layout.c: Conditionalize main. + +Sun Sep 10 20:47:34 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> + + * execute/strct-pack-5.c: Delete, test is useless because of + lack of 68k structure packing. + +Thu Sep 7 13:07:40 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> + + * execute/{930628-1.c,941202-1.c,arith-1.c,gofast.c,struct-ret-1.c, + va-arg-4.c}: Call exit(0), don't do return 0. + +Tue Sep 5 15:23:14 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> + + * compat/strct-layout.c (main): Add missing call to exit. + +Tue Sep 5 15:23:14 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> + + 1.35 Released. + + * noncompile/doit (case $arg): Fix typo. + + * execute/compndlit-1.c: New test. + * execute/loop-2.c: New test. + * execute/950809-1.c: New test. + * execute/va-arg-5.c: New test. + * execute/va-arg-6.c: New test. + * execute/ptr-arith-1.c: New test. + * execute/cmpsi-1.c: New test. + + * compile/cmpdi-1.c: New test. + * compile/950719-1.c: New test. + * compile/950729-1.c: New test. + * compile/950816-[123].c: New test. + * compile/: New test. + * compile/: New test. + * compile/: New test. + * compile/: New test. + +Fri Sep 5 09:30:32 1995 Michael Meissner <meissner@tiktok.cygnus.com> + + * */doit: Add -run <cmd> option to allow the use of a simulator to + run commands in the execute subdirectory. Accept the switch in + the other doit commands. + +Tue Jul 11 01:02:21 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> + + * execute/950710-1.c: New test (from meyering). + +Wed Jul 5 16:03:45 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> + + * compile/950618-1.c: New test. + * execute/scope-1.c: New test. + * execute/950621-1.c: New test. + * execute/950704-1.c: New test. + * execute/950628-1.c: New test. + +Wed Jun 14 15:20:44 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> + + * execute/950612-1.c: New test. + * execute/cmpdi-1.c: New test. + * execute/tstdi-1.c: New test. + * compile/950613-1.c: New test. + * compile/950530-1.c: New test. + * compile/950610-1.c: New test. + * compile/950612-1.c: New test. + + * execute/strct-pack-5.c: Clean up, use defined type s2_t. + * execute/strct-pack-4.c: Clean up. + +Sat Jun 10 12:37:22 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> + + * execute/cbrt.c: Disable for vax. + +Fri Jun 9 21:49:58 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> + + * execute/940115-1.c: Cast parameters to char *. + +Thu Jun 8 00:33:51 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> + + * compile/950607-1.c: New test. + * execute/cbrt.c: New test. + * execute/950607-[12].c: New tests. + * execute/memcpy-1.c: Try more cases. + * execute/struct-ret-2.c: New test. + * execute/complex-4.c: New test. + +Wed Jun 7 12:40:05 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> + + * execute/950601.c: Delete this messy and redundant test. + + * compile/funcptr-1.c: Clean up. + + * execute/950512-1.c (main): Call f1 and f2 with 0 too. + (f2): Use type `long long', not `long'. + + * execute/950605-1.c: New test. + +Wed Jun 1 01:57:45 1995 Torbjorn Granlund <tege@bozo.matematik.su.se> + + * execute/divconst-[12].c: New tests. diff --git a/gcc/testsuite/gcc.c-torture/code_quality/920608-1.c b/gcc/testsuite/gcc.c-torture/code_quality/920608-1.c new file mode 100644 index 000000000000..cae1978e6c01 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/code_quality/920608-1.c @@ -0,0 +1,25 @@ +foo (p) + int *p; +{ + int x; + int a; + + a = p[0]; + x = a + 5; + a = -1; + p[0] = x - 5; + return a; +} + +bar (p) +{ + short x; + int a; + + x = ((short *) p)[1]; +#if INHIBIT_COMBINE + ((short *) p)[0] = x; +#endif + + return (x < 45); +} diff --git a/gcc/testsuite/gcc.c-torture/code_quality/Makefile.in b/gcc/testsuite/gcc.c-torture/code_quality/Makefile.in new file mode 100644 index 000000000000..e6209dbc6c2d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/code_quality/Makefile.in @@ -0,0 +1,12 @@ +#### host, target, and site specific Makefile frags come in here. + +srcdir = . + +# Nothing to do... +all: + +clean: + -rm -f *.o *.diff *~ *.bad core *.x + +distclean: clean + -rm -f Makefile config.status diff --git a/gcc/testsuite/gcc.c-torture/code_quality/code_quality.exp b/gcc/testsuite/gcc.c-torture/code_quality/code_quality.exp new file mode 100644 index 000000000000..b8b72ea1bcb0 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/code_quality/code_quality.exp @@ -0,0 +1,55 @@ +# +# Expect driver script for GCC Regression Tests +# Copyright (C) 1993, 1997 Free Software Foundation +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# Written by Jeffrey Wheat (cassidy@cygnus.com) +# + +# +# These tests come from Torbjorn Granlund's (tege@cygnus.com) +# C torture test suite, and other contributors. +# + +if $tracelevel then { + strace $tracelevel +} + +# load support procs +load_lib c-torture.exp + +# +# This loop will run c-torture on any *.c file found in this directory. +# If a *.c has a corresponding *.exp file, then the test is skipped as +# as the *.exp will drive the test itself. I did things this way so that +# generic tests did not need a seperate .exp for it. Only the tests that +# required unique options would need it's own .exp file. +# + +foreach testcase [glob -nocomplain $srcdir/$subdir/*.c] { + if [file exists [file rootname $testcase].exp] then { + verbose "INFO:\"[file rootname $testcase].exp\" exists, skipping test" 3 + continue + } + + # If we're only testing specific files and this isn't one of them, skip it. + if ![runtest_file_p $runtests $testcase] then { + continue + } + + c-torture $testcase +} + diff --git a/gcc/testsuite/gcc.c-torture/code_quality/configure.in b/gcc/testsuite/gcc.c-torture/code_quality/configure.in new file mode 100644 index 000000000000..0fb5342a5d69 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/code_quality/configure.in @@ -0,0 +1,15 @@ +# This file is a shell script fragment that supplies the information +# necessary to tailor a template configure script into the configure +# script appropriate for this directory. For more information, check +# any existing configure script. + +srctrigger=code_quality.exp +srcname="DejaGnu" + +# per-host: + +# per-target: + +target_makefile_frag=../config/mt-${target_alias} + +# post-target: diff --git a/gcc/testsuite/gcc.c-torture/compat/Makefile.in b/gcc/testsuite/gcc.c-torture/compat/Makefile.in new file mode 100644 index 000000000000..e6209dbc6c2d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compat/Makefile.in @@ -0,0 +1,12 @@ +#### host, target, and site specific Makefile frags come in here. + +srcdir = . + +# Nothing to do... +all: + +clean: + -rm -f *.o *.diff *~ *.bad core *.x + +distclean: clean + -rm -f Makefile config.status diff --git a/gcc/testsuite/gcc.c-torture/compat/configure.in b/gcc/testsuite/gcc.c-torture/compat/configure.in new file mode 100644 index 000000000000..a4a5810eb963 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compat/configure.in @@ -0,0 +1,15 @@ +# This file is a shell script fragment that supplies the information +# necessary to tailor a template configure script into the configure +# script appropriate for this directory. For more information, check +# any existing configure script. + +srctrigger=struct-big.c +srcname="DejaGnu" + +# per-host: + +# per-target: + +target_makefile_frag=../config/mt-${target_alias} + +# post-target: diff --git a/gcc/testsuite/gcc.c-torture/compat/strct-layout.c b/gcc/testsuite/gcc.c-torture/compat/strct-layout.c new file mode 100644 index 000000000000..b77e1636dd2d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compat/strct-layout.c @@ -0,0 +1,69 @@ +typedef struct +{ + char a; + int b; + char c; + short d; + double e; + char f; +} T; + +#if COMPILER != 1 +f (T *x) +{ + x[0].a = 'a'; + x[0].b = 47114711; + x[0].c = 'c'; + x[0].d = 1234; + x[0].e = 3.141592897932; + x[0].f = '*'; + + x[1].a = 'A'; + x[1].b = 71417141; + x[1].c = 'C'; + x[1].d = 4321; + x[1].e = 2.718281828459; + x[1].f = '?'; +} +#endif + +#if COMPILER != 2 +g (T *x) +{ + if (x[0].a != 'a') + abort (); + if (x[0].b != 47114711) + abort (); + if (x[0].c != 'c') + abort (); + if (x[0].d != 1234) + abort (); + if (x[0].e != 3.141592897932) + abort (); + if (x[0].f != '*') + abort (); + + if (x[1].a != 'A') + abort (); + if (x[1].b != 71417141) + abort (); + if (x[1].c != 'C') + abort (); + if (x[1].d != 4321) + abort (); + if (x[1].e != 2.718281828459) + abort (); + if (x[1].f != '?') + abort (); +} +#endif + +#if COMPILER != 2 +main () +{ + T x[2]; + f (x); + g (x); + exit (0); +} +#endif diff --git a/gcc/testsuite/gcc.c-torture/compat/struct-align.c b/gcc/testsuite/gcc.c-torture/compat/struct-align.c new file mode 100644 index 000000000000..69fe6b335ca0 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compat/struct-align.c @@ -0,0 +1,52 @@ +typedef union +{ + struct {int a; int b;} s; + double d; +} T; + +int h (T *); +T g (T); + +#if COMPILER != 1 +h (T *x) +{ + if (x->s.a != 0 || x->s.b != 1) + abort (); +} +#endif + +#if COMPILER != 2 +T +g (T x) +{ + if (x.s.a != 13 || x.s.b != 47) + abort (); + x.s.a = 0; + x.s.b = 1; + h (&x); + return x; +} +#endif + +#if COMPILER != 1 +f () +{ + T x; + x.s.a = 13; + x.s.b = 47; + g (x); + if (x.s.a != 13 || x.s.b != 47) + abort (); + x = g (x); + if (x.s.a != 0 || x.s.b != 1) + abort (); +} +#endif + +#if COMPILER != 2 +main () +{ + f (); + exit (0); +} +#endif diff --git a/gcc/testsuite/gcc.c-torture/compat/struct-big.c b/gcc/testsuite/gcc.c-torture/compat/struct-big.c new file mode 100644 index 000000000000..e1d5c6a6b37e --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compat/struct-big.c @@ -0,0 +1,54 @@ +typedef struct {int a, b, c, d, e;} T; + +int h (T *); +T g (T); + +#if COMPILER != 1 +h (T *x) +{ + if (x->a != 0 || x->b != 1 || x->c != 2 || x->d != 3 || x->e != 4) + abort (); +} +#endif + +#if COMPILER != 2 +T +g (T x) +{ + if (x.a != 13 || x.b != 47 || x.c != 123456 || x.d != -4711 || x.e != -2) + abort (); + x.a = 0; + x.b = 1; + x.c = 2; + x.d = 3; + x.e = 4; + h (&x); + return x; +} +#endif + +#if COMPILER != 1 +f () +{ + T x; + x.a = 13; + x.b = 47; + x.c = 123456; + x.d = -4711; + x.e = -2; + g (x); + if (x.a != 13 || x.b != 47 || x.c != 123456 || x.d != -4711 || x.e != -2) + abort (); + x = g (x); + if (x.a != 0 || x.b != 1 || x.c != 2 || x.d != 3 || x.e != 4) + abort (); +} +#endif + +#if COMPILER != 2 +main () +{ + f (); + exit (0); +} +#endif diff --git a/gcc/testsuite/gcc.c-torture/compat/struct-i.c b/gcc/testsuite/gcc.c-torture/compat/struct-i.c new file mode 100644 index 000000000000..25cbee6071e7 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compat/struct-i.c @@ -0,0 +1,46 @@ +typedef struct {int a;} T; + +int h (T *); +T g (T); + +#if COMPILER != 1 +h (T *x) +{ + if (x->a != 47114711) + abort (); +} +#endif + +#if COMPILER != 2 +T +g (T x) +{ + if (x.a != 13) + abort (); + x.a = 47114711; + h (&x); + return x; +} +#endif + +#if COMPILER != 1 +f () +{ + T x; + x.a = 13; + g (x); + if (x.a != 13) + abort (); + x = g (x); + if (x.a != 47114711) + abort (); +} +#endif + +#if COMPILER != 2 +main () +{ + f (); + exit (0); +} +#endif diff --git a/gcc/testsuite/gcc.c-torture/compat/struct-ic.c b/gcc/testsuite/gcc.c-torture/compat/struct-ic.c new file mode 100644 index 000000000000..7c5fa79e142f --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compat/struct-ic.c @@ -0,0 +1,48 @@ +typedef struct {int a; char b;} T; + +int h (T *); +T g (T); + +#if COMPILER != 1 +h (T *x) +{ + if (x->a != 0 || x->b != 1) + abort (); +} +#endif + +#if COMPILER != 2 +T +g (T x) +{ + if (x.a != 13 || x.b != 47) + abort (); + x.a = 0; + x.b = 1; + h (&x); + return x; +} +#endif + +#if COMPILER != 1 +f () +{ + T x; + x.a = 13; + x.b = 47; + g (x); + if (x.a != 13 || x.b != 47) + abort (); + x = g (x); + if (x.a != 0 || x.b != 1) + abort (); +} +#endif + +#if COMPILER != 2 +main () +{ + f (); + exit (0); +} +#endif diff --git a/gcc/testsuite/gcc.c-torture/compat/struct-ii.c b/gcc/testsuite/gcc.c-torture/compat/struct-ii.c new file mode 100644 index 000000000000..11ebc37edbd1 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compat/struct-ii.c @@ -0,0 +1,48 @@ +typedef struct {int a, b;} T; + +int h (T *); +T g (T); + +#if COMPILER != 1 +h (T *x) +{ + if (x->a != 0 || x->b != 1) + abort (); +} +#endif + +#if COMPILER != 2 +T +g (T x) +{ + if (x.a != 13 || x.b != 47) + abort (); + x.a = 0; + x.b = 1; + h (&x); + return x; +} +#endif + +#if COMPILER != 1 +f () +{ + T x; + x.a = 13; + x.b = 47; + g (x); + if (x.a != 13 || x.b != 47) + abort (); + x = g (x); + if (x.a != 0 || x.b != 1) + abort (); +} +#endif + +#if COMPILER != 2 +main () +{ + f (); + exit (0); +} +#endif diff --git a/gcc/testsuite/gcc.c-torture/compat/struct-ret-1.c b/gcc/testsuite/gcc.c-torture/compat/struct-ret-1.c new file mode 100644 index 000000000000..a585c8fdb400 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compat/struct-ret-1.c @@ -0,0 +1,25 @@ +typedef struct { int re; int im; } T; + +T f (int, int); + +#if COMPILER != 1 +T +f (int arg1, int arg2) +{ + T x; + x.re = arg1; + x.im = arg2; + return x; +} +#endif + +#if COMPILER != 2 +main () +{ + T result; + result = f (3, 4); + if (result.re != 3 || result.im != 4) + abort (); + exit (0); +} +#endif diff --git a/gcc/testsuite/gcc.c-torture/compile/900116-1.c b/gcc/testsuite/gcc.c-torture/compile/900116-1.c new file mode 100644 index 000000000000..37c7eb789b9c --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/900116-1.c @@ -0,0 +1,14 @@ +struct st {char a, b, c, d; } + +zloop (struct st *s, int *p, int *q) +{ + int i; + struct st ss; + + for (i = 0; i < 100; i++) + { + ss = s[i]; + p[i] = ss.c; + q[i] = ss.b; + } +} diff --git a/gcc/testsuite/gcc.c-torture/compile/900216-1.c b/gcc/testsuite/gcc.c-torture/compile/900216-1.c new file mode 100644 index 000000000000..8a4bfb74e783 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/900216-1.c @@ -0,0 +1,9 @@ +foo (p, a, b) + unsigned short *p; +{ + unsigned int x; + + x = p[0]; + + return (x == 134U); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/900313-1.c b/gcc/testsuite/gcc.c-torture/compile/900313-1.c new file mode 100644 index 000000000000..f2bc40d72429 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/900313-1.c @@ -0,0 +1,172 @@ +main () +{ + char *a; + foo (alloca (10000)); + foo (alloca (100000)); + foo (alloca ((int) &main)); +} + +many_par (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) +{ + char *x; + int aa, ba, ca, da, ea, fa, ga, ha, ia, ja, ka, la, ma, na, oa, pa; + + aa = bar (); + ba = bar (); + ca = bar (); + da = bar (); + ea = bar (); + fa = bar (); + ga = bar (); + ha = bar (); + ia = bar (); + ja = bar (); + ka = bar (); + la = bar (); + ma = bar (); + na = bar (); + oa = bar (); + pa = bar (); + foobar (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, aa, ba, ca, + da, ea, fa, ga, ha, ia, ja, ka, la, ma, na, oa, pa); + +} + +foobar (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, aa, ba, ca, + da, ea, fa, ga, ha, ia, ja, ka, la, ma, na, oa, pa) +{ + int ab, bb, cb, db, eb, fb, gb, hb, ib, jb, kb, lb, mb, nb, ob, pb; + int qb, rb, sb, tb, ub, vb, xb, yb; + + ab = bar (); + bb = bar (); + cb = bar (); + db = bar (); + eb = bar (); + fb = bar (); + gb = bar (); + hb = bar (); + ib = bar (); + jb = bar (); + kb = bar (); + lb = bar (); + mb = bar (); + nb = bar (); + ob = bar (); + pb = bar (); + qb = bar (); + rb = bar (); + sb = bar (); + tb = bar (); + ub = bar (); + vb = bar (); + xb = bar (); + yb = bar (); + + boofar (a); + boofar (b); + boofar (c); + boofar (d); + boofar (e); + boofar (f); + boofar (g); + boofar (h); + boofar (i); + boofar (j); + boofar (k); + boofar (l); + boofar (m); + boofar (n); + boofar (o); + boofar (p); + boofar (aa); + boofar (ba); + boofar (ca); + boofar (da); + boofar (ea); + boofar (fa); + boofar (ga); + boofar (ha); + boofar (ia); + boofar (ja); + boofar (ka); + boofar (la); + boofar (ma); + boofar (na); + boofar (oa); + boofar (pa); + + boofar (ab); + boofar (bb); + boofar (cb); + boofar (db); + boofar (eb); + boofar (fb); + boofar (gb); + boofar (hb); + boofar (ib); + boofar (jb); + boofar (kb); + boofar (lb); + boofar (mb); + boofar (nb); + boofar (ob); + boofar (pb); + + boofar (a); + boofar (b); + boofar (c); + boofar (d); + boofar (e); + boofar (f); + boofar (g); + boofar (h); + boofar (i); + boofar (j); + boofar (k); + boofar (l); + boofar (m); + boofar (n); + boofar (o); + boofar (p); + boofar (aa); + boofar (ba); + boofar (ca); + boofar (da); + boofar (ea); + boofar (fa); + boofar (ga); + boofar (ha); + boofar (ia); + boofar (ja); + boofar (ka); + boofar (la); + boofar (ma); + boofar (na); + boofar (oa); + boofar (pa); + + boofar (ab); + boofar (bb); + boofar (cb); + boofar (db); + boofar (eb); + boofar (fb); + boofar (gb); + boofar (hb); + boofar (ib); + boofar (jb); + boofar (kb); + boofar (lb); + boofar (mb); + boofar (nb); + boofar (ob); + boofar (pb); + +} + +test_exit_ignore_stack () +{ + foobar (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/900407-1.c b/gcc/testsuite/gcc.c-torture/compile/900407-1.c new file mode 100644 index 000000000000..fdf47791cd74 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/900407-1.c @@ -0,0 +1,10 @@ +foo (a, b, p) + int *p; +{ + int c; + p[1] = a + 0x1000; + c = b + 0xffff0000; + if ((b + 0xffff0000) == 0) + c++; + p[2] = c; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/900516-1.c b/gcc/testsuite/gcc.c-torture/compile/900516-1.c new file mode 100644 index 000000000000..69e961447452 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/900516-1.c @@ -0,0 +1 @@ +f(c){return!(c?2.0:1.0);} diff --git a/gcc/testsuite/gcc.c-torture/compile/920301-1.c b/gcc/testsuite/gcc.c-torture/compile/920301-1.c new file mode 100644 index 000000000000..c4d663eb8a7a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920301-1.c @@ -0,0 +1,4 @@ +#ifndef NO_LABEL_VALUES +f(){static void*t[]={&&x};x:;} +#endif +g(){static unsigned p[5];} diff --git a/gcc/testsuite/gcc.c-torture/compile/920409-1.c b/gcc/testsuite/gcc.c-torture/compile/920409-1.c new file mode 100644 index 000000000000..b96ec53d5951 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920409-1.c @@ -0,0 +1 @@ +x(){int y;y>0.0?y:y-1;} diff --git a/gcc/testsuite/gcc.c-torture/compile/920409-2.c b/gcc/testsuite/gcc.c-torture/compile/920409-2.c new file mode 100644 index 000000000000..ef2bdb8b7e7a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920409-2.c @@ -0,0 +1,2 @@ +double x(){int x1,x2;double v; +if(((long)(x1-x2))<1)return -1.0;v=t(v);v=y(1,v>0.0?(int)v:((int)v-1));} diff --git a/gcc/testsuite/gcc.c-torture/compile/920410-1.c b/gcc/testsuite/gcc.c-torture/compile/920410-1.c new file mode 100644 index 000000000000..4bfa7a665a3a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920410-1.c @@ -0,0 +1,30 @@ +int alloc_float(f) + float f; +{ union + { + float f; + int i; + } + u; + u.f=f; + return u.i&~1; +} + +float c_float(int obj) +{ union + { + float f; + int i; + } u; + + u.i=obj; + return u.f; +} + +main() +{ int x=alloc_float(1.2); + int y=alloc_float(5.7); + int z=alloc_float(c_float(x)*c_float(y)); + + printf("%g\n",(double)c_float(z)); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/920410-2.c b/gcc/testsuite/gcc.c-torture/compile/920410-2.c new file mode 100644 index 000000000000..958aae9cb0f2 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920410-2.c @@ -0,0 +1,12 @@ +joe() +{ + int j; + + while( 1 ) + { + for( j = 0; j < 4; j++ ) + ; + for( j = 0; j < 4; j++ ) + ; + } +} diff --git a/gcc/testsuite/gcc.c-torture/compile/920411-2.c b/gcc/testsuite/gcc.c-torture/compile/920411-2.c new file mode 100644 index 000000000000..0cc13c8436a3 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920411-2.c @@ -0,0 +1 @@ +x(){int n;double x;n=x<1?n:n+1;} diff --git a/gcc/testsuite/gcc.c-torture/compile/920413-1.c b/gcc/testsuite/gcc.c-torture/compile/920413-1.c new file mode 100644 index 000000000000..45b5fc5d09cb --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920413-1.c @@ -0,0 +1,2 @@ +union u {double d;long long ll;}; +f(double x, int n){union u v;v.d=x;if(n>=0){v.ll<<=63;}else{v.ll+=1<<-n;v.ll>>=-n;}return v.ll;} diff --git a/gcc/testsuite/gcc.c-torture/compile/920415-1.c b/gcc/testsuite/gcc.c-torture/compile/920415-1.c new file mode 100644 index 000000000000..8d9bc0653493 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920415-1.c @@ -0,0 +1,17 @@ +#ifndef NO_LABEL_VALUES +f () +{ + __label__ l; + void *x() + { + return &&l; + } + goto *x (); + abort (); + return; + l: + exit (0); +} +#else +int x; +#endif diff --git a/gcc/testsuite/gcc.c-torture/compile/920428-1.c b/gcc/testsuite/gcc.c-torture/compile/920428-1.c new file mode 100644 index 000000000000..fdc478a382c8 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920428-1.c @@ -0,0 +1 @@ +x(){char*q;return(long)q>>8&0xff;} diff --git a/gcc/testsuite/gcc.c-torture/compile/920428-2.c b/gcc/testsuite/gcc.c-torture/compile/920428-2.c new file mode 100644 index 000000000000..23f32a83a9de --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920428-2.c @@ -0,0 +1,531 @@ +double sin(double x); +double cos(double x); +double tan(double x); +double asin(double x); +double acos(double x); +double atan(double x); +double atan2(double y, double x); +double sinh(double x); +double cosh(double x); +double tanh(double x); +double exp(double x); +double expm1(double x); +double log(double x); +double log10(double x); +double log1p(double x); +double pow(double x, double y); +double sqrt(double x); +double cbrt(double x); +double ceil(double x); +double floor(double x); +double fabs(double x); +double frexp(double value, int *eptr); +double ldexp(double value, int exp); +double modf(double value, double *iptr); +double erf(double x); +double erfc(double x); +double atof(const char *nptr); +double hypot(double x, double y); +double lgamma(double x); +double j0(double x); +double j1(double x); +double jn(int n, double x); +double y0(double x); +double y1(double x); +double yn(int n, double x); +extern struct _iobuf { + int _cnt; + char *_ptr; + char *_base; + int _bufsiz; + short _flag; + char _file; +} _iob[]; +typedef unsigned long size_t; +typedef char *va_list; +struct _iobuf *fopen(const char *filename, const char *type); +struct _iobuf *freopen(const char *filename, const char *type, struct _iobuf *stream); +struct _iobuf *fdopen(int fildes, const char *type); +struct _iobuf *popen(const char *command, const char *type); +int pclose(struct _iobuf *stream); +int fflush(struct _iobuf *stream); +int fclose(struct _iobuf *stream); +int remove(const char *path); +int rename(const char *from, const char *to); +struct _iobuf *tmpfile(void); +char *tmpnam(char *s); +int setvbuf(struct _iobuf *iop, char *buf, int type, size_t size); +int setbuf(struct _iobuf *stream, char *buf); +int setbuffer(struct _iobuf *stream, char *buf, size_t size); +int setlinebuf(struct _iobuf *stream); +int fprintf(struct _iobuf *stream, const char *format, ...); +int printf(const char *format, ...); +char *sprintf(char *s, const char *format, ...); +int vfprintf(struct _iobuf *stream, const char *format, va_list arg); +int vprintf(const char *format, va_list arg); +int vsprintf(char *s, const char *format, va_list arg); +int fscanf(struct _iobuf *stream, const char *format, ...); +int scanf(const char *format, ...); +int sscanf(char *s, const char *format, ...); +int fgetc(struct _iobuf *stream); +int getw(struct _iobuf *stream); +char *fgets(char *s, int n, struct _iobuf *stream); +char *gets(char *s); +int fputc(int c, struct _iobuf *stream); +int putw(int w, struct _iobuf *stream); +int fputs(const char *s, struct _iobuf *stream); +int puts(const char *s); +int ungetc(int c, struct _iobuf *stream); +int fread(void *ptr, size_t size, size_t count, struct _iobuf *iop); +int fwrite(const void *ptr, size_t size, size_t count, struct _iobuf *iop); +int fseek(struct _iobuf *stream, long offset, int ptrname); +long ftell(struct _iobuf *stream); +void rewind(struct _iobuf *stream); +int fgetpos(struct _iobuf *stream, long *pos); +int fsetpos(struct _iobuf *stream, const long *pos); +void perror(const char *s); +typedef unsigned char byte; +typedef unsigned char uchar; +typedef unsigned short ushort; +typedef unsigned int uint; +typedef unsigned long ulong; +typedef unsigned char u_char; +typedef unsigned short u_short; +typedef unsigned int u_int; +typedef unsigned long u_long; +typedef unsigned short ushort_; +typedef struct _physadr { int r[1]; } *physadr; +typedef struct label_t { + int val[11]; +} label_t; +typedef struct _quad { long val[2]; } quad; +typedef long daddr_t; +typedef char * caddr_t; +typedef u_long ino_t; +typedef long swblk_t; +typedef long time_t; +typedef short dev_t; +typedef long off_t; +typedef u_short uid_t; +typedef u_short gid_t; +typedef signed char prio_t; +typedef long fd_mask; +typedef struct fd_set { + fd_mask fds_bits[(((256 )+(( (sizeof(fd_mask) * 8 ) )-1))/( (sizeof(fd_mask) * 8 ) )) ]; +} fd_set; +typedef struct qhdr { + struct qhdr *link, *rlink; +} *queue_t; +typedef char *ptr_ord_t; +typedef double floatp; +typedef char *(*proc_alloc_t)(unsigned num_elements, unsigned element_size, const char *client_name ); +typedef void (*proc_free_t)(char *data, unsigned num_elements, unsigned element_size, const char *client_name ); +extern struct _iobuf *gs_out; +typedef struct gs_point_s { + double x, y; +} gs_point; +typedef struct gs_int_point_s { + int x, y; +} gs_int_point; +typedef struct gs_rect_s { + gs_point p, q; +} gs_rect; +typedef struct gs_int_rect_s { + gs_int_point p, q; +} gs_int_rect; +typedef struct gs_state_s gs_state; +typedef struct { + proc_alloc_t alloc; + proc_free_t free; +} gs_memory_procs; +char *gs_malloc(uint, uint, const char * ); +void gs_free(char *, uint, uint, const char * ); +extern char gs_debug[128]; +extern int gs_log_error(int, const char *, int ); +typedef long fixed; +typedef struct gs_fixed_point_s { + fixed x, y; +} gs_fixed_point; +typedef struct gs_fixed_rect_s { + gs_fixed_point p, q; +} gs_fixed_rect; +typedef struct gs_matrix_s { + long _xx; float xx; long _xy; float xy; long _yx; float yx; long _yy; float yy; long _tx; float tx; long _ty; float ty; +} gs_matrix; +void gs_make_identity(gs_matrix * ); +int gs_make_translation(floatp, floatp, gs_matrix * ), + gs_make_scaling(floatp, floatp, gs_matrix * ), + gs_make_rotation(floatp, gs_matrix * ); +int gs_matrix_multiply(const gs_matrix *, const gs_matrix *, gs_matrix * ), + gs_matrix_invert(const gs_matrix *, gs_matrix * ), + gs_matrix_rotate(const gs_matrix *, floatp, gs_matrix * ); +int gs_point_transform(floatp, floatp, const gs_matrix *, gs_point * ), + gs_point_transform_inverse(floatp, floatp, const gs_matrix *, gs_point * ), + gs_distance_transform(floatp, floatp, const gs_matrix *, gs_point * ), + gs_distance_transform_inverse(floatp, floatp, const gs_matrix *, gs_point * ), + gs_bbox_transform_inverse(gs_rect *, gs_matrix *, gs_rect * ); +typedef struct gs_matrix_fixed_s { + long _xx; float xx; long _xy; float xy; long _yx; float yx; long _yy; float yy; long _tx; float tx; long _ty; float ty; + fixed tx_fixed, ty_fixed; +} gs_matrix_fixed; +extern void gs_update_matrix_fixed(gs_matrix_fixed * ); +int gs_point_transform2fixed(gs_matrix_fixed *, floatp, floatp, gs_fixed_point * ), + gs_distance_transform2fixed(gs_matrix_fixed *, floatp, floatp, gs_fixed_point * ); +typedef struct { + long xx, xy, yx, yy; + int skewed; + int shift; + int max_bits; + fixed round; +} fixed_coeff; + +typedef enum { + gs_cap_butt = 0, + gs_cap_round = 1, + gs_cap_square = 2 +} gs_line_cap; +typedef enum { + gs_join_miter = 0, + gs_join_round = 1, + gs_join_bevel = 2 +} gs_line_join; +gs_state *gs_state_alloc(proc_alloc_t, proc_free_t ); +int gs_state_free(gs_state * ); +int gs_gsave(gs_state * ), + gs_grestore(gs_state * ), + gs_grestoreall(gs_state * ); +gs_state *gs_gstate(gs_state * ); +int gs_currentgstate(gs_state * , const gs_state * ), + gs_setgstate(gs_state * , const gs_state * ); +gs_state *gs_state_swap_saved(gs_state *, gs_state * ); +void gs_state_swap(gs_state *, gs_state * ); +int gs_initgraphics(gs_state * ); +typedef struct gx_device_s gx_device; +int gs_flushpage(gs_state * ); +int gs_copypage(gs_state * ); +int gs_output_page(gs_state *, int, int ); +int gs_copyscanlines(gx_device *, int, byte *, uint, int *, uint * ); +gx_device * gs_getdevice(int ); +int gs_copydevice(gx_device **, gx_device *, proc_alloc_t ); +int gs_makeimagedevice(gx_device **, gs_matrix *, uint, uint, byte *, int, proc_alloc_t ); +void gs_nulldevice(gs_state * ); +int gs_setdevice(gs_state *, gx_device * ); +gx_device * gs_currentdevice(gs_state * ); +const char * gs_devicename(gx_device * ); +void gs_deviceinitialmatrix(gx_device *, gs_matrix * ); +int gs_closedevice(gx_device * ); +int gs_setlinewidth(gs_state *, floatp ); +float gs_currentlinewidth(const gs_state * ); +int gs_setlinecap(gs_state *, gs_line_cap ); +gs_line_cap gs_currentlinecap(const gs_state * ); +int gs_setlinejoin(gs_state *, gs_line_join ); +gs_line_join gs_currentlinejoin(const gs_state * ); +int gs_setmiterlimit(gs_state *, floatp ); +float gs_currentmiterlimit(const gs_state * ); +int gs_setdash(gs_state *, const float *, uint, floatp ); +uint gs_currentdash_length(const gs_state * ); +int gs_currentdash_pattern(const gs_state *, float * ); +float gs_currentdash_offset(const gs_state * ); +int gs_setflat(gs_state *, floatp ); +float gs_currentflat(const gs_state * ); +int gs_setstrokeadjust(gs_state *, int ); +int gs_currentstrokeadjust(const gs_state * ); +typedef enum { + gs_color_space_DeviceGray = 0, + gs_color_space_DeviceRGB, + gs_color_space_DeviceCMYK +} gs_color_space; +typedef struct gs_color_s gs_color; +extern const uint gs_color_sizeof; +int gs_setgray(gs_state *, floatp ); +float gs_currentgray(gs_state * ); +int gs_sethsbcolor(gs_state *, floatp, floatp, floatp ), + gs_currenthsbcolor(gs_state *, float [3] ), + gs_setrgbcolor(gs_state *, floatp, floatp, floatp ), + gs_currentrgbcolor(gs_state *, float [3] ); +int gs_currentcolorspace(gs_state *, gs_color_space * ); +typedef float (*gs_transfer_proc)(gs_state *, floatp ); +int gs_settransfer(gs_state *, gs_transfer_proc ), + gs_settransfer_remap(gs_state *, gs_transfer_proc, int ); +gs_transfer_proc gs_currenttransfer(gs_state * ); +int gs_setcolortransfer(gs_state *, gs_transfer_proc , + gs_transfer_proc , gs_transfer_proc , + gs_transfer_proc ), + gs_setcolortransfer_remap(gs_state *, gs_transfer_proc , + gs_transfer_proc , gs_transfer_proc , + gs_transfer_proc , int ); +void gs_currentcolortransfer(gs_state *, gs_transfer_proc [4] ); +int gs_setscreen(gs_state *, floatp, floatp, float (*)(floatp, floatp ) ); +int gs_currentscreen(gs_state *, float *, float *, float (**)(floatp, floatp ) ); +int gs_sethalftonephase(gs_state *, int, int ); +int gs_currenthalftonephase(gs_state *, gs_int_point * ); +typedef struct gs_screen_enum_s gs_screen_enum; +extern const uint gs_screen_enum_sizeof; +int gs_screen_init(gs_screen_enum *, gs_state *, floatp, floatp ); +int gs_screen_currentpoint(gs_screen_enum *, gs_point * ); +int gs_screen_next(gs_screen_enum *, floatp ); +struct gs_state_s { + gs_state *saved; + gs_memory_procs memory_procs; + gs_matrix_fixed ctm; + gs_matrix ctm_inverse; + int inverse_valid; + struct gx_path_s *path; + struct gx_clip_path_s *clip_path; + int clip_rule; + struct line_params_s *line_params; + struct halftone_params_s *halftone; + float (*ht_proc)(floatp, floatp ); + gs_int_point ht_phase; + gs_int_point phase_mod; + struct gs_color_s *color; + struct gx_device_color_s *dev_color; + struct gx_transfer_s *transfer; + struct gs_font_s *font; + gs_matrix char_tm; + int char_tm_valid; + byte in_cachedevice; + byte in_charpath; + + + + + int level; + float flatness; + int stroke_adjust; + struct device_s *device; + int device_is_shared; + +}; +typedef unsigned long gx_bitmap_id; +typedef struct gx_bitmap_s { + byte *data; + int raster; + gs_int_point size; + gx_bitmap_id id; + ushort rep_width, rep_height; +} gx_bitmap; +typedef unsigned long gx_color_index; +typedef unsigned short gx_color_value; +typedef struct gx_device_color_info_s { + int num_components; + + int depth; + gx_color_value max_gray; + gx_color_value max_rgb; + + gx_color_value dither_gray; + gx_color_value dither_rgb; + +} gx_device_color_info; +typedef struct gx_device_procs_s gx_device_procs; +struct gx_device_s { + int params_size; gx_device_procs *procs; const char *dname; int width; int height; float x_pixels_per_inch; float y_pixels_per_inch; float l_margin, b_margin, r_margin, t_margin; gx_device_color_info color_info; int is_open; +}; +typedef struct gs_prop_item_s gs_prop_item; +struct gx_device_procs_s { + int (*open_device)(gx_device *dev ); + void (*get_initial_matrix)(gx_device *dev, gs_matrix *pmat ); + int (*sync_output)(gx_device *dev ); + int (*output_page)(gx_device *dev, int num_copies, int flush ); + int (*close_device)(gx_device *dev ); + gx_color_index (*map_rgb_color)(gx_device *dev, gx_color_value red, gx_color_value green, gx_color_value blue ); + int (*map_color_rgb)(gx_device *dev, gx_color_index color, gx_color_value rgb[3] ); + int (*fill_rectangle)(gx_device *dev, int x, int y, int width, int height, gx_color_index color ); + int (*tile_rectangle)(gx_device *dev, gx_bitmap *tile, int x, int y, int width, int height, gx_color_index color0, gx_color_index color1, int phase_x, int phase_y ); + int (*copy_mono)(gx_device *dev, unsigned char *data, int data_x, int raster, gx_bitmap_id id, int x, int y, int width, int height, gx_color_index color0, gx_color_index color1 ); + int (*copy_color)(gx_device *dev, unsigned char *data, int data_x, int raster, gx_bitmap_id id, int x, int y, int width, int height ); + int (*draw_line)(gx_device *dev, int x0, int y0, int x1, int y1, gx_color_index color ); + int (*get_bits)(gx_device *dev, int y, unsigned char *data, unsigned int size, int pad_to_word ); + int (*get_props)(gx_device *dev, gs_prop_item *plist ); + + int (*put_props)(gx_device *dev, gs_prop_item *plist, int count ); + +}; +extern unsigned int gx_device_bytes_per_scan_line(gx_device *dev, int pad_to_word ); +int gx_default_open_device(gx_device *dev ); +void gx_default_get_initial_matrix(gx_device *dev, gs_matrix *pmat ); +int gx_default_sync_output(gx_device *dev ); +int gx_default_output_page(gx_device *dev, int num_copies, int flush ); +int gx_default_close_device(gx_device *dev ); +gx_color_index gx_default_map_rgb_color(gx_device *dev, gx_color_value red, gx_color_value green, gx_color_value blue ); +int gx_default_map_color_rgb(gx_device *dev, gx_color_index color, gx_color_value rgb[3] ); +int gx_default_tile_rectangle(gx_device *dev, gx_bitmap *tile, int x, int y, int width, int height, gx_color_index color0, gx_color_index color1, int phase_x, int phase_y ); +int gx_default_copy_color(gx_device *dev, unsigned char *data, int data_x, int raster, gx_bitmap_id id, int x, int y, int width, int height ); +int gx_default_draw_line(gx_device *dev, int x0, int y0, int x1, int y1, gx_color_index color ); +int gx_default_get_bits(gx_device *dev, int y, unsigned char *data, unsigned int size, int pad_to_word ); +int gx_default_get_props(gx_device *dev, gs_prop_item *plist ); +int gx_default_put_props(gx_device *dev, gs_prop_item *plist, int count ); +typedef struct device_s { + gx_device *info; + int is_band_device; + gx_color_index white, black; +} device; +int gs_initmatrix(gs_state * ), + gs_defaultmatrix(const gs_state *, gs_matrix * ), + gs_currentmatrix(const gs_state *, gs_matrix * ), + gs_setmatrix(gs_state *, const gs_matrix * ), + gs_translate(gs_state *, floatp, floatp ), + gs_scale(gs_state *, floatp, floatp ), + gs_rotate(gs_state *, floatp ), + gs_concat(gs_state *, const gs_matrix * ); +int gs_transform(gs_state *, floatp, floatp, gs_point * ), + gs_dtransform(gs_state *, floatp, floatp, gs_point * ), + gs_itransform(gs_state *, floatp, floatp, gs_point * ), + gs_idtransform(gs_state *, floatp, floatp, gs_point * ); +static int +ctm_set_inverse(gs_state *pgs) +{ int code = gs_matrix_invert(&*(gs_matrix *)&(pgs)->ctm , &pgs->ctm_inverse); + 0; + if ( code < 0 ) return code; + pgs->inverse_valid = 1; + return 0; +} +void +gs_update_matrix_fixed(gs_matrix_fixed *pmat) +{ (*pmat). tx = ((float)(((*pmat). tx_fixed = ((fixed)(((*pmat). tx)*(float)(1<<12 ) )) )*(1.0/(1<<12 ) ))) , (*pmat). ty = ((float)(((*pmat). ty_fixed = ((fixed)(((*pmat). ty)*(float)(1<<12 ) )) )*(1.0/(1<<12 ) ))); +} +int +gs_initmatrix(gs_state *pgs) +{ gx_device *dev = pgs->device->info; + (*dev->procs->get_initial_matrix)(dev, &*(gs_matrix *)&(pgs)->ctm ); + (pgs->ctm). tx = ((float)(((pgs->ctm). tx_fixed = ((fixed)(((pgs->ctm). tx)*(float)(1<<12 ) )) )*(1.0/(1<<12 ) ))) , (pgs->ctm). ty = ((float)(((pgs->ctm). ty_fixed = ((fixed)(((pgs->ctm). ty)*(float)(1<<12 ) )) )*(1.0/(1<<12 ) ))) , pgs->inverse_valid = 0, pgs->char_tm_valid = 0; + return 0; +} +int +gs_defaultmatrix(const gs_state *pgs, gs_matrix *pmat) +{ gx_device *dev = pgs->device->info; + (*dev->procs->get_initial_matrix)(dev, pmat); + return 0; +} +int +gs_currentmatrix(const gs_state *pgs, gs_matrix *pmat) +{ *pmat = *(gs_matrix *)&(pgs)->ctm; + return 0; +} +int +gs_setmatrix(gs_state *pgs, const gs_matrix *pmat) +{ *(gs_matrix *)&(pgs)->ctm = *pmat; + (pgs->ctm). tx = ((float)(((pgs->ctm). tx_fixed = ((fixed)(((pgs->ctm). tx)*(float)(1<<12 ) )) )*(1.0/(1<<12 ) ))) , (pgs->ctm). ty = ((float)(((pgs->ctm). ty_fixed = ((fixed)(((pgs->ctm). ty)*(float)(1<<12 ) )) )*(1.0/(1<<12 ) ))) , pgs->inverse_valid = 0, pgs->char_tm_valid = 0; + return 0; +} +int +gs_translate(gs_state *pgs, floatp dx, floatp dy) +{ gs_point pt; + int code; + if ( (code = gs_distance_transform(dx, dy, &*(gs_matrix *)&(pgs)->ctm , &pt)) < 0 ) + return code; + pgs->ctm.tx += pt.x; + pgs->ctm.ty += pt.y; + (pgs->ctm). tx = ((float)(((pgs->ctm). tx_fixed = ((fixed)(((pgs->ctm). tx)*(float)(1<<12 ) )) )*(1.0/(1<<12 ) ))) , (pgs->ctm). ty = ((float)(((pgs->ctm). ty_fixed = ((fixed)(((pgs->ctm). ty)*(float)(1<<12 ) )) )*(1.0/(1<<12 ) ))) , pgs->inverse_valid = 0, pgs->char_tm_valid = 0; + return 0; +} +int +gs_scale(gs_state *pgs, floatp sx, floatp sy) +{ pgs->ctm.xx *= sx; + pgs->ctm.xy *= sx; + pgs->ctm.yx *= sy; + pgs->ctm.yy *= sy; + pgs->inverse_valid = 0, pgs->char_tm_valid = 0; + return 0; +} +int +gs_rotate(gs_state *pgs, floatp ang) +{ int code = gs_matrix_rotate(&*(gs_matrix *)&(pgs)->ctm , ang, &*(gs_matrix *)&(pgs)->ctm ); + pgs->inverse_valid = 0, pgs->char_tm_valid = 0; + return code; +} +int +gs_concat(gs_state *pgs, const gs_matrix *pmat) +{ int code = gs_matrix_multiply(pmat, &*(gs_matrix *)&(pgs)->ctm , &*(gs_matrix *)&(pgs)->ctm ); + (pgs->ctm). tx = ((float)(((pgs->ctm). tx_fixed = ((fixed)(((pgs->ctm). tx)*(float)(1<<12 ) )) )*(1.0/(1<<12 ) ))) , (pgs->ctm). ty = ((float)(((pgs->ctm). ty_fixed = ((fixed)(((pgs->ctm). ty)*(float)(1<<12 ) )) )*(1.0/(1<<12 ) ))) , pgs->inverse_valid = 0, pgs->char_tm_valid = 0; + return code; +} +int +gs_transform(gs_state *pgs, floatp x, floatp y, gs_point *pt) +{ return gs_point_transform(x, y, &*(gs_matrix *)&(pgs)->ctm , pt); +} +int +gs_dtransform(gs_state *pgs, floatp dx, floatp dy, gs_point *pt) +{ return gs_distance_transform(dx, dy, &*(gs_matrix *)&(pgs)->ctm , pt); +} +int +gs_itransform(gs_state *pgs, floatp x, floatp y, gs_point *pt) +{ + + if ( !!(((*(long *)(&((&pgs->ctm)->xy)) | *(long *)(&( (&pgs->ctm)->yx)) ) << 1) == 0) ) + { return gs_point_transform_inverse(x, y, &*(gs_matrix *)&(pgs)->ctm , pt); + } + else + { if ( !pgs->inverse_valid ) { int code = ctm_set_inverse(pgs); if ( code < 0 ) return code; }; + return gs_point_transform(x, y, &pgs->ctm_inverse, pt); + } +} +int +gs_idtransform(gs_state *pgs, floatp dx, floatp dy, gs_point *pt) +{ + + if ( !!(((*(long *)(&((&pgs->ctm)->xy)) | *(long *)(&( (&pgs->ctm)->yx)) ) << 1) == 0) ) + { return gs_distance_transform_inverse(dx, dy, + &*(gs_matrix *)&(pgs)->ctm , pt); + } + else + { if ( !pgs->inverse_valid ) { int code = ctm_set_inverse(pgs); if ( code < 0 ) return code; }; + return gs_distance_transform(dx, dy, &pgs->ctm_inverse, pt); + } +} +int +gs_translate_to_fixed(register gs_state *pgs, fixed px, fixed py) +{ pgs->ctm.tx = ((float)((pgs->ctm.tx_fixed = px)*(1.0/(1<<12 ) ))); + pgs->ctm.ty = ((float)((pgs->ctm.ty_fixed = py)*(1.0/(1<<12 ) ))); + pgs->inverse_valid = 0; + pgs->char_tm_valid = 1; + return 0; +} +int +gx_matrix_to_fixed_coeff(const gs_matrix *pmat, register fixed_coeff *pfc, + int max_bits) +{ gs_matrix ctm; + int scale = -10000; + int expt, shift; + ctm = *pmat; + pfc->skewed = 0; + if ( !((*(long *)(&(ctm.xx)) << 1) == 0) ) + { (void)frexp(ctm.xx, &scale); + } + if ( !((*(long *)(&(ctm.xy)) << 1) == 0) ) + { (void)frexp(ctm.xy, &expt); + if ( expt > scale ) scale = expt; + pfc->skewed = 1; + } + if ( !((*(long *)(&(ctm.yx)) << 1) == 0) ) + { (void)frexp(ctm.yx, &expt); + if ( expt > scale ) scale = expt; + pfc->skewed = 1; + } + if ( !((*(long *)(&(ctm.yy)) << 1) == 0) ) + { (void)frexp(ctm.yy, &expt); + if ( expt > scale ) scale = expt; + } + scale = sizeof(long) * 8 - 1 - max_bits - scale; + shift = scale - 12; + if ( shift > 0 ) + { pfc->shift = shift; + pfc->round = (fixed)1 << (shift - 1); + } + else + { pfc->shift = 0; + pfc->round = 0; + scale -= shift; + } + pfc->xx = (((*(long *)(&(ctm.xx)) << 1) == 0) ? 0 : (long)ldexp(ctm.xx, scale)); + pfc->yy = (((*(long *)(&(ctm.yy)) << 1) == 0) ? 0 : (long)ldexp(ctm.yy, scale)); + if ( pfc->skewed ) + { pfc->xy = (((*(long *)(&(ctm.xy)) << 1) == 0) ? 0 : (long)ldexp(ctm.xy, scale)); + pfc->yx = (((*(long *)(&(ctm.yx)) << 1) == 0) ? 0 : (long)ldexp(ctm.yx, scale)); + } + else + pfc->xy = pfc->yx = 0; + pfc->max_bits = max_bits; + return 0; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/920428-3.c b/gcc/testsuite/gcc.c-torture/compile/920428-3.c new file mode 100644 index 000000000000..13640c98ad2d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920428-3.c @@ -0,0 +1,5 @@ +#ifndef NO_LABEL_VALUES +x(a){static void*j[]={&&l1,&&l2};goto*j[a];l1:return 0;l2:return 1;} +#else +main(){ exit (0); } +#endif diff --git a/gcc/testsuite/gcc.c-torture/compile/920428-4.c b/gcc/testsuite/gcc.c-torture/compile/920428-4.c new file mode 100644 index 000000000000..cc5e30c2a801 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920428-4.c @@ -0,0 +1 @@ +x(a){struct{int p[a],i;}l;l.i;} diff --git a/gcc/testsuite/gcc.c-torture/compile/920428-5.c b/gcc/testsuite/gcc.c-torture/compile/920428-5.c new file mode 100644 index 000000000000..ff3137992809 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920428-5.c @@ -0,0 +1 @@ +typedef struct{unsigned b0:1;}*t;x(a,b)t a,b;{b->b0=a->b0;} diff --git a/gcc/testsuite/gcc.c-torture/compile/920428-6.c b/gcc/testsuite/gcc.c-torture/compile/920428-6.c new file mode 100644 index 000000000000..e43af7ed3a76 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920428-6.c @@ -0,0 +1,22 @@ +typedef struct x +{ + struct x *type; + struct x *chain; + struct x *value; +} *tree; + +int +func (new, old) + register tree new, old; +{ + if (old->type == 0 || new->type == 0) + { + register tree t = old->type; + if (t == 0) + t = new->type; + for (; t; t = t->chain ) + if (t->value) + return 1; + } + return 0; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/920428-7.c b/gcc/testsuite/gcc.c-torture/compile/920428-7.c new file mode 100644 index 000000000000..69b1d979aa90 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920428-7.c @@ -0,0 +1 @@ +x(float*x){int a[4],i=0,j;for(j=0;j<2;j++){f(a[i++]);f(a[i++]);}} diff --git a/gcc/testsuite/gcc.c-torture/compile/920501-1.c b/gcc/testsuite/gcc.c-torture/compile/920501-1.c new file mode 100644 index 000000000000..a84956417b0f --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920501-1.c @@ -0,0 +1,7 @@ +/* CYGNUS LOCAL -- meissner/no label values */ +#ifndef NO_LABEL_VALUES +a(){int**b[]={&&c};c:;} +#else +int x; +#endif +/* END CYGNUS LOCAL -- meissner/no label values */ diff --git a/gcc/testsuite/gcc.c-torture/compile/920501-10.c b/gcc/testsuite/gcc.c-torture/compile/920501-10.c new file mode 100644 index 000000000000..ecb5bb4151c1 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920501-10.c @@ -0,0 +1 @@ +x(y){return 8193*y;} diff --git a/gcc/testsuite/gcc.c-torture/compile/920501-11.c b/gcc/testsuite/gcc.c-torture/compile/920501-11.c new file mode 100644 index 000000000000..d636357e8673 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920501-11.c @@ -0,0 +1 @@ +typedef struct{int s;}S;foo(){int i=(int)&(S){(void*)((int)&(S){1})};} diff --git a/gcc/testsuite/gcc.c-torture/compile/920501-12.c b/gcc/testsuite/gcc.c-torture/compile/920501-12.c new file mode 100644 index 000000000000..594e14178b9b --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920501-12.c @@ -0,0 +1,5 @@ +x(x){ return 3 + x;} +a(x){int y[994]; return 3 + x;} +b(x){int y[999]; return 2*(x + 3);} +A(x){int y[9999];return 2*(x + 3);} +B(x){int y[9949];return 3 + x;} diff --git a/gcc/testsuite/gcc.c-torture/compile/920501-13.c b/gcc/testsuite/gcc.c-torture/compile/920501-13.c new file mode 100644 index 000000000000..b5a6798ecc21 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920501-13.c @@ -0,0 +1 @@ +typedef struct{int i;}t;inline y(t u){}x(){t u;y(u);} diff --git a/gcc/testsuite/gcc.c-torture/compile/920501-15.c b/gcc/testsuite/gcc.c-torture/compile/920501-15.c new file mode 100644 index 000000000000..81fd66401d5d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920501-15.c @@ -0,0 +1 @@ +x(a)double a;{int i;return i>a?i:i+1;} diff --git a/gcc/testsuite/gcc.c-torture/compile/920501-16.c b/gcc/testsuite/gcc.c-torture/compile/920501-16.c new file mode 100644 index 000000000000..f82b7524b249 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920501-16.c @@ -0,0 +1 @@ +f(n){struct z{int a,b[n],c[n];};} diff --git a/gcc/testsuite/gcc.c-torture/compile/920501-17.c b/gcc/testsuite/gcc.c-torture/compile/920501-17.c new file mode 100644 index 000000000000..05a4d408d508 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920501-17.c @@ -0,0 +1 @@ +x(){static const char x[]="x";char y[2];y[0]=x[1];} diff --git a/gcc/testsuite/gcc.c-torture/compile/920501-18.c b/gcc/testsuite/gcc.c-torture/compile/920501-18.c new file mode 100644 index 000000000000..70f7c0af505b --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920501-18.c @@ -0,0 +1,2 @@ +union u{int i;float f;}; +x(p)int p;{union u x;for(x.i=0;x.i<p;x.i++)if(x.f>(float)3.0)break;} diff --git a/gcc/testsuite/gcc.c-torture/compile/920501-19.c b/gcc/testsuite/gcc.c-torture/compile/920501-19.c new file mode 100644 index 000000000000..1671cc37e68f --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920501-19.c @@ -0,0 +1 @@ +long long x=0;y(){x=0;} diff --git a/gcc/testsuite/gcc.c-torture/compile/920501-2.c b/gcc/testsuite/gcc.c-torture/compile/920501-2.c new file mode 100644 index 000000000000..905f5ddb627d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920501-2.c @@ -0,0 +1,11 @@ +extern short distdata[64][64], taxidata[64][64]; +extern short PieceList[2][64]; + +int +ScoreKBNK (short int winner, short int king1, short int king2) +{ + register short s; + + s = taxidata[king1][king2] + distdata[PieceList[winner][1]][king2]; + return s; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/920501-20.c b/gcc/testsuite/gcc.c-torture/compile/920501-20.c new file mode 100644 index 000000000000..170d05017611 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920501-20.c @@ -0,0 +1 @@ +int*f(x)int*x;{if(x[4]){int h[1];if(setjmp(h))return x;}} diff --git a/gcc/testsuite/gcc.c-torture/compile/920501-21.c b/gcc/testsuite/gcc.c-torture/compile/920501-21.c new file mode 100644 index 000000000000..4a9f05a1b204 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920501-21.c @@ -0,0 +1,3 @@ +typedef unsigned short t; +struct foo{t d;}; +int bar(d)t d;{struct foo u;u.d=d;return(int)(&u);} diff --git a/gcc/testsuite/gcc.c-torture/compile/920501-22.c b/gcc/testsuite/gcc.c-torture/compile/920501-22.c new file mode 100644 index 000000000000..b15d7984b1bd --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920501-22.c @@ -0,0 +1 @@ +x(){int y[]={};} diff --git a/gcc/testsuite/gcc.c-torture/compile/920501-23.c b/gcc/testsuite/gcc.c-torture/compile/920501-23.c new file mode 100644 index 000000000000..291d93e6c5d6 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920501-23.c @@ -0,0 +1,16 @@ +typedef unsigned char qi; +typedef unsigned short hi; +typedef unsigned long si; +typedef unsigned long long di; +subi(a){return 100-a;} +add(a,b){return a+b;} +mul(a){return 85*a;} +memshift(p)unsigned*p;{unsigned x;for(;;){x=*p++>>16;if(x)return x;}} +ldw(xp)si*xp;{return xp[4];} +ldws_m(xp)si*xp;{si x;do{x=xp[3];xp+=3;}while(x);} +postinc_si(p)si*p;{si x;for(;;){x=*p++;if(x)return x;}} +preinc_si(p)si*p;{si x;for(;;){x=*++p;if(x)return x;}} +postinc_di(p)di*p;{di x;for(;;){x=*p++;if(x)return x;}} +preinc_di(p)di*p;{di x;for(;;){x=*++p;if(x)return x;}} +inc_overlap(p,a)di*p;{do{p=*(di**)p;p=(di*)((int)p+4);}while(*p);} +di move_di(p,p2)di*p,*p2;{di x=p;p2=((di*)x)[1];return p2[1];} diff --git a/gcc/testsuite/gcc.c-torture/compile/920501-24.c b/gcc/testsuite/gcc.c-torture/compile/920501-24.c new file mode 100644 index 000000000000..ae9c145ef1bf --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920501-24.c @@ -0,0 +1,221 @@ +char *malloc (); + +main () +{ + char *buf1; + int i; + int cnt; + + buf1 = malloc (8193); + + read (0, buf1, 8192); + + for (i = 500; i > 0; i--) + cnt = shift (buf1, 8192, '\n'); + printf ("%d ", cnt); + + for (i = 500; i > 0; i--) + cnt = shift_xor (buf1, 8192, '\n'); + printf ("%d ", cnt); + + for (i = 500; i > 0; i--) + cnt = bitfield (buf1, 8192, '\n'); + printf ("%d ", cnt); + + for (i = 500; i > 0; i--) + cnt = char_autoincr (buf1, 8192, '\n'); + printf ("%d ", cnt); + + for (i = 500; i > 0; i--) + cnt = xorand (buf1, 8192, '\n'); + printf ("%d ", cnt); +} + +shift (b1, n, c) + int *b1; + int n; + char c; +{ + int nn; + int cnt = 0; + int w1; + + for (nn = n / (4 * 4); nn > 0; nn--) + { + w1 = *b1++; + if ((char)w1 == c) cnt++; + if ((char)(w1 >>= 8) == c) cnt++; + if ((char)(w1 >>= 8) == c) cnt++; + if ((char)(w1 >>= 8) == c) cnt++; + w1 = *b1++; + if ((char)w1 == c) cnt++; + if ((char)(w1 >>= 8) == c) cnt++; + if ((char)(w1 >>= 8) == c) cnt++; + if ((char)(w1 >>= 8) == c) cnt++; + w1 = *b1++; + if ((char)w1 == c) cnt++; + if ((char)(w1 >>= 8) == c) cnt++; + if ((char)(w1 >>= 8) == c) cnt++; + if ((char)(w1 >>= 8) == c) cnt++; + w1 = *b1++; + if ((char)w1 == c) cnt++; + if ((char)(w1 >>= 8) == c) cnt++; + if ((char)(w1 >>= 8) == c) cnt++; + if ((char)(w1 >>= 8) == c) cnt++; + } + return cnt; +} + +shift_xor (b1, n, c) + int *b1; + int n; + char c; +{ + int nn; + int cnt = 0; + int w1; + int cccc = (c << 24) | (c << 16) | (c << 8) | c; + + for (nn = n / (4 * 4); nn > 0; nn--) + { + w1 = *b1++ ^ cccc; + if ((char)w1 == 0) cnt++; + if ((char)(w1 >>= 8) == 0) cnt++; + if ((char)(w1 >>= 8) == 0) cnt++; + if ((char)(w1 >>= 8) == 0) cnt++; + w1 = *b1++ ^ cccc; + if ((char)w1 == 0) cnt++; + if ((char)(w1 >>= 8) == 0) cnt++; + if ((char)(w1 >>= 8) == 0) cnt++; + if ((char)(w1 >>= 8) == 0) cnt++; + w1 = *b1++ ^ cccc; + if ((char)w1 == 0) cnt++; + if ((char)(w1 >>= 8) == 0) cnt++; + if ((char)(w1 >>= 8) == 0) cnt++; + if ((char)(w1 >>= 8) == 0) cnt++; + w1 = *b1++ ^ cccc; + if ((char)w1 == 0) cnt++; + if ((char)(w1 >>= 8) == 0) cnt++; + if ((char)(w1 >>= 8) == 0) cnt++; + if ((char)(w1 >>= 8) == 0) cnt++; + } + return cnt; +} + +typedef +struct +{ + unsigned b0:8; + unsigned b1:8; + unsigned b2:8; + unsigned b3:8; +} foo; + +bitfield (b1, n, c) + foo *b1; + int n; + char c; +{ + int nn; + int cnt = 0; + register foo w1; + + for (nn = n / (4 * 4); nn > 0; nn--) + { + w1 = *b1++; + if (w1.b0 == c) cnt++; + if (w1.b1 == c) cnt++; + if (w1.b2 == c) cnt++; + if (w1.b3 == c) cnt++; + w1 = *b1++; + if (w1.b0 == c) cnt++; + if (w1.b1 == c) cnt++; + if (w1.b2 == c) cnt++; + if (w1.b3 == c) cnt++; + w1 = *b1++; + if (w1.b0 == c) cnt++; + if (w1.b1 == c) cnt++; + if (w1.b2 == c) cnt++; + if (w1.b3 == c) cnt++; + w1 = *b1++; + if (w1.b0 == c) cnt++; + if (w1.b1 == c) cnt++; + if (w1.b2 == c) cnt++; + if (w1.b3 == c) cnt++; + } + return cnt; +} + + +char_autoincr (b1, n, c) + char *b1; + int n; + char c; +{ + int cnt = 0; + char *bend = b1 + n; + *bend = c; + + for (;;) + { + while (*b1++ != c) + ; + cnt++; + if (b1 > bend) + break; + } + return cnt; +} + +typedef unsigned int uint; + +xorand (b1, n, c) + int *b1; + int n; + unsigned char c; +{ + int xm = ((int) c << 24) | ((int) c << 16) | ((int) c << 8) | ((int) c); + byte_match_count2 (b1, n, xm, 0xff000000, 0xff0000, 0xff00, 0xff); +} + +byte_match_count2 (buf, n, xm, m1, m2, m3, m4) + int *buf; + int n; + uint m1, m2, m3, m4; +{ + int w, cnt = 0; + int *bp; + + n /= 4; + + buf[n] = xm; + + bp = buf; + while (bp < buf + n) + { + w = *bp++ ^ xm; + cnt += ((m1 & w) == 0); + cnt += ((m2 & w) == 0); + cnt += ((m3 & w) == 0); + cnt += ((m4 & w) == 0); + + w = *bp++ ^ xm; + cnt += ((m1 & w) == 0); + cnt += ((m2 & w) == 0); + cnt += ((m3 & w) == 0); + cnt += ((m4 & w) == 0); + + w = *bp++ ^ xm; + cnt += ((m1 & w) == 0); + cnt += ((m2 & w) == 0); + cnt += ((m3 & w) == 0); + cnt += ((m4 & w) == 0); + + w = *bp++ ^ xm; + cnt += ((m1 & w) == 0); + cnt += ((m2 & w) == 0); + cnt += ((m3 & w) == 0); + cnt += ((m4 & w) == 0); + } + return cnt; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/920501-3.c b/gcc/testsuite/gcc.c-torture/compile/920501-3.c new file mode 100644 index 000000000000..41ef87fbf7fc --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920501-3.c @@ -0,0 +1,2 @@ +struct{long long x:24,y:40;}v; +x(){v.y=0;} diff --git a/gcc/testsuite/gcc.c-torture/compile/920501-4.c b/gcc/testsuite/gcc.c-torture/compile/920501-4.c new file mode 100644 index 000000000000..9cd2fd7bd7af --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920501-4.c @@ -0,0 +1,49 @@ +foo () +{ + int r0[8186 ]; + int r1[2 ]; + int r2[2 ]; + int bitm0[2 ]; + int bitm1[2 ]; + int bitm2[2 ]; + + int i,j,k,m,n,m_max; + int f; + double fm,ft; + + while (1) { + + if (m%4 == 2) + ++m; + + if (m_max != 0 && m > m_max) + break; + + fm=m; + + r0[k=1]=0; + bitm0[0] = 0; + + while ( n%f == 0 ) { + while ( (ft != 0) && (ft < fm )) { + bitm1[i] = 0; + r1[i]=0; + } + + while ( r0[i] != 0 && r1[i] != 0 ) { + if ( r0[i] < r1[i] ) { + bitm2[k] = bitm0[i]; + r2[k++]=0; + } + else if ( r0[i] > r1[j] ) { + bitm2[k] = bitm1[j]; + r2[k++]=r1[j++]; + } + else { + bitm1[k] = bitm0[i]; + r2[k++]=r0[i++]; + } + } + } + } +} diff --git a/gcc/testsuite/gcc.c-torture/compile/920501-6.c b/gcc/testsuite/gcc.c-torture/compile/920501-6.c new file mode 100644 index 000000000000..d0a406381ffa --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920501-6.c @@ -0,0 +1 @@ +x(y,z)float*y;{*y=z;} diff --git a/gcc/testsuite/gcc.c-torture/compile/920501-7.c b/gcc/testsuite/gcc.c-torture/compile/920501-7.c new file mode 100644 index 000000000000..ee193f78a4af --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920501-7.c @@ -0,0 +1,7 @@ +/* CYGNUS LOCAL -- meissner/no label values */ +#ifndef NO_LABEL_VALUES +x(){if(&&e-&&b<0)x();b:goto*&&b;e:;} +#else +int x; +#endif +/* END CYGNUS LOCAL -- meissner/no label values */ diff --git a/gcc/testsuite/gcc.c-torture/compile/920501-8.c b/gcc/testsuite/gcc.c-torture/compile/920501-8.c new file mode 100644 index 000000000000..68e33934d21e --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920501-8.c @@ -0,0 +1 @@ +x(int*p){int x=p;} diff --git a/gcc/testsuite/gcc.c-torture/compile/920501-9.c b/gcc/testsuite/gcc.c-torture/compile/920501-9.c new file mode 100644 index 000000000000..98a06000bf29 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920501-9.c @@ -0,0 +1 @@ +short x(a)unsigned a;{a=32987799;return a;} diff --git a/gcc/testsuite/gcc.c-torture/compile/920502-1.c b/gcc/testsuite/gcc.c-torture/compile/920502-1.c new file mode 100644 index 000000000000..b576c6c990ca --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920502-1.c @@ -0,0 +1 @@ +extern void*t[];x(i){goto*t[i];} diff --git a/gcc/testsuite/gcc.c-torture/compile/920502-2.c b/gcc/testsuite/gcc.c-torture/compile/920502-2.c new file mode 100644 index 000000000000..d3aa1e26d816 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920502-2.c @@ -0,0 +1 @@ +x(c){1LL<<c;} diff --git a/gcc/testsuite/gcc.c-torture/compile/920529-1.c b/gcc/testsuite/gcc.c-torture/compile/920529-1.c new file mode 100644 index 000000000000..0f50309a27cd --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920529-1.c @@ -0,0 +1,21 @@ +void +f (a, b, m, n) + unsigned short *a, *b; + int m, n; +{ + unsigned long acc; + int qn; + int j; + + abort (); + + acc = a[m - 1]; + a += 0; + for (j = qn - 1; j >= 0; j = j - 1) + { + acc = (acc << 16) | a[j]; + acc = acc % *b; + } + + return; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/920611-2.c b/gcc/testsuite/gcc.c-torture/compile/920611-2.c new file mode 100644 index 000000000000..e54b1cda5fc2 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920611-2.c @@ -0,0 +1,53 @@ +typedef unsigned char uchar; +typedef unsigned short ushort; +typedef unsigned int uint; +typedef unsigned long ulong; + +static unsigned long S[1][1]={0x00820200}; + +static int body(out0,out1,ks,Eswap0,Eswap1) +ulong *out0,*out1; +int *ks; +ulong Eswap0,Eswap1; +{ + register unsigned long l,r,t,u,v; + register unsigned long *s; + register int i,j; + register unsigned long E0,E1; + + l=0; + r=0; + + s=(ulong *)ks; + E0=Eswap0; + E1=Eswap1; + + for (i=0; i<(16 *2); i+=4) + { + v=(r^(r>>16)); + u=(v&E0); + v=(v&E1); + u=(u^(u<<16))^r^s[ i ]; + t=(v^(v<<16))^r^s[ i+1]; + t=(t>>4)|(t<<28); + l^=S[1][(t)&0x3f]| S[3][(t>> 8)&0x3f]| S[5][(t>>16)&0x3f]| S[7][(t>>24)&0x3f]| S[0][(u)&0x3f]| S[2][(u>> 8)&0x3f]| S[4][(u>>16)&0x3f]| S[6][(u>>24)&0x3f]; + v=(l^(l>>16)); + u=(v&E0); + v=(v&E1); + u=(u^(u<<16))^l^s[ i+2 ]; + t=(v^(v<<16))^l^s[ i+2+1]; + t=(t>>4)|(t<<28); + r^= S[1][(t )&0x3f]; + } + t=l; + l=r; + r=t; + + t=r; + r=(l>>1)|(l<<31); + l=(t>>1)|(t<<31); + + *out0=l; + *out1=r; + return(0); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/920615-1.c b/gcc/testsuite/gcc.c-torture/compile/920615-1.c new file mode 100644 index 000000000000..9b1c6aceef31 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920615-1.c @@ -0,0 +1,4 @@ +f() +{ + int x[20] = {[0] = 5, [10] = 12}; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/920617-1.c b/gcc/testsuite/gcc.c-torture/compile/920617-1.c new file mode 100644 index 000000000000..2d84e8d84f85 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920617-1.c @@ -0,0 +1 @@ +f(){double*xp,y;*xp++=sqrt(y);} diff --git a/gcc/testsuite/gcc.c-torture/compile/920617-2.c b/gcc/testsuite/gcc.c-torture/compile/920617-2.c new file mode 100644 index 000000000000..3a5450982c0c --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920617-2.c @@ -0,0 +1 @@ +f(a,b,c,d)float a[],d;int b[],c;{} diff --git a/gcc/testsuite/gcc.c-torture/compile/920623-1.c b/gcc/testsuite/gcc.c-torture/compile/920623-1.c new file mode 100644 index 000000000000..9b6ad51e1028 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920623-1.c @@ -0,0 +1,2 @@ +int f(int c){return f(c--);} +g(){} diff --git a/gcc/testsuite/gcc.c-torture/compile/920624-1.c b/gcc/testsuite/gcc.c-torture/compile/920624-1.c new file mode 100644 index 000000000000..8b4d2979d267 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920624-1.c @@ -0,0 +1,2 @@ +int B[],Q[]; +f(){int s;for(s=0;s<=1;s++)switch(s){case 2:case 3:++B[s];case 4:case 5:++Q[s];}} diff --git a/gcc/testsuite/gcc.c-torture/compile/920625-1.c b/gcc/testsuite/gcc.c-torture/compile/920625-1.c new file mode 100644 index 000000000000..720d43fd42fa --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920625-1.c @@ -0,0 +1,279 @@ +typedef unsigned long int unsigned_word; +typedef signed long int signed_word; +typedef unsigned_word word; + +typedef enum { ADD, ADD_CI, ADD_CO, ADD_CIO, SUB, SUB_CI, SUB_CO, +SUB_CIO, ADC_CI, ADC_CO, ADC_CIO, AND, IOR, XOR, ANDC, IORC, EQV, +NAND, NOR, AND_RC, IOR_RC, XOR_RC, ANDC_RC, IORC_RC, EQV_RC, NAND_RC, +NOR_RC, AND_CC, IOR_CC, XOR_CC, ANDC_CC, IORC_CC, EQV_CC, NAND_CC, +NOR_CC, LSHIFTR, ASHIFTR, SHIFTL, LSHIFTR_CO, ASHIFTR_CO, SHIFTL_CO, +ROTATEL, ROTATEL_CO, ROTATEXL_CIO, ASHIFTR_CON, EXTS1, EXTS2, EXTU1, +EXTU2, CLZ, CTZ, FF1, FF0, ABSVAL, NABSVAL, CMP, CPEQ, CPGE, CPGEU, +CPGT, CPGTU, CPLE, CPLEU, CPLT, CPLTU, CPNEQ, CMPPAR, DOZ, COPY, +EXCHANGE, COMCY, } opcode_t; + +typedef struct +{ + opcode_t opcode:8; + unsigned int s1:8; + unsigned int s2:8; + unsigned int d:8; +} insn_t; + +enum prune_flags +{ + NO_PRUNE = 0, + CY_0 = 1, + CY_1 = 2, + CY_JUST_SET = 4, +}; + +int flag_use_carry = 1; + +inline +recurse(opcode_t opcode, + int d, + int s1, + int s2, + word v, + int cost, + insn_t *sequence, + int n_insns, + word *values, + int n_values, + const word goal_value, + int allowed_cost, + int cy, + int prune_flags) +{ + insn_t insn; + + allowed_cost -= cost; + + if (allowed_cost > 0) + { + word old_d; + + old_d = values[d]; + values[d] = v; + + insn.opcode = opcode; + insn.s1 = s1; + insn.s2 = s2; + insn.d = d; + sequence[n_insns] = insn; + + synth(sequence, n_insns + 1, values, n_values, + goal_value, allowed_cost, cy, prune_flags); + + values[d] = old_d; + } + else if (goal_value == v) + { + insn.opcode = opcode; + insn.s1 = s1; + insn.s2 = s2; + insn.d = d; + sequence[n_insns] = insn; + test_sequence(sequence, n_insns + 1); + } +} + +synth(insn_t *sequence, + int n_insns, + word *values, + int n_values, + word goal_value, + int allowed_cost, + int ci, + int prune_hint) +{ + int s1, s2; + word v, r1, r2; + int co; + int last_dest; + + if (n_insns > 0) + last_dest = sequence[n_insns - 1].d; + else + last_dest = -1; + if (ci >= 0 && flag_use_carry) + { + for (s1 = n_values - 1; s1 >= 0; s1--) + { + r1 = values[s1]; + for (s2 = s1 - 1; s2 >= 0; s2--) + { + r2 = values[s2]; + + if (allowed_cost <= 1 && (prune_hint & CY_JUST_SET) == 0) + { + if (last_dest >= 0 && s1 != last_dest && s2 != last_dest) + continue; + } + do { word __d = ( r1) + ( r2) + (( ci)); ( co) = ( ci) ? __d <= ( r1) : __d < ( r1); (v) = __d; } while (0); + recurse(ADD_CIO, n_values, s1, s2, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, CY_JUST_SET); + do { word __d = ( r1) + ( r2) + (( ci)); ( co) = ( ci); (v) = __d; } while (0); + recurse(ADD_CI, n_values, s1, s2, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET); + + do { word __d = ( r1) - ( r2) - (( ci)); ( co) = ( ci) ? __d >= ( r1) : __d > ( r1); (v) = __d; } while (0); + recurse(SUB_CIO, n_values, s1, s2, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, CY_JUST_SET); + do { word __d = ( r2) - ( r1) - (( ci)); ( co) = ( ci) ? __d >= ( r2) : __d > ( r2); (v) = __d; } while (0); + recurse(SUB_CIO, n_values, s2, s1, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, CY_JUST_SET); + + do { word __d = ( r1) - ( r2) - (( ci)); ( co) = ( ci); (v) = __d; } while (0); + recurse(SUB_CI, n_values, s1, s2, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET); + do { word __d = ( r2) - ( r1) - (( ci)); ( co) = ( ci); (v) = __d; } while (0); + recurse(SUB_CI, n_values, s2, s1, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET); + + } + } + } + for (s1 = n_values - 1; s1 >= 0; s1--) + { + r1 = values[s1]; + for (s2 = s1 - 1; s2 >= 0; s2--) + { + r2 = values[s2]; + + if (allowed_cost <= 1) + { + if (last_dest >= 0 && s1 != last_dest && s2 != last_dest) + continue; + } + + do { word __d = ( r1) + ( r2); ( co) = __d < ( r1); (v) = __d; } while (0); + recurse(ADD_CO, n_values, s1, s2, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, CY_JUST_SET); + + ((v) = ( r1) + ( r2), ( co) = ( ci)); + recurse(ADD, n_values, s1, s2, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET); + + do { word __d = ( r1) - ( r2); ( co) = __d > ( r1); (v) = __d; } while (0); + recurse(SUB_CO, n_values, s1, s2, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, CY_JUST_SET); + do { word __d = ( r2) - ( r1); ( co) = __d > ( r2); (v) = __d; } while (0); + recurse(SUB_CO, n_values, s2, s1, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, CY_JUST_SET); + ((v) = ( r1) - ( r2), ( co) = ( ci)); + recurse(SUB, n_values, s1, s2, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET); + ((v) = ( r2) - ( r1), ( co) = ( ci)); + recurse(SUB, n_values, s2, s1, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET); + + ((v) = ( r1) & ( r2), ( co) = ( ci)); + recurse(AND, n_values, s1, s2, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET); + + ((v) = ( r1) | ( r2), ( co) = ( ci)); + recurse(IOR, n_values, s1, s2, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET); + + ((v) = ( r1) ^ ( r2), ( co) = ( ci)); + recurse(XOR, n_values, s1, s2, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET); + + ((v) = ( r1) & ~( r2), ( co) = ( ci)); + recurse(ANDC, n_values, s1, s2, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET); + ((v) = ( r2) & ~( r1), ( co) = ( ci)); + recurse(ANDC, n_values, s2, s1, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET); + ((v) = ( r1) | ~( r2), ( co) = ( ci)); + recurse(IORC, n_values, s1, s2, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET); + ((v) = ( r2) | ~( r1), ( co) = ( ci)); + recurse(IORC, n_values, s2, s1, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET); + ((v) = ( r1) ^ ~( r2), ( co) = ( ci)); + recurse(EQV, n_values, s1, s2, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET); + + } + } + if (ci >= 0 && flag_use_carry) + { + for (s1 = n_values - 1; s1 >= 0; s1--) + { + r1 = values[s1]; + + if (allowed_cost <= 1 && (prune_hint & CY_JUST_SET) == 0) + { + + if (last_dest >= 0 && s1 != last_dest) + continue; + } + + do { word __d = ( r1) + ( r1) + (( ci)); ( co) = ( ci) ? __d <= ( r1) : __d < ( r1); (v) = __d; } while (0); + recurse(ADD_CIO, n_values, s1, s1, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, CY_JUST_SET); + + do { word __d = ( r1) + ( r1) + (( ci)); ( co) = ( ci); (v) = __d; } while (0); + recurse(ADD_CI, n_values, s1, s1, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET); + + do { word __d = ( r1) + ( -1 ) + (( ci)); ( co) = ( ci) ? __d <= ( r1) : __d < ( r1); (v) = __d; } while (0); + recurse(ADD_CIO, n_values, s1, (0x20 + -1) , v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, CY_JUST_SET); + + do { word __d = ( r1) + ( 0 ) + (( ci)); ( co) = ( ci) ? __d <= ( r1) : __d < ( r1); (v) = __d; } while (0); + recurse(ADD_CIO, n_values, s1, (0x20 + 0) , v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, CY_JUST_SET); + do { word __d = ( 0 ) - ( r1) - (( ci)); ( co) = ( ci) ? __d >= ( 0 ) : __d > ( 0 ); (v) = __d; } while (0); + recurse(SUB_CIO, n_values, (0x20 + 0) , s1, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, CY_JUST_SET); + + } + } + for (s1 = n_values - 1; s1 >= 0; s1--) + { + r1 = values[s1]; + + if (allowed_cost <= 1) + { + if (last_dest >= 0 && s1 != last_dest) + continue; + } + do { word __d = ( r1) + ( r1); ( co) = __d < ( r1); (v) = __d; } while (0); + recurse(ADD_CO, n_values, s1, s1, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, CY_JUST_SET); + + ((v) = ( r1) & ( 1 ), ( co) = ( ci)); + recurse(AND, n_values, s1, (0x20 + 1) , v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET); + + ((v) = ( r1) ^ ( 1 ), ( co) = ( ci)); + recurse(XOR, n_values, s1, (0x20 + 1) , v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET); + + ((v) = ( -1 ) - ( r1), ( co) = ( ci)); + recurse(SUB, n_values, (0x20 + -1) , s1, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET); + do { word __d = ( r1) + ( 1 ); ( co) = __d < ( r1); (v) = __d; } while (0); + recurse(ADD_CO, n_values, s1, (0x20 + 1) , v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, CY_JUST_SET); + ((v) = ( r1) + ( 1 ), ( co) = ( ci)); + recurse(ADD, n_values, s1, (0x20 + 1) , v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET); + do { word __d = ( r1) + ( -1 ); ( co) = __d < ( r1); (v) = __d; } while (0); + recurse(ADD_CO, n_values, s1, (0x20 + -1) , v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, CY_JUST_SET); + do { word __d = ( r1) - ( 1 ); ( co) = __d > ( r1); (v) = __d; } while (0); + recurse(SUB_CO, n_values, s1, (0x20 + 1) , v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, CY_JUST_SET); + do { word __d = ( 0 ) - ( r1); ( co) = __d > ( 0 ); (v) = __d; } while (0); + recurse(SUB_CO, n_values, (0x20 + 0) , s1, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, CY_JUST_SET); + ((v) = ( 0 ) - ( r1), ( co) = ( ci)); + recurse(SUB, n_values, (0x20 + 0) , s1, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET); + ((v) = ((unsigned_word) ( r1) >> (( 1 ) & (32 - 1)) ), ( co) = ( ci)); + recurse(LSHIFTR, n_values, s1, (0x20 + 1) , v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET); + ((v) = ((signed_word) ( r1) >> (( 1 ) & (32 - 1)) ), ( co) = ( ci)); + recurse(ASHIFTR, n_values, s1, (0x20 + 1) , v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET); + ((v) = ((signed_word) ( r1) << (( 1 ) & (32 - 1)) ), ( co) = ( ci)); + recurse(SHIFTL, n_values, s1, (0x20 + 1) , v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET); + ((v) = ((unsigned_word) ( r1) >> (( 32 -1 ) & (32 - 1)) ), ( co) = ( ci)); + recurse(LSHIFTR, n_values, s1, (0x20 + 32 -1) , v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET); + ((v) = ((signed_word) ( r1) >> (( 32 -1 ) & (32 - 1)) ), ( co) = ( ci)); + recurse(ASHIFTR, n_values, s1, (0x20 + 32 -1) , v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET); + } + if (ci >= 0 && flag_use_carry + && (allowed_cost <= 1 ? ((prune_hint & CY_JUST_SET) != 0) : 1)) + { + do { word __d = ( 0 ) + ( 0 ) + (( ci)); ( co) = ( ci) ? __d <= ( 0 ) : __d < ( 0 ); (v) = __d; } while (0); + recurse(ADD_CIO, n_values, (0x20 + 0) , (0x20 + 0) , v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, CY_JUST_SET | CY_0); + do { word __d = ( 0 ) - ( 0 ) - (( ci)); ( co) = ( ci) ? __d >= ( 0 ) : __d > ( 0 ); (v) = __d; } while (0); + recurse(SUB_CIO, n_values, (0x20 + 0) , (0x20 + 0) , v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET); + do { word __d = ( 0 ) - ( -1 ) - (( ci)); ( co) = ( ci) ? __d >= ( 0 ) : __d > ( 0 ); (v) = __d; } while (0); + recurse(SUB_CIO, n_values, (0x20 + 0) , (0x20 + -1) , v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, CY_JUST_SET | CY_1); + do { word __d = ( 0 ) + ( -1 ) + (( ci)); ( co) = ( ci) ? __d <= ( 0 ) : __d < ( 0 ); (v) = __d; } while (0); + recurse(ADD_CIO, n_values, (0x20 + 0) , (0x20 + -1) , v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET); + + } + + if (allowed_cost > 1) + { + ((v) = ( 0x80000000 ), ( co) = ( ci)); + recurse(COPY, n_values, (0x20 - 2) , 0, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET); + + ((v) = ( -1 ), ( co) = ( ci)); + recurse(COPY, n_values, (0x20 + -1) , 0, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET); + + ((v) = ( 1 ), ( co) = ( ci)); + recurse(COPY, n_values, (0x20 + 1) , 0, v, 1, sequence, n_insns, values, n_values + 1, goal_value, allowed_cost, co, prune_hint & ~CY_JUST_SET); + } +} diff --git a/gcc/testsuite/gcc.c-torture/compile/920625-2.c b/gcc/testsuite/gcc.c-torture/compile/920625-2.c new file mode 100644 index 000000000000..1466285f88e3 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920625-2.c @@ -0,0 +1,103 @@ +typedef char * caddr_t; +typedef unsigned Cursor; +typedef char *String; +typedef struct _WidgetRec *Widget; +typedef char Boolean; +typedef unsigned int Cardinal; +typedef struct _XedwListReturnStruct { + String string; + int xedwList_index; + struct _XedwListReturnStruct *next; +} XedwListReturnStruct; +static XedwListReturnStruct *return_list; +static String srcdir, dstdir; +char *strcpy(); + extern void setCursor(Cursor); + extern void query_dialog(String, Boolean); + extern Boolean directoryManagerNewDirectory(String); +trashQueryResult(Widget w, Boolean delete, caddr_t call_data) +{ + int execute(String, String, String, Boolean); + extern void destroy_button_dialog(void); + extern void changestate(Boolean); + + extern Cursor busy, left_ptr; + extern String cwd; + static void freeReturnStruct(void); + String rmstring; + int status; + XedwListReturnStruct *tmp; + setCursor(busy); + destroy_button_dialog(); + if (delete == 1) { + rmstring = (("rm -fr") != ((void *)0) ? (strcpy((char*)XtMalloc((unsigned)strlen("rm -fr") + 1), "rm -fr")) : ((void *)0)); + tmp = return_list; + while (tmp != ((void *)0)) { + rmstring = (String) XtRealloc (rmstring, sizeof(char) * + (strlen(rmstring) + + strlen(tmp->string) + 5)); + sprintf(rmstring, "%s '%s'", rmstring, tmp->string); + tmp = tmp->next; + } + if ((status = execute(((void *)0), "rm", rmstring, 1)) != 0) { + XBell(XtDisplay(w), 100); + query_dialog("Can't remove file", 0); + } + XtFree(rmstring); + + directoryManagerNewDirectory(cwd); + } else { + changestate(1); + } + setCursor(left_ptr); + freeReturnStruct(); +} + +copyQueryResult(Widget w, Boolean copy, caddr_t call_data) +{ + extern void destroy_button_dialog(); + extern void changestate(Boolean); + extern Cursor busy, left_ptr; + static void freeReturnStruct(void); + int execute(String, String, String, Boolean); + extern String cwd; + String copystring; + int status; + Cardinal srclen, dstlen; + XedwListReturnStruct *tmp; + destroy_button_dialog(); + setCursor(busy); + if (copy == 1) { + srclen = strlen(srcdir); + dstlen = strlen(dstdir); + copystring = (("cp -r") != ((void *)0) ? (strcpy((char*)XtMalloc((unsigned)strlen("cp -r") + 1), "cp -r")) : ((void *)0)); + tmp = return_list; + while (tmp != ((void *)0)) { + copystring = (String) XtRealloc (copystring, sizeof(char) * + (strlen(copystring) + + strlen(tmp->string) + + srclen + 6)); + sprintf(copystring, "%s '%s/%s'", copystring, srcdir, tmp->string); + tmp = tmp->next; + } + copystring = (String) XtRealloc (copystring, sizeof(char) * + (strlen(copystring) + + dstlen + 5)); + sprintf(copystring, "%s '%s'", copystring, dstdir); + if ((status = execute(((void *)0), "cp", copystring, 1)) != 0) { + XBell(XtDisplay(w), 100); + query_dialog("Can't copy file!", 0); + } + XtFree(copystring); + + directoryManagerNewDirectory(cwd); + } else { + changestate(1); + } + XtFree(srcdir); + XtFree(dstdir); + setCursor(left_ptr); + freeReturnStruct(); +} + +freeReturnStruct(){} diff --git a/gcc/testsuite/gcc.c-torture/compile/920626-1.c b/gcc/testsuite/gcc.c-torture/compile/920626-1.c new file mode 100644 index 000000000000..54419866a1fc --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920626-1.c @@ -0,0 +1 @@ +f(x)unsigned x;{return x>>-5;} diff --git a/gcc/testsuite/gcc.c-torture/compile/920701-1.c b/gcc/testsuite/gcc.c-torture/compile/920701-1.c new file mode 100644 index 000000000000..4302f9ea331a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920701-1.c @@ -0,0 +1 @@ +f(char*c){extern char a[],b[];return a+(b-c);} diff --git a/gcc/testsuite/gcc.c-torture/compile/920702-1.c b/gcc/testsuite/gcc.c-torture/compile/920702-1.c new file mode 100644 index 000000000000..23a5395b0cd1 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920702-1.c @@ -0,0 +1,10 @@ +int somevar; +void +yylex () +{ + register int result = 0; + int num_bits = -1; + + if (((result >> -1) & 1)) + somevar = 99; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/920706-1.c b/gcc/testsuite/gcc.c-torture/compile/920706-1.c new file mode 100644 index 000000000000..13b0ff1e0ba9 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920706-1.c @@ -0,0 +1 @@ +f(){float i[2],o[1];g(o);return*o;} diff --git a/gcc/testsuite/gcc.c-torture/compile/920710-2.c b/gcc/testsuite/gcc.c-torture/compile/920710-2.c new file mode 100644 index 000000000000..dcaf1bea3cf1 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920710-2.c @@ -0,0 +1,36 @@ +union u +{ + struct {unsigned h, l;} i; + double d; +}; + +foo (union u x) +{ + while (x.i.h++) + { + while (x.i.l-- > 0) + ; + while (x.d++ > 0) + ; + } +} + +union n +{ + long long unsigned i; + double d; +}; + +bar (union n x) +{ + int i; + for (i = 0; i < 100; i++) + { + while (--x.i > 0) + ; + while (++x.d > 0) + ; + } + return x.i; +} + diff --git a/gcc/testsuite/gcc.c-torture/compile/920711-1.c b/gcc/testsuite/gcc.c-torture/compile/920711-1.c new file mode 100644 index 000000000000..a5aa7df1127c --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920711-1.c @@ -0,0 +1 @@ +f(a){a=(1,1)/2;} diff --git a/gcc/testsuite/gcc.c-torture/compile/920721-1.c b/gcc/testsuite/gcc.c-torture/compile/920721-1.c new file mode 100644 index 000000000000..7ced611eb6f2 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920721-1.c @@ -0,0 +1,11 @@ +typedef struct{short ttype;float s;}T; +short t[8][8]; + +T f(T t2,T t1) +{ + T x; + if (t1.ttype == 1) + x.ttype = t[t2.ttype][t1.ttype], + x.s = 1; + return x; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/920723-1.c b/gcc/testsuite/gcc.c-torture/compile/920723-1.c new file mode 100644 index 000000000000..af0cf76f42c0 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920723-1.c @@ -0,0 +1,23 @@ +typedef struct { + double x, y; +} vector_t; +double sqrt(); +f(int count,vector_t*pos,double r,double *rho) +{ + int i, j, miny, maxy, hy; + float help, d; + int gitt[150][150]; + int *data = (int *)malloc(count*sizeof(int)); + for (i = 0; i < count; i++) + rho[i] = 0; + for (i = 1; i < count; i++) + for (hy = miny; hy<= maxy; hy++) + while(j >=0) { + d = pos[i].y - pos[j].y; + if ( d <= r) { + d = sqrt(d); + rho[i] += help; + } + } +} + diff --git a/gcc/testsuite/gcc.c-torture/compile/920729-1.c b/gcc/testsuite/gcc.c-torture/compile/920729-1.c new file mode 100644 index 000000000000..96676e953077 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920729-1.c @@ -0,0 +1,2 @@ +extern int i;extern volatile int i; +f(){int j;for(;;)j = i;} diff --git a/gcc/testsuite/gcc.c-torture/compile/920806-1.c b/gcc/testsuite/gcc.c-torture/compile/920806-1.c new file mode 100644 index 000000000000..0928fe8a784c --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920806-1.c @@ -0,0 +1 @@ +f(){short x=32000;} diff --git a/gcc/testsuite/gcc.c-torture/compile/920808-1.c b/gcc/testsuite/gcc.c-torture/compile/920808-1.c new file mode 100644 index 000000000000..17510a968213 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920808-1.c @@ -0,0 +1 @@ +f(i){for(i=1;i<=2;({;}),i++){({;}),g();}} diff --git a/gcc/testsuite/gcc.c-torture/compile/920809-1.c b/gcc/testsuite/gcc.c-torture/compile/920809-1.c new file mode 100644 index 000000000000..ad35e1210032 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920809-1.c @@ -0,0 +1 @@ +f(x,y){memcpy (&x,&y,8192);} diff --git a/gcc/testsuite/gcc.c-torture/compile/920817-1.c b/gcc/testsuite/gcc.c-torture/compile/920817-1.c new file mode 100644 index 000000000000..31a57339ea92 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920817-1.c @@ -0,0 +1 @@ +int v;static inline f(){return 0;}g(){return f();}void h(){return v++;} diff --git a/gcc/testsuite/gcc.c-torture/compile/920820-1.c b/gcc/testsuite/gcc.c-torture/compile/920820-1.c new file mode 100644 index 000000000000..2bc0dbea07b1 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920820-1.c @@ -0,0 +1 @@ +long long f(double y){return y;} diff --git a/gcc/testsuite/gcc.c-torture/compile/920821-1.c b/gcc/testsuite/gcc.c-torture/compile/920821-1.c new file mode 100644 index 000000000000..40a8c178f10d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920821-1.c @@ -0,0 +1 @@ +/* empty */ diff --git a/gcc/testsuite/gcc.c-torture/compile/920821-2.c b/gcc/testsuite/gcc.c-torture/compile/920821-2.c new file mode 100644 index 000000000000..a69c0a901ba2 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920821-2.c @@ -0,0 +1,4 @@ +typedef struct{int p[25];}t1; +struct{t1 x,y;}y; +t1 x[1]; +f(){y.x=*x;y.y=*x;} diff --git a/gcc/testsuite/gcc.c-torture/compile/920825-1.c b/gcc/testsuite/gcc.c-torture/compile/920825-1.c new file mode 100644 index 000000000000..514d63f977f9 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920825-1.c @@ -0,0 +1,3 @@ +#pragma pack(1) +struct{unsigned short f1:5;unsigned short f2:6;}x; +f(){x.f2=1;} diff --git a/gcc/testsuite/gcc.c-torture/compile/920825-2.c b/gcc/testsuite/gcc.c-torture/compile/920825-2.c new file mode 100644 index 000000000000..9834aac1783f --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920825-2.c @@ -0,0 +1,3 @@ +f(double*a,int m){int j;for(j=0;j<m;j++)a[j]=1;} +g(double*a){int j;for(j=0;j<4;j++)a[j]=1;} + diff --git a/gcc/testsuite/gcc.c-torture/compile/920826-1.c b/gcc/testsuite/gcc.c-torture/compile/920826-1.c new file mode 100644 index 000000000000..d19eff2cec65 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920826-1.c @@ -0,0 +1 @@ +f(int*x){goto*(char)*x;} diff --git a/gcc/testsuite/gcc.c-torture/compile/920828-1.c b/gcc/testsuite/gcc.c-torture/compile/920828-1.c new file mode 100644 index 000000000000..4893173423b6 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920828-1.c @@ -0,0 +1 @@ +char a[]={4,5};f(n){return a[n<2?n:0];} diff --git a/gcc/testsuite/gcc.c-torture/compile/920829-1.c b/gcc/testsuite/gcc.c-torture/compile/920829-1.c new file mode 100644 index 000000000000..593400bac92a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920829-1.c @@ -0,0 +1 @@ +f(double x){double y;y=x/0.5;if(y<0.1)y=1.0;} diff --git a/gcc/testsuite/gcc.c-torture/compile/920831-1.c b/gcc/testsuite/gcc.c-torture/compile/920831-1.c new file mode 100644 index 000000000000..ff2fd6360bf5 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920831-1.c @@ -0,0 +1 @@ +f(x){goto*(char)x;} diff --git a/gcc/testsuite/gcc.c-torture/compile/920902-1.c b/gcc/testsuite/gcc.c-torture/compile/920902-1.c new file mode 100644 index 000000000000..6f6dcd5bf305 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920902-1.c @@ -0,0 +1,2 @@ +void f(int); +void f(x)unsigned char x;{} diff --git a/gcc/testsuite/gcc.c-torture/compile/920909-1.c b/gcc/testsuite/gcc.c-torture/compile/920909-1.c new file mode 100644 index 000000000000..939aaf789e81 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920909-1.c @@ -0,0 +1 @@ +long long f(long long a,long long b){return a<<b;} diff --git a/gcc/testsuite/gcc.c-torture/compile/920917-1.c b/gcc/testsuite/gcc.c-torture/compile/920917-1.c new file mode 100644 index 000000000000..ebe8200d48bf --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920917-1.c @@ -0,0 +1,2 @@ +inline f(x){switch(x){case 6:case 4:case 3:case 1:;}return x;} +g(){f(sizeof("xxxxxx"));} diff --git a/gcc/testsuite/gcc.c-torture/compile/920928-1.c b/gcc/testsuite/gcc.c-torture/compile/920928-1.c new file mode 100644 index 000000000000..137363dc1203 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920928-1.c @@ -0,0 +1,2 @@ +struct{int c;}v; +static long i=((char*)&(v.c)-(char*)&v); diff --git a/gcc/testsuite/gcc.c-torture/compile/920928-2.c b/gcc/testsuite/gcc.c-torture/compile/920928-2.c new file mode 100644 index 000000000000..a0964f90f446 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920928-2.c @@ -0,0 +1,19 @@ +typedef struct{struct{char*d;int b;}*i;}*t; +double f(); +g(p)t p; +{ + short x,y,delta,s,w,h,fx,fy,tx,ty; + int q1,q2,q3,q4; + h=f((ty-fy)/2.0+0.5); + s=(((int)((short)(tx-fx))<(int)((short)(ty-fy)))?((short)(tx-fx)):((short)(ty-fy)))%2; + delta=(((int)(w)<(int)(h))?(w):(h))-s; + for(x=0;x<=delta;x++) + for(y=1-s;y<=delta;y++){ + q1=((int)((*(p->i->d+(fx+w+x)/8+(fy+h+y)*p->i->b)&(1<<((fx+w+x)%8)))?1:0)); + q2=((int)((*(p->i->d+(fx+w+y)/8+(fy+h-s-x)*p->i->b)&(1<<((fx+w+y)%8)))?1:0)); + q3=((int)((*(p->i->d+(fx+w-s-x)/8+(fy+h-s-y)*p->i->b)&(1<<((fx+w-s-x)%8)))?1:0)); + q4=((int)((*(p->i->d+(fx+w-s-y)/8+(fy+h+x)*p->i->b)&(1<<((fx+w-s-y)%8)))?1:0)); + if(q4!=q1) + ff(p,fx+w-s-y,fy+h+x); + } +} diff --git a/gcc/testsuite/gcc.c-torture/compile/920928-3.c b/gcc/testsuite/gcc.c-torture/compile/920928-3.c new file mode 100644 index 000000000000..583dc69b74c5 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920928-3.c @@ -0,0 +1,19 @@ +f (int phaseone) +{ + typedef struct + { + unsigned char *p; + } + FILE; + FILE b[2]; + static unsigned char xchr[2]; + int j; + int for_end; + if (phaseone) + { + if (j <= for_end) + do + *(b[1].p) = xchr[j]; + while (j++ < 10); + } +} diff --git a/gcc/testsuite/gcc.c-torture/compile/920928-4.c b/gcc/testsuite/gcc.c-torture/compile/920928-4.c new file mode 100644 index 000000000000..348de654f308 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920928-4.c @@ -0,0 +1,113 @@ +typedef unsigned char unsigned8; +typedef unsigned short int unsigned16; +typedef unsigned long int unsigned32; +typedef char signed8; +typedef short int signed16; +typedef long int signed32; +typedef unsigned32 boolean32; +typedef unsigned long int error_status_t; +typedef struct { + unsigned32 time_low; + unsigned16 time_mid; + unsigned16 time_hi_and_version; + unsigned8 clock_seq_hi_and_reserved; + unsigned8 clock_seq_low; + unsigned char node[6]; +} uuid_t; + +typedef unsigned32 bitset; +typedef signed32 sec_timeval_sec_t; +typedef struct { + signed32 sec; + signed32 usec; +} sec_timeval_t; +typedef signed32 sec_timeval_period_t; +typedef signed32 sec_rgy_acct_key_t; + +typedef struct { + uuid_t source; + signed32 handle; + boolean32 valid; +} sec_rgy_cursor_t; +typedef unsigned char sec_rgy_pname_t[257]; +typedef unsigned char sec_rgy_name_t[1025]; + +typedef signed32 sec_rgy_override_t; +typedef signed32 sec_rgy_mode_resolve_t; +typedef unsigned char sec_rgy_unix_gecos_t[292]; +typedef unsigned char sec_rgy_unix_login_name_t[1025]; +typedef unsigned char sec_rgy_member_t[1025]; +typedef unsigned char sec_rgy_unix_passwd_buf_t[16]; +typedef struct sec_rgy_sid_t { + uuid_t person; + uuid_t group; + uuid_t org; +} sec_rgy_sid_t; +typedef struct { + signed32 person; + signed32 group; + signed32 org; +} sec_rgy_unix_sid_t; +typedef struct { + sec_rgy_unix_login_name_t name; + sec_rgy_unix_passwd_buf_t passwd; + signed32 uid; + signed32 gid; + signed32 oid; + sec_rgy_unix_gecos_t gecos; + sec_rgy_pname_t homedir; + sec_rgy_pname_t shell; +} sec_rgy_unix_passwd_t; +typedef unsigned char sec_rgy_member_buf_t[10250]; +typedef struct { + sec_rgy_name_t name; + signed32 gid; + sec_rgy_member_buf_t members; +} sec_rgy_unix_group_t; + +typedef struct { + uuid_t site_id; + sec_timeval_sec_t person_dtm; + sec_timeval_sec_t group_dtm; + sec_timeval_sec_t org_dtm; +} rs_cache_data_t; + +typedef enum { + rs_unix_query_name, + rs_unix_query_unix_num, + rs_unix_query_none +} rs_unix_query_t; + +typedef struct { + rs_unix_query_t query; + union { + struct { + long int name_len; + sec_rgy_name_t name; + } name; + long int unix_num; + } tagged_union; +} rs_unix_query_key_t; + +static unsigned long int IDL_offset_vec[] = +{ + 0, + sizeof(sec_rgy_unix_group_t), + (unsigned long int) ((unsigned char *) &((sec_rgy_unix_group_t *) 0)->name - (unsigned char *) 0), + (unsigned long int) ((unsigned char *) &((sec_rgy_unix_group_t *) 0)->gid - (unsigned char *) 0), + (unsigned long int) ((unsigned char *) &((sec_rgy_unix_group_t *) 0)->members - (unsigned char *) 0), + sizeof(rs_cache_data_t), + (unsigned long int) ((unsigned char *) &((rs_cache_data_t *) 0)->site_id.time_low - (unsigned char *) 0), + (unsigned long int) ((unsigned char *) &((rs_cache_data_t *) 0)->site_id.time_mid - (unsigned char *) 0), + (unsigned long int) ((unsigned char *) &((rs_cache_data_t *) 0)->site_id.time_hi_and_version - (unsigned char *) 0), + sizeof(sec_rgy_unix_passwd_t), + (unsigned long int) ((unsigned char *) &((sec_rgy_cursor_t *) 0)->source.clock_seq_hi_and_reserved - (unsigned char *) 0), + (unsigned long int) ((unsigned char *) &((sec_rgy_cursor_t *) 0)->source.clock_seq_low - (unsigned char *) 0), + (unsigned long int) ((unsigned char *) &((sec_rgy_cursor_t *) 0)->source.node - (unsigned char *) 0), + (unsigned long int) ((unsigned char *) &((sec_rgy_cursor_t *) 0)->handle - (unsigned char *) 0), + (unsigned long int) ((unsigned char *) &((sec_rgy_cursor_t *) 0)->valid - (unsigned char *) 0), + sizeof(struct {long int name_len; sec_rgy_name_t name;}), + (unsigned long int) ((unsigned char *) &((struct {long int name_len; sec_rgy_name_t name;} *)0)->name_len + - (unsigned char *) 0), + (unsigned long int) ((unsigned char *) &((struct {long int name_len; sec_rgy_name_t name;} *)0)->name - (unsigned char *) 0), +}; diff --git a/gcc/testsuite/gcc.c-torture/compile/920928-5.c b/gcc/testsuite/gcc.c-torture/compile/920928-5.c new file mode 100644 index 000000000000..8c975f0c0516 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920928-5.c @@ -0,0 +1,7 @@ +/* REPRODUCED:CC1:SIGNAL MACHINE:m68k OPTIONS:-fpcc-struct-return */ +struct b{}; +f(struct b(*f)()) +{ +struct b d=f(); +} + diff --git a/gcc/testsuite/gcc.c-torture/compile/920928-6.c b/gcc/testsuite/gcc.c-torture/compile/920928-6.c new file mode 100644 index 000000000000..692191b1245f --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/920928-6.c @@ -0,0 +1,2 @@ +struct{int c;}v; +static short i=((char*)&(v.c)-(char*)&v); diff --git a/gcc/testsuite/gcc.c-torture/compile/921004-1.c b/gcc/testsuite/gcc.c-torture/compile/921004-1.c new file mode 100644 index 000000000000..a947229089fd --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/921004-1.c @@ -0,0 +1,6 @@ +/* REPRODUCED:CC1:SIGNAL MACHINE:i386 OPTIONS: */ +long long f() +{ +long long*g,*s; +return*g+*s; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/921011-1.c b/gcc/testsuite/gcc.c-torture/compile/921011-1.c new file mode 100644 index 000000000000..6cc707dc74c6 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/921011-1.c @@ -0,0 +1,27 @@ +void +fun (nb) + int nb; +{ + int th, h, em, nlwm, nlwS, nlw, sy; + + while (nb--) + while (h--) + { + nlw = nlwm; + while (nlw) + { + if (nlwS == 1) + { + } + else + if (nlwS == 1) + { + } + nlwS--; nlw--; + } + if (em) + nlwS--; + if (++sy == th) + sy = 0; + } +} diff --git a/gcc/testsuite/gcc.c-torture/compile/921011-2.c b/gcc/testsuite/gcc.c-torture/compile/921011-2.c new file mode 100644 index 000000000000..bf11dad979ff --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/921011-2.c @@ -0,0 +1,65 @@ +extern int foobar1 (); + +typedef struct + { + unsigned long colormap; + unsigned long red_max; + unsigned long red_mult; + unsigned long green_max; + unsigned long green_mult; + unsigned long blue_max; + unsigned long blue_mult; + unsigned long base_pixel; + unsigned long visualid; + unsigned long killid; + } +frotz; + +int +foobar (stdcmap, count) + frotz **stdcmap; + int *count; +{ + register int i; + frotz *data = ((void *) 0); + + unsigned long nitems; + int ncmaps; + int old_style = 0; + unsigned long def_visual = 0L; + frotz *cmaps; + + + if ( foobar1 (&data) != 0) + return 0; + if (nitems < 10) + { + ncmaps = 1; + if (nitems < 9) + { + } + } + else + ncmaps = (nitems / 10); + + { + register frotz *map; + register frotz *prop; + + for (i = ncmaps, map = cmaps, prop = data; i > 0; i--, map++, prop++) + { + map->colormap = prop->colormap; + map->red_max = prop->red_max; + map->red_mult = prop->red_mult; + map->green_max = prop->green_max; + map->green_mult = prop->green_mult; + map->blue_max = prop->blue_max; + map->blue_mult = prop->blue_mult; + map->base_pixel = prop->base_pixel; + map->visualid = (def_visual ? def_visual : prop->visualid); + map->killid = (old_style ? 0L : prop->killid); + } + } + *stdcmap = cmaps; + *count = ncmaps; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/921012-1.c b/gcc/testsuite/gcc.c-torture/compile/921012-1.c new file mode 100644 index 000000000000..7b5cb6b9f179 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/921012-1.c @@ -0,0 +1,4 @@ +f() +{ +g(({int x;0;})); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/921012-2.c b/gcc/testsuite/gcc.c-torture/compile/921012-2.c new file mode 100644 index 000000000000..6f4de779549a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/921012-2.c @@ -0,0 +1,7 @@ +struct foo { +int a,b,c; +}; +f(struct foo*a,struct foo*b) +{ +*a=*b; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/921013-1.c b/gcc/testsuite/gcc.c-torture/compile/921013-1.c new file mode 100644 index 000000000000..0d14cbc6bb66 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/921013-1.c @@ -0,0 +1,4 @@ +f(int x,short y) +{ +long z=y<0?x>0?x:0:y; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/921019-1.c b/gcc/testsuite/gcc.c-torture/compile/921019-1.c new file mode 100644 index 000000000000..227bdc276fa9 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/921019-1.c @@ -0,0 +1,9 @@ +struct +{ +int n:1,c:1; +}p; + +f() +{ +p.c=p.n=0; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/921021-1.c b/gcc/testsuite/gcc.c-torture/compile/921021-1.c new file mode 100644 index 000000000000..18dffeb9dd34 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/921021-1.c @@ -0,0 +1,12 @@ +void g(); + +f() +{ +int x=1; +while(x) +{ +x=h(); +if(x) +g(); +} +} diff --git a/gcc/testsuite/gcc.c-torture/compile/921024-1.c b/gcc/testsuite/gcc.c-torture/compile/921024-1.c new file mode 100644 index 000000000000..e723246d6b2e --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/921024-1.c @@ -0,0 +1,9 @@ +long long f(s,r) +{ + return *(long long*)(s+r); +} + +g(s,r) +{ + *(long long*)(s+r)=0; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/921026-1.c b/gcc/testsuite/gcc.c-torture/compile/921026-1.c new file mode 100644 index 000000000000..18238de8332e --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/921026-1.c @@ -0,0 +1,4 @@ +f(unsigned short*a) +{ +a[0]=65535; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/921103-1.c b/gcc/testsuite/gcc.c-torture/compile/921103-1.c new file mode 100644 index 000000000000..578e91aaf831 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/921103-1.c @@ -0,0 +1,12 @@ +struct { + unsigned int f1, f2; +} s; + +f() +{ + unsigned x, y; + x = y = 0; + while (y % 4) + y++; + g(&s.f2, s.f1 + x, 4); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/921109-1.c b/gcc/testsuite/gcc.c-torture/compile/921109-1.c new file mode 100644 index 000000000000..eda43451f257 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/921109-1.c @@ -0,0 +1,28 @@ +typedef struct { double x, y; } p; +typedef struct { int s; float r; } t; +t *e, i; +int i1; + +f(t *op) +{ +int i2 = e->r; +p pt; +int c = g(); +t p; + +if (c) +{ +i = *e; +e -= 3; +return 8; +} +if (op > e) +return 1; +op->r = pt.x; +op->r = pt.y; +p = *e; +++e; +e->r = i1, e->s = i1; +*++e = p; +return 3; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/921109-3.c b/gcc/testsuite/gcc.c-torture/compile/921109-3.c new file mode 100644 index 000000000000..40e63f26ed69 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/921109-3.c @@ -0,0 +1,46 @@ +/* EXTRA_OPTIONS: -fcaller-saves */ + +extern char *malloc(); + +main() +{ + char w[1000]; + int i, j, nres, t[1000]; + float dv, (**dmat)[4][4]; + short at1, at2; + + nres = 200; + + for (i = 0; i < nres; i++) + { + w[i] = rand() & 15; + t[i] = 0; + } + + dmat = (float (**)[4][4]) malloc(nres * sizeof(*dmat)); + if (!dmat) + return 1; + for (i = 0; i < nres; i++) + { + dmat[i] = (float (*)[4][4]) malloc(nres * sizeof(**dmat)); + if (!dmat[i]) + return 1; + } + + for (i = 0; i < nres; i++) + for (j = i; j < nres; j++) + for (at1 = 0; at1 <= 3; at1++) + for (at2 = 0; at2 <= 3; at2++) + if (i != j || at1 != at2) + if ((w[i] & (1 << at1)) && (w[j] & (1 << at2))) + { + dv = 20.0 * (rand() & 32767) / 32768.0; + dmat[i][j][at1][at2] = dmat[j][i][at2][at1] = dv; + } + else + dmat[i][j][at1][at2] = dmat[j][i][at2][at1] = 999.0; + else + dmat[i][j][at1][at2] = 0.0; + + return 0; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/921111-1.c b/gcc/testsuite/gcc.c-torture/compile/921111-1.c new file mode 100644 index 000000000000..11b467460b34 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/921111-1.c @@ -0,0 +1,40 @@ +int ps; +struct vp { + int wa; +}; +typedef struct vp *vpt; +typedef struct vc { + int o; + vpt py[8]; +} *vct; +struct n { + int a; +}; +struct nh { + int x; +}; +typedef struct np *npt; +struct np { + vct d; + int di; +}; +struct nh xhp; +struct n np[3]; + +f(dp) + npt dp; +{ + vpt *py; + int a, l, o = 0; + a = dp->d->o; + if (dp->di < 0) + l = ps; + + if ((int)o & 3) + g(); + + xhp.x = a; + py = &dp->d->py[dp->di]; + if (o + l > ps) + np[2].a = (int)(py[1])->wa; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/921116-2.c b/gcc/testsuite/gcc.c-torture/compile/921116-2.c new file mode 100644 index 000000000000..9eac91cb5c2e --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/921116-2.c @@ -0,0 +1,9 @@ +typedef struct { + long l[5]; +} t; + +f(size) +{ + t event; + g(&(event.l[2 + size]), (3 - size) * 4); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/921118-1.c b/gcc/testsuite/gcc.c-torture/compile/921118-1.c new file mode 100644 index 000000000000..857c74e74f1c --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/921118-1.c @@ -0,0 +1,8 @@ +inline f(i) +{ + h((long long) i * 2); +} +g() +{ + f(9); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/921126-1.c b/gcc/testsuite/gcc.c-torture/compile/921126-1.c new file mode 100644 index 000000000000..a7b908b2ef0d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/921126-1.c @@ -0,0 +1,11 @@ +f() +{ + long long a0, a1, a0s, val; + int width; + float d; + if (d) + ; + if (a0s & (1LL << width)) + ; + return a0 / a1; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/921202-1.c b/gcc/testsuite/gcc.c-torture/compile/921202-1.c new file mode 100644 index 000000000000..1287edc57b8a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/921202-1.c @@ -0,0 +1,22 @@ +f () +{ + long dx[2055]; + long dy[2055]; + long s1[2055]; + int x, y; + int i; + long s; + + for (;;) + { + s = 2055; + g (s1, s); + for (i = 0; i < 1; i++); + dy[s] = 0x12345; + for (i = 0; i < 1; i++); + if (x != y || h (dx, dy, s) || dx[s] != 0x12345) + { + j (y);k (dy); + } + } +} diff --git a/gcc/testsuite/gcc.c-torture/compile/921202-2.c b/gcc/testsuite/gcc.c-torture/compile/921202-2.c new file mode 100644 index 000000000000..97d482b633c8 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/921202-2.c @@ -0,0 +1,8 @@ +f(x, c) +{ + for (;;) + { + if (x << c) break; + x++; + } +} diff --git a/gcc/testsuite/gcc.c-torture/compile/921203-1.c b/gcc/testsuite/gcc.c-torture/compile/921203-1.c new file mode 100644 index 000000000000..50fe3eb0b6f0 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/921203-1.c @@ -0,0 +1,5 @@ +char dispstr[]; +f() +{ + strcpy(dispstr,"xxxxxxxxxxx"); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/921203-2.c b/gcc/testsuite/gcc.c-torture/compile/921203-2.c new file mode 100644 index 000000000000..929afb1bdde8 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/921203-2.c @@ -0,0 +1,13 @@ +typedef struct +{ + char x; +} s1; + +s1 f (int arg0,...) +{ + int args; + s1 back; + va_start (args, arg0); + va_end (args); + return back; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/921206-1.c b/gcc/testsuite/gcc.c-torture/compile/921206-1.c new file mode 100644 index 000000000000..b18709dd8d1d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/921206-1.c @@ -0,0 +1,28 @@ +double sqrt(double),fabs(double),sin(double); +int sxs; +int sys; +f() +{ + int l; + int sm = -52, sx = 52; + char *smap; + for (l = 0; l < 9; l++) + { + double g; + int cx, cy, gx, gy, x, y; + gx = 2 > g / 3 ? 2 : g / 3; + gy = 2 > g / 3 ? 2 : g / 3; + for (y = 0 > cy - gy ? 0 : cy - gy; y <= (sys - 1 < cy + gy ? sys : cy + gy); y++) + { + int sx = 0 > cx - gx ? 0 : cx - gx; + short *ax = (short *) (y * sxs + sx); + + for (x = sx; x <= (sxs - 1 < cx + gx ? sxs - 1 : cx + gx); x++) + { + double c=2.25, z=sqrt(fabs(1-c)), cz=(c>1?0.0:-10)>z?c>1?0:1:z; + } + } + } + for (l = sm; l <= sx; l++) + smap[l] = l > 0 ? 1 + pow(sin(.1 * l / sx)) : 1 - pow(sin(.1 * l / sm)); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/921227-1.c b/gcc/testsuite/gcc.c-torture/compile/921227-1.c new file mode 100644 index 000000000000..a49750c81af4 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/921227-1.c @@ -0,0 +1,5 @@ +#define k(a) #a +char *s = k(k(1,2)); +char *t = k(#) k(#undef k) k(x); + +f(){} diff --git a/gcc/testsuite/gcc.c-torture/compile/930109-1.c b/gcc/testsuite/gcc.c-torture/compile/930109-1.c new file mode 100644 index 000000000000..dbd15a1bd0a1 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/930109-1.c @@ -0,0 +1,12 @@ +f(x) + unsigned x; +{ + static short c; + return x>>c; +} +g(x) + unsigned x; +{ + static char c; + return x>>c; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/930109-2.c b/gcc/testsuite/gcc.c-torture/compile/930109-2.c new file mode 100644 index 000000000000..61e3a4df99fc --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/930109-2.c @@ -0,0 +1,11 @@ +f(r) +{ + int i; + for (i = 0; i < 2; i++) + { + r+= (4 >> i*2); + r+= (2 >> i*2); + r+= (1 >> i*2); + } + return r; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/930111-1.c b/gcc/testsuite/gcc.c-torture/compile/930111-1.c new file mode 100644 index 000000000000..28574191d139 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/930111-1.c @@ -0,0 +1,10 @@ +/* 2.3.3 crashes on 386 with -traditional */ +f(a) + char *a; +{ + int d = strcmp(a,"-"); + + while (vfork() < 0) + ; + return d; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/930117-1.c b/gcc/testsuite/gcc.c-torture/compile/930117-1.c new file mode 100644 index 000000000000..83317cdd07bc --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/930117-1.c @@ -0,0 +1,4 @@ +f(x) +{ + (*(void (*)())&x)(); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/930118-1.c b/gcc/testsuite/gcc.c-torture/compile/930118-1.c new file mode 100644 index 000000000000..b29543c529ed --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/930118-1.c @@ -0,0 +1,6 @@ +f() +{ +__label__ l; +l:p(); +} + diff --git a/gcc/testsuite/gcc.c-torture/compile/930120-1.c b/gcc/testsuite/gcc.c-torture/compile/930120-1.c new file mode 100644 index 000000000000..95ac43c07ed8 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/930120-1.c @@ -0,0 +1,138 @@ +union { + short I[2]; + long int L; + char C[4]; +} itolws; +char *errflg; +long int dot; +short dotinc; +long int expvf; + +char * +f(fcount,ifp,itype,ptype) + short fcount; + char *ifp; +{ + unsigned w; + long int savdot, wx; + char *fp; + char c, modifier, longpr; + union { + double dval; + struct { + int i1; + int i2; + } ival; + } dw; + union { + float fval; + int ival; + } fw; + int gotdot = 0; + while (fcount > 0) { + fp = ifp; + c = *fp; + longpr = ((c >= 'A') & (c <= 'Z') | (c == 'f') | (c == '4') | (c == 'p') | (c == 'i')); + if ((itype == 0) || (*fp == 'a')) { + wx = dot; + w = dot; + } else { + gotdot = 1; + wx = get((int)dot, itype); + if (!longpr) { + w = (itolws.L=(wx), itolws.I[((dot)&3)>>1]); + } + } + if (c == 'F') { + dw.ival.i1 = wx; + if (itype == 0) { + dw.ival.i2 = expvf; + } + } + + modifier = *fp++; + switch(modifier) { + case ' ' : + case '\t' : + break; + case 't': + case 'T': + printf("%T",fcount); + return(fp); + case 'r': + case 'R': + printf("%M",fcount); + return(fp); + case 'k': + printf("%k",w); + break; + case 'K': + printf("%K",wx); + break; + case 'a': + psymoff(dot,ptype,":%16t"); + dotinc = 0; + break; + case 'p': + psymoff(0,ptype,"%16t"); + break; + case 'u': + printf("%-8u",w); + break; + case 'U': + printf("%-16U",wx); break; + case 'c': + case 'C': + if (modifier == 'C') { + printesc((int)(itolws.L=(wx), itolws.C[(dot)&3])); + } else { + printc((char)(itolws.L=(wx), itolws.C[(dot)&3])); + } + dotinc = 1; + break; + case 'b': + printf("%-8x", (itolws.L=(wx), itolws.C[(dot)&3])); + dotinc = 1; + break; + case 'B': + printf("%-8o", (itolws.L=(wx), itolws.C[(dot)&3])); + dotinc = 1; + break; + case 's': + case 'S': + savdot = dot; + dotinc = 1; + while ((c = (itolws.L=(wx), itolws.C[(dot)&3])) && (errflg == 0)) { + dot = inkdot(1); + if (modifier == 'S') { + printesc(c); + } else { + printc(c); + } + endline(); + if (!(dot & 3)) + wx = get((int)dot, itype); + } + dotinc = dot - savdot + 1; + dot = savdot; + break; + case 'i': + if (gotdot) { + wx = get((int)(dot & ~3), itype); + } + iDasm((int)(wx), (unsigned int)0, (unsigned int)(dot&~3)); + printc('\n'); + break; + case 'f': + fw.ival = wx; + printf("%-16.9f", fw.fval); + dotinc = 4; + break; + case 'F': + printf("%-32.18F", dw.dval); + dotinc = 8; + break; + } + } + return(fp); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/930126-1.c b/gcc/testsuite/gcc.c-torture/compile/930126-1.c new file mode 100644 index 000000000000..8313c5c450b3 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/930126-1.c @@ -0,0 +1,74 @@ +typedef unsigned T; +typedef char Tchar; +T mt (long, char *); +T ms (long, char *); +T mv (long, T, char); +T cons (T, T); +T decl (T * (*) (T *), char *); + +T*L92(T*),*L15(T*),*L14(T*),*L13(T*),*L12(T*),*L11(T*),*L10(T*),*L9(T*),*L8(T*),*L7(T*),*L6(T*),*L5(T*),*L4(T*),*L3(T*),*L2(T*),*L1(T*); + +static T * +Ldata (T * my_pc) +{ +int cc = (((* ((T *) (my_pc))) >> 16) & 0xFF); +T B92, B91, B90, B15, B14, B13, B12, B11, B10, B9, B8, B7, B6, B5, B4, B3, B2, B1, tO7, tO6, tO5, tO4, tO3, tO2, tO1, tO0; +T object = mv (168, 0, ((Tchar) 1)); +T * cb = (T *) (((T) (object & 0x3FF)) | 0x400); +tO0 = mv (92, 0, ((Tchar) 1)); +B92 = decl (L92, ""); +B15 = decl (L15, ""); +B14 = decl (L14, ""); +B13 = decl (L13, ""); +B12 = decl (L12, ""); +B11 = decl (L11, ""); +B10 = decl (L10, ""); +B9 = decl (L9, ""); +B8 = decl (L8, ""); +B7 = decl (L7, ""); +B6 = decl (L6, ""); +B5 = decl (L5, ""); +B4 = decl (L4, ""); +B3 = decl (L3, ""); +B2 = decl (L2, ""); +B1 = decl (L1, ""); +cb[19] = ((((cc) & 0xFF) << 16) | (9 & 0xFF)); +cb[21] = ((((cc) & 0xFF) << 16) | ((10) & 0xFF)); +cb[23] = ((((cc) & 0xFF) << 16) | (11 & 0xFF)); +cb[25] = ((((cc) & 0xFF) << 16) | (12 & 0xFF)); +cb[27] = ((((cc) & 0xFF) << 16) | (13 & 0xFF)); +cb[29] = ((((cc) & 0xFF) << 16) | (14 & 0xFF)); +cb[31] = ((((cc) & 0xFF) << 16) | (15 & 0xFF)); +cb[35] = ((((cc) & 0xFF) << 16) | (17 & 0xFF)); +cb[36] = ((0x1A) << 26) | (((0x39) << 26) | 1) & 0x3FF; +cb[39] = ms (24, ((char *) "")); +cb[41] = ((0x1A) << 26) | (((0x39) << 26) | 1) & 0x3FF; +cb[44] = 3; +cb[46] = 2; +cb[48] = 3; +cb[50] = 6; +cb[52] = 4; +cb[146] = tO0; +((T *) (((tO0 & 0x3FF)) | 0x400))[92] = B1; +((T *) (((tO0 & 0x3FF)) | 0x400))[91] = B2; +((T *) (((tO0 & 0x3FF)) | 0x400))[2] = B90; +((T *) (((tO0 & 0x3FF)) | 0x400))[2] = B91; +((T *) (((tO0 & 0x3FF)) | 0x400))[1] = B92; +cb[58] = 0x2800 | (T) ((T *) ((B6 & 0x3FF) | 0x400) + 3); +cb[57] = 0x2800 | (T) ((T *) ((B7 & 0x3FF) | 0x400) + 3) & ~0xC00; +cb[56] = 0x2800 | (T) ((T *) ((B8 & 0x3FF) | 0x400) + 3) & ~0xC00; +cb[55] = 0x2800 | (T) ((T *) ((B9 & 0x3FF) | 0x400) + 3) & ~0xC00; +tO7 = mv (8, 0, ((Tchar) 1)); +tO4 = ms (9, ((char *) "")); +tO3 = mv (58, 0, ((Tchar) 1)); +tO6 = ms (4, ((char *) "")); +tO2 = mv (4, 0, ((Tchar) 1)); +tO5 = ms (4, ((char *) "")); +tO1 = mv (28, 0, ((Tchar) 1)); +cb[165] = tO1; +cb[163] = cons (((ms (10, ((char *) "")))), (cons (tO5, 0))); +cb[162] = cons (1, (cons (2, 0))); +cb[150] = cons (1, (cons (2, (cons (3, (cons (4, (cons (5, (cons (6, 0))))))))))); +cb[148] = tO7; +return cb; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/930210-1.c b/gcc/testsuite/gcc.c-torture/compile/930210-1.c new file mode 100644 index 000000000000..47d2da2aca56 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/930210-1.c @@ -0,0 +1,11 @@ +f() +{ + char c1, c2; + char *p1, *p2; + + do { + c1 = c2 = *p1++; + while (c1--) + *p2++ = *p1++; + } while (c2); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/930217-1.c b/gcc/testsuite/gcc.c-torture/compile/930217-1.c new file mode 100644 index 000000000000..70f4a4897c44 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/930217-1.c @@ -0,0 +1,14 @@ +double g (); +typedef union { + struct { + unsigned s:1, e:8, f:23; + } u; + float f; +} s; + +f(x, n) + float x; +{ + ((s *)&x)->u.e -= n; + x = g((double)x, -n); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/930222-1.c b/gcc/testsuite/gcc.c-torture/compile/930222-1.c new file mode 100644 index 000000000000..c6d6aa3b47d3 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/930222-1.c @@ -0,0 +1,16 @@ +typedef struct + { + long i; + double f; + } T; + +f (T *n1, T *n2) +{ + if (g (n2)) + return n1->i - n2->i; + else + { + double f = n1->f - n2->i; + return f == 0.0 ? 0 : (f > 0.0 ? 1 : -1); + } +} diff --git a/gcc/testsuite/gcc.c-torture/compile/930325-1.c b/gcc/testsuite/gcc.c-torture/compile/930325-1.c new file mode 100644 index 000000000000..24cea5027ab5 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/930325-1.c @@ -0,0 +1,23 @@ +typedef unsigned uint; + +inline +g (uint *s, uint *d, uint c) +{ + while (c != 0) + { + *--d = *--s; + c--; + } +} + +f (uint *p1, uint c, uint *p2) +{ + while (c > 0 && *p1 == 0) + { + p1++; + c--; + } + if (c == 0) + return 1; + g (p2, p1, c); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/930326-1.c b/gcc/testsuite/gcc.c-torture/compile/930326-1.c new file mode 100644 index 000000000000..97313d86aa97 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/930326-1.c @@ -0,0 +1,6 @@ +struct +{ + char a, b, f[3]; +} s; + +long i = s.f-&s.b; diff --git a/gcc/testsuite/gcc.c-torture/compile/930411-1.c b/gcc/testsuite/gcc.c-torture/compile/930411-1.c new file mode 100644 index 000000000000..bb03c13fa073 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/930411-1.c @@ -0,0 +1,36 @@ +int heap; + +g(){} + +f(int i1, int i2) +{ + i1 = *(int*)(i1 + 4); + if (i1 == 0) + goto L4; + else + goto L9; + L3: + i2 = heap - 8; + *(int*)i2 = 3; + *(int*)(i2 + 4) = i1; + heap -= 8; + return i2; + L4: + i1 = g(i2); + goto L5; + L5: + i1 = *(int*)(i1 + 4); + if (i1 == 0) + goto L7; + else + goto L8; + L7: + i1 = 0; + goto L3; + L8: + i1 = 1; + goto L3; + L9: + i1 = 1; + goto L3; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/930421-1.c b/gcc/testsuite/gcc.c-torture/compile/930421-1.c new file mode 100644 index 000000000000..01b465f7fecb --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/930421-1.c @@ -0,0 +1,19 @@ +double q(double); + +f (int **x, int *r, int *s, int a, int b, int c, int d) +{ + int i, j, k, m, e, f, g, z[1024], y[2]; + + e = g = 0; + for (i = 0; i < a; i++) + for (j = 0; j < b; j++) + if (x[i][j]) + for (k = 0; k < c; k++) + { + f = q(1.5) + q(2.5); + if (g < y[f]) + g = e; + } + for (m = 0; m < 1; m++) + z[0] = m*2*d/3.0 - d; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/930427-2.c b/gcc/testsuite/gcc.c-torture/compile/930427-2.c new file mode 100644 index 000000000000..53b633785aec --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/930427-2.c @@ -0,0 +1,9 @@ +struct s { + int f; +}; + +f (w, v0, v1, v2, v3) + struct s *w; +{ + g (v0 ? 1 : w->f, v1 ? v3 : v2); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/930503-1.c b/gcc/testsuite/gcc.c-torture/compile/930503-1.c new file mode 100644 index 000000000000..6889e8b7aed8 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/930503-1.c @@ -0,0 +1,8 @@ +f (const char *s, char *d, unsigned l) +{ + if (0) + while (1); + else + while (--l >= 0) + *d++ = *s++; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/930503-2.c b/gcc/testsuite/gcc.c-torture/compile/930503-2.c new file mode 100644 index 000000000000..1b0ea34f0385 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/930503-2.c @@ -0,0 +1,5 @@ +f() +{ + struct { char x; } r; + g(r); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/930506-1.c b/gcc/testsuite/gcc.c-torture/compile/930506-1.c new file mode 100644 index 000000000000..8c26ea3670c0 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/930506-1.c @@ -0,0 +1,12 @@ +long long +f (a) + double a; +{ + double b; + unsigned long long v; + + b = a / 2.0; + v = (unsigned) b; + a -= (double) v; + return v; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/930506-2.c b/gcc/testsuite/gcc.c-torture/compile/930506-2.c new file mode 100644 index 000000000000..e11e62f026fe --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/930506-2.c @@ -0,0 +1,15 @@ +#ifndef NO_TRAMPOLINES +int f1() +{ + { int ___() { foo(1); } bar(___); } + return( { int ___() { foo(2); } bar(___);} ); +} + +int f2(int j) +{ + { int ___() { foo(j); } bar(___); } + return( { int ___() { foo(j); } bar(___);} ); +} +#else +int x; +#endif diff --git a/gcc/testsuite/gcc.c-torture/compile/930510-1.c b/gcc/testsuite/gcc.c-torture/compile/930510-1.c new file mode 100644 index 000000000000..8c46282626cc --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/930510-1.c @@ -0,0 +1,18 @@ +typedef long time_t; +static __const int mon_lengths[2][12] = { + 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, + 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 +}; +static time_t +f (janfirst, year, rulep, offset) + __const time_t janfirst; + __const int year; + register __const struct rule * __const rulep; + __const long offset; +{ + register int leapyear; + register time_t value; + register int i; + + value += mon_lengths[leapyear][i] * ((long) (60 * 60) * 24); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/930513-1.c b/gcc/testsuite/gcc.c-torture/compile/930513-1.c new file mode 100644 index 000000000000..2e106ae43a94 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/930513-1.c @@ -0,0 +1,9 @@ +struct s { + int f1 : 26; + int f2 : 8; +}; + +f (struct s *x) +{ + return x->f2++ == 0; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/930513-2.c b/gcc/testsuite/gcc.c-torture/compile/930513-2.c new file mode 100644 index 000000000000..a7f508c82662 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/930513-2.c @@ -0,0 +1,9 @@ +double g (); + +f (x) + double x; +{ + x = .85; + while (g () < x) + ; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/930513-3.c b/gcc/testsuite/gcc.c-torture/compile/930513-3.c new file mode 100644 index 000000000000..f8d4e60341c0 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/930513-3.c @@ -0,0 +1,9 @@ +test () +{ + short *p, q[3]; + int x; + + p = q; + for (x = 0; x < 3; x++) + *p++ = 0; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/930523-1.c b/gcc/testsuite/gcc.c-torture/compile/930523-1.c new file mode 100644 index 000000000000..5f2b5b5d7e3a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/930523-1.c @@ -0,0 +1,54 @@ +int v; + +f () +{ + unsigned long *a1, *a2; + int vertex2; + int c, x1, x2, dx1, dx2, dy1, dy2, e1, e2, s2; + unsigned long m, b; + int n; + unsigned long r; + int aba; + + do + { + if (dx2 >= dy2) + dx2 = dx2 % dy2; + + if (dx2 >= dy2) + { + s2 = - (dx2 / dy2); + dx2 = dx2 % dy2; + } + } + while (vertex2 / 65536); + + for (;;) + { + c = x2; + a2 = a1; + if (v) + a2 = 0; + + if (c + n) + { + m = b << (c * 8); + *a2 = (*a2 & ~m) | (r & m); + n += c; + + while (--n) + { + { + } + } + } + + a1 = 0; + x1 += 0; + if (e1 += dx1) + e1 -= dy1; + x2 += s2; + if (e2 += dx2) + e2 -= dy2; + } +} diff --git a/gcc/testsuite/gcc.c-torture/compile/930525-1.c b/gcc/testsuite/gcc.c-torture/compile/930525-1.c new file mode 100644 index 000000000000..00c2e263b826 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/930525-1.c @@ -0,0 +1,7 @@ +typedef struct foo foo_t; +foo_t x; +struct foo { + int i; +}; + +foo_t x = { 10 }; diff --git a/gcc/testsuite/gcc.c-torture/compile/930527-1.c b/gcc/testsuite/gcc.c-torture/compile/930527-1.c new file mode 100644 index 000000000000..53e00e65ed1b --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/930527-1.c @@ -0,0 +1,16 @@ +enum {e0, e1}; + +int x[] = +{ + [e0] = 0 +}; + +f () +{ + switch (1) + { + case e0: + case e1: + break; + } +} diff --git a/gcc/testsuite/gcc.c-torture/compile/930529-1.c b/gcc/testsuite/gcc.c-torture/compile/930529-1.c new file mode 100644 index 000000000000..70b2cb8f90ca --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/930529-1.c @@ -0,0 +1,83 @@ +struct r +{ + int d1, d2; +}; + +struct km +{ + int d; +}; + +struct f1 +{ + char *fn; + char *fd; + char *fs; + char *ic; + void (*ff) (); +}; + +int g (); + +int y; +struct r *bs; +int bv; + +void b (); +char *w (); + +struct km **q; +char **mns; +int nm; +struct f1 **z; + +f (char *km, char *h) +{ + struct f1 *t; + int map = midn(km, strlen(km)); + int V; + int c; + struct r r; + struct f1 *cm; + + if (!g(&V, &cm, h, strlen(h))) + { + c = (cm - z[V]); + goto L; + } + + for (c = 0; c < nm; c++) + if (!strcmp (h, mns[c])) + { + V = -1; + goto L; + } + + for (c = 0; c < y; c++) + { + if (!memcmp (&bs[c], &r, 8)) + goto L; + } + + h = w (&r); + if (!bv) + { + bs = g (8); + t = (struct f1 *)g (20); + } + else + { + bs = g (bs, y * 8); + z[bv] = cr (z[bv], (1 + y) * 20); + t = &z[bv][y - 1]; + } + bs[y - 1] = r; + t->fs[0] = sp (y - 1); + t->fs[1] = 0; + t->ic = 0; + t->fd = 0; + t->fn = cs (h); + t->ff = b; + L: + g (q[map], V, c); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/930530-1.c b/gcc/testsuite/gcc.c-torture/compile/930530-1.c new file mode 100644 index 000000000000..848e0400ece2 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/930530-1.c @@ -0,0 +1,5 @@ +f () +{ + struct { char a, b; } x; + g (x, x, x, x); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/930602-1.c b/gcc/testsuite/gcc.c-torture/compile/930602-1.c new file mode 100644 index 000000000000..5a0eb2189bab --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/930602-1.c @@ -0,0 +1,13 @@ +typedef struct { + int f[8]; +} T; + +f (w, l, r) + T *w; + unsigned short l, r; +{ + int i; + + for (i = l; i < r; i++) + g (w->f[i]); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/930603-1.c b/gcc/testsuite/gcc.c-torture/compile/930603-1.c new file mode 100644 index 000000000000..643cc52d4c2b --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/930603-1.c @@ -0,0 +1,10 @@ +union u { union u *a; double d; }; +union u *s, g(); + +f() +{ + union u x = g(); + + s[0] = *x.a; + s[1] = g(); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/930607-1.c b/gcc/testsuite/gcc.c-torture/compile/930607-1.c new file mode 100644 index 000000000000..97c94b25ec3b --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/930607-1.c @@ -0,0 +1,9 @@ +typedef void f (); +typedef f *pf; +long long i; + +g () +{ + long long p = i; + ((pf) (long) p) (); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/930609-1.c b/gcc/testsuite/gcc.c-torture/compile/930609-1.c new file mode 100644 index 000000000000..d50d3c97def7 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/930609-1.c @@ -0,0 +1,104 @@ +const int h (double value); +const double scalb (double x, int n); +const double logb (double x); +static const double a = 0; + +double f (y, x) + double y, x; +{ + static const double zero=0, one=1, small=1.0E-9, big=1.0E18; + double t,z,sy,sx,hi,lo; + int k,m; + + if (x!=x) + return x; + if (y!=y) + return y; + + sy = g (one); + sx = g (one); + + if (x==1) + { + y=g (y); + t=y; + if (h (t)) + goto begin; + } + + if (y==zero) + return (sx==one)?y:g (a); + + if (x==zero) + return g (a); + + if (!h (x)) + if (!h (y)) + return g ((sx==one)?a:3*a); + else + return g ((sx==one)?zero:a); + + if (!h (y)) + return g (a); + + x=g (x); + y=g (y); + if ((m=(k=logb (y))- logb (x)) > 60) + t=big+big; + else if (m < -80) + t=y/x; + else + { + t = y/x; + y = scalb (y,-k); + x=scalb (x,-k); + } + + begin: + if (t < 2.4375) + { + k = 4 * (t+0.0625); + switch (k) + { + case 0: + case 1: + if (t < small) + { + big + small; + return g ((sx>zero)?t:a-t); + } + hi = zero; lo = zero; break; + + case 2: + hi = a; lo = a; + z = x+x; + t = ((y+y) - x) / (z + y); break; + + case 3: + case 4: + hi = a; lo = zero; + t = (y - x) / (x + y); break; + + default: + hi = a; lo = a; + z = y-x; y=y+y+y; t = x+x; + t = ((z+z)-x) / (t + y); break; + } + } + else + { + hi = a; lo = zero; + + if (t <= big) + t = - x / y; + else + { + big+small; + t = zero; + } + } + + z = t*(z*(a+z*(a+z*(a+z*(a+z*(a+z*(a+z*(a+z*(a+z*(a+z*(a+z*a))))))))))); + + return g ((sx>zero)?z:a-z); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/930611-1.c b/gcc/testsuite/gcc.c-torture/compile/930611-1.c new file mode 100644 index 000000000000..c216c0965232 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/930611-1.c @@ -0,0 +1,7 @@ +float +f (float a1) +{ + union { float f; int l; } fl1; + fl1.f = a1; + return fl1.l ? 1.0 : a1; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/930618-1.c b/gcc/testsuite/gcc.c-torture/compile/930618-1.c new file mode 100644 index 000000000000..74c215725504 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/930618-1.c @@ -0,0 +1,8 @@ +f (s) +{ + int r; + + r = (!g(s)) | (!g(s)) | (!g(s)) | (!g(s)) | (!g(s)) | (!g(s)) | (!g(s)) | (!g(s)) | (!g(s)) | (!g(s)) | (!g(s)) | (!g(s)) | (!g(s)) | (!g(s)) | (!g(s)) | (!g(s)) | (!g(s)) | (!g(s)) | (!g(s)); + + return r; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/930621-1.c b/gcc/testsuite/gcc.c-torture/compile/930621-1.c new file mode 100644 index 000000000000..3679cf1d3de0 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/930621-1.c @@ -0,0 +1,30 @@ +int bytestart[5000 + 1]; +unsigned char modtext[400 + 1]; +unsigned char bytemem[2][45000L + 1]; + +long +modlookup (int l) +{ + signed char c; + long j; + long k; + signed char w; + long p; + while (p != 0) + { + while ((k < bytestart[p + 2]) && (j <= l) && (modtext[j] == bytemem[w][k])) + { + k = k + 1; + j = j + 1; + } + if (k == bytestart[p + 2]) + if (j > l) + c = 1; + else c = 4; + else if (j > l) + c = 3; + else if (modtext[j] < bytemem[w][k]) + c = 0; + else c = 2; + } +} diff --git a/gcc/testsuite/gcc.c-torture/compile/930623-1.c b/gcc/testsuite/gcc.c-torture/compile/930623-1.c new file mode 100644 index 000000000000..4b5b90bd8488 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/930623-1.c @@ -0,0 +1,7 @@ +g (a, b) {} + +f (xx) + void* xx; +{ + __builtin_apply ((void*)g, xx, 200); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/930623-2.c b/gcc/testsuite/gcc.c-torture/compile/930623-2.c new file mode 100644 index 000000000000..8b61fc14149c --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/930623-2.c @@ -0,0 +1,91 @@ +extern unsigned short statesCount; +extern short cn_cadrstates[38][37]; +extern short coutstate[38][37][5]; +extern short ccostate[38][37][5]; +extern short cdel_E[38][37][5]; +extern short cn[38][37][5][3]; +extern short cd[38][37][5][3]; + +extern short c[4][37]; + +extern double vrandNext[64]; + +f (unsigned long long maddrOutState[37][8 * 8], + int maddrIndices[8 * 8], + int delta_E[8 * 8], + int after_x_hash[8 * 8], + int after_y_hash[8 * 8], + int after_z_hash[8 * 8], + int nActivePlane) +{ + int class[8 * 8]; + int ccoeff[8 * 8]; + int nx[8 * 8]; + int ny[8 * 8]; + int nz[8 * 8]; + int phat[8 * 8]; + int i; + int inState; + + for (inState = 0; inState < statesCount; inState++) { + long long Nf[8 * 8]; + long long Ns[8 * 8]; + long long Nb[8 * 8]; + int bbState[8 * 8]; + int not_flag_p[8 * 8]; + int j; + int max_cadrstates = 0; + + for (i = 0; i < nActivePlane; i++) { + int in = maddrIndices[i]; + int k = cn_cadrstates[class[in]][inState]; + + if (k > max_cadrstates) + max_cadrstates = k; + } + + for (j = 0; j < max_cadrstates; j++) { + int coState[8 * 8]; + int N_co[8 * 8]; + for (i = 0; i < nActivePlane; i++) { + int in = maddrIndices[i]; + int k = cn_cadrstates[class[in]][inState]; + + if (j < k-1) { + long long numer = (nx[in] * cn[class[in]][inState][j][0] + + ny[in] * cn[class[in]][inState][j][1] + + nz[in] * cn[class[in]][inState][j][2]); + long long denom = (nx[in] * cd[class[in]][inState][j][0] + + ny[in] * cd[class[in]][inState][j][1] + + nz[in] * cd[class[in]][inState][j][2]); + long long Nj = ((denom == 0) ? 0 : (((((long long)(const64(0,0x10000)) * numer * Ns[in]) / denom) + (long long)(((unsigned) vrandNext[in]) & 0xffff)) >> 16)); + int outState = coutstate[class[in]][inState][j]; + int this_coState = ccostate[class[in]][inState][j]; + int del_E = cdel_E[class[in]][inState][j]; + int old_Ns = Ns[in]; + + maddrOutState[outState][in] += Nj; + Ns[in] -= Nj; + delta_E[in] += Nj * del_E; + if (not_flag_p[in]) { + after_x_hash[in] += Nj * c[0][outState]; + after_y_hash[in] += Nj * c[1][outState]; + after_z_hash[in] += Nj * c[2][outState]; + } + coState[in] = this_coState; + N_co[in] = Nj; + } + else if (j == k-1) { + long long Nj = Ns[in]; + int outState = coutstate[class[in]][inState][j]; + int this_coState = ccostate[class[in]][inState][j]; + int del_E = cdel_E[class[in]][inState][j]; + maddrOutState[outState][in] += Nj; + delta_E[in] += Nj * del_E; + coState[in] = this_coState; + N_co[in] = Nj; + } + } + } + } +} diff --git a/gcc/testsuite/gcc.c-torture/compile/930702-1.c b/gcc/testsuite/gcc.c-torture/compile/930702-1.c new file mode 100644 index 000000000000..9f51dd876ee0 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/930702-1.c @@ -0,0 +1,5 @@ +f () +{ + {({});} + return 1; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/930926-1.c b/gcc/testsuite/gcc.c-torture/compile/930926-1.c new file mode 100644 index 000000000000..fcfa4fbc499d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/930926-1.c @@ -0,0 +1,7 @@ +int f () { return 0; } + +void +test () +{ + int j = { f() }; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/930927-1.c b/gcc/testsuite/gcc.c-torture/compile/930927-1.c new file mode 100644 index 000000000000..81a4979f482b --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/930927-1.c @@ -0,0 +1,3 @@ +#include <stddef.h> + +wchar_t s[5] = L"abcd"; diff --git a/gcc/testsuite/gcc.c-torture/compile/931003-1.c b/gcc/testsuite/gcc.c-torture/compile/931003-1.c new file mode 100644 index 000000000000..922b14379c9b --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/931003-1.c @@ -0,0 +1,15 @@ +f (n, a) + int n; + double a[]; +{ + double b[51]; + int i, j; + + i = 0; + + for (j = n - 1; j > 0; j--) + b[i++] = 0; + + if (b[0] > b[i - 1]) + a[i] = b[i - 1]; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/931004-1.c b/gcc/testsuite/gcc.c-torture/compile/931004-1.c new file mode 100644 index 000000000000..0e741fd4ac07 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/931004-1.c @@ -0,0 +1,8 @@ +#define A "This is a long test that tests the structure initialization" +#define B A,A +#define C B,B,B,B +#define D C,C,C,C +int main() +{ + char *subs[]={ D, D, D, D, D, D, D, D, D, D, D, D, D, D, D}; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/931013-1.c b/gcc/testsuite/gcc.c-torture/compile/931013-1.c new file mode 100644 index 000000000000..c237c0b73415 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/931013-1.c @@ -0,0 +1,10 @@ +g (); + +f () +{ + long ldata[2]; + int seed; + + seed = (ldata[0]) + (ldata[1] << 16); + g (seed); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/931013-2.c b/gcc/testsuite/gcc.c-torture/compile/931013-2.c new file mode 100644 index 000000000000..8fc0db492aba --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/931013-2.c @@ -0,0 +1,20 @@ +f (unsigned short Z[48]) +{ + int j; + unsigned short t1, t2, t3, T[48]; + unsigned short *p = T + 48; + + for (j = 1; j < 8; j++) + { + t1 = *Z++; + *--p = *Z++; + *--p = t1; + t1 = inv(*Z++); + t2 = -*Z++; + t3 = -*Z++; + *--p = inv(*Z++); + *--p = t2; + *--p = t3; + *--p = t1; + } +} diff --git a/gcc/testsuite/gcc.c-torture/compile/931013-3.c b/gcc/testsuite/gcc.c-torture/compile/931013-3.c new file mode 100644 index 000000000000..e663b9acc1c6 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/931013-3.c @@ -0,0 +1,11 @@ +struct s +{ + int f; +}; + +struct s +f () +{ + int addr; + return *(struct s *) &addr; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/931018-1.c b/gcc/testsuite/gcc.c-torture/compile/931018-1.c new file mode 100644 index 000000000000..7efe40ec0947 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/931018-1.c @@ -0,0 +1,14 @@ +typedef struct +{ + int a, b; +} T; + +f (T *bs) +{ + long long x; + x = ({ + union { T s; long long l; } u; + u.s = *bs; + u.l; + }); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/931031-1.c b/gcc/testsuite/gcc.c-torture/compile/931031-1.c new file mode 100644 index 000000000000..9015f54f7bfa --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/931031-1.c @@ -0,0 +1,9 @@ +struct s +{ + int pad:1, no:1; +}; + +f (struct s *b, int c) +{ + char d = b->no && c; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/931102-1.c b/gcc/testsuite/gcc.c-torture/compile/931102-1.c new file mode 100644 index 000000000000..a039c26331c5 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/931102-1.c @@ -0,0 +1,111 @@ +char *e (); + +#define SET \ + if (d > *b++) d |= a; \ + if (b) b = e(b); + +xxx() +{ + int a, d; + char *b, *c; + + while (1) { + while (1) { + while (1) { + if (a) { + switch (a) { + case 1: + while (1) { + SET + do { + SET + } while (1); + } + case 2: + while (1) { + if (d) { + do { + SET + } while (1); + } + else { + do { + SET + } while (1); + } + } + case 3: + while (1) { + if (d) { + do { + SET + } while (1); + } + else { + do { + SET + } while (1); + } + } + case 4: + while (1) { + if (d) { + do { + SET + } while (1); + } + else { + do { + SET + } while (1); + } + } + } + } + else { + switch (a) { + case 2: + while (1) { + if (d) { + do { + SET + } while (1); + } + else { + do { + SET + } while (1); + } + } + case 3: + while (1) { + if (d) { + do { + SET + } while (1); + } + else { + do { + SET + } while (1); + } + } + case 4: + while (1) { + if (d) { + do { + SET + } while (1); + } + else { + do { + SET + } while (1); + } + } + } + } + } + } + } +} diff --git a/gcc/testsuite/gcc.c-torture/compile/931102-2.c b/gcc/testsuite/gcc.c-torture/compile/931102-2.c new file mode 100644 index 000000000000..f39b271645d8 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/931102-2.c @@ -0,0 +1,21 @@ +typedef struct { + int a; +} VCR; + +typedef struct { + VCR vcr[8]; +} VCRC; + +typedef struct { + char vcr; +} OWN; + +OWN Own[16]; + +f (x, own) + VCRC *x; + OWN *own; +{ + x[own->vcr / 8].vcr[own->vcr % 8].a--; + x[own->vcr / 8].vcr[own->vcr % 8].a = x[own->vcr / 8].vcr[own->vcr % 8].a; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/931203-1.c b/gcc/testsuite/gcc.c-torture/compile/931203-1.c new file mode 100644 index 000000000000..3007ff582e0d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/931203-1.c @@ -0,0 +1,5 @@ +v (a, i) + unsigned *a, i; +{ + a++[i] = 0; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/940611-1.c b/gcc/testsuite/gcc.c-torture/compile/940611-1.c new file mode 100644 index 000000000000..90f72486adaf --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/940611-1.c @@ -0,0 +1,10 @@ +f () +{ + do +L:; + while (0); + do + ; + while (0); + goto L; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/940712-1.c b/gcc/testsuite/gcc.c-torture/compile/940712-1.c new file mode 100644 index 000000000000..10a6961dcb7e --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/940712-1.c @@ -0,0 +1,4 @@ +f () +{ + return (*(volatile unsigned int *)8000) / 3; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/940718-1.c b/gcc/testsuite/gcc.c-torture/compile/940718-1.c new file mode 100644 index 000000000000..505280fa91ef --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/940718-1.c @@ -0,0 +1,7 @@ +extern double log (double) __attribute__ ((const)); + +f (double x) +{ + for (;;) + exp(log(x)); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/941014-1.c b/gcc/testsuite/gcc.c-torture/compile/941014-1.c new file mode 100644 index 000000000000..d31701572fc7 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/941014-1.c @@ -0,0 +1,11 @@ +f (to) + char *to; +{ + unsigned int wch; + register length; + unsigned char tmp; + unsigned int mult = 10; + + tmp = (wch>>(unsigned int)(length * mult)); + *to++ = (unsigned char)tmp; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/941014-2.c b/gcc/testsuite/gcc.c-torture/compile/941014-2.c new file mode 100644 index 000000000000..01e9a672e880 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/941014-2.c @@ -0,0 +1,37 @@ +void +f (n, ppt, xrot) +{ + int tileWidth; + int nlwSrc; + int srcx; + int v3, v4; + register unsigned long ca1, cx1, ca2, cx2; + unsigned long *pSrcLine; + register unsigned long *pDst; + register unsigned long *pSrc; + register unsigned long b, tmp; + unsigned long tileEndMask; + int v1, v2; + int tileEndPart; + int needFirst; + tileEndPart = 0; + v1 = tileEndPart << 5; + v2 = 32 - v1; + while (n--) + { + if ((srcx = (ppt - xrot) % tileWidth) < 0) + if (needFirst) + if (nlwSrc == 1) + { + tmp = b; + if (tileEndPart) + b = (*pSrc & tileEndMask) | (*pSrcLine >> v1); + } + if (tileEndPart) + b = (tmp << v1) | (b >> v2); + if (v4 != 32) + *pDst = (*pDst & ((tmp << v3) | (b >> v4) & ca1 ^ cx1) + ^ (((tmp << v3) | (b >> v4)) & ca2 ^ cx2)); + *pDst = *pDst & tmp; + } +} diff --git a/gcc/testsuite/gcc.c-torture/compile/941014-3.c b/gcc/testsuite/gcc.c-torture/compile/941014-3.c new file mode 100644 index 000000000000..6dcb89395e3a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/941014-3.c @@ -0,0 +1,72 @@ +typedef unsigned char byte; +typedef unsigned int uint; +typedef unsigned long ulong; +typedef ulong gs_char; +typedef struct gs_show_enum_s gs_show_enum; +typedef struct gs_font_s gs_font; +typedef struct gx_font_stack_item_s { + gs_font *font; +} gx_font_stack_item; +typedef struct gx_font_stack_s { + gx_font_stack_item items[1 + 5 ]; +} gx_font_stack; +struct gs_show_enum_s { + gx_font_stack fstack; +}; +typedef enum { + ft_composite = 0, +} font_type; +struct gs_font_s { + font_type FontType; +}; +typedef enum { + fmap_escape = 3, + fmap_shift = 8 + } fmap_type; +typedef struct gs_type0_data_s { + fmap_type FMapType; +} gs_type0_data; +gs_type0_next_char(register gs_show_enum *penum) +{ + const byte *p; + int fdepth; + gs_font *pfont; + gs_type0_data *pdata; + uint fidx; + gs_char chr; + for (; pfont->FontType == ft_composite; ) + { + fmap_type fmt; + switch ( fmt ) + { + do {} while (0); + rdown: + continue; + case fmap_shift: + p++; + do {} while (0); + goto rdown; + } + break; + } + up: + while ( fdepth > 0 ) + { + switch ( pdata->FMapType ) + { + default: + continue; + case fmap_escape: + fidx = *++p; + do {} while (0); + if ( fidx == chr && fdepth > 1 ) + goto up; + down: + fdepth--; + do {} while (0); + } + break; + } + while ( (pfont = penum->fstack.items[fdepth].font)->FontType == ft_composite ) + ; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/941014-4.c b/gcc/testsuite/gcc.c-torture/compile/941014-4.c new file mode 100644 index 000000000000..9e673f378335 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/941014-4.c @@ -0,0 +1,16 @@ +#ifndef NO_LABEL_VALUES +f (int *re) +{ + int *loops = 0, *loope = 0; + unsigned dat0 = 0; + static void *debug = &&firstdebug; + + firstdebug: + g (loops, loope); + + if (dat0 & 1) + re[(dat0 >> 2) & 3] = 0; +} +#else +int x; +#endif diff --git a/gcc/testsuite/gcc.c-torture/compile/941019-1.c b/gcc/testsuite/gcc.c-torture/compile/941019-1.c new file mode 100644 index 000000000000..257b594c1b6c --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/941019-1.c @@ -0,0 +1 @@ +__complex__ long double sub (__complex__ long double cld) { return cld; } diff --git a/gcc/testsuite/gcc.c-torture/compile/941111-1.c b/gcc/testsuite/gcc.c-torture/compile/941111-1.c new file mode 100644 index 000000000000..3f0c28bef12f --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/941111-1.c @@ -0,0 +1,8 @@ +main () +{ + struct S { int i; char c; } obj1, obj2; + + foo (); + if (obj1.c != obj2.c) + bar (); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/941113-1.c b/gcc/testsuite/gcc.c-torture/compile/941113-1.c new file mode 100644 index 000000000000..5c2e0b68c569 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/941113-1.c @@ -0,0 +1,12 @@ +typedef void foo (void); + +f (x) +{ + if (x) + { + const foo* v; + (*v)(); + } + else + g (0); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/950122-1.c b/gcc/testsuite/gcc.c-torture/compile/950122-1.c new file mode 100644 index 000000000000..8dea79050936 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/950122-1.c @@ -0,0 +1,5 @@ +int +foo (int i, unsigned short j) +{ + return j *= i; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/950124-1.c b/gcc/testsuite/gcc.c-torture/compile/950124-1.c new file mode 100644 index 000000000000..e723954a0c17 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/950124-1.c @@ -0,0 +1,15 @@ +f () +{ + if (g ()) + h (); + else + { + do + { + return 0; + break; + } + while (1); + } + return 1; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/950221-1.c b/gcc/testsuite/gcc.c-torture/compile/950221-1.c new file mode 100644 index 000000000000..14147638668c --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/950221-1.c @@ -0,0 +1,16 @@ +short v = -1; + +typedef struct +{ + short network; +} atype; + +void f () +{ + static atype config; + atype *cp; + short net; + cp = &config; + cp->network = (v == -1) ? 100 : v; + net = cp->network; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/950329-1.c b/gcc/testsuite/gcc.c-torture/compile/950329-1.c new file mode 100644 index 000000000000..7c047f5a59c9 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/950329-1.c @@ -0,0 +1,19 @@ +f () +{ + int i; + for (i = 1;; i = 0) + { + if (h ()) + { + if (i) + g (); + g (h ()); + g (h ()); + } + else + { + g (); + break; + } + } +} diff --git a/gcc/testsuite/gcc.c-torture/compile/950512-1.c b/gcc/testsuite/gcc.c-torture/compile/950512-1.c new file mode 100644 index 000000000000..e43ec48d1659 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/950512-1.c @@ -0,0 +1,6 @@ +typedef unsigned short uint16; +f (unsigned char *w) +{ + w[2] = (uint16) ((((g (0) % 10000 + 42) & 0xFF) << 8) | (((g (0) % 10000 + 42) >> 8) & 0xFF)) & 0xFF, + w[3] = (uint16) ((((g (0) % 10000 + 42) & 0xFF) << 8) | (((g (0) % 10000 + 42) >> 8) & 0xFF)) >> 8; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/950530-1.c b/gcc/testsuite/gcc.c-torture/compile/950530-1.c new file mode 100644 index 000000000000..2b714e059bcd --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/950530-1.c @@ -0,0 +1,4 @@ +f (int *s, int *t) +{ + return (t - s) / 2; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/950607-1.c b/gcc/testsuite/gcc.c-torture/compile/950607-1.c new file mode 100644 index 000000000000..851defce34ca --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/950607-1.c @@ -0,0 +1,38 @@ +typedef struct { + int component_id; + int component_index; + int h_samp_factor; + int v_samp_factor; +} jpeg_component_info; +struct jpeg_common_struct { + struct jpeg_error_mgr * err; +}; +typedef struct jpeg_common_struct * j_common_ptr; +typedef struct jpeg_compress_struct * j_compress_ptr; +struct jpeg_compress_struct { + struct jpeg_error_mgr * err; + int num_components; + jpeg_component_info * comp_info; + int max_h_samp_factor; + int max_v_samp_factor; +}; +struct jpeg_error_mgr { + int msg_code; +}; + +void +jinit_downsampler (j_compress_ptr cinfo) +{ + int ci; + jpeg_component_info * compptr; + + for (ci = 0, compptr = cinfo->comp_info; ci < cinfo->num_components; + ci++, compptr++) { + if (compptr->h_samp_factor == cinfo->max_h_samp_factor && + compptr->v_samp_factor == cinfo->max_v_samp_factor) { + } else if ((cinfo->max_h_samp_factor % compptr->h_samp_factor) == 0 && + (cinfo->max_v_samp_factor % compptr->v_samp_factor) == 0) { + } else + cinfo->err->msg_code = 0; + } +} diff --git a/gcc/testsuite/gcc.c-torture/compile/950610-1.c b/gcc/testsuite/gcc.c-torture/compile/950610-1.c new file mode 100644 index 000000000000..16d0d0e60f56 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/950610-1.c @@ -0,0 +1 @@ +f (int n, int a[2][n]) {} diff --git a/gcc/testsuite/gcc.c-torture/compile/950612-1.c b/gcc/testsuite/gcc.c-torture/compile/950612-1.c new file mode 100644 index 000000000000..cb3cb0a59d69 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/950612-1.c @@ -0,0 +1,134 @@ +typedef enum +{ + LODI, + STO, + ADDI, + ADD, + SUBI, + SUB, + MULI, + MUL, + DIVI, + DIV, + INC, + DEC +} INSN; + +f (pc) + short *pc; +{ + long long stack[16], *sp = &stack[16], acc = 0; + + for (;;) + { + switch ((INSN)*pc++) + { + case LODI: + *--sp = acc; + acc = ((long long)*pc++) << 32; + break; + case STO: + return (acc >> 32) + (((((unsigned long long) acc) & 0xffffffff) & (1 << 31)) != 0); + break; + case ADDI: + acc += ((long long)*pc++) << 32; + break; + case ADD: + acc = *sp++ + acc; + break; + case SUBI: + acc -= ((long long)*pc++) << 32; + break; + case SUB: + acc = *sp++ - acc; + break; + case MULI: + acc *= *pc++; + break; + case MUL: + { + long long aux; + unsigned char minus; + + minus = 0; + aux = *sp++; + if (aux < 0) + { + minus = ~minus; + aux = -aux; + } + if (acc < 0) + { + minus = ~minus; + acc = -acc; + } + acc = ((((((unsigned long long) acc) & 0xffffffff) * (((unsigned long long) aux) & 0xffffffff)) >> 32) + + ((((unsigned long long) acc) >> 32) * (((unsigned long long) aux) & 0xffffffff) + (((unsigned long long) acc) & 0xffffffff) + (((unsigned long long) aux) >> 32)) + + (((((unsigned long long) acc) >> 32) * (((unsigned long long) aux) >> 32)) << 32)); + if (minus) + acc = -acc; + } + break; + case DIVI: + { + short aux; + + aux = *pc++; + acc = (acc + aux / 2) / aux; + } + break; + case DIV: + { + long long aux; + unsigned char minus; + + minus = 0; + aux = *sp++; + if (aux < 0) + { + minus = ~minus; + aux = -aux; + } + if (acc < 0) + { + minus = ~minus; + acc = -acc; + } + + if (((unsigned long long)acc) == 0) + acc = (unsigned long long)-1 / 2; + else if ((((unsigned long long) ((unsigned long long)acc)) & 0xffffffff) == 0) + acc = ((unsigned long long)aux) / (((unsigned long long) ((unsigned long long)acc)) >> 32); + else if ((((unsigned long long) ((unsigned long long)acc)) >> 32) == 0) + acc = ((((unsigned long long)aux) / ((unsigned long long)acc)) << 32) + + ((((unsigned long long)aux) % ((unsigned long long)acc)) << 32) / ((unsigned long long)acc); + else + { + unsigned char shift; + unsigned long hi; + + shift = 32; + hi = (((unsigned long long) ((unsigned long long)acc)) >> 32); + do { + if (hi & ((unsigned long)1 << (shift - 1))) + break; + } while (--shift != 0); + printf("shift = %d\n", shift); + acc = ((((unsigned long long)aux) / ((unsigned long long)acc)) << 32) + + (((((unsigned long long)aux) % ((unsigned long long)acc)) << (32 - shift)) + ((((unsigned long long)acc) >> shift) / 2)) / (((unsigned long long)acc) >> shift); + } + + if (minus) + acc = -acc; + } + break; + case INC: + acc += 1; + break; + case DEC: + acc -= 1; + break; + } + printf("%08lx.%08lx\n", (long)(((unsigned long long) acc) >> 32) , (long)(((unsigned long long) acc) & 0xffffffff)); + } +} diff --git a/gcc/testsuite/gcc.c-torture/compile/950613-1.c b/gcc/testsuite/gcc.c-torture/compile/950613-1.c new file mode 100644 index 000000000000..8aa757f476cc --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/950613-1.c @@ -0,0 +1,31 @@ +#ifndef NO_LABEL_VALUES +f () +{ + long *sp; + long *pc; + + static void *dummy[] = + { + &&L1, + &&L2, + }; + + L1: + { + float val; + val = *(float *) sp; + val = -val; + *(float *) sp = val; + goto *pc++; + } + + L2: + { + float from; + *(long long *) sp = from; + goto *pc++; + } +} +#else +int x; +#endif diff --git a/gcc/testsuite/gcc.c-torture/compile/950618-1.c b/gcc/testsuite/gcc.c-torture/compile/950618-1.c new file mode 100644 index 000000000000..4229da4e9bfb --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/950618-1.c @@ -0,0 +1,2 @@ +static __inline__ int f () { return g (); } +int g () { return f (); } diff --git a/gcc/testsuite/gcc.c-torture/compile/950719-1.c b/gcc/testsuite/gcc.c-torture/compile/950719-1.c new file mode 100644 index 000000000000..d3277fada4ee --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/950719-1.c @@ -0,0 +1,11 @@ +typedef struct +{ + int Header; + char data[4092]; +} t_node; + +f (unsigned short rid, unsigned short record_length) +{ + t_node tnode; + g (rid, tnode.data + rid * record_length); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/950729-1.c b/gcc/testsuite/gcc.c-torture/compile/950729-1.c new file mode 100644 index 000000000000..cfdbad9206f5 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/950729-1.c @@ -0,0 +1,39 @@ +static const char * const lcset = "0123456789abcdef"; +static const char * const ucset = "0123456789ABCDEF"; + +char * +f (char *buffer, long long value, char type) +{ + int base, i; + + i = 128 - 1; + buffer[i--] = '\0'; + + switch (type) + { + case 'u': + case 'o': + case 'x': + case 'X': + if (type == 'u') + base = 10; + else if (type == 'o') + base = 8; + else + base = 16; + + while (i >= 0) + { + if (type == 'X') + buffer[i--] = ucset[((unsigned long long) value) % base]; + else + buffer[i--] = lcset[((unsigned long long) value) % base]; + + if ((value = ((unsigned long long) value) / base) == 0) + break; + } + break; + } + + return &buffer[++i]; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/950816-1.c b/gcc/testsuite/gcc.c-torture/compile/950816-1.c new file mode 100644 index 000000000000..da849bbad0af --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/950816-1.c @@ -0,0 +1,7 @@ +f () +{ + unsigned char b[2]; + float f; + b[0] = (unsigned char) f / 256; + return 0; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/950816-2.c b/gcc/testsuite/gcc.c-torture/compile/950816-2.c new file mode 100644 index 000000000000..41e770d177d0 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/950816-2.c @@ -0,0 +1,8 @@ +f () +{ + int i; + float a,b,c; + unsigned char val[2]; + i = func (&c); + val[0] = c < a ? a : c >= 1.0 ? b : c; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/950816-3.c b/gcc/testsuite/gcc.c-torture/compile/950816-3.c new file mode 100644 index 000000000000..b3cb0fca3770 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/950816-3.c @@ -0,0 +1,8 @@ +f () +{ + int i; + short x, z; + for (i = 0; i <= 1; i++) + x = i; + return x + z; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/950910-1.c b/gcc/testsuite/gcc.c-torture/compile/950910-1.c new file mode 100644 index 000000000000..1be2aa55e681 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/950910-1.c @@ -0,0 +1,22 @@ +f (char *p) +{ + char c; + + c = *++p; + if (c != ' ') + return 0; + for (;;) + { + c = *p; + if (g (c)) + p++; + else + { + if (c == ' ') + break; + else + return 0; + } + } + return 1; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/950919-1.c b/gcc/testsuite/gcc.c-torture/compile/950919-1.c new file mode 100644 index 000000000000..8320f6d025a4 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/950919-1.c @@ -0,0 +1,5 @@ +#define empty +#if empty#cpu(m68k) +#endif + +f (){} diff --git a/gcc/testsuite/gcc.c-torture/compile/950921-1.c b/gcc/testsuite/gcc.c-torture/compile/950921-1.c new file mode 100644 index 000000000000..371c7d569c53 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/950921-1.c @@ -0,0 +1,12 @@ +f () +{ + union + { + signed char c; + double d; + } u; + + u.c = 1; + u.c = 1; + return u.c; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/950922-1.c b/gcc/testsuite/gcc.c-torture/compile/950922-1.c new file mode 100644 index 000000000000..73574f33e68e --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/950922-1.c @@ -0,0 +1,68 @@ +struct sw { + const void *x; + int r; +}; +struct sq { + struct sw *q_w; + int t; + int z; +}; + +int +f (int ch, char *fp, char *ap) +{ + register int n; + register char *cp; + register struct sw *p; + register int f; + int prec; + double _double; + int expt; + int ndig; + char expstr[7]; + unsigned long long _uquad; + struct sq q; + struct sw w[8]; + static char zeroes[16]; + + for (;;) { + switch (ch) { + case 'd': + _double = (double) (ap += 8, *((double *) (ap - 8))); + break; + case 'o': + goto nosign; + case 'u': + _uquad = (f & 0x020 ? (ap += 8, *((long long *) (ap - 8))) : f & 0x010 ? (ap += 4, *((long *) (ap - 4))) : f & 0x040 ? (long)(short)(ap += 4, *((int *) (ap - 4))) : (long)(ap += 4, *((int *) (ap - 4)))); + goto nosign; + case 'x': + _uquad = (f & 0x020 ? (ap += 8, *((long long *) (ap - 8))) : f & 0x010 ? (ap += 4, *((long *) (ap - 4))) : f & 0x040 ? (long)(unsigned short)(ap += 4, *((int *) (ap - 4))) : (long)(ap += 4, *((int *) (ap - 4)))); + nosign: + if (_uquad != 0 || prec != 0); + break; + default: + } + if ((f & 0x100) == 0) { + } else { + if (ch >= 'f') { + if (_double == 0) { + if (expt < ndig || (f & 0x001) != 0) { + { if ((n = (ndig - 1)) > 0) { while (n > 16) {{ p->x = (zeroes); p->r = 16; q.z += 16; p++; if (++q.t >= 8) { if (g(fp, &q)) goto error; p = w; }} n -= 16; }{ p->x = (zeroes); p->r = n; q.z += n; p++; if (++q.t >= 8) { if (g(fp, &q)) goto error; p = w; }}}} + } + } else if (expt <= 0) { + { p->x = ("0"); p->r = 1; q.z += 1; p++; if (++q.t >= 8) { if (g(fp, &q)) goto error; p = w; }} + { p->x = 0; p->r = 1; q.z += 1; p++; if (++q.t >= 8) { if (g(fp, &q)) goto error; p = w; }} + { if ((n = (-expt)) > 0) { while (n > 16) {{ p->x = (zeroes); p->r = 16; q.z += 16; p++; if (++q.t >= 8) { if (g(fp, &q)) goto error; p = w; }} n -= 16; }{ p->x = (zeroes); p->r = n; q.z += n; p++; if (++q.t >= 8) { if (g(fp, &q)) goto error; p = w; }} }} + { p->x = cp; p->r = ndig; q.z += ndig; p++; if (++q.t >= 8) { if (g(fp, &q)) goto error; p = w; }} + } else { + { p->x = cp; p->r = expt; q.z += expt; p++; if (++q.t >= 8) { if (g(fp, &q)) goto error; p = w; }} + cp += expt; + { p->x = ("."); p->r = 1; q.z += 1; p++; if (++q.t >= 8) { if (g(fp, &q)) goto error; p = w; }} + { p->x = cp; p->r = (ndig-expt); q.z += (ndig-expt); p++; if (++q.t >= 8) { if (g(fp, &q)) goto error; p = w; }} + } + } + } + } + + error: +} diff --git a/gcc/testsuite/gcc.c-torture/compile/951004-1.c b/gcc/testsuite/gcc.c-torture/compile/951004-1.c new file mode 100644 index 000000000000..1ca60819cdd1 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/951004-1.c @@ -0,0 +1,23 @@ +typedef struct +{ + short v, h; +} S; + +S a; + +f (S pnt) +{ + S mpnt, mtp; + + (&pnt)->v -= 1; + mpnt = pnt; + mtp = a; + if (mtp.v != mpnt.v) + { + S tpnt; + + tpnt = mtp; + mtp = mpnt; + mpnt = tpnt; + } +} diff --git a/gcc/testsuite/gcc.c-torture/compile/951106-1.c b/gcc/testsuite/gcc.c-torture/compile/951106-1.c new file mode 100644 index 000000000000..09cba20c1d0d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/951106-1.c @@ -0,0 +1,4 @@ +f (double a, double b) +{ + g (a, 0, b); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/951116-1.c b/gcc/testsuite/gcc.c-torture/compile/951116-1.c new file mode 100644 index 000000000000..100d6902a725 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/951116-1.c @@ -0,0 +1,9 @@ +f () +{ + long long i; + int j; + long long k = i = j; + + int inner () {return j + i;} + return k; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/951128-1.c b/gcc/testsuite/gcc.c-torture/compile/951128-1.c new file mode 100644 index 000000000000..5e4dc7093c82 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/951128-1.c @@ -0,0 +1,5 @@ +char a[]; +f (const int i) +{ + a[i] = 0; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/951220-1.c b/gcc/testsuite/gcc.c-torture/compile/951220-1.c new file mode 100644 index 000000000000..33e98f6221ef --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/951220-1.c @@ -0,0 +1,4 @@ +f (char *x) +{ + return (*x & 2) || (*x & 3); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/951222-1.c b/gcc/testsuite/gcc.c-torture/compile/951222-1.c new file mode 100644 index 000000000000..b8246f5fe81f --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/951222-1.c @@ -0,0 +1,15 @@ +extern long long foo (); + +long long +sub1 () +{ + char junk[10000]; + register long long a, b, c; + + b = foo (); + + setjmp (); + a = foo (); + c = a - b; + return c; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/960106-1.c b/gcc/testsuite/gcc.c-torture/compile/960106-1.c new file mode 100644 index 000000000000..c8228aab5879 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/960106-1.c @@ -0,0 +1,4 @@ +f (a) +{ + return (a & 1) && !(a & 2 & 4); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/960130-1.c b/gcc/testsuite/gcc.c-torture/compile/960130-1.c new file mode 100644 index 000000000000..ed8dab459880 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/960130-1.c @@ -0,0 +1,8 @@ +int a[1]; + +int +main() +{ + extern int a[]; + return *a; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/960201-1.c b/gcc/testsuite/gcc.c-torture/compile/960201-1.c new file mode 100644 index 000000000000..adc462389d2b --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/960201-1.c @@ -0,0 +1,5 @@ +union foo +{ + char a; + int x[2]; +} __attribute__ ((transparent_union)); diff --git a/gcc/testsuite/gcc.c-torture/compile/960218-1.c b/gcc/testsuite/gcc.c-torture/compile/960218-1.c new file mode 100644 index 000000000000..46fbf778524c --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/960218-1.c @@ -0,0 +1,2 @@ +#define X(x) x +int main() { return X(0/* *//* */); } diff --git a/gcc/testsuite/gcc.c-torture/compile/960220-1.c b/gcc/testsuite/gcc.c-torture/compile/960220-1.c new file mode 100644 index 000000000000..766a066c4495 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/960220-1.c @@ -0,0 +1,6 @@ +f () +{ + unsigned long long int a = 0, b; + while (b > a) + ; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/960221-1.c b/gcc/testsuite/gcc.c-torture/compile/960221-1.c new file mode 100644 index 000000000000..0e02496c1045 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/960221-1.c @@ -0,0 +1,11 @@ +struct s1 { int f1; }; + +struct s2 { + struct s1 a; + int f2; +}; + +foo (struct s2 *ptr) +{ + *ptr = (struct s2) {{}, 0}; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/960319-1.c b/gcc/testsuite/gcc.c-torture/compile/960319-1.c new file mode 100644 index 000000000000..f3d95ab6e8e1 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/960319-1.c @@ -0,0 +1,10 @@ +static void +f() +{ + long long a[2]; + int i; + if (g()) + if (h()) + ; + *a |= (long long)i << 65 ; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/960514-1.c b/gcc/testsuite/gcc.c-torture/compile/960514-1.c new file mode 100644 index 000000000000..1d38cfd1a0b2 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/960514-1.c @@ -0,0 +1,12 @@ +struct s { + unsigned long long t[5]; +}; + +void +f (struct s *d, unsigned long long *l) +{ + int i; + + for (i = 0; i < 5; i++) + d->t[i] += l[i]; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/960704-1.c b/gcc/testsuite/gcc.c-torture/compile/960704-1.c new file mode 100644 index 000000000000..5a9d35cfd9a6 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/960704-1.c @@ -0,0 +1,10 @@ +struct A { + double d; +}; + +struct A f (); + +main () +{ + struct A a = f(); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/960829-1.c b/gcc/testsuite/gcc.c-torture/compile/960829-1.c new file mode 100644 index 000000000000..8c6163dfaf09 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/960829-1.c @@ -0,0 +1,4 @@ +f () +{ + g (0, 0.0, 0.0, 0.0, 0.0); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/961004-1.c b/gcc/testsuite/gcc.c-torture/compile/961004-1.c new file mode 100644 index 000000000000..6407b625d668 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/961004-1.c @@ -0,0 +1,37 @@ +void +f1 (o1, o2, o3, i, j, k) + long long *o1, *o2, *o3; + int i, j, k; +{ + while (--i) + o1[i] = o2[j >>= 1] + o3[k >>= 1]; +} + +void +f2 (o1, o2, o3, i, j, k) + long long *o1, *o2, *o3; + int i, j, k; +{ + while (--i) + o1[i] = o2[j >>= 1] - o3[k >>= 1]; +} + +void +f3 (o1, o2, o3, i, j, k) + long long *o1, *o3; + unsigned *o2; + int i, j, k; +{ + while (--i) + o1[i] = o2[j >>= 1] + o3[k >>= 1]; +} + +void +f4 (o1, o2, o3, i, j, k) + long long *o1, *o2; + unsigned *o3; + int i, j, k; +{ + while (--i) + o1[i] = o2[j >>= 1] - o3[k >>= 1]; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/961010-1.c b/gcc/testsuite/gcc.c-torture/compile/961010-1.c new file mode 100644 index 000000000000..d6145bc4233a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/961010-1.c @@ -0,0 +1 @@ +double f (double x) { return x == 0 ? x : 0.0; } diff --git a/gcc/testsuite/gcc.c-torture/compile/961019-1.c b/gcc/testsuite/gcc.c-torture/compile/961019-1.c new file mode 100644 index 000000000000..0ea6ec6e280a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/961019-1.c @@ -0,0 +1,11 @@ +char _hex_value[256]; + +void +hex_init () +{ + int i; + for (i = 0; i < 256; i++) + _hex_value[i] = 99; + for (i = 0; i < 10; i++) + _hex_value['0' + i] = i; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/961031-1.c b/gcc/testsuite/gcc.c-torture/compile/961031-1.c new file mode 100644 index 000000000000..ea8718f763b1 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/961031-1.c @@ -0,0 +1,16 @@ +struct s { + double d; +} sd; + +struct s g () __attribute__ ((const)); + +struct s +g () +{ + return sd; +} + +f () +{ + g (); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/961126-1.c b/gcc/testsuite/gcc.c-torture/compile/961126-1.c new file mode 100644 index 000000000000..f3b6af55595a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/961126-1.c @@ -0,0 +1,107 @@ +int *p; + +main() +{ + int i = sub (); + + i = -i; + if (*p != i) + goto quit; + i = -i; + if (*p != i) + goto quit; + i = -i; + if (*p != i) + goto quit; + i = -i; + if (*p != i) + goto quit; + i = -i; + if (*p != i) + goto quit; + i = -i; + if (*p != i) + goto quit; + i = -i; + if (*p != i) + goto quit; + i = -i; + if (*p != i) + goto quit; + i = -i; + if (*p != i) + goto quit; + i = -i; + if (*p != i) + goto quit; + i = -i; + if (*p != i) + goto quit; + i = -i; + if (*p != i) + goto quit; + i = -i; + if (*p != i) + goto quit; + i = -i; + if (*p != i) + goto quit; + i = -i; + if (*p != i) + goto quit; + i = -i; + if (*p != i) + goto quit; + i = -i; + if (*p != i) + goto quit; + i = -i; + if (*p != i) + goto quit; + i = -i; + if (*p != i) + goto quit; + i = -i; + if (*p != i) + goto quit; + i = -i; + if (*p != i) + goto quit; + i = -i; + if (*p != i) + goto quit; + i = -i; + if (*p != i) + goto quit; + i = -i; + if (*p != i) + goto quit; + i = -i; + if (*p != i) + goto quit; + i = -i; + if (*p != i) + goto quit; + i = -i; + if (*p != i) + goto quit; + i = -i; + if (*p != i) + goto quit; + i = -i; + if (*p != i) + goto quit; + i = -i; + if (*p != i) + goto quit; + i = -i; + if (*p != i) + goto quit; + i = -i; + if (*p != i) + goto quit; + + i = -i; +quit: + sub2 (i); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/961203-1.c b/gcc/testsuite/gcc.c-torture/compile/961203-1.c new file mode 100644 index 000000000000..0f066ace6177 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/961203-1.c @@ -0,0 +1,14 @@ +struct s { + char a[0x32100000]; + int x:30, y:30; +}; + +int +main () +{ + struct s* p; + + p = (struct s*) 0; + if (p->x == p->y) + exit (1); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/970206-1.c b/gcc/testsuite/gcc.c-torture/compile/970206-1.c new file mode 100644 index 000000000000..95196cd6a54e --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/970206-1.c @@ -0,0 +1,13 @@ +struct Rect +{ + int iA; + int iB; + int iC; + int iD; +}; + +void +f (int * const this, struct Rect arect) +{ + g (*this, arect); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/970214-1.c b/gcc/testsuite/gcc.c-torture/compile/970214-1.c new file mode 100644 index 000000000000..508ea9e92b6c --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/970214-1.c @@ -0,0 +1,3 @@ +#include <stddef.h> +#define L 264 +wchar_t c = L'X'; diff --git a/gcc/testsuite/gcc.c-torture/compile/Makefile.in b/gcc/testsuite/gcc.c-torture/compile/Makefile.in new file mode 100644 index 000000000000..e6209dbc6c2d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/Makefile.in @@ -0,0 +1,12 @@ +#### host, target, and site specific Makefile frags come in here. + +srcdir = . + +# Nothing to do... +all: + +clean: + -rm -f *.o *.diff *~ *.bad core *.x + +distclean: clean + -rm -f Makefile config.status diff --git a/gcc/testsuite/gcc.c-torture/compile/calls.c b/gcc/testsuite/gcc.c-torture/compile/calls.c new file mode 100644 index 000000000000..1582c0e92fa9 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/calls.c @@ -0,0 +1,22 @@ +typedef void *(*T)(void); +f1 () +{ + ((T) 0)(); +} +f2 () +{ + ((T) 1000)(); +} +f3 () +{ + ((T) 10000000)(); +} +f4 (r) +{ + ((T) r)(); +} +f5 () +{ + int (*r)() = f3; + ((T) r)(); +} diff --git a/gcc/testsuite/gcc.c-torture/compile/cmpdi-1.c b/gcc/testsuite/gcc.c-torture/compile/cmpdi-1.c new file mode 100644 index 000000000000..9e1b659c7cfd --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/cmpdi-1.c @@ -0,0 +1,15 @@ +f (long long d) +{ + int i = 0; + if (d == 1) + i = 1; + return i; +} + +g (long long d) +{ + int i = 0; + if (d <= 0) + i = 1; + return i; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/combine-hang.c b/gcc/testsuite/gcc.c-torture/compile/combine-hang.c new file mode 100644 index 000000000000..7cc57afe603e --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/combine-hang.c @@ -0,0 +1,26 @@ +typedef union +{ + double value; + struct + { + unsigned long msw; + unsigned long lsw; + } parts; +} ieee_double_shape_type; + +double f (int iy) +{ + double z, t; + ieee_double_shape_type u, v; + + if (iy == 1) + return 0; + + u.parts.msw = iy; + u.parts.lsw = 0; + z = u.value; + v.parts.msw = iy; + v.parts.lsw = 0; + t = v.value; + return 1.0+z+t+t; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/compile.exp b/gcc/testsuite/gcc.c-torture/compile/compile.exp new file mode 100644 index 000000000000..f96f0231a6ca --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/compile.exp @@ -0,0 +1,35 @@ +# Expect driver script for GCC Regression Tests +# Copyright (C) 1993, 1995, 1997 Free Software Foundation +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +# These tests come from Torbjorn Granlund's (tege@cygnus.com) +# C torture test suite, and other contributors. + +if $tracelevel then { + strace $tracelevel +} + +# load support procs +load_lib c-torture.exp + +foreach testcase [glob -nocomplain $srcdir/$subdir/*.c] { + # If we're only testing specific files and this isn't one of them, skip it. + if ![runtest_file_p $runtests $testcase] then { + continue + } + + c-torture $testcase +} diff --git a/gcc/testsuite/gcc.c-torture/compile/configure.in b/gcc/testsuite/gcc.c-torture/compile/configure.in new file mode 100644 index 000000000000..e4cc69d249e3 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/configure.in @@ -0,0 +1,15 @@ +# This file is a shell script fragment that supplies the information +# necessary to tailor a template configure script into the configure +# script appropriate for this directory. For more information, check +# any existing configure script. + +srctrigger=compile.exp +srcname="DejaGnu" + +# per-host: + +# per-target: + +target_makefile_frag=../config/mt-${target_alias} + +# post-target: diff --git a/gcc/testsuite/gcc.c-torture/compile/funcptr-1.c b/gcc/testsuite/gcc.c-torture/compile/funcptr-1.c new file mode 100644 index 000000000000..79687c9c0052 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/funcptr-1.c @@ -0,0 +1,19 @@ +extern int (*gp)(const char*); + +int +g (const char* d) +{ + printf ("g"); + return 0; +} + +f () +{ + int errcnt=0; + + if (gp != g) + { + printf ("f"); + errcnt++; + } +} diff --git a/gcc/testsuite/gcc.c-torture/compile/goto-1.c b/gcc/testsuite/gcc.c-torture/compile/goto-1.c new file mode 100644 index 000000000000..caeed3aa0ba1 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/goto-1.c @@ -0,0 +1,16 @@ +f () +{ + do + { + if (0) + { + L1:; + } + else + goto L2; + L2:; + } + while (0); + + goto L1; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/init-1.c b/gcc/testsuite/gcc.c-torture/compile/init-1.c new file mode 100644 index 000000000000..38db9ad87d99 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/init-1.c @@ -0,0 +1,19 @@ +typedef struct +{ + char *key; + char *value; +} T1; + +typedef struct +{ + long type; + char *value; +} T3; + +T1 a[] = +{ + { + "", + ((char *)&((T3) {1, (char *) 1})) + } +}; diff --git a/gcc/testsuite/gcc.c-torture/compile/init-2.c b/gcc/testsuite/gcc.c-torture/compile/init-2.c new file mode 100644 index 000000000000..63a7f5849d6e --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/init-2.c @@ -0,0 +1,4 @@ +struct +{ + int e1, e2; +} v = { e2: 0 }; diff --git a/gcc/testsuite/gcc.c-torture/compile/labels-1.c b/gcc/testsuite/gcc.c-torture/compile/labels-1.c new file mode 100644 index 000000000000..fae6ab8f400e --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/labels-1.c @@ -0,0 +1,13 @@ +#ifndef NO_LABEL_VALUES +f () +{ + void *x = &&L2; + if (&&L3 - &&L1 > 1) + abort(); + L1: return 1; + L2: abort (); + L3:; +} +#else +int x; +#endif diff --git a/gcc/testsuite/gcc.c-torture/compile/packed-1.c b/gcc/testsuite/gcc.c-torture/compile/packed-1.c new file mode 100644 index 000000000000..709fc3cb1023 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/packed-1.c @@ -0,0 +1,14 @@ +struct s +{ + int e; +} x; + +struct rbuf +{ + struct s *p __attribute__ ((packed)); +} *b; + +f () +{ + b->p = &x; +} diff --git a/gcc/testsuite/gcc.c-torture/compile/widechar-1.c b/gcc/testsuite/gcc.c-torture/compile/widechar-1.c new file mode 100644 index 000000000000..5d89f33a864e --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/widechar-1.c @@ -0,0 +1 @@ +char *s = L"a" "b"; diff --git a/gcc/testsuite/gcc.c-torture/compile/zero-strct-1.c b/gcc/testsuite/gcc.c-torture/compile/zero-strct-1.c new file mode 100644 index 000000000000..d3db812691b7 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/zero-strct-1.c @@ -0,0 +1,7 @@ +typedef struct { } empty_t; + +f () +{ + empty_t i; + bar (i); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/900409-1.c b/gcc/testsuite/gcc.c-torture/execute/900409-1.c new file mode 100644 index 000000000000..3112effaf2f3 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/900409-1.c @@ -0,0 +1,20 @@ +long f1(long a){return a&0xff000000L;} +long f2 (long a){return a&~0xff000000L;} +long f3(long a){return a&0x000000ffL;} +long f4(long a){return a&~0x000000ffL;} +long f5(long a){return a&0x0000ffffL;} +long f6(long a){return a&~0x0000ffffL;} + +main () +{ + long a = 0x89ABCDEF; + + if (f1(a)!=0x89000000L|| + f2(a)!=0x00ABCDEFL|| + f3(a)!=0x000000EFL|| + f4(a)!=0x89ABCD00L|| + f5(a)!=0x0000CDEFL|| + f6(a)!=0x89AB0000L) + abort(); + exit(0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/920202-1.c b/gcc/testsuite/gcc.c-torture/execute/920202-1.c new file mode 100644 index 000000000000..e30ce2fd5c22 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/920202-1.c @@ -0,0 +1,18 @@ +static int rule_text_needs_stack_pop = 0; +static int input_stack_pos = 1; + +f (void) +{ + rule_text_needs_stack_pop = 1; + + if (input_stack_pos <= 0) + return 1; + else + return 0; +} + +main () +{ + f (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/920302-1.c b/gcc/testsuite/gcc.c-torture/execute/920302-1.c new file mode 100644 index 000000000000..5fbfd9d1b9c8 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/920302-1.c @@ -0,0 +1,42 @@ +short optab[5]; +char buf[10]; +execute (ip) + register unsigned short *ip; +{ +#ifndef NO_LABEL_VALUES + register void *base = &&x; + char *bp = buf; + static void *tab[] = {&&x, &&y, &&z}; + if (ip == 0) + { + int i; + for (i = 0; i < 3; ++i) + optab[i] = (short)(tab[i] - base); + return; + } +x: *bp++='x'; + goto *(base + *ip++); +y: *bp++='y'; + goto *(base + *ip++); +z: *bp++='z'; + *bp=0; + return; +#else + strcpy (buf, "xyxyz"); +#endif +} + +short p[5]; + +main () +{ + execute (0); + p[0] = optab[1]; + p[1] = optab[0]; + p[2] = optab[1]; + p[3] = optab[2]; + execute (&p); + if (strcmp (buf, "xyxyz")) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/920409-1.c b/gcc/testsuite/gcc.c-torture/execute/920409-1.c new file mode 100644 index 000000000000..938ce7d92d61 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/920409-1.c @@ -0,0 +1 @@ +x(){signed char c=-1;return c<0;}main(){if(x()!=1)abort();exit(0);} diff --git a/gcc/testsuite/gcc.c-torture/execute/920410-1.c b/gcc/testsuite/gcc.c-torture/execute/920410-1.c new file mode 100644 index 000000000000..f5180f06a9ce --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/920410-1.c @@ -0,0 +1,6 @@ +#define STACK_REQUIREMENT (40000 * 4 + 256) +#if defined (STACK_SIZE) && STACK_SIZE < STACK_REQUIREMENT +main () { exit (0); } +#else +main(){int d[40000];d[0]=0;exit(0);} +#endif diff --git a/gcc/testsuite/gcc.c-torture/execute/920411-1.c b/gcc/testsuite/gcc.c-torture/execute/920411-1.c new file mode 100644 index 000000000000..e3e981001088 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/920411-1.c @@ -0,0 +1,24 @@ +long f (w) + char *w; +{ + long k, i, c = 0, x; + char *p = (char*) &x; + for (i = 0; i < 1; i++) + { + for (k = 0; k < sizeof (long); k++) + p[k] = w[k]; + c += x; + } + return c; +} + +main () +{ + int i; + char a[sizeof (long)]; + + for (i = sizeof (long); --i >= 0;) a[i] = ' '; + if (f (a) != ~0UL / (unsigned char) ~0 * ' ') + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/920415-1.c b/gcc/testsuite/gcc.c-torture/execute/920415-1.c new file mode 100644 index 000000000000..25100ad52004 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/920415-1.c @@ -0,0 +1,7 @@ +/* CYGNUS LOCAL -- meissner/no label values */ +#ifndef NO_LABEL_VALUES +main(){__label__ l;void*x(){return&&l;}goto*x();abort();return;l:exit(0);} +#else +main(){ exit (0); } +#endif +/* END CYGNUS LOCAL -- meissner/no label values */ diff --git a/gcc/testsuite/gcc.c-torture/execute/920428-1.c b/gcc/testsuite/gcc.c-torture/execute/920428-1.c new file mode 100644 index 000000000000..154af763a509 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/920428-1.c @@ -0,0 +1,2 @@ +x(const char*s){char a[1];const char*ss=s;a[*s++]|=1;return(int)ss+1==(int)s;} +main(){if(x("")!=1)abort();exit(0);} diff --git a/gcc/testsuite/gcc.c-torture/execute/920428-2.c b/gcc/testsuite/gcc.c-torture/execute/920428-2.c new file mode 100644 index 000000000000..118ba9683149 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/920428-2.c @@ -0,0 +1,7 @@ +#ifndef NO_LABEL_VALUES +s(i){if(i>0){__label__ l1;int f(int i){if(i==2)goto l1;return 0;}return f(i);l1:;}return 1;} +x(){return s(0)==1&&s(1)==0&&s(2)==1;} +main(){if(x()!=1)abort();exit(0);} +#else +main(){ exit (0); } +#endif diff --git a/gcc/testsuite/gcc.c-torture/execute/920428-2.cexp b/gcc/testsuite/gcc.c-torture/execute/920428-2.cexp new file mode 100644 index 000000000000..c7d9f0300490 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/920428-2.cexp @@ -0,0 +1,6 @@ +# This doesn't work on sparc's with -mflat. + +if { [istarget "sparc-*-*"] && [string match "*mflat*" $CFLAGS] } { + set torture_execute_xfail "sparc-*-*" +} +return 0 diff --git a/gcc/testsuite/gcc.c-torture/execute/920429-1.c b/gcc/testsuite/gcc.c-torture/execute/920429-1.c new file mode 100644 index 000000000000..f37bf68bdd40 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/920429-1.c @@ -0,0 +1,3 @@ +typedef unsigned char t;int i,j; +t*f(t*p){t c;c=*p++;i=((c&2)?1:0);j=(c&7)+1;return p;} +main(){t*p0="ab",*p1;p1=f(p0);if(p0+1!=p1)abort();exit(0);} diff --git a/gcc/testsuite/gcc.c-torture/execute/920501-1.c b/gcc/testsuite/gcc.c-torture/execute/920501-1.c new file mode 100644 index 000000000000..6f757cac59c3 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/920501-1.c @@ -0,0 +1,3 @@ +int s[2]; +x(){if(!s[0]){s[1+s[1]]=s[1];return 1;}} +main(){s[0]=s[1]=0;if(x(0)!=1)abort();exit(0);} diff --git a/gcc/testsuite/gcc.c-torture/execute/920501-2.c b/gcc/testsuite/gcc.c-torture/execute/920501-2.c new file mode 100644 index 000000000000..d99eef289e5e --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/920501-2.c @@ -0,0 +1,114 @@ +unsigned long +gcd_ll (unsigned long long x, unsigned long long y) +{ + for (;;) + { + if (y == 0) + return (unsigned long) x; + x = x % y; + if (x == 0) + return (unsigned long) y; + y = y % x; + } +} + +unsigned long long +powmod_ll (unsigned long long b, unsigned e, unsigned long long m) +{ + unsigned t; + unsigned long long pow; + int i; + + if (e == 0) + return 1; + + /* Find the most significant bit in E. */ + t = e; + for (i = 0; t != 0; i++) + t >>= 1; + + /* The most sign bit in E is handled outside of the loop, by beginning + with B in POW, and decrementing I. */ + pow = b; + i -= 2; + + for (; i >= 0; i--) + { + pow = pow * pow % m; + if ((1 << i) & e) + pow = pow * b % m; + } + + return pow; +} + +unsigned long factab[10]; + +void +facts (t, a_int, x0, p) + unsigned long long t; + int a_int; + int x0; + unsigned p; +{ + unsigned long *xp = factab; + unsigned long long x, y; + unsigned long q = 1; + unsigned long long a = a_int; + int i; + unsigned long d; + int j = 1; + unsigned long tmp; + int jj = 0; + + x = x0; + y = x0; + + for (i = 1; i < 10000; i++) + { + x = powmod_ll (x, p, t) + a; + y = powmod_ll (y, p, t) + a; + y = powmod_ll (y, p, t) + a; + + if (x > y) + tmp = x - y; + else + tmp = y - x; + q = (unsigned long long) q * tmp % t; + + if (i == j) + { + jj += 1; + j += jj; + d = gcd_ll (q, t); + if (d != 1) + { + *xp++ = d; + t /= d; + if (t == 1) + { + return; + *xp = 0; + } + } + } + } +} + +main () +{ + unsigned long long t; + unsigned x0, a; + unsigned p; + + p = 27; + t = (1ULL << p) - 1; + + a = -1; + x0 = 3; + + facts (t, a, x0, p); + if (factab[0] != 7 || factab[1] != 73 || factab[2] != 262657) + abort(); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/920501-3.c b/gcc/testsuite/gcc.c-torture/execute/920501-3.c new file mode 100644 index 000000000000..1031d7378cb2 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/920501-3.c @@ -0,0 +1,35 @@ +int tab[9]; +execute(oip, ip) + unsigned short *oip, *ip; +{ +#ifndef NO_LABEL_VALUES + int x = 0; + int *xp = tab; +base: + x++; + if (x == 4) + { + *xp = 0; + return; + } + *xp++ = ip - oip; + goto *(&&base + *ip++); +#else + tab[0] = 0; + tab[1] = 1; + tab[2] = 2; + tab[3] = 0; +#endif +} + +main() +{ + unsigned short ip[10]; + int i; + for (i = 0; i < 10; i++) + ip[i] = 0; + execute(ip, ip); + if (tab[0] != 0 || tab[1] != 1 || tab[2] != 2 || tab[3] != 0) + abort(); + exit(0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/920501-4.c b/gcc/testsuite/gcc.c-torture/execute/920501-4.c new file mode 100644 index 000000000000..b936c4984b60 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/920501-4.c @@ -0,0 +1,6 @@ +#ifndef NO_LABEL_VALUES +x(int i){static const void*j[]={&&x,&&y,&&z};goto*j[i];x:return 2;y:return 3;z:return 5;} +main(){if(x(0)!=2||x(1)!=3|x(2)!=5)abort();exit(0);} +#else +main(){ exit (0); } +#endif diff --git a/gcc/testsuite/gcc.c-torture/execute/920501-5.c b/gcc/testsuite/gcc.c-torture/execute/920501-5.c new file mode 100644 index 000000000000..097407477122 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/920501-5.c @@ -0,0 +1,19 @@ +#ifndef NO_LABEL_VALUES +x (int i) +{ + void *j[] = {&&x, &&y, &&z}; + goto *j[i]; + x:return 2; + y:return 3; + z:return 5; + +} +main () +{ + if (x (0) != 2 || x (1) != 3 | x (2) != 5) + abort(); + exit(0); +} +#else +main(){ exit (0); } +#endif diff --git a/gcc/testsuite/gcc.c-torture/execute/920501-6.c b/gcc/testsuite/gcc.c-torture/execute/920501-6.c new file mode 100644 index 000000000000..cbb7b43243f0 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/920501-6.c @@ -0,0 +1,91 @@ +#include <stdio.h> + +/* Convert a decimal string to a long long unsigned. No error check is + performed. */ + +long long unsigned +str2llu (str) + char *str; +{ + long long unsigned acc; + int d; + acc = *str++ - '0'; + for (;;) + { + d = *str++; + if (d == '\0') + break; + d -= '0'; + acc = acc * 10 + d; + } + + return acc; +} + +/* isqrt(t) - computes the square root of t. (tege 86-10-27) */ + +long unsigned +sqrtllu (long long unsigned t) +{ + long long unsigned s; + long long unsigned b; + + for (b = 0, s = t; b++, (s >>= 1) != 0; ) + ; + + s = 1 << (b >> 1); + + if (b & 1) + s += s >> 1; + + do + { + b = t / s; + s = (s + b) >> 1; + } + while (b < s); + + return s; +} + + +int plist (p0, p1, tab) + long long unsigned p0, p1; + long long unsigned *tab; +{ + long long unsigned p; + long unsigned d; + long unsigned s; + long long unsigned *xp = tab; + + for (p = p0; p <= p1; p += 2) + { + s = sqrtllu (p); + + for (d = 3; d <= s; d += 2) + { + long long unsigned q = p % d; + if (q == 0) + goto not_prime; + } + + *xp++ = p; + not_prime:; + } + *xp = 0; + return xp - tab; +} + +main (argc, argv) + int argc; + char *argv[]; +{ + long long tab[10]; + int nprimes; + nprimes = plist (str2llu ("1234111111"), str2llu ("1234111127"), tab); + + if(tab[0]!=1234111117LL||tab[1]!=1234111121LL||tab[2]!=1234111127LL||tab[3]!=0) + abort(); + + exit(0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/920501-7.c b/gcc/testsuite/gcc.c-torture/execute/920501-7.c new file mode 100644 index 000000000000..f032bd8c6903 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/920501-7.c @@ -0,0 +1,34 @@ +/* CYGNUS LOCAL -- meissner/no label values */ +#ifdef STACK_SIZE +#define DEPTH ((STACK_SIZE) / 512 + 1) +#else +#define DEPTH 1000 +#endif + +#ifndef NO_LABEL_VALUES +x(a) +{ + __label__ xlab; + void y(a) + { + if (a==0) + goto xlab; + y (a-1); + } + y (a); + xlab:; + return a; +} +#endif + +main () +{ +#ifndef __I960__ +#ifndef NO_LABEL_VALUES + if (x (DEPTH) != DEPTH) + abort (); +#endif +#endif + exit (0); +} +/* END CYGNUS LOCAL -- meissner/no label values */ diff --git a/gcc/testsuite/gcc.c-torture/execute/920501-7.cexp b/gcc/testsuite/gcc.c-torture/execute/920501-7.cexp new file mode 100644 index 000000000000..c7d9f0300490 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/920501-7.cexp @@ -0,0 +1,6 @@ +# This doesn't work on sparc's with -mflat. + +if { [istarget "sparc-*-*"] && [string match "*mflat*" $CFLAGS] } { + set torture_execute_xfail "sparc-*-*" +} +return 0 diff --git a/gcc/testsuite/gcc.c-torture/execute/920501-8.c b/gcc/testsuite/gcc.c-torture/execute/920501-8.c new file mode 100644 index 000000000000..04f1e132f5b1 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/920501-8.c @@ -0,0 +1,39 @@ +#include <stdio.h> +#include <stdarg.h> + +extern int sprintf(char *, const char *, ...); +char buf[50]; +int +va (int a, double b, int c, ...) +{ + va_list ap; + int d, e, f, g, h, i, j, k, l, m, n, o, p; + va_start (ap, c); + + d = va_arg (ap, int); + e = va_arg (ap, int); + f = va_arg (ap, int); + g = va_arg (ap, int); + h = va_arg (ap, int); + i = va_arg (ap, int); + j = va_arg (ap, int); + k = va_arg (ap, int); + l = va_arg (ap, int); + m = va_arg (ap, int); + n = va_arg (ap, int); + o = va_arg (ap, int); + p = va_arg (ap, int); + + sprintf (buf, + "%d,%f,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d", + a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p); + va_end (ap); +} + +main() +{ + va (1, 1.0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); + if (strcmp ("1,1.000000,2,3,4,5,6,7,8,9,10,11,12,13,14,15", buf)) + abort(); + exit(0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/920501-9.c b/gcc/testsuite/gcc.c-torture/execute/920501-9.c new file mode 100644 index 000000000000..f585ac6e0f42 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/920501-9.c @@ -0,0 +1,27 @@ +#include <stdio.h> + +long long proc1(){return 1LL;} +long long proc2(){return 0x12345678LL;} +long long proc3(){return 0xaabbccdd12345678LL;} +long long proc4(){return -1LL;} +long long proc5(){return 0xaabbccddLL;} + +print_longlong(x,buf) + long long x; + char *buf; +{ + unsigned long l; + l= (x >> 32) & 0xffffffff; + if (l != 0) + sprintf(buf,"%lx%08.lx",l,((unsigned long)x & 0xffffffff)); + else + sprintf(buf,"%lx",((unsigned long)x & 0xffffffff)); +} + +main(){char buf[100]; +print_longlong(proc1(),buf);if(strcmp("1",buf))abort(); +print_longlong(proc2(),buf);if(strcmp("12345678",buf))abort(); +print_longlong(proc3(),buf);if(strcmp("aabbccdd12345678",buf))abort(); +print_longlong(proc4(),buf);if(strcmp("ffffffffffffffff",buf))abort(); +print_longlong(proc5(),buf);if(strcmp("aabbccdd",buf))abort(); +exit(0);} diff --git a/gcc/testsuite/gcc.c-torture/execute/920506-1.c b/gcc/testsuite/gcc.c-torture/execute/920506-1.c new file mode 100644 index 000000000000..9a646a30fc29 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/920506-1.c @@ -0,0 +1,2 @@ +int l[]={0,1}; +main(){int*p=l;switch(*p++){case 0:exit(0);case 1:break;case 2:break;case 3:case 4:break;}abort();} diff --git a/gcc/testsuite/gcc.c-torture/execute/920520-1.c b/gcc/testsuite/gcc.c-torture/execute/920520-1.c new file mode 100644 index 000000000000..068a12e92491 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/920520-1.c @@ -0,0 +1,36 @@ +foo(int *bar) +{ + *bar = 8; +} + +bugger() +{ + int oldDepth, newDepth; + + foo(&oldDepth); + + switch (oldDepth) + { + case 8: + case 500: + newDepth = 8; + break; + + case 5000: + newDepth = 500; + break; + + default: + newDepth = 17; + break; + } + + return newDepth - oldDepth; +} + +main() +{ + if (bugger() != 0) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/920603-1.c b/gcc/testsuite/gcc.c-torture/execute/920603-1.c new file mode 100644 index 000000000000..bd27ca6196e9 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/920603-1.c @@ -0,0 +1,2 @@ +f(got){if(got!=0xffff)abort();} +main(){signed char c=-1;unsigned u=(unsigned short)c;f(u);exit(0);} diff --git a/gcc/testsuite/gcc.c-torture/execute/920604-1.c b/gcc/testsuite/gcc.c-torture/execute/920604-1.c new file mode 100644 index 000000000000..d7d9be13fd81 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/920604-1.c @@ -0,0 +1,13 @@ +long long +mod (a, b) + long long a, b; +{ + return a % b; +} + +int +main () +{ + mod (1LL, 2LL); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/920612-1.c b/gcc/testsuite/gcc.c-torture/execute/920612-1.c new file mode 100644 index 000000000000..a70c0d2e078e --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/920612-1.c @@ -0,0 +1,2 @@ +f(j)int j;{return++j>0;} +main(){if(f((~0U)>>1))abort();exit(0);} diff --git a/gcc/testsuite/gcc.c-torture/execute/920612-2.c b/gcc/testsuite/gcc.c-torture/execute/920612-2.c new file mode 100644 index 000000000000..2667093491f1 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/920612-2.c @@ -0,0 +1,12 @@ +main () +{ + int i = 0; + int a (int x) + { + while (x) + i++, x--; + return x; + } + a (2); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/920618-1.c b/gcc/testsuite/gcc.c-torture/execute/920618-1.c new file mode 100644 index 000000000000..224f7208953b --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/920618-1.c @@ -0,0 +1 @@ +main(){if(1.17549435e-38F<=1.1)exit(0);abort();} diff --git a/gcc/testsuite/gcc.c-torture/execute/920625-1.c b/gcc/testsuite/gcc.c-torture/execute/920625-1.c new file mode 100644 index 000000000000..ae2f415dec73 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/920625-1.c @@ -0,0 +1,38 @@ +#include <stdarg.h> + +typedef struct{double x,y;}point; +point pts[]={{1.0,2.0},{3.0,4.0},{5.0,6.0},{7.0,8.0}}; +static int va1(int nargs,...) +{ + va_list args; + int i; + point pi; + va_start(args,nargs); + for(i=0;i<nargs;i++){ + pi=va_arg(args,point); + if(pts[i].x!=pi.x||pts[i].y!=pi.y)abort(); + } + va_end(args); +} + +typedef struct{int x,y;}ipoint; +ipoint ipts[]={{1,2},{3,4},{5,6},{7,8}}; +static int va2(int nargs,...) +{ + va_list args; + int i; + ipoint pi; + va_start(args,nargs); + for(i=0;i<nargs;i++){ + pi=va_arg(args,ipoint); + if(ipts[i].x!=pi.x||ipts[i].y!=pi.y)abort(); + } + va_end(args); +} + +main() +{ +va1(4,pts[0],pts[1],pts[2],pts[3]); +va2(4,ipts[0],ipts[1],ipts[2],ipts[3]); +exit(0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/920710-1.c b/gcc/testsuite/gcc.c-torture/execute/920710-1.c new file mode 100644 index 000000000000..7c6f871e2acd --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/920710-1.c @@ -0,0 +1,11 @@ +main() +{ + if ((double) 18446744073709551615ULL < 1.84467440737095e+19 || + (double) 18446744073709551615ULL > 1.84467440737096e+19) + abort(); + + if (16777217L != (float)16777217e0) + abort(); + + exit(0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/920711-1.c b/gcc/testsuite/gcc.c-torture/execute/920711-1.c new file mode 100644 index 000000000000..aa83452dafe3 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/920711-1.c @@ -0,0 +1,2 @@ +f(long a){return (--a > 0);} +main(){if(f(0x80000000L)==0)abort();exit(0);} diff --git a/gcc/testsuite/gcc.c-torture/execute/920715-1.c b/gcc/testsuite/gcc.c-torture/execute/920715-1.c new file mode 100644 index 000000000000..8b0f54b081ca --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/920715-1.c @@ -0,0 +1,67 @@ +double ran(int *idum); +main () +{ + double vp = 0.0048; + double vx; + double vy; + double vz; + + /* CYGNUS LOCAL -- meissner/32bit doubles */ + /* This test requires double precision, so for hosts that don't offer + that much precision, just ignore this test. */ + if (sizeof (double) < 8) + exit (0); + /* END CYGNUS LOCAL -- meissner/32bit doubles */ + + maxbol(vp, &vx , &vy , &vz ); + if (vx < 0.001316505673 || vx > 0.001316505674) + abort(); + if (vy < 0.002731492112 || vy > 0.002731492113) + abort(); + if (vz < 0.001561454099 || vz > 0.001561454100) + abort(); + exit(0); +} +maxbol(double vp , double *vx , double *vy , double *vz) +{ + int idum=0; + int i; + double temp; + + *vx=vp*ran( &idum ); + *vy=vp*ran( &idum ); + *vz=vp*ran( &idum ); +} + +double ran(int *idum) +{ + static long ix1,ix2,ix3; + static double r[97]; + double temp; + static int iff=0; + int j; + + if(*idum<0 || iff==0){ + iff=1; + ix1=(54773-(*idum))%259200; + ix1=(7141*ix1+54773)%259200; + ix2=ix1 %134456; + ix1=(7141*ix1+54773)%259200; + ix3=ix1 %243000; + for(j=0; j<97; j++){ + ix1=(7141*ix1+54773)%259200; + ix2=(8121*ix2+28411)%134456; + r[j]=(ix1+ix2*(1.0/134456))*(1.0/259200); + } + *idum=1; + } + ix1=(7141*ix1+54773)%259200; + ix2=(8121*ix2+28411)%134456; + ix3=(4561*ix3+51349)%243000; + j=((97*ix3)/243000); + if(j >= 97 && j < 0) + abort(); + temp=r[j]; + r[j]=(ix1+ix2*(1.0/134456))*(1.0/259200); + return temp; +} diff --git a/gcc/testsuite/gcc.c-torture/execute/920715-1.cexp b/gcc/testsuite/gcc.c-torture/execute/920715-1.cexp new file mode 100644 index 000000000000..28da30bbcd3e --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/920715-1.cexp @@ -0,0 +1,13 @@ +# This doesn't work on h8300s +# It also doesn't work on d10v if doubles are not 64 bits + +if { [istarget "h8300*-*-*"] || [istarget "mn10200*-*-*"] } { + set torture_execute_xfail "h8300*-*-*" + set torture_execute_xfail "mn10200*-*-*" +} + +if { [istarget "d10v-*-*"] && ! [string-match "*-mdouble64*" $CFLAGS] } { + set torture_execute_xfail "d10v-*-*" +} + +return 0 diff --git a/gcc/testsuite/gcc.c-torture/execute/920721-1.c b/gcc/testsuite/gcc.c-torture/execute/920721-1.c new file mode 100644 index 000000000000..086b5463f7f0 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/920721-1.c @@ -0,0 +1,2 @@ +long f(short a,short b){return (long)a/b;} +main(){if(f(-32768,-1)!=32768L)abort();else exit(0);} diff --git a/gcc/testsuite/gcc.c-torture/execute/920721-2.c b/gcc/testsuite/gcc.c-torture/execute/920721-2.c new file mode 100644 index 000000000000..ed4e0bf87009 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/920721-2.c @@ -0,0 +1,2 @@ +f(){} +main(){int n=2;double x[n];f();exit(0);} diff --git a/gcc/testsuite/gcc.c-torture/execute/920721-3.c b/gcc/testsuite/gcc.c-torture/execute/920721-3.c new file mode 100644 index 000000000000..61f605d0ad91 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/920721-3.c @@ -0,0 +1,26 @@ +static inline fu (unsigned short data) +{ + return data; +} +ru(i) +{ + if(fu(i++)!=5)abort(); + if(fu(++i)!=7)abort(); +} +static inline fs (signed short data) +{ + return data; +} +rs(i) +{ + if(fs(i++)!=5)abort(); + if(fs(++i)!=7)abort(); +} + + +main() +{ + ru(5); + rs(5); + exit(0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/920721-4.c b/gcc/testsuite/gcc.c-torture/execute/920721-4.c new file mode 100644 index 000000000000..3cccc5b30242 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/920721-4.c @@ -0,0 +1,60 @@ +#ifndef NO_LABEL_VALUES +int try (int num) { + __label__ lab1, lab2, lab3, lab4, lab5, lab6, default_lab; + + void *do_switch (int num) { + switch(num) { + case 1: + return &&lab1; + case 2: + return &&lab2; + case 3: + return &&lab3; + case 4: + return &&lab4; + case 5: + return &&lab5; + case 6: + return &&lab6; + default: + return &&default_lab; + } + } + + goto *do_switch (num); + + lab1: + return 1; + + lab2: + return 2; + + lab3: + return 3; + + lab4: + return 4; + + lab5: + return 5; + + lab6: + return 6; + + default_lab: + return -1; +} + +main() +{ + int i; + for (i = 1; i <= 6; i++) + { + if (try (i) != i) + abort(); + } + exit(0); +} +#else +main(){ exit (0); } +#endif diff --git a/gcc/testsuite/gcc.c-torture/execute/920726-1.c b/gcc/testsuite/gcc.c-torture/execute/920726-1.c new file mode 100644 index 000000000000..d6042c9f5d13 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/920726-1.c @@ -0,0 +1,63 @@ +#include <stdio.h> +#include <stdarg.h> + +struct spurious +{ + int anumber; +}; + +int first(char *buf, char *fmt, ...) +{ + int pos, number; + va_list args; + int dummy; + char *bp = buf; + + va_start(args, fmt); + for (pos = 0; fmt[pos]; pos++) + if (fmt[pos] == 'i') + { + number = va_arg(args, int); + sprintf(bp, "%d", number); + bp += strlen(bp); + } + else + *bp++ = fmt[pos]; + + va_end(args); + *bp = 0; + return dummy; +} + +struct spurious second(char *buf,char *fmt, ...) +{ + int pos, number; + va_list args; + struct spurious dummy; + char *bp = buf; + + va_start(args, fmt); + for (pos = 0; fmt[pos]; pos++) + if (fmt[pos] == 'i') + { + number = va_arg(args, int); + sprintf(bp, "%d", number); + bp += strlen(bp); + } + else + *bp++ = fmt[pos]; + + va_end(args); + *bp = 0; + return dummy; +} + +main() +{ + char buf1[100], buf2[100]; + first(buf1, "i i ", 5, 20); + second(buf2, "i i ", 5, 20); + if (strcmp ("5 20 ", buf1) || strcmp ("5 20 ", buf2)) + abort(); + exit(0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/920728-1.c b/gcc/testsuite/gcc.c-torture/execute/920728-1.c new file mode 100644 index 000000000000..7a2968b71be1 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/920728-1.c @@ -0,0 +1,24 @@ +typedef struct {int dims[0]; } *A; + +f(unsigned long obj) +{ + unsigned char y = obj >> 24; + y &= ~4; + + if ((y==0)||(y!=251 )) + abort(); + + if(((int)obj&7)!=7)return; + + REST_OF_CODE_JUST_HERE_TO_TRIGGER_THE_BUG: + + { + unsigned char t = obj >> 24; + if (!(t==0)&&(t<=0x03)) + return 0; + return ((A)(obj&0x00FFFFFFL))->dims[1]; + } +} + +long g(){return 0xff000000L;} +main (){int x;f(g());exit(0);} diff --git a/gcc/testsuite/gcc.c-torture/execute/920731-1.c b/gcc/testsuite/gcc.c-torture/execute/920731-1.c new file mode 100644 index 000000000000..de0fb58fcde2 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/920731-1.c @@ -0,0 +1,2 @@ +f(x){int i;for(i=0;i<8&&(x&1)==0;x>>=1,i++);return i;} +main(){if(f(4)!=2)abort();exit(0);} diff --git a/gcc/testsuite/gcc.c-torture/execute/920810-1.c b/gcc/testsuite/gcc.c-torture/execute/920810-1.c new file mode 100644 index 000000000000..9565bfc1a2bb --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/920810-1.c @@ -0,0 +1,23 @@ +#include <stdio.h> +#include <string.h> +#include <stdlib.h> + +typedef struct{void*super;int name;int size;}t; +t*f(t*clas,int size) +{ + t*child=(t*)malloc(size); + memcpy(child,clas,clas->size); + child->super=clas; + child->name=0; + child->size=size; + return child; +} +main() +{ + t foo,*bar; + memset(&foo,37,sizeof(t)); + foo.size=sizeof(t); + bar=f(&foo,sizeof(t)); + if(bar->super!=&foo||bar->name!=0||bar->size!=sizeof(t))abort(); + exit(0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/920812-1.c b/gcc/testsuite/gcc.c-torture/execute/920812-1.c new file mode 100644 index 000000000000..b49ab425b216 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/920812-1.c @@ -0,0 +1,3 @@ +typedef int t; +f(t y){switch(y){case 1:return 1;}return 0;} +main(){if(f((t)1)!=1)abort();exit(0);} diff --git a/gcc/testsuite/gcc.c-torture/execute/920829-1.c b/gcc/testsuite/gcc.c-torture/execute/920829-1.c new file mode 100644 index 000000000000..ed2c2271caa1 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/920829-1.c @@ -0,0 +1,2 @@ +long long c=2863311530LL,c3=2863311530LL*3; +main(){if(c*3!=c3)abort();exit(0);} diff --git a/gcc/testsuite/gcc.c-torture/execute/920908-1.c b/gcc/testsuite/gcc.c-torture/execute/920908-1.c new file mode 100644 index 000000000000..98fbb5eaa6df --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/920908-1.c @@ -0,0 +1,28 @@ +/* REPRODUCED:RUN:SIGNAL MACHINE:mips OPTIONS: */ + +#include <stdarg.h> + +typedef struct{int A;}T; + +T f(int x,...) +{ +va_list ap; +T X; +va_start(ap,x); +X=va_arg(ap,T); +if(X.A!=10)abort(); +X=va_arg(ap,T); +if(X.A!=20)abort(); +va_end(ap); +return X; +} + +main() +{ +T X,Y; +int i; +X.A=10; +Y.A=20; +f(2,X,Y); +exit(0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/920908-2.c b/gcc/testsuite/gcc.c-torture/execute/920908-2.c new file mode 100644 index 000000000000..66a6d86a7e71 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/920908-2.c @@ -0,0 +1,23 @@ +/* +CONF:m68k-sun-sunos4.1.1 +OPTIONS:-O +*/ +struct T +{ +unsigned i:8; +unsigned c:24; +}; +f(struct T t) +{ +struct T s[1]; +s[0]=t; +return(char)s->c; +} +main() +{ +struct T t; +t.i=0xff; +t.c=0xffff11; +if(f(t)!=0x11)abort(); +exit(0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/920909-1.c b/gcc/testsuite/gcc.c-torture/execute/920909-1.c new file mode 100644 index 000000000000..c8880348c122 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/920909-1.c @@ -0,0 +1,2 @@ +f(a){switch(a){case 0x402:return a+1;case 0x403:return a+2;case 0x404:return a+3;case 0x405:return a+4;case 0x406:return 1;case 0x407:return 4;}return 0;} +main(){if(f(1))abort();exit(0);} diff --git a/gcc/testsuite/gcc.c-torture/execute/920922-1.c b/gcc/testsuite/gcc.c-torture/execute/920922-1.c new file mode 100644 index 000000000000..4fae192bb90d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/920922-1.c @@ -0,0 +1,14 @@ +unsigned long* +f(p)unsigned long*p; +{ + unsigned long a = (*p++) >> 24; + return p + a; +} + +main () +{ + unsigned long x = 0x80000000UL; + if (f(&x) != &x + 0x81) + abort(); + exit(0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/920929-1.c b/gcc/testsuite/gcc.c-torture/execute/920929-1.c new file mode 100644 index 000000000000..e43444e31d79 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/920929-1.c @@ -0,0 +1,13 @@ +/* REPRODUCED:RUN:SIGNAL MACHINE:sparc OPTIONS: */ +f(int n) +{ +int i; +double v[n]; +for(i=0;i<n;i++) +v[i]=0; +} +main() +{ +f(100); +exit(0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/921006-1.c b/gcc/testsuite/gcc.c-torture/execute/921006-1.c new file mode 100644 index 000000000000..50fbdb711251 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/921006-1.c @@ -0,0 +1,6 @@ +/* REPRODUCED:RUN:SIGNAL MACHINE:i386 OPTIONS:-O */ +main() +{ +if(strcmp("X","")<0)abort(); +exit(0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/921007-1.c b/gcc/testsuite/gcc.c-torture/execute/921007-1.c new file mode 100644 index 000000000000..ea036519463a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/921007-1.c @@ -0,0 +1,7 @@ +int strcmp(){return-1;} +#define strcmp __builtin_strcmp +main() +{ +if(strcmp("X","X\376")>=0)abort(); +exit(0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/921013-1.c b/gcc/testsuite/gcc.c-torture/execute/921013-1.c new file mode 100644 index 000000000000..d041beb257ac --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/921013-1.c @@ -0,0 +1,20 @@ +f(d,x,y,n) +int*d; +float*x,*y; +int n; +{ + while(n--){*d++=*x++==*y++;} +} + +main() +{ + int r[4]; + float a[]={5,1,3,5}; + float b[]={2,4,3,0}; + int i; + f(r,a,b,4); + for(i=0;i<4;i++) + if((a[i]==b[i])!=r[i]) + abort(); + exit(0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/921016-1.c b/gcc/testsuite/gcc.c-torture/execute/921016-1.c new file mode 100644 index 000000000000..46f8a8387656 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/921016-1.c @@ -0,0 +1,10 @@ +main() +{ +int j=1081; +struct +{ +signed int m:11; +}l; +if((l.m=j)==j)abort(); +exit(0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/921017-1.c b/gcc/testsuite/gcc.c-torture/execute/921017-1.c new file mode 100644 index 000000000000..3a0db5c4d568 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/921017-1.c @@ -0,0 +1,15 @@ +f(n) +{ + int a[n]; + int g(i) + { + return a[i]; + } + a[1]=4711; + return g(1); +} +main() +{ + if(f(2)!=4711)abort(); + exit(0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/921019-1.c b/gcc/testsuite/gcc.c-torture/execute/921019-1.c new file mode 100644 index 000000000000..f48613a8ba95 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/921019-1.c @@ -0,0 +1,8 @@ +void *foo[]={(void *)&("X"[0])}; + +main () +{ + if (((char*)foo[0])[0] != 'X') + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/921019-2.c b/gcc/testsuite/gcc.c-torture/execute/921019-2.c new file mode 100644 index 000000000000..9003e7b64d54 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/921019-2.c @@ -0,0 +1,8 @@ +main() +{ + double x,y=0.5; + x=y/0.2; + if(x!=x) + abort(); + exit(0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/921029-1.c b/gcc/testsuite/gcc.c-torture/execute/921029-1.c new file mode 100644 index 000000000000..76fc974c2f08 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/921029-1.c @@ -0,0 +1,42 @@ +typedef unsigned long long ULL; +ULL back; +ULL hpart, lpart; +ULL +build(long h, long l) +{ + hpart = h; + hpart <<= 32; + lpart = l; + lpart &= 0xFFFFFFFFLL; + back = hpart | lpart; + return back; +} + +main() +{ + if (build(0, 1) != 0x0000000000000001LL) + abort(); + if (build(0, 0) != 0x0000000000000000LL) + abort(); + if (build(0, 0xFFFFFFFF) != 0x00000000FFFFFFFFLL) + abort(); + if (build(0, 0xFFFFFFFE) != 0x00000000FFFFFFFELL) + abort(); + if (build(1, 1) != 0x0000000100000001LL) + abort(); + if (build(1, 0) != 0x0000000100000000LL) + abort(); + if (build(1, 0xFFFFFFFF) != 0x00000001FFFFFFFFLL) + abort(); + if (build(1, 0xFFFFFFFE) != 0x00000001FFFFFFFELL) + abort(); + if (build(0xFFFFFFFF, 1) != 0xFFFFFFFF00000001LL) + abort(); + if (build(0xFFFFFFFF, 0) != 0xFFFFFFFF00000000LL) + abort(); + if (build(0xFFFFFFFF, 0xFFFFFFFF) != 0xFFFFFFFFFFFFFFFFLL) + abort(); + if (build(0xFFFFFFFF, 0xFFFFFFFE) != 0xFFFFFFFFFFFFFFFELL) + abort(); + exit(0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/921104-1.c b/gcc/testsuite/gcc.c-torture/execute/921104-1.c new file mode 100644 index 000000000000..4b6f4bcfb5ba --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/921104-1.c @@ -0,0 +1,8 @@ +main () +{ + unsigned long val = 1; + + if (val > (unsigned long) ~0) + abort(); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/921110-1.c b/gcc/testsuite/gcc.c-torture/execute/921110-1.c new file mode 100644 index 000000000000..27ff96f18fb8 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/921110-1.c @@ -0,0 +1,7 @@ +extern int abort(); +typedef int (*frob)(); +frob f[] = {abort}; +main() +{ + exit(0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/921112-1.c b/gcc/testsuite/gcc.c-torture/execute/921112-1.c new file mode 100644 index 000000000000..5946398e3c0d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/921112-1.c @@ -0,0 +1,21 @@ +union u { + struct { int i1, i2; } t; + double d; +} x[2], v; + +f (x, v) + union u *x, v; +{ + *++x = v; +} + +main() +{ + x[1].t.i1 = x[1].t.i2 = 0; + v.t.i1 = 1; + v.t.i2 = 2; + f (x, v); + if (x[1].t.i1 != 1 || x[1].t.i2 != 2) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/921113-1.c b/gcc/testsuite/gcc.c-torture/execute/921113-1.c new file mode 100644 index 000000000000..78972bc975ee --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/921113-1.c @@ -0,0 +1,63 @@ +#define STACK_REQUIREMENT (128 * 128 * 4 + 1024) +#if defined (STACK_SIZE) && STACK_SIZE < STACK_REQUIREMENT +main () { exit (0); } +#else + +typedef struct { + float wsx; +} struct_list; + +typedef struct_list *list_t; + +typedef struct { + float x, y; +} vector_t; + +w(float x, float y) {} + +f1(float x, float y) +{ + if (x != 0 || y != 0) + abort(); +} +f2(float x, float y) +{ + if (x != 1 || y != 1) + abort(); +} + +gitter(int count, vector_t pos[], list_t list, int *nww, vector_t limit[2], float r) +{ + float d; + int gitt[128][128]; + + f1(limit[0].x, limit[0].y); + f2(limit[1].x, limit[1].y); + + *nww = 0; + + d = pos[0].x; + if (d <= 0.) + { + w(d, r); + if (d <= r * 0.5) + { + w(d, r); + list[0].wsx = 1; + } + } +} + +vector_t pos[1] = {{0., 0.}}; +vector_t limit[2] = {{0.,0.},{1.,1.}}; + +main() +{ + int nww; + struct_list list; + + gitter(1, pos, &list, &nww, limit, 1.); + exit(0); +} + +#endif diff --git a/gcc/testsuite/gcc.c-torture/execute/921117-1.c b/gcc/testsuite/gcc.c-torture/execute/921117-1.c new file mode 100644 index 000000000000..2ed30fbeeef8 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/921117-1.c @@ -0,0 +1,22 @@ +struct s { + char text[11]; + int flag; +} cell; + +int +check (struct s p) +{ + if (p.flag != 99) + return 1; + return strcmp (p.text, "0123456789"); +} + +main () +{ + cell.flag = 99; + strcpy (cell.text, "0123456789"); + + if (check (cell)) + abort(); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/921123-1.c b/gcc/testsuite/gcc.c-torture/execute/921123-1.c new file mode 100644 index 000000000000..d3daf120f0a4 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/921123-1.c @@ -0,0 +1,13 @@ +f(short *p) +{ + short x = *p; + return (--x < 0); +} + +main() +{ + short x = -10; + if (!f(&x)) + abort(); + exit(0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/921123-2.c b/gcc/testsuite/gcc.c-torture/execute/921123-2.c new file mode 100644 index 000000000000..3028717cf5a5 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/921123-2.c @@ -0,0 +1,24 @@ +typedef struct +{ + unsigned short b0, b1, b2, b3; +} four_quarters; + +four_quarters x; +int a, b; + +void f (four_quarters j) +{ + b = j.b2; + a = j.b3; +} + +main () +{ + four_quarters x; + x.b0 = x.b1 = x.b2 = 0; + x.b3 = 38; + f(x); + if (a != 38) + abort(); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/921124-1.c b/gcc/testsuite/gcc.c-torture/execute/921124-1.c new file mode 100644 index 000000000000..51b090b4de10 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/921124-1.c @@ -0,0 +1,19 @@ +f(x, d1, d2, d3) + double d1, d2, d3; +{ + return x; +} + +g(b,s,x,y,i,j) + char *b,*s; + double x,y; +{ + if (x != 1.0 || y != 2.0 || i != 3 || j != 4) + abort(); +} + +main() +{ + g("","", 1.0, 2.0, f(3, 0.0, 0.0, 0.0), f(4, 0.0, 0.0, 0.0)); + exit(0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/921202-1.c b/gcc/testsuite/gcc.c-torture/execute/921202-1.c new file mode 100644 index 000000000000..d42fc74403ce --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/921202-1.c @@ -0,0 +1,36 @@ +main () +{ + long dx[2055]; + long dy[2055]; + long s1[2055]; + int cyx, cyy; + int i; + long size; + + for (;;) + { + size = 2055; + mpn_random2 (s1, size); + + for (i = 0; i < 1; i++) + ; + + dy[size] = 0x12345678; + + for (i = 0; i < 1; i++) + cyy = mpn_mul_1 (dy, s1, size); + + if (cyx != cyy || mpn_cmp (dx, dy, size + 1) != 0 || dx[size] != 0x12345678) + { + foo ("", 8, cyy); mpn_print (dy, size); + } + exxit(); + } +} + +foo (){} +mpn_mul_1(){} +mpn_print (){} +mpn_random2(){} +mpn_cmp(){} +exxit(){exit(0);} diff --git a/gcc/testsuite/gcc.c-torture/execute/921202-2.c b/gcc/testsuite/gcc.c-torture/execute/921202-2.c new file mode 100644 index 000000000000..48d4a412d1bd --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/921202-2.c @@ -0,0 +1,13 @@ +int +f(long long x) +{ + x >>= 8; + return x & 0xff; +} + +main() +{ + if (f(0x0123456789ABCDEFLL) != 0xCD) + abort(); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/921204-1.c b/gcc/testsuite/gcc.c-torture/execute/921204-1.c new file mode 100644 index 000000000000..9e4f4a6bae7e --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/921204-1.c @@ -0,0 +1,36 @@ +typedef struct { + unsigned b0:1, f1:17, b18:1, b19:1, b20:1, f2:11; +} bf; + +typedef union { + bf b; + unsigned w; +} bu; + +bu +f(bu i) +{ + bu o = i; + + if (o.b.b0) + o.b.b18 = 1, + o.b.b20 = 1; + else + o.b.b18 = 0, + o.b.b20 = 0; + + return o; +} + +main() +{ + bu a; + bu r; + + a.w = 0x4000000; + a.b.b0 = 0; + r = f(a); + if (a.w != r.w) + abort(); + exit(0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/921207-1.c b/gcc/testsuite/gcc.c-torture/execute/921207-1.c new file mode 100644 index 000000000000..5ee9d27cc2f5 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/921207-1.c @@ -0,0 +1,15 @@ +f() +{ + unsigned b = 0; + + if (b > ~0U) + b = ~0U; + + return b; +} +main() +{ + if (f()!=0) + abort(); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/921208-1.c b/gcc/testsuite/gcc.c-torture/execute/921208-1.c new file mode 100644 index 000000000000..143ef63b0c9c --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/921208-1.c @@ -0,0 +1,18 @@ +double +f(double x) +{ + return x*x; +} + +double +Int(double (*f)(double), double a) +{ + return (*f)(a); +} + +main() +{ + if (Int(&f,2.0) != 4.0) + abort(); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/921208-2.c b/gcc/testsuite/gcc.c-torture/execute/921208-2.c new file mode 100644 index 000000000000..d5edcf97c66b --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/921208-2.c @@ -0,0 +1,26 @@ +#define STACK_REQUIREMENT (100000 * 4 + 1024) +#if defined (STACK_SIZE) && STACK_SIZE < STACK_REQUIREMENT +main () { exit (0); } +#else + +g(){} + +f() +{ + int i; + float a[100000]; + + for (i = 0; i < 1; i++) + { + g(1.0, 1.0 + i / 2.0 * 3.0); + g(2.0, 1.0 + i / 2.0 * 3.0); + } +} + +main () +{ + f(); + exit(0); +} + +#endif diff --git a/gcc/testsuite/gcc.c-torture/execute/921215-1.c b/gcc/testsuite/gcc.c-torture/execute/921215-1.c new file mode 100644 index 000000000000..4fa3b7dfcccb --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/921215-1.c @@ -0,0 +1,24 @@ +main() +{ +#ifndef NO_TRAMPOLINES + void p(void ((*f) (void ()))) + { + void r() + { + foo (); + } + + f(r); + } + + void q(void ((*f)())) + { + f(); + } + + p(q); +#endif + exit(0); +} + +foo(){} diff --git a/gcc/testsuite/gcc.c-torture/execute/921218-1.c b/gcc/testsuite/gcc.c-torture/execute/921218-1.c new file mode 100644 index 000000000000..ab7bc19cc154 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/921218-1.c @@ -0,0 +1,11 @@ +f() +{ + return (unsigned char)("\377"[0]); +} + +main() +{ + if (f() != (unsigned char)(0377)) + abort(); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/921218-2.c b/gcc/testsuite/gcc.c-torture/execute/921218-2.c new file mode 100644 index 000000000000..b5d57e9c3c8d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/921218-2.c @@ -0,0 +1,17 @@ +f() +{ + long l2; + unsigned short us; + unsigned long ul; + short s2; + + ul = us = l2 = s2 = -1; + return ul; +} + +main() +{ + if (f()!=(unsigned short)-1) + abort(); + exit(0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/930106-1.c b/gcc/testsuite/gcc.c-torture/execute/930106-1.c new file mode 100644 index 000000000000..8081f9260137 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/930106-1.c @@ -0,0 +1,27 @@ +#if defined (STACK_SIZE) +#define DUMMY_SIZE 9 +#else +#define DUMMY_SIZE 399999 +#endif + +double g() +{ + return 1.0; +} + +f() +{ + char dummy[DUMMY_SIZE]; + double f1, f2, f3; + f1 = g(); + f2 = g(); + f3 = g(); + return f1 + f2 + f3; +} + +main() +{ + if (f() != 3.0) + abort(); + exit(0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/930111-1.c b/gcc/testsuite/gcc.c-torture/execute/930111-1.c new file mode 100644 index 000000000000..e908f14f67f6 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/930111-1.c @@ -0,0 +1,22 @@ +main() +{ + if (wwrite((long long) 0) != 123) + abort(); + exit(0); +} + +int +wwrite(long long i) +{ + switch(i) + { + case 3: + case 10: + case 23: + case 28: + case 47: + return 0; + default: + return 123; + } +} diff --git a/gcc/testsuite/gcc.c-torture/execute/930123-1.c b/gcc/testsuite/gcc.c-torture/execute/930123-1.c new file mode 100644 index 000000000000..7365bae52003 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/930123-1.c @@ -0,0 +1,16 @@ +f(int *x) +{ + *x = 0; +} + +main() +{ + int s, c, x; + char a[] = "c"; + + f(&s); + a[c = 0] = s == 0 ? (x=1, 'a') : (x=2, 'b'); + if (a[c] != 'a') + abort(); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/930126-1.c b/gcc/testsuite/gcc.c-torture/execute/930126-1.c new file mode 100644 index 000000000000..ff08e7d6131c --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/930126-1.c @@ -0,0 +1,20 @@ +struct s { + unsigned long long a:8, b:32; +}; + +struct s +f(struct s x) +{ + x.b = 0xcdef1234; + return x; +} + +main() +{ + static struct s i; + i.a = 12; + i = f(i); + if (i.a != 12 || i.b != 0xcdef1234) + abort(); + exit(0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/930208-1.c b/gcc/testsuite/gcc.c-torture/execute/930208-1.c new file mode 100644 index 000000000000..464b69d437e7 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/930208-1.c @@ -0,0 +1,23 @@ +typedef union { + long l; + struct { char b3, b2, b1, b0; } c; +} T; + +f (T u) +{ + ++u.c.b0; + ++u.c.b3; + return (u.c.b1 != 2 || u.c.b2 != 2); +} + +main () +{ + T u; + u.c.b1 = 2; + u.c.b2 = 2; + u.c.b0 = ~0; + u.c.b3 = ~0; + if (f (u)) + abort(); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/930406-1.c b/gcc/testsuite/gcc.c-torture/execute/930406-1.c new file mode 100644 index 000000000000..1546f5150dd4 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/930406-1.c @@ -0,0 +1,19 @@ +f() +{ + int x = 1; + char big[0x1000]; + + ({ + __label__ mylabel; + mylabel: + x++; + if (x != 3) + goto mylabel; + }); + exit(0); +} + +main() +{ + f(); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/930408-1.c b/gcc/testsuite/gcc.c-torture/execute/930408-1.c new file mode 100644 index 000000000000..42ffc098f800 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/930408-1.c @@ -0,0 +1,27 @@ +typedef enum foo E; +enum foo { e0, e1 }; + +struct { + E eval; +} s; + +p() +{ + abort(); +} + +f() +{ + switch (s.eval) + { + case e0: + p(); + } +} + +main() +{ + s.eval = e1; + f(); + exit(0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/930429-1.c b/gcc/testsuite/gcc.c-torture/execute/930429-1.c new file mode 100644 index 000000000000..656d928ebd71 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/930429-1.c @@ -0,0 +1,14 @@ +char * +f (char *p) +{ + short x = *p++ << 16; + return p; +} + +main () +{ + char *p = ""; + if (f (p) != p + 1) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/930429-2.c b/gcc/testsuite/gcc.c-torture/execute/930429-2.c new file mode 100644 index 000000000000..e52c8b4d723d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/930429-2.c @@ -0,0 +1,14 @@ +int +f (b) +{ + return (b >> 1) > 0; +} + +main () +{ + if (!f (9)) + abort (); + if (f (-9)) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/930513-1.c b/gcc/testsuite/gcc.c-torture/execute/930513-1.c new file mode 100644 index 000000000000..4544471ec7db --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/930513-1.c @@ -0,0 +1,16 @@ +#include <stdio.h> +char buf[2]; + +f (fp) + int (*fp)(char *, const char *, ...); +{ + (*fp)(buf, "%.0f", 5.0); +} + +main () +{ + f (&sprintf); + if (buf[0] != '5' || buf[1] != 0) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/930513-2.c b/gcc/testsuite/gcc.c-torture/execute/930513-2.c new file mode 100644 index 000000000000..3731f6204975 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/930513-2.c @@ -0,0 +1,27 @@ +sub3 (i) + const int *i; +{ +} + +eq (a, b) +{ + static int i = 0; + if (a != i) + abort (); + i++; +} + +main () +{ + int i; + + for (i = 0; i < 4; i++) + { + const int j = i; + int k; + sub3 (&j); + k = j; + eq (k, k); + } + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/930518-1.c b/gcc/testsuite/gcc.c-torture/execute/930518-1.c new file mode 100644 index 000000000000..44bdf96afb73 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/930518-1.c @@ -0,0 +1,24 @@ +int bar = 0; + +f (p) + int *p; +{ + int foo = 2; + + while (foo > bar) + { + foo -= bar; + *p++ = foo; + bar = 1; + } +} + +main () +{ + int tab[2]; + tab[0] = tab[1] = 0; + f (tab); + if (tab[0] != 2 || tab[1] != 1) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/930526-1.c b/gcc/testsuite/gcc.c-torture/execute/930526-1.c new file mode 100644 index 000000000000..bbf63c6009ac --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/930526-1.c @@ -0,0 +1,18 @@ +inline +f (x) +{ + int *(p[25]); + int m[25*7]; + int i; + + for (i = 0; i < 25; i++) + p[i] = m + x*i; + + p[1][0] = 0; +} + +main () +{ + f (7); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/930527-1.c b/gcc/testsuite/gcc.c-torture/execute/930527-1.c new file mode 100644 index 000000000000..fef34bf6b7f7 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/930527-1.c @@ -0,0 +1,11 @@ +f (unsigned char x) +{ + return (0x50 | (x >> 4)) ^ 0xff; +} + +main () +{ + if (f (0) != 0xaf) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/930529-1.c b/gcc/testsuite/gcc.c-torture/execute/930529-1.c new file mode 100644 index 000000000000..906338e6e9a6 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/930529-1.c @@ -0,0 +1,45 @@ +dd (x,d) { return x / d; } + +main () +{ + int i; + for (i = -3; i <= 3; i++) + { + if (dd (i, 1) != i / 1) + abort (); + if (dd (i, 2) != i / 2) + abort (); + if (dd (i, 3) != i / 3) + abort (); + if (dd (i, 4) != i / 4) + abort (); + if (dd (i, 5) != i / 5) + abort (); + if (dd (i, 6) != i / 6) + abort (); + if (dd (i, 7) != i / 7) + abort (); + if (dd (i, 8) != i / 8) + abort (); + } + for (i = ((unsigned) ~0 >> 1) - 3; i <= ((unsigned) ~0 >> 1) + 3; i++) + { + if (dd (i, 1) != i / 1) + abort (); + if (dd (i, 2) != i / 2) + abort (); + if (dd (i, 3) != i / 3) + abort (); + if (dd (i, 4) != i / 4) + abort (); + if (dd (i, 5) != i / 5) + abort (); + if (dd (i, 6) != i / 6) + abort (); + if (dd (i, 7) != i / 7) + abort (); + if (dd (i, 8) != i / 8) + abort (); + } + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/930603-1.c b/gcc/testsuite/gcc.c-torture/execute/930603-1.c new file mode 100644 index 000000000000..6a84de035629 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/930603-1.c @@ -0,0 +1,22 @@ +float fx (x) + float x; +{ + return 1.0 + 3.0 / (2.302585093 * x); +} + +main () +{ + float fx (), inita (), initc (), a, b, c; + a = inita (); + c = initc (); + f (); + b = fx (c) + a; + f (); + if (a != 3.0 || b < 4.3257 || b > 4.3258 || c != 4.0) + abort (); + exit (0); +} + +float inita () { return 3.0; } +float initc () { return 4.0; } +f () {} diff --git a/gcc/testsuite/gcc.c-torture/execute/930603-2.c b/gcc/testsuite/gcc.c-torture/execute/930603-2.c new file mode 100644 index 000000000000..8cf06a211390 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/930603-2.c @@ -0,0 +1,19 @@ +int w[2][2]; + +f () +{ + int i, j; + + for (i = 0; i < 2; i++) + for (j = 0; j < 2; j++) + if (i == j) + w[i][j] = 1; +} + +main () +{ + f (); + if (w[0][0] != 1 || w[1][1] != 1 || w[1][0] != 0 || w[0][1] != 0) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/930603-3.c b/gcc/testsuite/gcc.c-torture/execute/930603-3.c new file mode 100644 index 000000000000..22e5aed4a8b9 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/930603-3.c @@ -0,0 +1,30 @@ +f (b, c) + unsigned char *b; + int c; +{ + unsigned long v = 0; + switch (c) + { + case 'd': + v = ((unsigned long)b[0] << 8) + b[1]; + v >>= 9; + break; + + case 'k': + v = b[3] >> 4; + break; + + default: + abort (); + } + + return v; +} +main () +{ + char buf[4]; + buf[0] = 170; buf[1] = 5; + if (f (buf, 'd') != 85) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/930608-1.c b/gcc/testsuite/gcc.c-torture/execute/930608-1.c new file mode 100644 index 000000000000..004a44007095 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/930608-1.c @@ -0,0 +1,11 @@ +double f (double a) {} +double (* const a[]) (double) = {&f}; + +main () +{ + double (*p) (); + p = &f; + if (p != a[0]) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/930614-1.c b/gcc/testsuite/gcc.c-torture/execute/930614-1.c new file mode 100644 index 000000000000..7b206344b3a5 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/930614-1.c @@ -0,0 +1,19 @@ +f (double *ty) +{ + *ty = -1.0; +} + +main () +{ + double foo[6]; + double tx = 0.0, ty, d; + + f (&ty); + + if (ty < 0) + ty = -ty; + d = (tx > ty) ? tx : ty; + if (ty != d) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/930614-2.c b/gcc/testsuite/gcc.c-torture/execute/930614-2.c new file mode 100644 index 000000000000..ab83a7e3bb99 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/930614-2.c @@ -0,0 +1,20 @@ +main () +{ + int i, j, k, l; + float x[8][2][8][2]; + + for (i = 0; i < 8; i++) + for (j = i; j < 8; j++) + for (k = 0; k < 2; k++) + for (l = 0; l < 2; l++) + { + if ((i == j) && (k == l)) + x[i][k][j][l] = 0.8; + else + x[i][k][j][l] = 0.8; + if (x[i][k][j][l] < 0.0) + abort (); + } + + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/930621-1.c b/gcc/testsuite/gcc.c-torture/execute/930621-1.c new file mode 100644 index 000000000000..6131301df2f5 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/930621-1.c @@ -0,0 +1,19 @@ +f () +{ + struct { + int x : 18; + int y : 14; + } foo; + + foo.x = 10; + foo.y = 20; + + return foo.y; +} + +main () +{ + if (f () != 20) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/930622-1.c b/gcc/testsuite/gcc.c-torture/execute/930622-1.c new file mode 100644 index 000000000000..d733e133d35a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/930622-1.c @@ -0,0 +1,22 @@ +int a = 1, b; + +g () { return 0; } +h (x) {} + +f () +{ + if (g () == -1) + return 0; + a = g (); + if (b >= 1) + h (a); + return 0; +} + +main () +{ + f (); + if (a != 0) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/930622-2.c b/gcc/testsuite/gcc.c-torture/execute/930622-2.c new file mode 100644 index 000000000000..d049b002a196 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/930622-2.c @@ -0,0 +1,24 @@ +long double +ll_to_ld (long long n) +{ + return n; +} + +long long +ld_to_ll (long double n) +{ + return n; +} + +main () +{ + long long n; + + if (ll_to_ld (10LL) != 10.0) + abort (); + + if (ld_to_ll (10.0) != 10) + abort (); + + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/930628-1.c b/gcc/testsuite/gcc.c-torture/execute/930628-1.c new file mode 100644 index 000000000000..58c612d1a1c1 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/930628-1.c @@ -0,0 +1,27 @@ +f (double x[2], double y[2]) +{ + if (x == y) + abort (); +} + +main () +{ + struct { int f[3]; double x[1][2]; } tp[4][2]; + int i, j, ki, kj, mi, mj; + float bdm[4][2][4][2]; + + for (i = 0; i < 4; i++) + for (j = i; j < 4; j++) + for (ki = 0; ki < 2; ki++) + for (kj = 0; kj < 2; kj++) + if ((j == i) && (ki == kj)) + bdm[i][ki][j][kj] = 1000.0; + else + { + for (mi = 0; mi < 1; mi++) + for (mj = 0; mj < 1; mj++) + f (tp[i][ki].x[mi], tp[j][kj].x[mj]); + bdm[i][ki][j][kj] = 1000.0; + } + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/930630-1.c b/gcc/testsuite/gcc.c-torture/execute/930630-1.c new file mode 100644 index 000000000000..4befa835d0d8 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/930630-1.c @@ -0,0 +1,19 @@ +main () +{ + struct + { + signed int bf0:17; + signed int bf1:7; + } bf; + + bf.bf1 = 7; + f (bf.bf1); + exit (0); +} + +f (x) + int x; +{ + if (x != 7) + abort (); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/930702-1.c b/gcc/testsuite/gcc.c-torture/execute/930702-1.c new file mode 100644 index 000000000000..8828a701cb99 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/930702-1.c @@ -0,0 +1,14 @@ +fp (double a, int b) +{ + if (a != 33 || b != 11) + abort (); +} + +main () +{ + int (*f) (double, int) = fp; + + fp (33, 11); + f (33, 11); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/930713-1.c b/gcc/testsuite/gcc.c-torture/execute/930713-1.c new file mode 100644 index 000000000000..6b4d5ab796af --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/930713-1.c @@ -0,0 +1,23 @@ +typedef struct +{ + char x; +} T; + +T +f (s1) + T s1; +{ + T s1a; + s1a.x = 17; + return s1a; +} + +main () +{ + T s1a, s1b; + s1a.x = 13; + s1b = f (s1a); + if (s1a.x != 13 || s1b.x != 17) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/930718-1.c b/gcc/testsuite/gcc.c-torture/execute/930718-1.c new file mode 100644 index 000000000000..a8eacc2d222e --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/930718-1.c @@ -0,0 +1,34 @@ +typedef struct rtx_def +{ + int f1 :1; + int f2 :1; +} *rtx; + +static rtx +f (orig) + register rtx orig; +{ + if (orig->f1 || orig->f2) + return orig; + orig->f2 = 1; + return orig; +} + +void +f2 () +{ + abort (); +} + +main () +{ + struct rtx_def foo; + rtx bar; + + foo.f1 = 1; + foo.f2 = 0; + bar = f (&foo); + if (bar != &foo || bar->f2 != 0) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/930719-1.c b/gcc/testsuite/gcc.c-torture/execute/930719-1.c new file mode 100644 index 000000000000..c6557efc7353 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/930719-1.c @@ -0,0 +1,23 @@ +int +f (foo, bar, com) +{ + unsigned align; + if (foo) + return 0; + while (1) + { + switch (bar) + { + case 1: + if (com != 0) + return align; + *(char *) 0 = 0; + } + } +} + +main () +{ + f (0, 1, 1); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/930725-1.c b/gcc/testsuite/gcc.c-torture/execute/930725-1.c new file mode 100644 index 000000000000..3bd738ca08a9 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/930725-1.c @@ -0,0 +1,21 @@ +int v; + +char * +g () +{ + return ""; +} + +char * +f () +{ + return (v == 0 ? g () : "abc"); +} + +main () +{ + v = 1; + if (!strcmp (f (), "abc")) + exit (0); + abort(); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/930818-1.c b/gcc/testsuite/gcc.c-torture/execute/930818-1.c new file mode 100644 index 000000000000..710e3ce2fbe1 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/930818-1.c @@ -0,0 +1,15 @@ +static double one = 1.0; + +f() +{ + int colinear; + colinear = (one == 0.0); + if (colinear) + abort (); + return colinear; +} +main() +{ + if (f()) abort(); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/930916-1.c b/gcc/testsuite/gcc.c-torture/execute/930916-1.c new file mode 100644 index 000000000000..6302614a8c8f --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/930916-1.c @@ -0,0 +1,13 @@ +f (n) + unsigned n; +{ + if ((int) n >= 0) + abort (); +} + +main () +{ + unsigned x = ~0; + f (x); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/930921-1.c b/gcc/testsuite/gcc.c-torture/execute/930921-1.c new file mode 100644 index 000000000000..12e04e309546 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/930921-1.c @@ -0,0 +1,15 @@ +f (x) + unsigned x; +{ + return (unsigned) (((unsigned long long) x * 0xAAAAAAAB) >> 32) >> 1; +} + +main () +{ + unsigned i; + + for (i = 0; i < 10000; i++) + if (f (i) != i / 3) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/930929-1.c b/gcc/testsuite/gcc.c-torture/execute/930929-1.c new file mode 100644 index 000000000000..31f695442f57 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/930929-1.c @@ -0,0 +1,36 @@ +sub1 (i) + int i; +{ + return i - (5 - i); +} + +sub2 (i) + int i; +{ + return i + (5 + i); +} + +sub3 (i) + int i; +{ + return i - (5 + i); +} + +sub4 (i) + int i; +{ + return i + (5 - i); +} + +main() +{ + if (sub1 (20) != 35) + abort (); + if (sub2 (20) != 45) + abort (); + if (sub3 (20) != -5) + abort (); + if (sub4 (20) != 5) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/930930-1.c b/gcc/testsuite/gcc.c-torture/execute/930930-1.c new file mode 100644 index 000000000000..68fdbbfe8518 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/930930-1.c @@ -0,0 +1,35 @@ +long *wm_TR; +long *wm_HB; +long *wm_SPB; + +long mem[100]; + +f (mr_TR, mr_SPB, mr_HB, reg1, reg2) + long *mr_TR; + long *mr_SPB; + long *mr_HB; + long *reg1; + long *reg2; +{ + long *x = mr_TR; + + for (;;) + { + if (reg1 < reg2) + goto out; + if ((long *) *reg1 < mr_HB && (long *) *reg1 >= mr_SPB) + *--mr_TR = *reg1; + reg1--; + } + out: + + if (x != mr_TR) + abort (); +} + +main () +{ + mem[99] = (long) mem; + f (mem + 100, mem + 6, mem + 8, mem + 99, mem + 99); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/930930-2.c b/gcc/testsuite/gcc.c-torture/execute/930930-2.c new file mode 100644 index 000000000000..eb34d11fe226 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/930930-2.c @@ -0,0 +1,30 @@ +int +test_endianness() +{ + union doubleword + { + double d; + unsigned long u[2]; + } dw; + dw.d = 10; + return dw.u[0] != 0 ? 1 : 0; +} + +int +test_endianness_vol() +{ + union doubleword + { + volatile double d; + volatile long u[2]; + } dw; + dw.d = 10; + return dw.u[0] != 0 ? 1 : 0; +} + +main () +{ + if (test_endianness () != test_endianness_vol ()) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/931002-1.c b/gcc/testsuite/gcc.c-torture/execute/931002-1.c new file mode 100644 index 000000000000..6a02b2343946 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/931002-1.c @@ -0,0 +1,28 @@ +f (void (*func) ()) +{ + func (); +} + +main () +{ +#ifndef NO_TRAMPOLINES + void t0 () + { + } + + void t1 () + { + f (t0); + } + + void t2 () + { + t1 (); + } + + t1 (); + t1 (); + t2 (); +#endif + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/931004-1.c b/gcc/testsuite/gcc.c-torture/execute/931004-1.c new file mode 100644 index 000000000000..9c89afdae35a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/931004-1.c @@ -0,0 +1,30 @@ +struct tiny +{ + int c; +}; + +f (int n, struct tiny x, struct tiny y, struct tiny z, long l) +{ + if (x.c != 10) + abort(); + + if (y.c != 11) + abort(); + + if (z.c != 12) + abort(); + + if (l != 123) + abort (); +} + +main () +{ + struct tiny x[3]; + x[0].c = 10; + x[1].c = 11; + x[2].c = 12; + f (3, x[0], x[1], x[2], (long) 123); + exit(0); +} + diff --git a/gcc/testsuite/gcc.c-torture/execute/931004-10.c b/gcc/testsuite/gcc.c-torture/execute/931004-10.c new file mode 100644 index 000000000000..cf0125dba62f --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/931004-10.c @@ -0,0 +1,44 @@ +#include <stdarg.h> + +struct tiny +{ + char c; + char d; +}; + +f (int n, ...) +{ + struct tiny x; + int i; + + va_list ap; + va_start (ap,n); + for (i = 0; i < n; i++) + { + x = va_arg (ap,struct tiny); + if (x.c != i + 10) + abort(); + if (x.d != i + 20) + abort(); + } + { + long x = va_arg (ap, long); + if (x != 123) + abort(); + } + va_end (ap); +} + +main () +{ + struct tiny x[3]; + x[0].c = 10; + x[1].c = 11; + x[2].c = 12; + x[0].d = 20; + x[1].d = 21; + x[2].d = 22; + f (3, x[0], x[1], x[2], (long) 123); + exit(0); +} + diff --git a/gcc/testsuite/gcc.c-torture/execute/931004-11.c b/gcc/testsuite/gcc.c-torture/execute/931004-11.c new file mode 100644 index 000000000000..b6047025ce9c --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/931004-11.c @@ -0,0 +1,50 @@ +struct tiny +{ + char c; + char d; + char e; +}; + +f (int n, struct tiny x, struct tiny y, struct tiny z, long l) +{ + if (x.c != 10) + abort(); + if (x.d != 20) + abort(); + if (x.e != 30) + abort(); + + if (y.c != 11) + abort(); + if (y.d != 21) + abort(); + if (y.e != 31) + abort(); + + if (z.c != 12) + abort(); + if (z.d != 22) + abort(); + if (z.e != 32) + abort(); + + if (l != 123) + abort (); +} + +main () +{ + struct tiny x[3]; + x[0].c = 10; + x[1].c = 11; + x[2].c = 12; + x[0].d = 20; + x[1].d = 21; + x[2].d = 22; + x[0].e = 30; + x[1].e = 31; + x[2].e = 32; + f (3, x[0], x[1], x[2], (long) 123); + exit(0); +} + diff --git a/gcc/testsuite/gcc.c-torture/execute/931004-12.c b/gcc/testsuite/gcc.c-torture/execute/931004-12.c new file mode 100644 index 000000000000..d3fc71e0cb0a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/931004-12.c @@ -0,0 +1,50 @@ +#include <stdarg.h> + +struct tiny +{ + char c; + char d; + char e; +}; + +f (int n, ...) +{ + struct tiny x; + int i; + + va_list ap; + va_start (ap,n); + for (i = 0; i < n; i++) + { + x = va_arg (ap,struct tiny); + if (x.c != i + 10) + abort(); + if (x.d != i + 20) + abort(); + if (x.e != i + 30) + abort(); + } + { + long x = va_arg (ap, long); + if (x != 123) + abort(); + } + va_end (ap); +} + +main () +{ + struct tiny x[3]; + x[0].c = 10; + x[1].c = 11; + x[2].c = 12; + x[0].d = 20; + x[1].d = 21; + x[2].d = 22; + x[0].e = 30; + x[1].e = 31; + x[2].e = 32; + f (3, x[0], x[1], x[2], (long) 123); + exit(0); +} + diff --git a/gcc/testsuite/gcc.c-torture/execute/931004-13.c b/gcc/testsuite/gcc.c-torture/execute/931004-13.c new file mode 100644 index 000000000000..60422af8eb7c --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/931004-13.c @@ -0,0 +1,60 @@ +struct tiny +{ + char c; + char d; + char e; + char f; +}; + +f (int n, struct tiny x, struct tiny y, struct tiny z, long l) +{ + if (x.c != 10) + abort(); + if (x.d != 20) + abort(); + if (x.e != 30) + abort(); + if (x.f != 40) + abort(); + + if (y.c != 11) + abort(); + if (y.d != 21) + abort(); + if (y.e != 31) + abort(); + if (y.f != 41) + abort(); + + if (z.c != 12) + abort(); + if (z.d != 22) + abort(); + if (z.e != 32) + abort(); + if (z.f != 42) + abort(); + + if (l != 123) + abort (); +} + +main () +{ + struct tiny x[3]; + x[0].c = 10; + x[1].c = 11; + x[2].c = 12; + x[0].d = 20; + x[1].d = 21; + x[2].d = 22; + x[0].e = 30; + x[1].e = 31; + x[2].e = 32; + x[0].f = 40; + x[1].f = 41; + x[2].f = 42; + f (3, x[0], x[1], x[2], (long) 123); + exit(0); +} + diff --git a/gcc/testsuite/gcc.c-torture/execute/931004-14.c b/gcc/testsuite/gcc.c-torture/execute/931004-14.c new file mode 100644 index 000000000000..55c71bbc42a2 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/931004-14.c @@ -0,0 +1,56 @@ +#include <stdarg.h> + +struct tiny +{ + char c; + char d; + char e; + char f; +}; + +f (int n, ...) +{ + struct tiny x; + int i; + + va_list ap; + va_start (ap,n); + for (i = 0; i < n; i++) + { + x = va_arg (ap,struct tiny); + if (x.c != i + 10) + abort(); + if (x.d != i + 20) + abort(); + if (x.e != i + 30) + abort(); + if (x.f != i + 40) + abort(); + } + { + long x = va_arg (ap, long); + if (x != 123) + abort(); + } + va_end (ap); +} + +main () +{ + struct tiny x[3]; + x[0].c = 10; + x[1].c = 11; + x[2].c = 12; + x[0].d = 20; + x[1].d = 21; + x[2].d = 22; + x[0].e = 30; + x[1].e = 31; + x[2].e = 32; + x[0].f = 40; + x[1].f = 41; + x[2].f = 42; + f (3, x[0], x[1], x[2], (long) 123); + exit(0); +} + diff --git a/gcc/testsuite/gcc.c-torture/execute/931004-2.c b/gcc/testsuite/gcc.c-torture/execute/931004-2.c new file mode 100644 index 000000000000..83bdea67b0cf --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/931004-2.c @@ -0,0 +1,38 @@ +#include <stdarg.h> + +struct tiny +{ + int c; +}; + +f (int n, ...) +{ + struct tiny x; + int i; + + va_list ap; + va_start (ap,n); + for (i = 0; i < n; i++) + { + x = va_arg (ap,struct tiny); + if (x.c != i + 10) + abort(); + } + { + long x = va_arg (ap, long); + if (x != 123) + abort(); + } + va_end (ap); +} + +main () +{ + struct tiny x[3]; + x[0].c = 10; + x[1].c = 11; + x[2].c = 12; + f (3, x[0], x[1], x[2], (long) 123); + exit(0); +} + diff --git a/gcc/testsuite/gcc.c-torture/execute/931004-3.c b/gcc/testsuite/gcc.c-torture/execute/931004-3.c new file mode 100644 index 000000000000..1e7a0fdcd536 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/931004-3.c @@ -0,0 +1,30 @@ +struct tiny +{ + short c; +}; + +f (int n, struct tiny x, struct tiny y, struct tiny z, long l) +{ + if (x.c != 10) + abort(); + + if (y.c != 11) + abort(); + + if (z.c != 12) + abort(); + + if (l != 123) + abort (); +} + +main () +{ + struct tiny x[3]; + x[0].c = 10; + x[1].c = 11; + x[2].c = 12; + f (3, x[0], x[1], x[2], (long) 123); + exit(0); +} + diff --git a/gcc/testsuite/gcc.c-torture/execute/931004-4.c b/gcc/testsuite/gcc.c-torture/execute/931004-4.c new file mode 100644 index 000000000000..f0d2331e5ccd --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/931004-4.c @@ -0,0 +1,38 @@ +#include <stdarg.h> + +struct tiny +{ + short c; +}; + +f (int n, ...) +{ + struct tiny x; + int i; + + va_list ap; + va_start (ap,n); + for (i = 0; i < n; i++) + { + x = va_arg (ap,struct tiny); + if (x.c != i + 10) + abort(); + } + { + long x = va_arg (ap, long); + if (x != 123) + abort(); + } + va_end (ap); +} + +main () +{ + struct tiny x[3]; + x[0].c = 10; + x[1].c = 11; + x[2].c = 12; + f (3, x[0], x[1], x[2], (long) 123); + exit(0); +} + diff --git a/gcc/testsuite/gcc.c-torture/execute/931004-5.c b/gcc/testsuite/gcc.c-torture/execute/931004-5.c new file mode 100644 index 000000000000..9bef779e6edb --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/931004-5.c @@ -0,0 +1,40 @@ +struct tiny +{ + short c; + short d; +}; + +f (int n, struct tiny x, struct tiny y, struct tiny z, long l) +{ + if (x.c != 10) + abort(); + if (x.d != 20) + abort(); + + if (y.c != 11) + abort(); + if (y.d != 21) + abort(); + + if (z.c != 12) + abort(); + if (z.d != 22) + abort(); + + if (l != 123) + abort (); +} + +main () +{ + struct tiny x[3]; + x[0].c = 10; + x[1].c = 11; + x[2].c = 12; + x[0].d = 20; + x[1].d = 21; + x[2].d = 22; + f (3, x[0], x[1], x[2], (long) 123); + exit(0); +} + diff --git a/gcc/testsuite/gcc.c-torture/execute/931004-6.c b/gcc/testsuite/gcc.c-torture/execute/931004-6.c new file mode 100644 index 000000000000..6dca48f38ef5 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/931004-6.c @@ -0,0 +1,44 @@ +#include <stdarg.h> + +struct tiny +{ + short c; + short d; +}; + +f (int n, ...) +{ + struct tiny x; + int i; + + va_list ap; + va_start (ap,n); + for (i = 0; i < n; i++) + { + x = va_arg (ap,struct tiny); + if (x.c != i + 10) + abort(); + if (x.d != i + 20) + abort(); + } + { + long x = va_arg (ap, long); + if (x != 123) + abort(); + } + va_end (ap); +} + +main () +{ + struct tiny x[3]; + x[0].c = 10; + x[1].c = 11; + x[2].c = 12; + x[0].d = 20; + x[1].d = 21; + x[2].d = 22; + f (3, x[0], x[1], x[2], (long) 123); + exit(0); +} + diff --git a/gcc/testsuite/gcc.c-torture/execute/931004-7.c b/gcc/testsuite/gcc.c-torture/execute/931004-7.c new file mode 100644 index 000000000000..8ab2fcb2ab26 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/931004-7.c @@ -0,0 +1,30 @@ +struct tiny +{ + char c; +}; + +f (int n, struct tiny x, struct tiny y, struct tiny z, long l) +{ + if (x.c != 10) + abort(); + + if (y.c != 11) + abort(); + + if (z.c != 12) + abort(); + + if (l != 123) + abort (); +} + +main () +{ + struct tiny x[3]; + x[0].c = 10; + x[1].c = 11; + x[2].c = 12; + f (3, x[0], x[1], x[2], (long) 123); + exit(0); +} + diff --git a/gcc/testsuite/gcc.c-torture/execute/931004-8.c b/gcc/testsuite/gcc.c-torture/execute/931004-8.c new file mode 100644 index 000000000000..5fb97f64a6b1 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/931004-8.c @@ -0,0 +1,38 @@ +#include <stdarg.h> + +struct tiny +{ + char c; +}; + +f (int n, ...) +{ + struct tiny x; + int i; + + va_list ap; + va_start (ap,n); + for (i = 0; i < n; i++) + { + x = va_arg (ap,struct tiny); + if (x.c != i + 10) + abort(); + } + { + long x = va_arg (ap, long); + if (x != 123) + abort(); + } + va_end (ap); +} + +main () +{ + struct tiny x[3]; + x[0].c = 10; + x[1].c = 11; + x[2].c = 12; + f (3, x[0], x[1], x[2], (long) 123); + exit(0); +} + diff --git a/gcc/testsuite/gcc.c-torture/execute/931004-9.c b/gcc/testsuite/gcc.c-torture/execute/931004-9.c new file mode 100644 index 000000000000..07247f7adfac --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/931004-9.c @@ -0,0 +1,40 @@ +struct tiny +{ + char c; + char d; +}; + +f (int n, struct tiny x, struct tiny y, struct tiny z, long l) +{ + if (x.c != 10) + abort(); + if (x.d != 20) + abort(); + + if (y.c != 11) + abort(); + if (y.d != 21) + abort(); + + if (z.c != 12) + abort(); + if (z.d != 22) + abort(); + + if (l != 123) + abort (); +} + +main () +{ + struct tiny x[3]; + x[0].c = 10; + x[1].c = 11; + x[2].c = 12; + x[0].d = 20; + x[1].d = 21; + x[2].d = 22; + f (3, x[0], x[1], x[2], (long) 123); + exit(0); +} + diff --git a/gcc/testsuite/gcc.c-torture/execute/931005-1.c b/gcc/testsuite/gcc.c-torture/execute/931005-1.c new file mode 100644 index 000000000000..5a7e031cbfec --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/931005-1.c @@ -0,0 +1,23 @@ +typedef struct +{ + char x; +} T; + +T +f (s1) + T s1; +{ + T s1a; + s1a.x = s1.x; + return s1a; +} + +main () +{ + T s1a, s1b; + s1a.x = 100; + s1b = f (s1a); + if (s1b.x != 100) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/931009-1.c b/gcc/testsuite/gcc.c-torture/execute/931009-1.c new file mode 100644 index 000000000000..292228014e72 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/931009-1.c @@ -0,0 +1,26 @@ +main () +{ + f (); + exit (0); +} + +static +g (out, size, lo, hi) + int *out, size, lo, hi; +{ + int j; + + for (j = 0; j < size; j++) + out[j] = j * (hi - lo); +} + + +f () +{ + int a[2]; + + g (a, 2, 0, 1); + + if (a[0] != 0 || a[1] != 1) + abort (); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/931012-1.c b/gcc/testsuite/gcc.c-torture/execute/931012-1.c new file mode 100644 index 000000000000..d9c958ddb90e --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/931012-1.c @@ -0,0 +1,13 @@ +f (int b, int c) +{ + if (b != 0 && b != 1 && c != 0) + b = 0; + return b; +} + +main () +{ + if (!f (1, 2)) + abort(); + exit(0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/931017-1.c b/gcc/testsuite/gcc.c-torture/execute/931017-1.c new file mode 100644 index 000000000000..5917bd95b76d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/931017-1.c @@ -0,0 +1,54 @@ +int v; + +main () +{ + f (); + exit (0); +} + +h1 () +{ + return 0; +} + +h2 (e) + int *e; +{ + if (e != &v) + abort (); + return 0; +} + +g (c) + char *c; +{ + int i; + int b; + + do + { + i = h1 (); + if (i == -1) + return 0; + else if (i == 1) + h1 (); + } + while (i == 1); + + do + b = h2 (&v); + while (i == 5); + + if (i != 2) + return b; + *c = 'a'; + + return 0; +} + + +f () +{ + char c; + g (&c); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/931018-1.c b/gcc/testsuite/gcc.c-torture/execute/931018-1.c new file mode 100644 index 000000000000..d3814e699b86 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/931018-1.c @@ -0,0 +1,18 @@ +unsigned int a[0x1000]; +extern unsigned long v; + +main () +{ + f (v); + f (v); + exit (0); +} + +f (a) + unsigned long a; +{ + if (a != 0xdeadbeefL) + abort(); +} + +const unsigned long v = 0xdeadbeefL; diff --git a/gcc/testsuite/gcc.c-torture/execute/931031-1.c b/gcc/testsuite/gcc.c-torture/execute/931031-1.c new file mode 100644 index 000000000000..761989040f4b --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/931031-1.c @@ -0,0 +1,24 @@ +struct foo +{ + unsigned y:1; + unsigned x:32; +}; + +int +f (x) + struct foo x; +{ + int t = x.x; + if (t < 0) + return 1; + return t+1; +} + +main () +{ + struct foo x; + x.x = -1; + if (f (x) == 0) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/931102-1.c b/gcc/testsuite/gcc.c-torture/execute/931102-1.c new file mode 100644 index 000000000000..489e7ebda8d0 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/931102-1.c @@ -0,0 +1,30 @@ +typedef union +{ + struct + { + char h, l; + } b; +} T; + +f (x) + int x; +{ + int num = 0; + T reg; + + reg.b.l = x; + while ((reg.b.l & 1) == 0) + { + num++; + reg.b.l >>= 1; + } + return num; +} + +main () +{ + if (f (2) != 1) + abort (); + exit (0); +} + diff --git a/gcc/testsuite/gcc.c-torture/execute/931102-2.c b/gcc/testsuite/gcc.c-torture/execute/931102-2.c new file mode 100644 index 000000000000..6fc735c8bc14 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/931102-2.c @@ -0,0 +1,31 @@ +typedef union +{ + long align; + struct + { + short h, l; + } b; +} T; + +f (x) + int x; +{ + int num = 0; + T reg; + + reg.b.l = x; + while ((reg.b.l & 1) == 0) + { + num++; + reg.b.l >>= 1; + } + return num; +} + +main () +{ + if (f (2) != 1) + abort (); + exit (0); +} + diff --git a/gcc/testsuite/gcc.c-torture/execute/931110-1.c b/gcc/testsuite/gcc.c-torture/execute/931110-1.c new file mode 100644 index 000000000000..5b33b269a2d6 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/931110-1.c @@ -0,0 +1,18 @@ +typedef struct +{ + short f:3, g:3, h:10; +} small; + +struct +{ + int i; + small s[10]; +} x; + +main () +{ + int i; + for (i = 0; i < 10; i++) + x.s[i].f = 0; + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/931110-2.c b/gcc/testsuite/gcc.c-torture/execute/931110-2.c new file mode 100644 index 000000000000..586615b180c0 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/931110-2.c @@ -0,0 +1,12 @@ +main () +{ + static int a[] = {3, 4}; + register int *b; + int c; + + b = a; + c = *b++ % 8; + if (c != 3) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/931208-1.c b/gcc/testsuite/gcc.c-torture/execute/931208-1.c new file mode 100644 index 000000000000..ee2bc9f1e04d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/931208-1.c @@ -0,0 +1,14 @@ +f () +{ + unsigned long x, y = 1; + + x = ((y * 8192) - 216) / 16; + return x; +} + +main () +{ + if (f () != 498) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/931228-1.c b/gcc/testsuite/gcc.c-torture/execute/931228-1.c new file mode 100644 index 000000000000..dcd3b65ff3ba --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/931228-1.c @@ -0,0 +1,15 @@ +f (x) +{ + x &= 010000; + x &= 007777; + x ^= 017777; + x &= 017770; + return x; +} + +main () +{ + if (f (-1) != 017770) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/940115-1.c b/gcc/testsuite/gcc.c-torture/execute/940115-1.c new file mode 100644 index 000000000000..d0fac9077a1d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/940115-1.c @@ -0,0 +1,13 @@ +f (cp, end) + char *cp; + char *end; +{ + return (cp < end); +} + +main () +{ + if (! f ((char *) 0, (char *) 1)) + abort(); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/940122-1.c b/gcc/testsuite/gcc.c-torture/execute/940122-1.c new file mode 100644 index 000000000000..9dbf6ae185b4 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/940122-1.c @@ -0,0 +1,21 @@ +char *a = 0; +char *b = 0; + +g (x) + int x; +{ + if ((!!a) != (!!b)) + abort (); +} + +f (x) + int x; +{ + g (x * x); +} + +main () +{ + f (100); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/941014-1.c b/gcc/testsuite/gcc.c-torture/execute/941014-1.c new file mode 100644 index 000000000000..98db917428fd --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/941014-1.c @@ -0,0 +1,15 @@ +int f (int a, int b) { } + +main () +{ + unsigned long addr1; + unsigned long addr2; + + addr1 = (unsigned long) &f; + addr1 += 5; + addr2 = 5 + (unsigned long) &f; + + if (addr1 != addr2) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/941014-2.c b/gcc/testsuite/gcc.c-torture/execute/941014-2.c new file mode 100644 index 000000000000..3932a34ce924 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/941014-2.c @@ -0,0 +1,33 @@ +#include <stdio.h> +#include <stdlib.h> + +typedef struct { + unsigned short a; + unsigned short b; +} foo_t; + +void a1 (unsigned long offset) {} + +volatile foo_t * +f () +{ + volatile foo_t *foo_p = (volatile foo_t *)malloc (sizeof (foo_t)); + + a1((unsigned long)foo_p-30); + if (foo_p->a & 0xf000) + printf("%d\n", foo_p->a); + foo_p->b = 0x0100; + a1 ((unsigned long)foo_p + 2); + a1 ((unsigned long)foo_p - 30); + return foo_p; +} + +main () +{ + volatile foo_t *foo_p; + + foo_p = f (); + if (foo_p->b != 0x0100) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/941015-1.c b/gcc/testsuite/gcc.c-torture/execute/941015-1.c new file mode 100644 index 000000000000..38d4796645f6 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/941015-1.c @@ -0,0 +1,35 @@ +int +foo1 (value) + long long value; +{ + register const long long constant = 0xc000000080000000LL; + + if (value < constant) + return 1; + else + return 2; +} + +int +foo2 (value) + unsigned long long value; +{ + register const unsigned long long constant = 0xc000000080000000LL; + + if (value < constant) + return 1; + else + return 2; +} + +main () +{ + unsigned long long value = 0xc000000000000001LL; + int x, y; + + x = foo1 (value); + y = foo2 (value); + if (x != y || x != 1) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/941021-1.c b/gcc/testsuite/gcc.c-torture/execute/941021-1.c new file mode 100644 index 000000000000..9fc1cfadf97d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/941021-1.c @@ -0,0 +1,20 @@ +double glob_dbl; + +f (pdbl, value) + double *pdbl; + double value; +{ + if (pdbl == 0) + pdbl = &glob_dbl; + + *pdbl = value; +} + +main () +{ + f ((void *) 0, 55.1); + + if (glob_dbl != 55.1) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/941025-1.c b/gcc/testsuite/gcc.c-torture/execute/941025-1.c new file mode 100644 index 000000000000..2daf0ad25cc2 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/941025-1.c @@ -0,0 +1,12 @@ +long f (x, y) + long x,y; +{ + return (x > 1) ? y : (y & 1); +} + +main () +{ + if (f (2L, 0xdecadeL) != 0xdecadeL) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/941031-1.c b/gcc/testsuite/gcc.c-torture/execute/941031-1.c new file mode 100644 index 000000000000..134f966c6f3d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/941031-1.c @@ -0,0 +1,27 @@ +typedef long mpt; + +int +f (mpt us, mpt vs) +{ + long aus; + long avs; + + aus = us >= 0 ? us : -us; + avs = vs >= 0 ? vs : -vs; + + if (aus < avs) + { + long t = aus; + aus = avs; + avs = aus; + } + + return avs; +} + +main () +{ + if (f ((mpt) 3, (mpt) 17) != 17) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/941101-1.c b/gcc/testsuite/gcc.c-torture/execute/941101-1.c new file mode 100644 index 000000000000..66b5f384a806 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/941101-1.c @@ -0,0 +1,15 @@ +f () +{ + int var = 7; + + if ((var/7) == 1) + return var/7; + return 0; +} + +main () +{ + if (f () != 1) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/941110-1.c b/gcc/testsuite/gcc.c-torture/execute/941110-1.c new file mode 100644 index 000000000000..b78256d3c3f4 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/941110-1.c @@ -0,0 +1,16 @@ +f (const int x) +{ + int y = 0; + y = x ? y : -y; + { + const int *p = &x; + } + return y; +} + +main () +{ + if (f (0)) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/941202-1.c b/gcc/testsuite/gcc.c-torture/execute/941202-1.c new file mode 100644 index 000000000000..72d0b33e924a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/941202-1.c @@ -0,0 +1,21 @@ +g (x, y) +{ + if (x != 3) + abort (); +} + +static inline +f (int i) +{ + int *tmp; + + tmp = (int *) alloca (sizeof (i)); + *tmp = i; + g (*tmp, 0); +} + +main () +{ + f (3); + exit (0); +}; diff --git a/gcc/testsuite/gcc.c-torture/execute/950221-1.c b/gcc/testsuite/gcc.c-torture/execute/950221-1.c new file mode 100644 index 000000000000..d45fb5aeef03 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/950221-1.c @@ -0,0 +1,51 @@ +struct parsefile +{ + long fd; + char *buf; +}; +struct parsefile basepf; +struct parsefile *parsefile = &basepf; +int filler[0x3000]; +int el; + +char * +g1 (a, b) + int a; + int *b; +{ +} + +g2 (a) + long a; +{ + if (a != 0xdeadbeefL) + abort (); + exit (0); +} + +f () +{ + register char *p, *q; + register int i; + register int something; + + if (parsefile->fd == 0L && el) + { + const char *rl_cp; + int len; + rl_cp = g1 (el, &len); + strcpy (p, rl_cp); + } + else + { + alabel: + i = g2 (parsefile->fd); + } +} + +main () +{ + el = 0; + parsefile->fd = 0xdeadbeefL; + f (); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/950322-1.c b/gcc/testsuite/gcc.c-torture/execute/950322-1.c new file mode 100644 index 000000000000..28a1469fea0b --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/950322-1.c @@ -0,0 +1,30 @@ +f (unsigned char *a) +{ + int i, j; + int x, y; + + j = a[1]; + i = a[0] - j; + if (i < 0) + { + x = 1; + y = -i; + } + else + { + x = 0; + y = i; + } + return x + y; +} + + +main () +{ + unsigned char a[2]; + a[0] = 8; + a[1] = 9; + if (f (a) != 2) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/950426-1.c b/gcc/testsuite/gcc.c-torture/execute/950426-1.c new file mode 100644 index 000000000000..076032c7220b --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/950426-1.c @@ -0,0 +1,32 @@ + +struct tag { + int m1; + char *m2[5]; +} s1, *p1; + +int i; + +main() +{ + s1.m1 = -1; + p1 = &s1; + + if ( func1( &p1->m1 ) == -1 ) + foo ("ok"); + else + abort (); + + i = 3; + s1.m2[3]= "123"; + + if ( strlen( (p1->m2[i])++ ) == 3 ) + foo ("ok"); + else + abort (); + + exit (0); +} + +func1(int *p) { return(*p); } + +foo (char *s) {} diff --git a/gcc/testsuite/gcc.c-torture/execute/950426-2.c b/gcc/testsuite/gcc.c-torture/execute/950426-2.c new file mode 100644 index 000000000000..a1a690469d17 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/950426-2.c @@ -0,0 +1,13 @@ +main() +{ + long int i = -2147483647L - 1L; /* 0x80000000 */ + char ca = 1; + + if (i >> ca != -1073741824L) + abort (); + + if (i >> i / -2000000000L != -1073741824L) + abort (); + + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/950503-1.c b/gcc/testsuite/gcc.c-torture/execute/950503-1.c new file mode 100644 index 000000000000..1c95b369c50a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/950503-1.c @@ -0,0 +1,15 @@ +main () +{ + int tmp; + unsigned long long utmp1, utmp2; + + tmp = 16; + + utmp1 = (~((unsigned long long) 0)) >> tmp; + utmp2 = (~((unsigned long long) 0)) >> 16; + + if (utmp1 != utmp2) + abort (); + exit (0); +} + diff --git a/gcc/testsuite/gcc.c-torture/execute/950511-1.c b/gcc/testsuite/gcc.c-torture/execute/950511-1.c new file mode 100644 index 000000000000..6584b0c86b6b --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/950511-1.c @@ -0,0 +1,11 @@ +main () +{ + unsigned long long xx; + unsigned long long *x = (unsigned long long *) &xx; + + *x = -3; + *x = *x * *x; + if (*x != 9) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/950512-1.c b/gcc/testsuite/gcc.c-torture/execute/950512-1.c new file mode 100644 index 000000000000..8aa116d27caa --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/950512-1.c @@ -0,0 +1,24 @@ +unsigned +f1 (x) +{ + return ((unsigned) (x != 0) - 3) / 2; +} + +unsigned long long +f2 (x) +{ + return ((unsigned long long) (x != 0) - 3) / 2; +} + +main () +{ + if (f1 (1) != (~(unsigned) 0) >> 1) + abort (); + if (f1 (0) != ((~(unsigned) 0) >> 1) - 1) + abort (); + if (f2 (1) != (~(unsigned long long) 0) >> 1) + abort (); + if (f2 (0) != ((~(unsigned long long) 0) >> 1) - 1) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/950605-1.c b/gcc/testsuite/gcc.c-torture/execute/950605-1.c new file mode 100644 index 000000000000..d89a42e49c64 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/950605-1.c @@ -0,0 +1,12 @@ +f (c) + unsigned char c; +{ + if (c != 0xFF) + abort (); +} + +main () +{ + f (-1); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/950607-1.c b/gcc/testsuite/gcc.c-torture/execute/950607-1.c new file mode 100644 index 000000000000..7b1503ad11d3 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/950607-1.c @@ -0,0 +1,9 @@ +main () +{ + struct { long status; } h; + + h.status = 0; + if (((h.status & 128) == 1) && ((h.status & 32) == 0)) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/950607-2.c b/gcc/testsuite/gcc.c-torture/execute/950607-2.c new file mode 100644 index 000000000000..da18f7373f4a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/950607-2.c @@ -0,0 +1,41 @@ +typedef struct { + long int p_x, p_y; +} Point; + +int +f (Point basePt, Point pt1, Point pt2) +{ + long long vector; + + vector = + (long long) (pt1.p_x - basePt.p_x) * (long long) (pt2.p_y - basePt.p_y) - + (long long) (pt1.p_y - basePt.p_y) * (long long) (pt2.p_x - basePt.p_x); + + if (vector > (long long) 0) + return 0; + else if (vector < (long long) 0) + return 1; + else + return 2; +} + +main () +{ + Point b, p1, p2; + int answer; + + b.p_x = -23250; + b.p_y = 23250; + + p1.p_x = 23250; + p1.p_y = -23250; + + p2.p_x = -23250; + p2.p_y = -23250; + + answer = f (b, p1, p2); + + if (answer != 1) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/950612-1.c b/gcc/testsuite/gcc.c-torture/execute/950612-1.c new file mode 100644 index 000000000000..f9885279c33a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/950612-1.c @@ -0,0 +1,48 @@ +unsigned int +f1 (int diff) +{ + return ((unsigned int) (diff < 0 ? -diff : diff)); +} + +unsigned int +f2 (unsigned int diff) +{ + return ((unsigned int) ((signed int) diff < 0 ? -diff : diff)); +} + +unsigned long long +f3 (long long diff) +{ + return ((unsigned long long) (diff < 0 ? -diff : diff)); +} + +unsigned long long +f4 (unsigned long long diff) +{ + return ((unsigned long long) ((signed long long) diff < 0 ? -diff : diff)); +} + +main () +{ + int i; + for (i = 0; i <= 10; i++) + { + if (f1 (i) != i) + abort (); + if (f1 (-i) != i) + abort (); + if (f2 (i) != i) + abort (); + if (f2 (-i) != i) + abort (); + if (f3 ((long long) i) != i) + abort (); + if (f3 ((long long) -i) != i) + abort (); + if (f4 ((long long) i) != i) + abort (); + if (f4 ((long long) -i) != i) + abort (); + } + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/950621-1.c b/gcc/testsuite/gcc.c-torture/execute/950621-1.c new file mode 100644 index 000000000000..5fc5a9028741 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/950621-1.c @@ -0,0 +1,20 @@ +struct s +{ + int a; + int b; + struct s *dummy; +}; + +f (struct s *sp) +{ + return sp && sp->a == -1 && sp->b == -1; +} + +main () +{ + struct s x; + x.a = x.b = -1; + if (f (&x) == 0) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/950628-1.c b/gcc/testsuite/gcc.c-torture/execute/950628-1.c new file mode 100644 index 000000000000..e330ff569717 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/950628-1.c @@ -0,0 +1,31 @@ +typedef struct +{ + char hours, day, month; + short year; +} T; + +T g (void) +{ + T now; + + now.hours = 1; + now.day = 2; + now.month = 3; + now.year = 4; + return now; +} + +T f (void) +{ + T virk; + + virk = g (); + return virk; +} + +main () +{ + if (f ().hours != 1 || f ().day != 2 || f ().month != 3 || f ().year != 4) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/950704-1.c b/gcc/testsuite/gcc.c-torture/execute/950704-1.c new file mode 100644 index 000000000000..f11aff8cabc8 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/950704-1.c @@ -0,0 +1,59 @@ +int errflag; + +long long +f (long long x, long long y) +{ + long long r; + + errflag = 0; + r = x + y; + if (x >= 0) + { + if ((y < 0) || (r >= 0)) + return r; + } + else + { + if ((y > 0) || (r < 0)) + return r; + } + errflag = 1; + return 0; +} + +main () +{ + f (0, 0); + if (errflag) + abort (); + + f (1, -1); + if (errflag) + abort (); + + f (-1, 1); + if (errflag) + abort (); + + f (0x8000000000000000LL, 0x8000000000000000LL); + if (!errflag) + abort (); + + f (0x8000000000000000LL, -1LL); + if (!errflag) + abort (); + + f (0x7fffffffffffffffLL, 0x7fffffffffffffffLL); + if (!errflag) + abort (); + + f (0x7fffffffffffffffLL, 1LL); + if (!errflag) + abort (); + + f (0x7fffffffffffffffLL, 0x8000000000000000LL); + if (errflag) + abort (); + + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/950706-1.c b/gcc/testsuite/gcc.c-torture/execute/950706-1.c new file mode 100644 index 000000000000..2db1915411c1 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/950706-1.c @@ -0,0 +1,16 @@ +int +f (int n) +{ + return (n > 0) - (n < 0); +} + +main () +{ + if (f (-1) != -1) + abort (); + if (f (1) != 1) + abort (); + if (f (0) != 0) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/950710-1.c b/gcc/testsuite/gcc.c-torture/execute/950710-1.c new file mode 100644 index 000000000000..26ff9b2a8a0f --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/950710-1.c @@ -0,0 +1,54 @@ +struct twelve +{ + int a; + int b; + int c; +}; + +struct pair +{ + int first; + int second; +}; + +struct pair +g () +{ + struct pair p; + return p; +} + +static void +f () +{ + int i; + for (i = 0; i < 1; i++) + { + int j; + for (j = 0; j < 1; j++) + { + if (0) + { + int k; + for (k = 0; k < 1; k++) + { + struct pair e = g (); + } + } + else + { + struct twelve a, b; + if ((((char *) &b - (char *) &a) < 0 + ? (-((char *) &b - (char *) &a)) + : ((char *) &b - (char *) &a)) < sizeof (a)) + abort (); + } + } + } +} + +main () +{ + f (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/950714-1.c b/gcc/testsuite/gcc.c-torture/execute/950714-1.c new file mode 100644 index 000000000000..5dc44a906e29 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/950714-1.c @@ -0,0 +1,17 @@ +int array[10] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1}; + +main () +{ + int i, j; + int *p; + + for (i = 0; i < 10; i++) + for (p = &array[0]; p != &array[9]; p++) + if (*p == i) + goto label; + + label: + if (i != 1) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/950809-1.c b/gcc/testsuite/gcc.c-torture/execute/950809-1.c new file mode 100644 index 000000000000..a33d42bd7cd6 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/950809-1.c @@ -0,0 +1,33 @@ +struct S +{ + int *sp, fc, *sc, a[2]; +}; + +f (struct S *x) +{ + int *t = x->sc; + int t1 = t[0]; + int t2 = t[1]; + int t3 = t[2]; + int a0 = x->a[0]; + int a1 = x->a[1]; + t[2] = t1; + t[0] = a1; + x->a[1] = a0; + x->a[0] = t3; + x->fc = t2; + x->sp = t; +} + +main () +{ + struct S s; + static int sc[3] = {2, 3, 4}; + s.sc = sc; + s.a[0] = 10; + s.a[1] = 11; + f (&s); + if (s.sp[2] != 2) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/950906-1.c b/gcc/testsuite/gcc.c-torture/execute/950906-1.c new file mode 100644 index 000000000000..31997d5c2574 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/950906-1.c @@ -0,0 +1,16 @@ +g (int i) +{ +} + +f (int i) +{ + g (0); + while ( ({ i--; }) ) + g (0); +} + +main () +{ + f (10); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/950915-1.c b/gcc/testsuite/gcc.c-torture/execute/950915-1.c new file mode 100644 index 000000000000..cfa044757b88 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/950915-1.c @@ -0,0 +1,15 @@ +long int a = 100000; +long int b = 21475; + +long +f () +{ + return ((long long) a * (long long) b) >> 16; +} + +main () +{ + if (f () < 0) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/950929-1.c b/gcc/testsuite/gcc.c-torture/execute/950929-1.c new file mode 100644 index 000000000000..a35cd6a153e3 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/950929-1.c @@ -0,0 +1,21 @@ +int f (char *p) { } + +main () +{ + char c; + char c2; + int i = 0; + char *pc = &c; + char *pc2 = &c2; + int *pi = &i; + + *pc2 = 1; + *pi = 1; + *pc2 &= *pi; + f (pc2); + *pc2 = 1; + *pc2 &= *pi; + if (*pc2 != 1) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/951003-1.c b/gcc/testsuite/gcc.c-torture/execute/951003-1.c new file mode 100644 index 000000000000..269bf1353861 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/951003-1.c @@ -0,0 +1,21 @@ +int f (i) { return 12; } +int g () { return 0; } + +main () +{ + int i, s; + + for (i = 0; i < 32; i++) + { + s = f (i); + + if (i == g ()) + s = 42; + if (i == 0 || s == 12) + ; + else + abort (); + } + + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/951115-1.c b/gcc/testsuite/gcc.c-torture/execute/951115-1.c new file mode 100644 index 000000000000..03520c99ca25 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/951115-1.c @@ -0,0 +1,24 @@ +int var = 0; + +g () +{ + var = 1; +} + +f () +{ + int f2 = 0; + + if (f2 == 0) + ; + + g (); +} + +main () +{ + f (); + if (var != 1) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/951204-1.c b/gcc/testsuite/gcc.c-torture/execute/951204-1.c new file mode 100644 index 000000000000..c4d585b6b9ed --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/951204-1.c @@ -0,0 +1,18 @@ +f (char *x) +{ + *x = 'x'; +} + +main () +{ + int i; + char x = '\0'; + + for (i = 0; i < 100; ++i) + { + f (&x); + if (*(const char *) &x != 'x') + abort (); + } + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/960116-1.c b/gcc/testsuite/gcc.c-torture/execute/960116-1.c new file mode 100644 index 000000000000..6d7624ca1a19 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/960116-1.c @@ -0,0 +1,20 @@ +static inline +p (int *p) +{ + return !((long) p & 1); +} + +int +f (int *q) +{ + if (p (q) && *q) + return 1; + return 0; +} + +main () +{ + if (f ((int*) 0xffffffff) != 0) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/960117-1.c b/gcc/testsuite/gcc.c-torture/execute/960117-1.c new file mode 100644 index 000000000000..741455b08b90 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/960117-1.c @@ -0,0 +1,46 @@ +static char id_space[2] [32 +1]; +typedef short COUNT; + +typedef char TEXT; + +union T_VALS +{ + TEXT *id __attribute__ ((aligned (2), packed)) ; +}; +typedef union T_VALS VALS; + +struct T_VAL +{ + COUNT pos __attribute__ ((aligned (2), packed)) ; + VALS vals __attribute__ ((aligned (2), packed)) ; +}; +typedef struct T_VAL VAL; + +VAL curval = {0}; + +static short idc = 0; +static int cur_line; +static int char_pos; + +typedef unsigned short WORD; + +WORD +get_id (char c) +{ + curval.vals.id[0] = c; +} + +WORD +get_tok () +{ + char c = 'c'; + curval.vals.id = id_space[idc]; + curval.pos = (cur_line << 10) | char_pos; + return get_id (c); +} + +main () +{ + get_tok (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/960209-1.c b/gcc/testsuite/gcc.c-torture/execute/960209-1.c new file mode 100644 index 000000000000..decd2af2aab7 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/960209-1.c @@ -0,0 +1,43 @@ +struct a_struct +{ + unsigned char a_character; +}; + +struct a_struct an_array[5]; +struct a_struct *a_ptr; +int yabba = 1; + +int +f (a, b) + unsigned char a; + unsigned long b; +{ + long i, j, p, q, r, s; + + if (b != (unsigned long) 0) + { + if (yabba) + return -1; + s = 4000000 / b; + for (i = 0; i < 11; i++) + { + for (j = 0; j < 256; j++) + { + if (((p - s < 0) ? -s : 0) < (( q - s < 0) ? -s : q)) + r = i; + } + } + } + + if (yabba) + return 0; + a_ptr = &an_array[a]; + a_ptr->a_character = (unsigned char) r; +} + +main () +{ + if (f (1, 0UL) != 0) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/960215-1.c b/gcc/testsuite/gcc.c-torture/execute/960215-1.c new file mode 100644 index 000000000000..9502b4b2de40 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/960215-1.c @@ -0,0 +1,25 @@ +long double C = 2; +long double U = 1; +long double Y2 = 3; +long double Y1 = 1; +long double X, Y, Z, T, R, S; +main () +{ + X = (C + U) * Y2; + Y = C - U - U; + Z = C + U + U; + T = (C - U) * Y1; + X = X - (Z + U); + R = Y * Y1; + S = Z * Y2; + T = T - Y; + Y = (U - Y) + R; + Z = S - (Z + U + U); + R = (Y2 + U) * Y1; + Y1 = Y2 * Y1; + R = R - Y2; + Y1 = Y1 - 0.5L; + if (Z != 6) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/960218-1.c b/gcc/testsuite/gcc.c-torture/execute/960218-1.c new file mode 100644 index 000000000000..7301a17b00de --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/960218-1.c @@ -0,0 +1,22 @@ +int glob; + +g (x) +{ + glob = x; + return 0; +} + +f (x) +{ + int a = ~x; + while (a) + a = g (a); +} + +main () +{ + f (3); + if (glob != -4) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/960219-1.c b/gcc/testsuite/gcc.c-torture/execute/960219-1.c new file mode 100644 index 000000000000..d21bcfcad243 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/960219-1.c @@ -0,0 +1,11 @@ +f (int i) +{ + if (((1 << i) & 1) == 0) + abort (); +} + +main () +{ + f (0); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/960301-1.c b/gcc/testsuite/gcc.c-torture/execute/960301-1.c new file mode 100644 index 000000000000..d75efea98449 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/960301-1.c @@ -0,0 +1,22 @@ +struct foo { + unsigned : 12; + unsigned field : 4; +} foo; +unsigned oldfoo; + +int +bar (unsigned k) +{ + oldfoo = foo.field; + foo.field = k; + if (k) + return 1; + return 2; +} + +main () +{ + if (bar (1U) != 1) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/960302-1.c b/gcc/testsuite/gcc.c-torture/execute/960302-1.c new file mode 100644 index 000000000000..7a9426a4635a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/960302-1.c @@ -0,0 +1,21 @@ +long a = 1; + +foo () +{ + switch (a % 2 % 2 % 2 % 2 % 2 % 2 % 2 % 2) + { + case 0: + return 0; + case 1: + return 1; + default: + return -1; + } +} + +main () +{ + if (foo () != 1) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/960311-1.c b/gcc/testsuite/gcc.c-torture/execute/960311-1.c new file mode 100644 index 000000000000..16579d0bbd1e --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/960311-1.c @@ -0,0 +1,69 @@ +#include <stdio.h> + +#ifdef DEBUG +#define abort() printf ("error, line %d\n", __LINE__) +#endif + +int count; + +void a1() { ++count; } + +void +b (unsigned char data) +{ + if (data & 0x80) a1(); + data <<= 1; + + if (data & 0x80) a1(); + data <<= 1; + + if (data & 0x80) a1(); +} + +main () +{ + count = 0; + b (0); + if (count != 0) + abort (); + + count = 0; + b (0x80); + if (count != 1) + abort (); + + count = 0; + b (0x40); + if (count != 1) + abort (); + + count = 0; + b (0x20); + if (count != 1) + abort (); + + count = 0; + b (0xc0); + if (count != 2) + abort (); + + count = 0; + b (0xa0); + if (count != 2) + abort (); + + count = 0; + b (0x60); + if (count != 2) + abort (); + + count = 0; + b (0xe0); + if (count != 3) + abort (); + +#ifdef DEBUG + printf ("Done.\n"); +#endif + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/960311-2.c b/gcc/testsuite/gcc.c-torture/execute/960311-2.c new file mode 100644 index 000000000000..d5c2d07a336c --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/960311-2.c @@ -0,0 +1,69 @@ +#include <stdio.h> + +#ifdef DEBUG +#define abort() printf ("error, line %d\n", __LINE__) +#endif + +int count; + +void a1() { ++count; } + +void +b (unsigned short data) +{ + if (data & 0x8000) a1(); + data <<= 1; + + if (data & 0x8000) a1(); + data <<= 1; + + if (data & 0x8000) a1(); +} + +main () +{ + count = 0; + b (0); + if (count != 0) + abort (); + + count = 0; + b (0x8000); + if (count != 1) + abort (); + + count = 0; + b (0x4000); + if (count != 1) + abort (); + + count = 0; + b (0x2000); + if (count != 1) + abort (); + + count = 0; + b (0xc000); + if (count != 2) + abort (); + + count = 0; + b (0xa000); + if (count != 2) + abort (); + + count = 0; + b (0x6000); + if (count != 2) + abort (); + + count = 0; + b (0xe000); + if (count != 3) + abort (); + +#ifdef DEBUG + printf ("Done.\n"); +#endif + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/960311-3.c b/gcc/testsuite/gcc.c-torture/execute/960311-3.c new file mode 100644 index 000000000000..755fc723f85a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/960311-3.c @@ -0,0 +1,69 @@ +#include <stdio.h> + +#ifdef DEBUG +#define abort() printf ("error, line %d\n", __LINE__) +#endif + +int count; + +void a1() { ++count; } + +void +b (unsigned long data) +{ + if (data & 0x80000000) a1(); + data <<= 1; + + if (data & 0x80000000) a1(); + data <<= 1; + + if (data & 0x80000000) a1(); +} + +main () +{ + count = 0; + b (0); + if (count != 0) + abort (); + + count = 0; + b (0x80000000); + if (count != 1) + abort (); + + count = 0; + b (0x40000000); + if (count != 1) + abort (); + + count = 0; + b (0x20000000); + if (count != 1) + abort (); + + count = 0; + b (0xc0000000); + if (count != 2) + abort (); + + count = 0; + b (0xa0000000); + if (count != 2) + abort (); + + count = 0; + b (0x60000000); + if (count != 2) + abort (); + + count = 0; + b (0xe0000000); + if (count != 3) + abort (); + +#ifdef DEBUG + printf ("Done.\n"); +#endif + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/960312-1.c b/gcc/testsuite/gcc.c-torture/execute/960312-1.c new file mode 100644 index 000000000000..94e67df23bd5 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/960312-1.c @@ -0,0 +1,34 @@ +struct S +{ + int *sp, fc, *sc, a[2]; +}; + +f (struct S *x) +{ + int *t = x->sc; + int t1 = t[0]; + int t2 = t[1]; + int t3 = t[2]; + int a0 = x->a[0]; + int a1 = x->a[1]; + asm("": :"r" (t2), "r" (t3)); + t[2] = t1; + t[0] = a1; + x->a[1] = a0; + x->a[0] = t3; + x->fc = t2; + x->sp = t; +} + +main () +{ + struct S s; + static int sc[3] = {2, 3, 4}; + s.sc = sc; + s.a[0] = 10; + s.a[1] = 11; + f (&s); + if (s.sp[2] != 2) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/960317-1.c b/gcc/testsuite/gcc.c-torture/execute/960317-1.c new file mode 100644 index 000000000000..8d7907d751c3 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/960317-1.c @@ -0,0 +1,22 @@ +int +f (unsigned bitcount, int mant) +{ + int mask = -1 << bitcount; + { + if (! (mant & -mask)) + goto ab; + if (mant & ~mask) + goto auf; + } +ab: + return 0; +auf: + return 1; +} + +main () +{ + if (f (0, -1)) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/960321-1.c b/gcc/testsuite/gcc.c-torture/execute/960321-1.c new file mode 100644 index 000000000000..eafe48ff753e --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/960321-1.c @@ -0,0 +1,14 @@ +char a[10] = "deadbeef"; + +char +acc_a (long i) +{ + return a[i-2000000000L]; +} + +main () +{ + if (acc_a (2000000000L) != 'd') + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/960326-1.c b/gcc/testsuite/gcc.c-torture/execute/960326-1.c new file mode 100644 index 000000000000..f20137370225 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/960326-1.c @@ -0,0 +1,16 @@ +struct s +{ + int a; + int b; + short c; + int d[3]; +}; + +struct s s = { .b = 3, .d = {2,0,0} }; + +main () +{ + if (s.b != 3) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/960327-1.c b/gcc/testsuite/gcc.c-torture/execute/960327-1.c new file mode 100644 index 000000000000..d630a7b572ca --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/960327-1.c @@ -0,0 +1,30 @@ +#include <stdio.h> +g () +{ + return '\n'; +} + +f () +{ + char s[] = "abcedfg01234"; + char *sp = s + 12; + + switch (g ()) + { + case '\n': + break; + } + + while (*--sp == '0') + ; + sprintf (sp + 1, "X"); + + if (s[12] != 'X') + abort (); +} + +main () +{ + f (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/960402-1.c b/gcc/testsuite/gcc.c-torture/execute/960402-1.c new file mode 100644 index 000000000000..601a9a3b0913 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/960402-1.c @@ -0,0 +1,11 @@ +f (signed long long int x) +{ + return x > 0xFFFFFFFFLL || x < -0x80000000LL; +} + +main () +{ + if (f (0) != 0) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/960405-1.c b/gcc/testsuite/gcc.c-torture/execute/960405-1.c new file mode 100644 index 000000000000..d8480cc2c053 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/960405-1.c @@ -0,0 +1,13 @@ +#define X 5.9486574767861588254287966331400356538172e4931L + +long double x = X + X; +long double y = 2.0L * X; + +main () +{ +#if ! defined (__vax__) && ! defined (_CRAY) + if (x != y) + abort (); +#endif + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/960416-1.c b/gcc/testsuite/gcc.c-torture/execute/960416-1.c new file mode 100644 index 000000000000..f7cb056802ce --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/960416-1.c @@ -0,0 +1,63 @@ +typedef unsigned long int st; +typedef unsigned long long dt; +typedef union +{ + dt d; + struct + { + st h, l; + } + s; +} t_be; + +typedef union +{ + dt d; + struct + { + st l, h; + } + s; +} t_le; + +#define df(f, t) \ +int \ +f (t afh, t bfh) \ +{ \ + t hh; \ + t hp, lp, dp, m; \ + st ad, bd; \ + int s; \ + s = 0; \ + ad = afh.s.h - afh.s.l; \ + bd = bfh.s.l - bfh.s.h; \ + if (bd > bfh.s.l) \ + { \ + bd = -bd; \ + s = ~s; \ + } \ + lp.d = (dt) afh.s.l * bfh.s.l; \ + hp.d = (dt) afh.s.h * bfh.s.h; \ + dp.d = (dt) ad *bd; \ + dp.d ^= s; \ + hh.d = hp.d + hp.s.h + lp.s.h + dp.s.h; \ + m.d = (dt) lp.s.h + hp.s.l + lp.s.l + dp.s.l; \ + return hh.s.l + m.s.l; \ +} + +df(f_le, t_le) +df(f_be, t_be) + +main () +{ + t_be x; + x.s.h = 0x10000000U; + x.s.l = 0xe0000000U; + if (x.d == 0x10000000e0000000ULL + && f_be ((t_be) 0x100000000ULL, (t_be) 0x100000000ULL) != -1) + abort (); + if (x.d == 0xe000000010000000ULL + && f_le ((t_le) 0x100000000ULL, (t_le) 0x100000000ULL) != -1) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/960419-1.c b/gcc/testsuite/gcc.c-torture/execute/960419-1.c new file mode 100644 index 000000000000..68bd2b97dd12 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/960419-1.c @@ -0,0 +1,17 @@ +static int i; + +void +check(x) + int x; +{ + if (!x) + abort(); +} + +main() +{ + int *p = &i; + + check(p != (void *)0); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/960419-2.c b/gcc/testsuite/gcc.c-torture/execute/960419-2.c new file mode 100644 index 000000000000..c9526dcd779e --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/960419-2.c @@ -0,0 +1,13 @@ +#define SIZE 8 + +main() +{ + int a[SIZE] = {1}; + int i; + + for (i = 1; i < SIZE; i++) + if (a[i] != 0) + abort(); + + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/960512-1.c b/gcc/testsuite/gcc.c-torture/execute/960512-1.c new file mode 100644 index 000000000000..a7c1d5fb47c0 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/960512-1.c @@ -0,0 +1,19 @@ +__complex__ +double f () +{ + int a[40]; + __complex__ double c; + + a[9] = 0; + c = a[9]; + return c; +} + +main () +{ + __complex__ double c; + + if (c = f ()) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/960513-1.c b/gcc/testsuite/gcc.c-torture/execute/960513-1.c new file mode 100644 index 000000000000..acc263ca6c83 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/960513-1.c @@ -0,0 +1,25 @@ +long double +f (d, i) + long double d; + int i; +{ + long double e; + + d = -d; + e = d; + if (i == 1) + d *= 2; + d -= e * d; + d -= e * d; + d -= e * d; + d -= e * d; + d -= e * d; + return d; +} + +main () +{ + if (! (int) (f (2.0L, 1))) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/960521-1.c b/gcc/testsuite/gcc.c-torture/execute/960521-1.c new file mode 100644 index 000000000000..9fc5821495a3 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/960521-1.c @@ -0,0 +1,30 @@ +#include <stdlib.h> + +int *a, *b; +int n; + +#ifdef STACK_SIZE +#define BLOCK_SIZE (STACK_SIZE / (sizeof (*a) + sizeof (*b))) +#else +#define BLOCK_SIZE 32768 +#endif +foo () +{ + int i; + for (i = 0; i < n; i++) + a[i] = -1; + for (i = 0; i < BLOCK_SIZE - 1; i++) + b[i] = -1; +} + +main () +{ + n = BLOCK_SIZE; + a = malloc (n * sizeof(*a)); + b = malloc (n * sizeof(*b)); + *b++ = 0; + foo (); + if (b[-1]) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/960608-1.c b/gcc/testsuite/gcc.c-torture/execute/960608-1.c new file mode 100644 index 000000000000..1f47d02d9d58 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/960608-1.c @@ -0,0 +1,34 @@ +typedef struct +{ + unsigned char a : 2; + unsigned char b : 3; + unsigned char c : 1; + unsigned char d : 1; + unsigned char e : 1; +} a_struct; + +foo (flags) + a_struct *flags; +{ + return (flags->c != 0 + || flags->d != 1 + || flags->e != 1 + || flags->a != 2 + || flags->b != 3); +} + +main () +{ + a_struct flags; + + flags.c = 0; + flags.d = 1; + flags.e = 1; + flags.a = 2; + flags.b = 3; + + if (foo (&flags) != 0) + abort (); + else + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/960801-1.c b/gcc/testsuite/gcc.c-torture/execute/960801-1.c new file mode 100644 index 000000000000..1707269189a9 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/960801-1.c @@ -0,0 +1,32 @@ +unsigned +f () +{ + long long l2; + unsigned short us; + unsigned long long ul; + short s2; + + ul = us = l2 = s2 = -1; + return ul; +} + +unsigned long long +g () +{ + long long l2; + unsigned short us; + unsigned long long ul; + short s2; + + ul = us = l2 = s2 = -1; + return ul; +} + +main () +{ + if (f () != (unsigned short) -1) + abort (); + if (g () != (unsigned short) -1) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/960802-1.c b/gcc/testsuite/gcc.c-torture/execute/960802-1.c new file mode 100644 index 000000000000..f9ee75260be3 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/960802-1.c @@ -0,0 +1,36 @@ +long val = 0x5e000000; + +long +f1 (void) +{ + return 0x132; +} + +long +f2 (void) +{ + return 0x5e000000; +} + +void +f3 (long b) +{ + val = b; +} + +void +f4 () +{ + long v = f1 (); + long o = f2 (); + v = (v & 0x00ffffff) | (o & 0xff000000); + f3 (v); +} + +main () +{ + f4 (); + if (val != 0x5e000132) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/960830-1.c b/gcc/testsuite/gcc.c-torture/execute/960830-1.c new file mode 100644 index 000000000000..d87b39e2da36 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/960830-1.c @@ -0,0 +1,22 @@ +#ifdef __i386__ +f (rp) + unsigned int *rp; +{ + __asm__ ("mull %3" : "=a" (rp[0]), "=d" (rp[1]) : "%0" (7), "rm" (7)); +} + +main () +{ + unsigned int s[2]; + + f (s); + if (s[1] != 0 || s[0] != 49) + abort (); + exit (0); +} +#else +main () +{ + exit (0); +} +#endif diff --git a/gcc/testsuite/gcc.c-torture/execute/960909-1.c b/gcc/testsuite/gcc.c-torture/execute/960909-1.c new file mode 100644 index 000000000000..de1ed9339781 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/960909-1.c @@ -0,0 +1,29 @@ +int +ffs (x) + int x; +{ + int bit, mask; + + if (x == 0) + return 0; + + for (bit = 1, mask = 1; !(x & mask); bit++, mask <<= 1) + ; + + return bit; +} + +f (x) + int x; +{ + int y; + y = ffs (x) - 1; + if (y < 0) + abort (); +} + +main () +{ + f (1); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/961004-1.c b/gcc/testsuite/gcc.c-torture/execute/961004-1.c new file mode 100644 index 000000000000..7ebba2d7b1ee --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/961004-1.c @@ -0,0 +1,22 @@ +int k = 0; + +main() +{ + int i; + int j; + + for (i = 0; i < 2; i++) + { + if (k) + { + if (j != 2) + abort (); + } + else + { + j = 2; + k++; + } + } + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/961017-1.c b/gcc/testsuite/gcc.c-torture/execute/961017-1.c new file mode 100644 index 000000000000..88c9d9505a19 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/961017-1.c @@ -0,0 +1,8 @@ +main () +{ + unsigned char z = 0; + + do ; + while (--z > 0); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/961017-2.c b/gcc/testsuite/gcc.c-torture/execute/961017-2.c new file mode 100644 index 000000000000..768ddbc6e74b --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/961017-2.c @@ -0,0 +1,32 @@ +main () +{ + int i = 0; + + + if (sizeof (unsigned long int) == 4) + { + unsigned long int z = 0; + + do { + z -= 0x00004000; + i++; + if (i > 0x00040000) + abort (); + } while (z > 0); + exit (0); + } + else if (sizeof (unsigned int) == 4) + { + unsigned int z = 0; + + do { + z -= 0x00004000; + i++; + if (i > 0x00040000) + abort (); + } while (z > 0); + exit (0); + } + else + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/961026-1.c b/gcc/testsuite/gcc.c-torture/execute/961026-1.c new file mode 100644 index 000000000000..942a6eb131aa --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/961026-1.c @@ -0,0 +1,17 @@ +int +test (arg) + int arg; +{ + if (arg > 0 || arg == 0) + return 0; + return -1; +} + +main () +{ + if (test (0) != 0) + abort (); + if (test (-1) != -1) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/961112-1.c b/gcc/testsuite/gcc.c-torture/execute/961112-1.c new file mode 100644 index 000000000000..4b1c31222caf --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/961112-1.c @@ -0,0 +1,13 @@ +f (x) +{ + if (x != 0 || x == 0) + return 0; + return 1; +} + +main () +{ + if (f (3)) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/961122-1.c b/gcc/testsuite/gcc.c-torture/execute/961122-1.c new file mode 100644 index 000000000000..1f0a63463e15 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/961122-1.c @@ -0,0 +1,23 @@ +long long acc; + +addhi (short a) +{ + acc += (long long) a << 32; +} + +subhi (short a) +{ + acc -= (long long) a << 32; +} + +main () +{ + acc = 0xffff00000000ll; + addhi (1); + if (acc != 0x1000000000000ll) + abort (); + subhi (1); + if (acc != 0xffff00000000ll) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/961122-2.c b/gcc/testsuite/gcc.c-torture/execute/961122-2.c new file mode 100644 index 000000000000..81e404ec4f12 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/961122-2.c @@ -0,0 +1,12 @@ +int +f (int a) +{ + return ((a >= 0 && a <= 10) && ! (a >= 0)); +} + +main () +{ + if (f (0)) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/961125-1.c b/gcc/testsuite/gcc.c-torture/execute/961125-1.c new file mode 100644 index 000000000000..7fe3dd45422e --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/961125-1.c @@ -0,0 +1,33 @@ +static char * +begfield (int tab, char *ptr, char *lim, int sword, int schar) +{ + if (tab) + { + while (ptr < lim && sword--) + { + while (ptr < lim && *ptr != tab) + ++ptr; + if (ptr < lim) + ++ptr; + } + } + else + { + while (1) + ; + } + + if (ptr + schar <= lim) + ptr += schar; + + return ptr; +} + +main () +{ + char *s = ":ab"; + char *lim = s + 3; + if (begfield (':', s, lim, 1, 1) != s + 2) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/961206-1.c b/gcc/testsuite/gcc.c-torture/execute/961206-1.c new file mode 100644 index 000000000000..943ac66804d6 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/961206-1.c @@ -0,0 +1,52 @@ +int +sub1 (unsigned long long i) +{ + if (i < 0x80000000) + return 1; + else + return 0; +} + +int +sub2 (unsigned long long i) +{ + if (i <= 0x7FFFFFFF) + return 1; + else + return 0; +} + +int +sub3 (unsigned long long i) +{ + if (i >= 0x80000000) + return 0; + else + return 1; +} + +int +sub4 (unsigned long long i) +{ + if (i > 0x7FFFFFFF) + return 0; + else + return 1; +} + +main() +{ + if (sub1 (0x80000000ULL)) + abort (); + + if (sub2 (0x80000000ULL)) + abort (); + + if (sub3 (0x80000000ULL)) + abort (); + + if (sub4 (0x80000000ULL)) + abort (); + + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/961213-1.c b/gcc/testsuite/gcc.c-torture/execute/961213-1.c new file mode 100644 index 000000000000..12bb27f31459 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/961213-1.c @@ -0,0 +1,22 @@ +int +g (unsigned long long int *v, int n, unsigned int a[], int b) +{ + int cnt; + *v = 0; + for (cnt = 0; cnt < n; ++cnt) + *v = *v * b + a[cnt]; + return n; +} + +main () +{ + int res; + unsigned int ar[] = { 10, 11, 12, 13, 14 }; + unsigned long long int v; + + res = g (&v, sizeof(ar)/sizeof(ar[0]), ar, 16); + if (v != 0xabcdeUL) + abort (); + + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/961223-1.c b/gcc/testsuite/gcc.c-torture/execute/961223-1.c new file mode 100644 index 000000000000..9bc6cfa354da --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/961223-1.c @@ -0,0 +1,19 @@ +struct s { + double d; +}; + +inline struct s +sub (struct s s) +{ + s.d += 1.0; + return s; +} + +main () +{ + struct s t = { 2.0 }; + t = sub (t); + if (t.d != 3.0) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/970214-1.c b/gcc/testsuite/gcc.c-torture/execute/970214-1.c new file mode 100644 index 000000000000..4a06dfebc8df --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/970214-1.c @@ -0,0 +1,5 @@ +#define L 1 +main () +{ + exit (L'1' != L'1'); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/970214-2.c b/gcc/testsuite/gcc.c-torture/execute/970214-2.c new file mode 100644 index 000000000000..cb9007625dd2 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/970214-2.c @@ -0,0 +1,5 @@ +#define m(L) (L'1' + (L)) +main () +{ + exit (m (0) != L'1'); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/970217-1.c b/gcc/testsuite/gcc.c-torture/execute/970217-1.c new file mode 100644 index 000000000000..09e716a330bc --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/970217-1.c @@ -0,0 +1,10 @@ +sub (int i, int array[i++]) +{ + return i; +} + +main() +{ + int array[10]; + exit (sub (10, array) != 11); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/970312-1.c b/gcc/testsuite/gcc.c-torture/execute/970312-1.c new file mode 100644 index 000000000000..b303c4a8e601 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/970312-1.c @@ -0,0 +1,71 @@ +#include <stdio.h> + +__inline__ static int +dummy (x) +{ + int y; + y = (long) (x * 4711.3); + return y; +} + +int getval (void); + +int +f2 (double x) +{ + unsigned short s; + int a, b, c, d, e, f, g, h, i, j; + + a = getval (); + b = getval (); + c = getval (); + d = getval (); + e = getval (); + f = getval (); + g = getval (); + h = getval (); + i = getval (); + j = getval (); + + + s = x; + + return a + b + c + d + e + f + g + h + i + j + s; +} + +int x = 1; + +int +getval (void) +{ + return x++; +} + +void +f () +{ + int a, b, c, d, e, f, g, h, i, j, k; + + a = getval (); + b = getval (); + c = getval (); + d = getval (); + e = getval (); + f = getval (); + g = getval (); + h = getval (); + i = getval (); + j = getval (); + + k = f2 (17.0); + + printf ("%d\n", a + b + c + d + e + f + g + h + i + j + k); + if (a + b + c + d + e + f + g + h + i + j + k != 227) + abort (); +} + +main () +{ + f (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/Makefile.in b/gcc/testsuite/gcc.c-torture/execute/Makefile.in new file mode 100644 index 000000000000..e6209dbc6c2d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/Makefile.in @@ -0,0 +1,12 @@ +#### host, target, and site specific Makefile frags come in here. + +srcdir = . + +# Nothing to do... +all: + +clean: + -rm -f *.o *.diff *~ *.bad core *.x + +distclean: clean + -rm -f Makefile config.status diff --git a/gcc/testsuite/gcc.c-torture/execute/arith-1.c b/gcc/testsuite/gcc.c-torture/execute/arith-1.c new file mode 100644 index 000000000000..58df322e68ac --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/arith-1.c @@ -0,0 +1,15 @@ +unsigned +sat_add (unsigned i) +{ + unsigned ret = i + 1; + if (ret < i) + ret = i; + return ret; +} + +main () +{ + if (sat_add (~0U) != ~0U) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/arith-rand.c b/gcc/testsuite/gcc.c-torture/execute/arith-rand.c new file mode 100644 index 000000000000..4af146a1a56e --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/arith-rand.c @@ -0,0 +1,114 @@ +long +simple_rand () +{ + static unsigned long seed = 47114711; + unsigned long this = seed * 1103515245 + 12345; + seed = this; + return this >> 8; +} + +unsigned long int +random_bitstring () +{ + unsigned long int x; + int n_bits; + long ran; + int tot_bits = 0; + + x = 0; + for (;;) + { + ran = simple_rand (); + n_bits = (ran >> 1) % 16; + tot_bits += n_bits; + + if (n_bits == 0) + return x; + else + { + x <<= n_bits; + if (ran & 1) + x |= (1 << n_bits) - 1; + + if (tot_bits > 8 * sizeof (long) + 6) + return x; + } + } +} + +#define ABS(x) ((x) >= 0 ? (x) : -(x)) + +main () +{ + long int i; + + for (i = 0; i < 1000; i++) + { + unsigned long x, y; + x = random_bitstring (); + y = random_bitstring (); + + if (sizeof (int) == sizeof (long)) + goto save_time; + + { unsigned long xx = x, yy = y, r1, r2; + if (yy == 0) continue; + r1 = xx / yy; + r2 = xx % yy; + if (r2 >= yy || r1 * yy + r2 != xx) + abort (); + } + { signed long xx = x, yy = y, r1, r2; + if ((unsigned long) xx << 1 == 0 && yy == -1) + continue; + r1 = xx / yy; + r2 = xx % yy; + if (ABS (r2) >= (unsigned long) ABS (yy) || (signed long) (r1 * yy + r2) != xx) + abort (); + } + save_time: + { unsigned int xx = x, yy = y, r1, r2; + if (yy == 0) continue; + r1 = xx / yy; + r2 = xx % yy; + if (r2 >= yy || r1 * yy + r2 != xx) + abort (); + } + { signed int xx = x, yy = y, r1, r2; + if ((unsigned int) xx << 1 == 0 && yy == -1) + continue; + r1 = xx / yy; + r2 = xx % yy; + if (ABS (r2) >= (unsigned int) ABS (yy) || (signed int) (r1 * yy + r2) != xx) + abort (); + } + { unsigned short xx = x, yy = y, r1, r2; + if (yy == 0) continue; + r1 = xx / yy; + r2 = xx % yy; + if (r2 >= yy || r1 * yy + r2 != xx) + abort (); + } + { signed short xx = x, yy = y, r1, r2; + r1 = xx / yy; + r2 = xx % yy; + if (ABS (r2) >= (unsigned short) ABS (yy) || (signed short) (r1 * yy + r2) != xx) + abort (); + } + { unsigned char xx = x, yy = y, r1, r2; + if (yy == 0) continue; + r1 = xx / yy; + r2 = xx % yy; + if (r2 >= yy || r1 * yy + r2 != xx) + abort (); + } + { signed char xx = x, yy = y, r1, r2; + r1 = xx / yy; + r2 = xx % yy; + if (ABS (r2) >= (unsigned char) ABS (yy) || (signed char) (r1 * yy + r2) != xx) + abort (); + } + } + + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/bf-layout-1.c b/gcc/testsuite/gcc.c-torture/execute/bf-layout-1.c new file mode 100644 index 000000000000..a82429ba2088 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/bf-layout-1.c @@ -0,0 +1,9 @@ +struct { long f8:8; long f24:24; } a; +struct { long f32:32; } b; + +main () +{ + if (sizeof (a) != sizeof (b)) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/bf-pack-1.c b/gcc/testsuite/gcc.c-torture/execute/bf-pack-1.c new file mode 100644 index 000000000000..ca3b1db763b5 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/bf-pack-1.c @@ -0,0 +1,23 @@ +struct foo +{ + unsigned half:16; + unsigned long whole:32 __attribute__ ((packed)); +}; + +f (struct foo *q) +{ + if (q->half != 0x1234) + abort (); + if (q->whole != 0x56789abcL) + abort (); +} + +main () +{ + struct foo bar; + + bar.half = 0x1234; + bar.whole = 0x56789abcL; + f (&bar); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/bf-sign-1.c b/gcc/testsuite/gcc.c-torture/execute/bf-sign-1.c new file mode 100644 index 000000000000..3cc3eac15fdf --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/bf-sign-1.c @@ -0,0 +1,18 @@ +main () +{ + struct { + signed int s:3; + unsigned int u:3; + int i:3; + } x = {-1, -1, -1}; + + if (x.u != 7) + abort (); + if (x.s != - 1) + abort (); + + if (x.i != -1 && x.i != 7) + abort (); + + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/bf-sign-2.c b/gcc/testsuite/gcc.c-torture/execute/bf-sign-2.c new file mode 100644 index 000000000000..479082217eba --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/bf-sign-2.c @@ -0,0 +1,52 @@ +/* + This test checks promotion of bitfields. Bitfields should be promoted + very much like chars and shorts: + + Bitfields (signed or unsigned) should be promoted to signed int if their + value will fit in a signed int, otherwise to an unsigned int if their + value will fit in an unsigned int, otherwise we don't promote them (ANSI/ISO + does not specify the behavior of bitfields larger than an unsigned int). + + We test the behavior by subtracting two from the promoted value: this will + result in a negitive value for signed types, a positive value for unsigned + types. This test (of course) assumes that the compiler is correctly + implementing signed and unsigned arithmatic. + */ + +struct X { + unsigned int u3:3; + long int s31:31; + long int s32:32; + unsigned long int u31:31; + unsigned long int u32:32; + unsigned long long ull3 :3; + unsigned long long ull35:35; +}; + +struct X x; + +main () +{ + if ((x.u3 - 2) >= 0) /* promoted value should be signed */ + abort (); + + if ((x.s31 - 2) >= 0) /* promoted value should be signed */ + abort (); + + if ((x.s32 - 2) >= 0) /* promoted value should be signed */ + abort (); + + if ((x.u31 - 2) >= 0) /* promoted value should be signed */ + abort (); + + if ((x.u32 - 2) < 0) /* promoted value should be UNsigned */ + abort (); + + if ((x.ull3 - 2) >= 0) /* promoted value should be signed */ + abort (); + + if ((x.ull35 - 2) < 0) /* promoted value should be UNsigned */ + abort (); + + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/bf64-1.c b/gcc/testsuite/gcc.c-torture/execute/bf64-1.c new file mode 100644 index 000000000000..60028fb1aa85 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/bf64-1.c @@ -0,0 +1,40 @@ +struct tmp +{ + long long int pad : 12; + long long int field : 52; +}; + +struct tmp2 +{ + long long int field : 52; + long long int pad : 12; +}; + +struct tmp +sub (struct tmp tmp) +{ + tmp.field |= 0x0008765412345678LL; + return tmp; +} + +struct tmp2 +sub2 (struct tmp2 tmp2) +{ + tmp2.field |= 0x0008765412345678LL; + return tmp2; +} + +main() +{ + struct tmp tmp = {0x123, 0xFFF000FFF000FLL}; + struct tmp2 tmp2 = {0xFFF000FFF000FLL, 0x123}; + + tmp = sub (tmp); + tmp2 = sub2 (tmp2); + + if (tmp.pad != 0x123 || tmp.field != 0xFFFFFF541FFF567FLL) + abort (); + if (tmp2.pad != 0x123 || tmp2.field != 0xFFFFFF541FFF567FLL) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/cbrt.c b/gcc/testsuite/gcc.c-torture/execute/cbrt.c new file mode 100644 index 000000000000..8f1fe68df1de --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/cbrt.c @@ -0,0 +1,91 @@ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== +*/ + +#ifndef __vax__ +static const unsigned long + B1 = 715094163, /* B1 = (682-0.03306235651)*2**20 */ + B2 = 696219795; /* B2 = (664-0.03306235651)*2**20 */ + +static const double + C = 5.42857142857142815906e-01, /* 19/35 = 0x3FE15F15, 0xF15F15F1 */ + D = -7.05306122448979611050e-01, /* -864/1225 = 0xBFE691DE, 0x2532C834 */ + E = 1.41428571428571436819e+00, /* 99/70 = 0x3FF6A0EA, 0x0EA0EA0F */ + F = 1.60714285714285720630e+00, /* 45/28 = 0x3FF9B6DB, 0x6DB6DB6E */ + G = 3.57142857142857150787e-01; /* 5/14 = 0x3FD6DB6D, 0xB6DB6DB7 */ + +double +cbrtl (double x) +{ + long hx; + double r,s,w; + double lt; + unsigned sign; + union { + double t; + unsigned long pt[2]; + } ut, ux; + int n0; + + ut.t = 1.0; + n0 = (ut.pt[0] == 0); + + ut.t = 0.0; + ux.t = x; + + hx = ux.pt[n0]; /* high word of x */ + sign=hx&0x80000000; /* sign= sign(x) */ + hx ^=sign; + if(hx>=0x7ff00000) return(x+x); /* cbrt(NaN,INF) is itself */ + if((hx| ux.pt[1-n0])==0) + return(ux.t); /* cbrt(0) is itself */ + + ux.pt[n0] = hx; + /* rough cbrt to 5 bits */ + if(hx<0x00100000) /* subnormal number */ + {ut.pt[n0]=0x43500000; /* set t= 2**54 */ + ut.t*=x; ut.pt[n0]=ut.pt[n0]/3+B2; + } + else + ut.pt[n0]=hx/3+B1; + + /* new cbrt to 23 bits, may be implemented in single precision */ + r=ut.t*ut.t/ux.t; + s=C+r*ut.t; + ut.t*=G+F/(s+E+D/s); + + /* chopped to 20 bits and make it larger than cbrt(x) */ + ut.pt[1-n0]=0; ut.pt[n0]+=0x00000001; + + /* one step newton iteration to 53 bits with error less than 0.667 ulps */ + s=ut.t*ut.t; /* t*t is exact */ + r=ux.t/s; + w=ut.t+ut.t; + r=(r-ut.t)/(w+r); /* r-s is exact */ + ut.t=ut.t+ut.t*r; + + /* restore the sign bit */ + ut.pt[n0] |= sign; + + lt = ut.t; + lt -= (lt - (x/(lt*lt))) * 0.333333333333333333333; + return lt; +} + +main () +{ + if ((int) (cbrtl (27.0) + 0.5) != 3) + abort (); + + exit (0); +} +#else +main () { exit (0); } +#endif diff --git a/gcc/testsuite/gcc.c-torture/execute/cmpdi-1.c b/gcc/testsuite/gcc.c-torture/execute/cmpdi-1.c new file mode 100644 index 000000000000..e3e9c8606036 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/cmpdi-1.c @@ -0,0 +1,218 @@ +#define F 140 +#define T 13 + +feq (x, y) + long long int x; + long long int y; +{ + if (x == y) + return T; + else + return F; +} + +fne (x, y) + long long int x; + long long int y; +{ + if (x != y) + return T; + else + return F; +} + +flt (x, y) + long long int x; + long long int y; +{ + if (x < y) + return T; + else + return F; +} + +fge (x, y) + long long int x; + long long int y; +{ + if (x >= y) + return T; + else + return F; +} + +fgt (x, y) + long long int x; + long long int y; +{ + if (x > y) + return T; + else + return F; +} + +fle (x, y) + long long int x; + long long int y; +{ + if (x <= y) + return T; + else + return F; +} + +fltu (x, y) + unsigned long long int x; + unsigned long long int y; +{ + if (x < y) + return T; + else + return F; +} + +fgeu (x, y) + unsigned long long int x; + unsigned long long int y; +{ + if (x >= y) + return T; + else + return F; +} + +fgtu (x, y) + unsigned long long int x; + unsigned long long int y; +{ + if (x > y) + return T; + else + return F; +} + +fleu (x, y) + unsigned long long int x; + unsigned long long int y; +{ + if (x <= y) + return T; + else + return F; +} + +long long args[] = +{ + 0LL, + 1LL, + -1LL, + 0x7fffffffffffffffLL, + 0x8000000000000000LL, + 0x8000000000000001LL, + 0x1A3F237394D36C58LL, + 0x93850E92CAAC1B04LL +}; + +int correct_results[] = +{ + T, F, F, T, F, T, F, T, F, T, + F, T, T, F, F, T, T, F, F, T, + F, T, F, T, T, F, T, F, F, T, + F, T, T, F, F, T, T, F, F, T, + F, T, F, T, T, F, T, F, F, T, + F, T, F, T, T, F, T, F, F, T, + F, T, T, F, F, T, T, F, F, T, + F, T, F, T, T, F, T, F, F, T, + F, T, F, T, T, F, F, T, T, F, + T, F, F, T, F, T, F, T, F, T, + F, T, F, T, T, F, T, F, F, T, + F, T, T, F, F, T, T, F, F, T, + F, T, F, T, T, F, T, F, F, T, + F, T, F, T, T, F, T, F, F, T, + F, T, T, F, F, T, T, F, F, T, + F, T, F, T, T, F, T, F, F, T, + F, T, T, F, F, T, F, T, T, F, + F, T, T, F, F, T, F, T, T, F, + T, F, F, T, F, T, F, T, F, T, + F, T, T, F, F, T, F, T, T, F, + F, T, F, T, T, F, F, T, T, F, + F, T, F, T, T, F, F, T, T, F, + F, T, T, F, F, T, F, T, T, F, + F, T, F, T, T, F, F, T, T, F, + F, T, F, T, T, F, F, T, T, F, + F, T, F, T, T, F, F, T, T, F, + F, T, F, T, T, F, T, F, F, T, + T, F, F, T, F, T, F, T, F, T, + F, T, F, T, T, F, T, F, F, T, + F, T, F, T, T, F, T, F, F, T, + F, T, F, T, T, F, F, T, T, F, + F, T, F, T, T, F, T, F, F, T, + F, T, T, F, F, T, F, T, T, F, + F, T, T, F, F, T, F, T, T, F, + F, T, T, F, F, T, T, F, F, T, + F, T, T, F, F, T, F, T, T, F, + T, F, F, T, F, T, F, T, F, T, + F, T, T, F, F, T, T, F, F, T, + F, T, T, F, F, T, F, T, T, F, + F, T, T, F, F, T, T, F, F, T, + F, T, T, F, F, T, F, T, T, F, + F, T, T, F, F, T, F, T, T, F, + F, T, T, F, F, T, T, F, F, T, + F, T, T, F, F, T, F, T, T, F, + F, T, F, T, T, F, F, T, T, F, + T, F, F, T, F, T, F, T, F, T, + F, T, T, F, F, T, F, T, T, F, + F, T, T, F, F, T, T, F, F, T, + F, T, F, T, T, F, F, T, T, F, + F, T, F, T, T, F, F, T, T, F, + F, T, F, T, T, F, T, F, F, T, + F, T, T, F, F, T, T, F, F, T, + F, T, F, T, T, F, T, F, F, T, + F, T, F, T, T, F, T, F, F, T, + T, F, F, T, F, T, F, T, F, T, + F, T, F, T, T, F, T, F, F, T, + F, T, T, F, F, T, F, T, T, F, + F, T, T, F, F, T, F, T, T, F, + F, T, T, F, F, T, T, F, F, T, + F, T, T, F, F, T, F, T, T, F, + F, T, F, T, T, F, F, T, T, F, + F, T, F, T, T, F, F, T, T, F, + F, T, T, F, F, T, F, T, T, F, + T, F, F, T, F, T, F, T, F, T +}; + +main () +{ + int i, j, *res = correct_results; + + for (i = 0; i < 8; i++) + { + long long arg0 = args[i]; + for (j = 0; j < 8; j++) + { + long long arg1 = args[j]; + + if (feq (arg0, arg1) != *res++) + abort (); + if (fne (arg0, arg1) != *res++) + abort (); + if (flt (arg0, arg1) != *res++) + abort (); + if (fge (arg0, arg1) != *res++) + abort (); + if (fgt (arg0, arg1) != *res++) + abort (); + if (fle (arg0, arg1) != *res++) + abort (); + if (fltu (arg0, arg1) != *res++) + abort (); + if (fgeu (arg0, arg1) != *res++) + abort (); + if (fgtu (arg0, arg1) != *res++) + abort (); + if (fleu (arg0, arg1) != *res++) + abort (); + } + } + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/cmpsi-1.c b/gcc/testsuite/gcc.c-torture/execute/cmpsi-1.c new file mode 100644 index 000000000000..9fce104fefb1 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/cmpsi-1.c @@ -0,0 +1,32 @@ +f1 (unsigned int x, unsigned int y) +{ + if (x == 0) + dummy (); + x -= y; + /* 0xfffffff2 < 0x80000000? */ + if (x < ~(~(unsigned int) 0 >> 1)) + abort (); + return x; +} + +f2 (unsigned long int x, unsigned long int y) +{ + if (x == 0) + dummy (); + x -= y; + /* 0xfffffff2 < 0x80000000? */ + if (x < ~(~(unsigned long int) 0 >> 1)) + abort (); + return x; +} + + +dummy () {} + +main () +{ + /* 0x7ffffff3 0x80000001 */ + f1 ((~(unsigned int) 0 >> 1) - 12, ~(~(unsigned int) 0 >> 1) + 1); + f2 ((~(unsigned long int) 0 >> 1) - 12, ~(~(unsigned long int) 0 >> 1) + 1); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/comp-goto-1.c b/gcc/testsuite/gcc.c-torture/execute/comp-goto-1.c new file mode 100644 index 000000000000..04c7503115d5 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/comp-goto-1.c @@ -0,0 +1,164 @@ +#include <stdlib.h> + +#ifndef NO_LABEL_VALUES +typedef unsigned int uint32; +typedef signed int sint32; + +typedef uint32 reg_t; + +typedef unsigned long int host_addr_t; +typedef uint32 target_addr_t; +typedef sint32 target_saddr_t; + +typedef union +{ + struct + { + unsigned int offset:18; + unsigned int ignore:4; + unsigned int s1:8; + int :2; + signed int simm:14; + unsigned int s3:8; + unsigned int s2:8; + int pad2:2; + } f1; + long long ll; + double d; +} insn_t; + +typedef struct +{ + target_addr_t vaddr_tag; + unsigned long int rigged_paddr; +} tlb_entry_t; + +typedef struct +{ + insn_t *pc; + reg_t registers[256]; + insn_t *program; + tlb_entry_t tlb_tab[0x100]; +} environment_t; + +enum operations +{ + LOAD32_RR, + METAOP_DONE +}; + +host_addr_t +f () +{ + abort (); +} + +reg_t +simulator_kernel (int what, environment_t *env) +{ + register insn_t *pc = env->pc; + register reg_t *regs = env->registers; + register insn_t insn; + register int s1; + register reg_t r2; + register void *base_addr = &&sim_base_addr; + register tlb_entry_t *tlb = env->tlb_tab; + + if (what != 0) + { + int i; + static void *op_map[] = + { + &&L_LOAD32_RR, + &&L_METAOP_DONE, + }; + insn_t *program = env->program; + for (i = 0; i < what; i++) + program[i].f1.offset = op_map[program[i].f1.offset] - base_addr; + } + + sim_base_addr:; + + insn = *pc++; + r2 = (*(reg_t *) (((char *) regs) + (insn.f1.s2 << 2))); + s1 = (insn.f1.s1 << 2); + goto *(base_addr + insn.f1.offset); + + L_LOAD32_RR: + { + target_addr_t vaddr_page = r2 / 4096; + unsigned int x = vaddr_page % 0x100; + insn = *pc++; + + for (;;) + { + target_addr_t tag = tlb[x].vaddr_tag; + host_addr_t rigged_paddr = tlb[x].rigged_paddr; + + if (tag == vaddr_page) + { + *(reg_t *) (((char *) regs) + s1) = *(uint32 *) (rigged_paddr + r2); + r2 = *(reg_t *) (((char *) regs) + (insn.f1.s2 << 2)); + s1 = insn.f1.s1 << 2; + goto *(base_addr + insn.f1.offset); + } + + if (((target_saddr_t) tag < 0)) + { + *(reg_t *) (((char *) regs) + s1) = *(uint32 *) f (); + r2 = *(reg_t *) (((char *) regs) + (insn.f1.s2 << 2)); + s1 = insn.f1.s1 << 2; + goto *(base_addr + insn.f1.offset); + } + + x = (x - 1) % 0x100; + } + + L_METAOP_DONE: + return (*(reg_t *) (((char *) regs) + s1)); + } +} + +insn_t program[2 + 1]; + +void *malloc (); + +void +main () +{ + environment_t env; + insn_t insn; + int i, res; + host_addr_t a_page = (host_addr_t) malloc (2 * 4096); + target_addr_t a_vaddr = 0x123450; + target_addr_t vaddr_page = a_vaddr / 4096; + a_page = (a_page + 4096 - 1) & -4096; + + env.tlb_tab[((vaddr_page) % 0x100)].vaddr_tag = vaddr_page; + env.tlb_tab[((vaddr_page) % 0x100)].rigged_paddr = a_page - vaddr_page * 4096; + insn.f1.offset = LOAD32_RR; + env.registers[0] = 0; + env.registers[2] = a_vaddr; + *(int *) (a_page + a_vaddr % 4096) = 88; + insn.f1.s1 = 0; + insn.f1.s2 = 2; + + for (i = 0; i < 2; i++) + program[i] = insn; + + insn.f1.offset = METAOP_DONE; + insn.f1.s1 = 0; + program[2] = insn; + + env.pc = program; + env.program = program; + + res = simulator_kernel (2 + 1, &env); + + if (res != 88) + abort (); + exit (0); +} +#else +main(){ exit (0); } +#endif diff --git a/gcc/testsuite/gcc.c-torture/execute/complex-1.c b/gcc/testsuite/gcc.c-torture/execute/complex-1.c new file mode 100644 index 000000000000..424fa65b1502 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/complex-1.c @@ -0,0 +1,40 @@ +double +g0 (double x) +{ + return 1.0; +} + +double +g1 (double x) +{ + return -1.0; +} + +double +g2 (double x) +{ + return 0.0; +} + +__complex__ double +cexp (__complex__ double x) +{ + double r; + + r = g0 (__real__ x); + __real__ x = r * g1 (__imag__ x); + __imag__ x = r * g2 (__imag__ x); + return x; +} + +main () +{ + __complex__ double x; + + x = cexp (1.0i); + if (__real__ x != -1.0) + abort (); + if (__imag__ x != 0.0) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/complex-2.c b/gcc/testsuite/gcc.c-torture/execute/complex-2.c new file mode 100644 index 000000000000..9634c7943f32 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/complex-2.c @@ -0,0 +1,27 @@ +__complex__ double +f (__complex__ double x, __complex__ double y) +{ + x += y; + return x; +} + +__complex__ double ag = 1.0 + 1.0i; +__complex__ double bg = -2.0 + 2.0i; + +main () +{ + __complex__ double a, b, c; + + a = ag; + b = -2.0 + 2.0i; + c = f (a, b); + + if (a != 1.0 + 1.0i) + abort (); + if (b != -2.0 + 2.0i) + abort (); + if (c != -1.0 + 3.0i) + abort (); + + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/complex-3.c b/gcc/testsuite/gcc.c-torture/execute/complex-3.c new file mode 100644 index 000000000000..4297cf11ebdd --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/complex-3.c @@ -0,0 +1,25 @@ +struct complex +{ + float r; + float i; +}; + +struct complex cmplx (float, float); + +struct complex +f (float a, float b) +{ + struct complex c; + c.r = a; + c.i = b; + return c; +} + +main () +{ + struct complex z = f (1.0, 0.0); + + if (z.r != 1.0 || z.i != 0.0) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/complex-4.c b/gcc/testsuite/gcc.c-torture/execute/complex-4.c new file mode 100644 index 000000000000..1c458d21fba9 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/complex-4.c @@ -0,0 +1,9 @@ +main () +{ + if ((__complex__ double) 0.0 != (__complex__ double) (-0.0)) + abort (); + + if (0.0 != -0.0) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/complex-5.c b/gcc/testsuite/gcc.c-torture/execute/complex-5.c new file mode 100644 index 000000000000..a3338082c46f --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/complex-5.c @@ -0,0 +1,20 @@ +float __complex__ +p (float __complex__ a, float __complex__ b) +{ + return a + b; +} + +float __complex__ x = 1.0 + 14.0 * (1.0fi); +float __complex__ y = 7.0 + 5.0 * (1.0fi); +float __complex__ w = 8.0 + 19.0 * (1.0fi); +float __complex__ z; + +main () +{ + + z = p (x,y); + y = p (x, 1.0f / z); + if (z != w) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/compndlit-1.c b/gcc/testsuite/gcc.c-torture/execute/compndlit-1.c new file mode 100644 index 000000000000..4a8488d0ab46 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/compndlit-1.c @@ -0,0 +1,15 @@ +struct S +{ + int a:3; + unsigned b:1, c:28; +}; + +struct S x = {1, 1, 1}; + +main () +{ + x = (struct S) {b:0, a:0, c:({ struct S o = x; o.a == 1 ? 10 : 20;})}; + if (x.c != 10) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/configure.in b/gcc/testsuite/gcc.c-torture/execute/configure.in new file mode 100644 index 000000000000..7d7078dbfd26 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/configure.in @@ -0,0 +1,15 @@ +# This file is a shell script fragment that supplies the information +# necessary to tailor a template configure script into the configure +# script appropriate for this directory. For more information, check +# any existing configure script. + +srctrigger=execute.exp +srcname="DejaGnu" + +# per-host: + +# per-target: + +target_makefile_frag=../config/mt-${target_alias} + +# post-target: diff --git a/gcc/testsuite/gcc.c-torture/execute/conversion.c b/gcc/testsuite/gcc.c-torture/execute/conversion.c new file mode 100644 index 000000000000..5f358727d8fe --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/conversion.c @@ -0,0 +1,364 @@ +/* Test front-end conversions, optimizer conversions, and run-time + conversions between different arithmetic types. + + Constants are specified in a non-obvious way to make them work for + any word size. Their value on a 32-bit machine is indicated in the + comments. + + Note that this code is NOT intended for testing of accuracy of fp + conversions. */ + +float +u2f(u) + unsigned int u; +{ + return u; +} + +double +u2d(u) + unsigned int u; +{ + return u; +} + +float +s2f(s) + int s; +{ + return s; +} + +double +s2d(s) + int s; +{ + return s; +} + +int +fnear (float x, float y) +{ + float t = x - y; + return t == 0 || x / t > 1000000.0; +} + +int +dnear (double x, double y) +{ + double t = x - y; + return t == 0 || x / t > 100000000000000.0; +} + +test_integer_to_float() +{ + if (u2f(0U) != (float) 0U) /* 0 */ + abort(); + if (!fnear (u2f(~0U), (float) ~0U)) /* 0xffffffff */ + abort(); + if (!fnear (u2f((~0U) >> 1), (float) ((~0U) >> 1))) /* 0x7fffffff */ + abort(); + if (u2f(~((~0U) >> 1)) != (float) ~((~0U) >> 1)) /* 0x80000000 */ + abort(); + + if (u2d(0U) != (double) 0U) /* 0 */ + abort(); + if (!dnear (u2d(~0U), (double) ~0U)) /* 0xffffffff */ + abort(); + if (!dnear (u2d((~0U) >> 1),(double) ((~0U) >> 1))) /* 0x7fffffff */ + abort(); + if (u2d(~((~0U) >> 1)) != (double) ~((~0U) >> 1)) /* 0x80000000 */ + abort(); + + if (s2f(0) != (float) 0) /* 0 */ + abort(); + if (!fnear (s2f(~0), (float) ~0)) /* 0xffffffff */ + abort(); + if (!fnear (s2f((int)((~0U) >> 1)), (float)(int)((~0U) >> 1))) /* 0x7fffffff */ + abort(); + if (s2f((int)(~((~0U) >> 1))) != (float)(int)~((~0U) >> 1)) /* 0x80000000 */ + abort(); + + if (s2d(0) != (double) 0) /* 0 */ + abort(); + if (!dnear (s2d(~0), (double) ~0)) /* 0xffffffff */ + abort(); + if (!dnear (s2d((int)((~0U) >> 1)), (double)(int)((~0U) >> 1))) /* 0x7fffffff */ + abort(); + if (s2d((int)~((~0U) >> 1)) != (double)(int)~((~0U) >> 1)) /* 0x80000000 */ + abort(); +} + +#if __GNUC__ +float +ull2f(u) + unsigned long long int u; +{ + return u; +} + +double +ull2d(u) + unsigned long long int u; +{ + return u; +} + +float +sll2f(s) + long long int s; +{ + return s; +} + +double +sll2d(s) + long long int s; +{ + return s; +} + +test_longlong_integer_to_float() +{ + if (ull2f(0ULL) != (float) 0ULL) /* 0 */ + abort(); + if (ull2f(~0ULL) != (float) ~0ULL) /* 0xffffffff */ + abort(); + if (ull2f((~0ULL) >> 1) != (float) ((~0ULL) >> 1)) /* 0x7fffffff */ + abort(); + if (ull2f(~((~0ULL) >> 1)) != (float) ~((~0ULL) >> 1)) /* 0x80000000 */ + abort(); + + if (ull2d(0ULL) != (double) 0ULL) /* 0 */ + abort(); +#if __HAVE_68881__ + /* Some 68881 targets return values in fp0, with excess precision. + But the compile-time conversion to double works correctly. */ + if (! dnear (ull2d(~0ULL), (double) ~0ULL)) /* 0xffffffff */ + abort(); + if (! dnear (ull2d((~0ULL) >> 1), (double) ((~0ULL) >> 1))) /* 0x7fffffff */ + abort(); +#else + if (ull2d(~0ULL) != (double) ~0ULL) /* 0xffffffff */ + abort(); + if (ull2d((~0ULL) >> 1) != (double) ((~0ULL) >> 1)) /* 0x7fffffff */ + abort(); +#endif + if (ull2d(~((~0ULL) >> 1)) != (double) ~((~0ULL) >> 1)) /* 0x80000000 */ + abort(); + + if (sll2f(0LL) != (float) 0LL) /* 0 */ + abort(); + if (sll2f(~0LL) != (float) ~0LL) /* 0xffffffff */ + abort(); + if (! fnear (sll2f((long long int)((~0ULL) >> 1)), (float)(long long int)((~0ULL) >> 1))) /* 0x7fffffff */ + abort(); + if (sll2f((long long int)(~((~0ULL) >> 1))) != (float)(long long int)~((~0ULL) >> 1)) /* 0x80000000 */ + abort(); + + if (sll2d(0LL) != (double) 0LL) /* 0 */ + abort(); + if (sll2d(~0LL) != (double) ~0LL) /* 0xffffffff */ + abort(); + if (!dnear (sll2d((long long int)((~0ULL) >> 1)), (double)(long long int)((~0ULL) >> 1))) /* 0x7fffffff */ + abort(); + if (! dnear (sll2d((long long int)~((~0ULL) >> 1)), (double)(long long int)~((~0ULL) >> 1))) /* 0x80000000 */ + abort(); +} +#endif + +unsigned int +f2u(float f) +{ + return (unsigned) f; +} + +unsigned int +d2u(double d) +{ + return (unsigned) d; +} + +int +f2s(float f) +{ + return (int) f; +} + +int +d2s(double d) +{ + return (int) d; +} + +test_float_to_integer() +{ + if (f2u(0.0) != 0) + abort(); + if (f2u(0.999) != 0) + abort(); + if (f2u(1.0) != 1) + abort(); + if (f2u(1.99) != 1) + abort(); + if (f2u((float) ((~0U) >> 1)) != (~0U) >> 1 && /* 0x7fffffff */ + f2u((float) ((~0U) >> 1)) != ((~0U) >> 1) + 1) + abort(); + if (f2u((float) ~((~0U) >> 1)) != ~((~0U) >> 1)) /* 0x80000000 */ + abort(); + + if (d2u(0.0) != 0) + abort(); + if (d2u(0.999) != 0) + abort(); + if (d2u(1.0) != 1) + abort(); + if (d2u(1.99) != 1) + abort(); + if (d2u((double) (~0U)) != ~0U) /* 0xffffffff */ + abort(); + if (d2u((double) ((~0U) >> 1)) != (~0U) >> 1) /* 0x7fffffff */ + abort(); + if (d2u((double) ~((~0U) >> 1)) != ~((~0U) >> 1)) /* 0x80000000 */ + abort(); + + + if (f2s(0.0) != 0) + abort(); + if (f2s(0.999) != 0) + abort(); + if (f2s(1.0) != 1) + abort(); + if (f2s(1.99) != 1) + abort(); + if (f2s(-0.999) != 0) + abort(); + if (f2s(-1.0) != -1) + abort(); + if (f2s(-1.99) != -1) + abort(); + if (f2s((float)(int)~((~0U) >> 1)) != (int)~((~0U) >> 1)) /* 0x80000000 */ + abort(); + + if (d2s(0.0) != 0) + abort(); + if (d2s(0.999) != 0) + abort(); + if (d2s(1.0) != 1) + abort(); + if (d2s(1.99) != 1) + abort(); + if (d2s(-0.999) != 0) + abort(); + if (d2s(-1.0) != -1) + abort(); + if (d2s(-1.99) != -1) + abort(); + if (d2s((double) ((~0U) >> 1)) != (~0U) >> 1) /* 0x7fffffff */ + abort(); + if (d2s((double)(int)~((~0U) >> 1)) != (int)~((~0U) >> 1)) /* 0x80000000 */ + abort(); +} + +#if __GNUC__ +unsigned long long int +f2ull(float f) +{ + return (unsigned long long int) f; +} + +unsigned long long int +d2ull(double d) +{ + return (unsigned long long int) d; +} + +long long int +f2sll(float f) +{ + return (long long int) f; +} + +long long int +d2sll(double d) +{ + return (long long int) d; +} + +test_float_to_longlong_integer() +{ + if (f2ull(0.0) != 0LL) + abort(); + if (f2ull(0.999) != 0LL) + abort(); + if (f2ull(1.0) != 1LL) + abort(); + if (f2ull(1.99) != 1LL) + abort(); + if (f2ull((float) ((~0ULL) >> 1)) != (~0ULL) >> 1 && /* 0x7fffffff */ + f2ull((float) ((~0ULL) >> 1)) != ((~0ULL) >> 1) + 1) + abort(); + if (f2ull((float) ~((~0ULL) >> 1)) != ~((~0ULL) >> 1)) /* 0x80000000 */ + abort(); + + if (d2ull(0.0) != 0LL) + abort(); + if (d2ull(0.999) != 0LL) + abort(); + if (d2ull(1.0) != 1LL) + abort(); + if (d2ull(1.99) != 1LL) + abort(); + if (d2ull((double) ((~0ULL) >> 1)) != (~0ULL) >> 1 && /* 0x7fffffff */ + d2ull((double) ((~0ULL) >> 1)) != ((~0ULL) >> 1) + 1) + abort(); + if (d2ull((double) ~((~0ULL) >> 1)) != ~((~0ULL) >> 1)) /* 0x80000000 */ + abort(); + + + if (f2sll(0.0) != 0LL) + abort(); + if (f2sll(0.999) != 0LL) + abort(); + if (f2sll(1.0) != 1LL) + abort(); + if (f2sll(1.99) != 1LL) + abort(); + if (f2sll(-0.999) != 0LL) + abort(); + if (f2sll(-1.0) != -1LL) + abort(); + if (f2sll(-1.99) != -1LL) + abort(); + if (f2sll((float)(long long int)~((~0ULL) >> 1)) != (long long int)~((~0ULL) >> 1)) /* 0x80000000 */ + abort(); + + if (d2sll(0.0) != 0LL) + abort(); + if (d2sll(0.999) != 0LL) + abort(); + if (d2sll(1.0) != 1LL) + abort(); + if (d2sll(1.99) != 1LL) + abort(); + if (d2sll(-0.999) != 0LL) + abort(); + if (d2sll(-1.0) != -1LL) + abort(); + if (d2sll(-1.99) != -1LL) + abort(); + if (d2sll((double)(long long int)~((~0ULL) >> 1)) != (long long int)~((~0ULL) >> 1)) /* 0x80000000 */ + abort(); +} +#endif + +main() +{ + test_integer_to_float(); + test_float_to_integer(); +#if __GNUC__ + test_longlong_integer_to_float(); + test_float_to_longlong_integer(); +#endif + exit(0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/cvt-1.c b/gcc/testsuite/gcc.c-torture/execute/cvt-1.c new file mode 100644 index 000000000000..d7c2b33fde10 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/cvt-1.c @@ -0,0 +1,30 @@ +/* CYGNUS LOCAL -- meissner/16 bit ints */ +static inline long +g1 (double x) +{ + return (double) (long) x; +} + +long +g2 (double f) +{ + return f; +} + +double +f (long i) +{ + if (g1 (i) != g2 (i)) + abort (); + return g2 (i); +} + +main () +{ + if (f (123456789L) != 123456789L) + abort (); + if (f (123456789L) != g2 (123456789L)) + abort (); + exit (0); +} +/* END CYGNUS LOCAL -- meissner/16 bit ints */ diff --git a/gcc/testsuite/gcc.c-torture/execute/cvt-1.cexp b/gcc/testsuite/gcc.c-torture/execute/cvt-1.cexp new file mode 100644 index 000000000000..997c8650c002 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/cvt-1.cexp @@ -0,0 +1,7 @@ +# This doesn't work on d10v if ints are not 32 bits + +if { [istarget "d10v-*-*"] && ! [string-match "*-mint32*" $CFLAGS] } { + set torture_execute_xfail "d10v-*-*" +} + +return 0 diff --git a/gcc/testsuite/gcc.c-torture/execute/dbra-1.c b/gcc/testsuite/gcc.c-torture/execute/dbra-1.c new file mode 100644 index 000000000000..20ae8988ec89 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/dbra-1.c @@ -0,0 +1,95 @@ +f1 (a) + long a; +{ + int i; + for (i = 0; i < 10; i++) + { + if (--a == -1) + return i; + } + return -1; +} + +f2 (a) + long a; +{ + int i; + for (i = 0; i < 10; i++) + { + if (--a != -1) + return i; + } + return -1; +} + +f3 (a) + long a; +{ + int i; + for (i = 0; i < 10; i++) + { + if (--a == 0) + return i; + } + return -1; +} + +f4 (a) + long a; +{ + int i; + for (i = 0; i < 10; i++) + { + if (--a != 0) + return i; + } + return -1; +} + +f5 (a) + long a; +{ + int i; + for (i = 0; i < 10; i++) + { + if (++a == 0) + return i; + } + return -1; +} + +f6 (a) + long a; +{ + int i; + for (i = 0; i < 10; i++) + { + if (++a != 0) + return i; + } + return -1; +} + + +main() +{ + if (f1 (5L) != 5) + abort (); + if (f2 (1L) != 0) + abort (); + if (f2 (0L) != 1) + abort (); + if (f3 (5L) != 4) + abort (); + if (f4 (1L) != 1) + abort (); + if (f4 (0L) != 0) + abort (); + if (f5 (-5L) != 4) + abort (); + if (f6 (-1L) != 1) + abort (); + if (f6 (0L) != 0) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/divconst-1.c b/gcc/testsuite/gcc.c-torture/execute/divconst-1.c new file mode 100644 index 000000000000..ce9dd60a8e8c --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/divconst-1.c @@ -0,0 +1,21 @@ +typedef struct +{ + unsigned a, b, c, d; +} t1; + +f (t1 *ps) +{ + ps->a = 10000; + ps->b = ps->a / 3; + ps->c = 10000; + ps->d = ps->c / 3; +} + +main () +{ + t1 s; + f (&s); + if (s.a != 10000 || s.b != 3333 || s.c != 10000 || s.d != 3333) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/divconst-2.c b/gcc/testsuite/gcc.c-torture/execute/divconst-2.c new file mode 100644 index 000000000000..d3adaf3a0af4 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/divconst-2.c @@ -0,0 +1,12 @@ +long +f (long x) +{ + return x / (-0x7fffffffL - 1L); +} + +main () +{ + if (f (-1L) != 0L || f (0x7fffffffL) != 0L || f (-0x7fffffffL - 1L) != 1l) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/divconst-3.c b/gcc/testsuite/gcc.c-torture/execute/divconst-3.c new file mode 100644 index 000000000000..ddd687cbcfde --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/divconst-3.c @@ -0,0 +1,12 @@ +long long +f (long long x) +{ + return x / 10000000000LL; +} + +main () +{ + if (f (10000000000LL) != 1 || f (100000000000LL) != 10) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/divmod-1.c b/gcc/testsuite/gcc.c-torture/execute/divmod-1.c new file mode 100644 index 000000000000..ade019c884ed --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/divmod-1.c @@ -0,0 +1,72 @@ +div1 (x) + signed char x; +{ + return x / -1; +} + +div2 (x) + signed short x; +{ + return x / -1; +} + +div3 (x, y) + signed char x; + signed char y; +{ + return x / y; +} + +div4 (x, y) + signed short x; + signed short y; +{ + return x / y; +} + +mod1 (x) + signed char x; +{ + return x % -1; +} + +mod2 (x) + signed short x; +{ + return x % -1; +} + +mod3 (x, y) + signed char x; + signed char y; +{ + return x % y; +} + +mod4 (x, y) + signed short x; + signed short y; +{ + return x % y; +} + +main () +{ + if (div1 (-(1 << 7)) != 1 << 7) + abort (); + if (div2 (-(1 << 15)) != 1 << 15) + abort (); + if (div3 (-(1 << 7), -1) != 1 << 7) + abort (); + if (div4 (-(1 << 15), -1) != 1 << 15) + abort (); + if (mod1 (-(1 << 7)) != 0) + abort (); + if (mod2 (-(1 << 15)) != 0) + abort (); + if (mod3 (-(1 << 7), -1) != 0) + abort (); + if (mod4 (-(1 << 15), -1) != 0) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/enum-1.c b/gcc/testsuite/gcc.c-torture/execute/enum-1.c new file mode 100644 index 000000000000..381e354918c4 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/enum-1.c @@ -0,0 +1,43 @@ +typedef enum +{ + END = -1, + EMPTY = (1 << 8 ) , + BACKREF, + BEGLINE, + ENDLINE, + BEGWORD, + ENDWORD, + LIMWORD, + NOTLIMWORD, + QMARK, + STAR, + PLUS, + REPMN, + CAT, + OR, + ORTOP, + LPAREN, + RPAREN, + CSET +} token; + +static token tok; + +static int +atom () +{ + if ((tok >= 0 && tok < (1 << 8 ) ) || tok >= CSET || tok == BACKREF + || tok == BEGLINE || tok == ENDLINE || tok == BEGWORD + || tok == ENDWORD || tok == LIMWORD || tok == NOTLIMWORD) + return 1; + else + return 0; +} + +main () +{ + tok = 0; + if (atom () != 1) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/execute.exp b/gcc/testsuite/gcc.c-torture/execute/execute.exp new file mode 100644 index 000000000000..8c896cb3e151 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/execute.exp @@ -0,0 +1,46 @@ +# Copyright (C) 1991, 1992, 1993, 1995, 1997 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +# Please email any bugs, comments, and/or additions to this file to: +# bug-gcc@prep.ai.mit.edu + +# This file was written by Rob Savoye. (rob@cygnus.com) +# Modified and maintained by Jeffrey Wheat (cassidy@cygnus.com) + +# +# These tests come from Torbjorn Granlund (tege@cygnus.com) +# C torture test suite. +# + +if $tracelevel then { + strace $tracelevel +} + +# load support procs +load_lib c-torture.exp + +# +# main test loop +# + +foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.c]] { + # If we're only testing specific files and this isn't one of them, skip it. + if ![runtest_file_p $runtests $src] then { + continue + } + + c-torture-execute $src +} diff --git a/gcc/testsuite/gcc.c-torture/execute/func-ptr-1.c b/gcc/testsuite/gcc.c-torture/execute/func-ptr-1.c new file mode 100644 index 000000000000..55f0e10660fc --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/func-ptr-1.c @@ -0,0 +1,16 @@ +static double f (float a); +static double (*fp) (float a); + +main () +{ + fp = f; + if (fp ((float) 1) != 1.0) + abort (); + exit (0); +} + +static double +f (float a) +{ + return a; +} diff --git a/gcc/testsuite/gcc.c-torture/execute/gofast.c b/gcc/testsuite/gcc.c-torture/execute/gofast.c new file mode 100644 index 000000000000..f55ced22073b --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/gofast.c @@ -0,0 +1,99 @@ +/* Program to test gcc's usage of the gofast library. */ + +/* The main guiding themes are to make it trivial to add test cases over time + and to make it easy for a program to parse the output to see if the right + libcalls are being made. */ + +#include <stdio.h> + +float fp_add (float a, float b) { return a + b; } +float fp_sub (float a, float b) { return a - b; } +float fp_mul (float a, float b) { return a * b; } +float fp_div (float a, float b) { return a / b; } +float fp_neg (float a) { return -a; } + +double dp_add (double a, double b) { return a + b; } +double dp_sub (double a, double b) { return a - b; } +double dp_mul (double a, double b) { return a * b; } +double dp_div (double a, double b) { return a / b; } +double dp_neg (double a) { return -a; } + +double fp_to_dp (float f) { return f; } +float dp_to_fp (double d) { return d; } + +int eqsf2 (float a, float b) { return a == b; } +int nesf2 (float a, float b) { return a != b; } +int gtsf2 (float a, float b) { return a > b; } +int gesf2 (float a, float b) { return a >= b; } +int ltsf2 (float a, float b) { return a < b; } +int lesf2 (float a, float b) { return a <= b; } + +int eqdf2 (double a, double b) { return a == b; } +int nedf2 (double a, double b) { return a != b; } +int gtdf2 (double a, double b) { return a > b; } +int gedf2 (double a, double b) { return a >= b; } +int ltdf2 (double a, double b) { return a < b; } +int ledf2 (double a, double b) { return a <= b; } + +float floatsisf (int i) { return i; } +double floatsidf (int i) { return i; } +int fixsfsi (float f) { return f; } +int fixdfsi (double d) { return d; } +unsigned int fixunssfsi (float f) { return f; } +unsigned int fixunsdfsi (double d) { return d; } + +int fail_count = 0; + +int +fail (char *msg) +{ + fail_count++; + fprintf (stderr, "Test failed: %s\n", msg); +} + +int +main() +{ + if (fp_add (1, 1) != 2) fail ("fp_add 1+1"); + if (fp_sub (3, 2) != 1) fail ("fp_sub 3-2"); + if (fp_mul (2, 3) != 6) fail ("fp_mul 2*3"); + if (fp_div (3, 2) != 1.5) fail ("fp_div 3/2"); + if (fp_neg (1) != -1) fail ("fp_neg 1"); + + if (dp_add (1, 1) != 2) fail ("dp_add 1+1"); + if (dp_sub (3, 2) != 1) fail ("dp_sub 3-2"); + if (dp_mul (2, 3) != 6) fail ("dp_mul 2*3"); + if (dp_div (3, 2) != 1.5) fail ("dp_div 3/2"); + if (dp_neg (1) != -1) fail ("dp_neg 1"); + + if (fp_to_dp (1.5) != 1.5) fail ("fp_to_dp 1.5"); + if (dp_to_fp (1.5) != 1.5) fail ("dp_to_fp 1.5"); + + if (floatsisf (1) != 1) fail ("floatsisf 1"); + if (floatsidf (1) != 1) fail ("floatsidf 1"); + if (fixsfsi (1.42) != 1) fail ("fixsfsi 1.42"); + if (fixunssfsi (1.42) != 1) fail ("fixunssfsi 1.42"); + if (fixdfsi (1.42) != 1) fail ("fixdfsi 1.42"); + if (fixunsdfsi (1.42) != 1) fail ("fixunsdfsi 1.42"); + + if (eqsf2 (1, 1) == 0) fail ("eqsf2 1==1"); + if (eqsf2 (1, 2) != 0) fail ("eqsf2 1==2"); + if (nesf2 (1, 2) == 0) fail ("nesf2 1!=1"); + if (nesf2 (1, 1) != 0) fail ("nesf2 1!=1"); + if (gtsf2 (2, 1) == 0) fail ("gtsf2 2>1"); + if (gtsf2 (1, 1) != 0) fail ("gtsf2 1>1"); + if (gtsf2 (0, 1) != 0) fail ("gtsf2 0>1"); + if (gesf2 (2, 1) == 0) fail ("gesf2 2>=1"); + if (gesf2 (1, 1) == 0) fail ("gesf2 1>=1"); + if (gesf2 (0, 1) != 0) fail ("gesf2 0>=1"); + if (ltsf2 (1, 2) == 0) fail ("ltsf2 1<2"); + if (ltsf2 (1, 1) != 0) fail ("ltsf2 1<1"); + if (ltsf2 (1, 0) != 0) fail ("ltsf2 1<0"); + if (lesf2 (1, 2) == 0) fail ("lesf2 1<=2"); + if (lesf2 (1, 1) == 0) fail ("lesf2 1<=1"); + if (lesf2 (1, 0) != 0) fail ("lesf2 1<=0"); + + if (fail_count != 0) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/ieee/920518-1.c b/gcc/testsuite/gcc.c-torture/execute/ieee/920518-1.c new file mode 100644 index 000000000000..7f072b2981a0 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/ieee/920518-1.c @@ -0,0 +1,8 @@ +unsigned u=2147483839;float f0=2147483648e0,f1=2147483904e0; +main() +{ + float f=u; + if(f==f0) + abort(); + exit(0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/ieee/920810-1.c b/gcc/testsuite/gcc.c-torture/execute/ieee/920810-1.c new file mode 100644 index 000000000000..62d22940adc5 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/ieee/920810-1.c @@ -0,0 +1,3 @@ +#include <stdio.h> +double normalize(x)double x;{if(x==0)x=0;return x;} +main(){char b[9];sprintf(b,"%g",normalize(-0.0));if(strcmp(b,"0"))abort();exit(0);} diff --git a/gcc/testsuite/gcc.c-torture/execute/ieee/930529-1.c b/gcc/testsuite/gcc.c-torture/execute/ieee/930529-1.c new file mode 100644 index 000000000000..0b5eda4ac9a6 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/ieee/930529-1.c @@ -0,0 +1,27 @@ +main () +{ + union { + double d; + unsigned char c[8]; + } d; + + d.d = 1.0/7.0; + + if (sizeof (char) * 8 == sizeof (double)) + { + if (d.c[0] == 0x92 && d.c[1] == 0x24 && d.c[2] == 0x49 && d.c[3] == 0x92 + && d.c[4] == 0x24 && d.c[5] == 0x49 && d.c[6] == 0xc2 && d.c[7] == 0x3f) + exit (0); + if (d.c[7] == 0x92 && d.c[6] == 0x24 && d.c[5] == 0x49 && d.c[4] == 0x92 + && d.c[3] == 0x24 && d.c[2] == 0x49 && d.c[1] == 0xc2 && d.c[0] == 0x3f) + exit (0); +#ifdef __arm__ + if (d.c[4] == 0x92 && d.c[5] == 0x24 && d.c[6] == 0x49 && d.c[7] == 0x92 + && d.c[0] == 0x24 && d.c[1] == 0x49 && d.c[2] == 0xc2 && d.c[3] == 0x3f) + exit (0); +#endif + abort (); + } + + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/ieee/Makefile.in b/gcc/testsuite/gcc.c-torture/execute/ieee/Makefile.in new file mode 100644 index 000000000000..e6209dbc6c2d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/ieee/Makefile.in @@ -0,0 +1,12 @@ +#### host, target, and site specific Makefile frags come in here. + +srcdir = . + +# Nothing to do... +all: + +clean: + -rm -f *.o *.diff *~ *.bad core *.x + +distclean: clean + -rm -f Makefile config.status diff --git a/gcc/testsuite/gcc.c-torture/execute/ieee/configure.in b/gcc/testsuite/gcc.c-torture/execute/ieee/configure.in new file mode 100644 index 000000000000..7d7078dbfd26 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/ieee/configure.in @@ -0,0 +1,15 @@ +# This file is a shell script fragment that supplies the information +# necessary to tailor a template configure script into the configure +# script appropriate for this directory. For more information, check +# any existing configure script. + +srctrigger=execute.exp +srcname="DejaGnu" + +# per-host: + +# per-target: + +target_makefile_frag=../config/mt-${target_alias} + +# post-target: diff --git a/gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-1.c b/gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-1.c new file mode 100644 index 000000000000..3c3ccb65c09a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/ieee/fp-cmp-1.c @@ -0,0 +1,40 @@ +#include <signal.h> + +double nan = 1.0/0.0 - 1.0/0.0; +double x = 1.0; + +void leave () +{ + exit (0); +} + +main () +{ +#if ! defined (__vax__) && ! defined (_CRAY) + /* NaN is an IEEE unordered operand. All these test should be false. */ + if (nan == nan) + abort (); + if (nan != x) + x = 1.0; + else + abort (); + +#ifndef SIGNAL_SUPPRESS + /* Some machines catches a SIGFPE when a NaN is compared. + Let this test succeed o such machines. */ + signal (SIGFPE, leave); +#endif + + if (nan < x) + abort (); + if (nan > x) + abort (); + if (nan <= x) + abort (); + if (nan >= x) + abort (); + if (nan == x) + abort (); +#endif + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/ieee/ieee.exp b/gcc/testsuite/gcc.c-torture/execute/ieee/ieee.exp new file mode 100644 index 000000000000..795dbf167c93 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/ieee/ieee.exp @@ -0,0 +1,51 @@ +# +# Expect driver script for GCC Regression Tests +# Copyright (C) 1993, 1996 Free Software Foundation +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# Written by Jeffrey Wheat (cassidy@cygnus.com) +# + +# +# These tests come from Torbjorn Granlund's (tege@cygnus.com) +# C torture test suite, and other contributors. +# + +if $tracelevel then { + strace $tracelevel +} + +# load support procs +load_lib c-torture.exp + +# initialize harness +gcc_init + +# +# main test loop +# + +foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.c]] { + # If we're only testing specific files and this isn't one of them, skip it. + if ![runtest_file_p $runtests $src] then { + continue + } + + c-torture-execute $src +} + +# All done. +gcc_finish diff --git a/gcc/testsuite/gcc.c-torture/execute/ieee/minuszero.c b/gcc/testsuite/gcc.c-torture/execute/ieee/minuszero.c new file mode 100644 index 000000000000..85715261d619 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/ieee/minuszero.c @@ -0,0 +1,22 @@ +main () +{ + union + { + double d; + unsigned short i[sizeof (double) / sizeof (short)]; + } u; + int a = 0; + int b = -5; + int j; + + u.d = (double) a / b; + + /* Look for the right pattern, but be sloppy since + we don't know the byte order. */ + for (j = 0; j < sizeof (double) / sizeof (short); j++) + { + if (u.i[j] == 0x8000) + exit (0); + } + abort (); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/ieee/rbug.c b/gcc/testsuite/gcc.c-torture/execute/ieee/rbug.c new file mode 100644 index 000000000000..a91a99e92e21 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/ieee/rbug.c @@ -0,0 +1,41 @@ +double d (unsigned long long k) +{ + double x; + + x = (double) k; + return x; +} + +float s (unsigned long long k) +{ + float x; + + x = (float) k; + return x; +} + +main () +{ + unsigned long long int k; + double x; + + /* CYGNUS LOCAL -- meissner/32bit doubles */ + if (sizeof (double) >= 8) + { + k = 0x8693ba6d7d220401ULL; + x = d (k); + k = (unsigned long long) x; + if (k != 0x8693ba6d7d220800ULL) + abort (); + } + /* END CYGNUS LOCAL -- meissner/32bit doubles */ + + k = 0x8234508000000001ULL; + x = s (k); + k = (unsigned long long) x; + if (k != 0x8234510000000000ULL) + abort (); + + exit (0); +} + diff --git a/gcc/testsuite/gcc.c-torture/execute/ieee/rbug.cexp b/gcc/testsuite/gcc.c-torture/execute/ieee/rbug.cexp new file mode 100644 index 000000000000..0ae0a35d315e --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/ieee/rbug.cexp @@ -0,0 +1,7 @@ +# This doesn't work on d10v if doubles are not 64 bits + +if { [istarget "d10v-*-*"] && ! [string-match "*-mdouble64*" $CFLAGS] } { + set torture_execute_xfail "d10v-*-*" +} + +return 0 diff --git a/gcc/testsuite/gcc.c-torture/execute/index-1.c b/gcc/testsuite/gcc.c-torture/execute/index-1.c new file mode 100644 index 000000000000..b00090d834a1 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/index-1.c @@ -0,0 +1,20 @@ +int a[] = +{ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39 +}; + +int +f (long n) +{ + return a[n - 100000]; +} + +main () +{ + if (f (100030L) != 30) + abort(); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/inst-check.c b/gcc/testsuite/gcc.c-torture/execute/inst-check.c new file mode 100644 index 000000000000..ff4b00d78680 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/inst-check.c @@ -0,0 +1,14 @@ +#include <stdarg.h> + +f(m) +{ + int i,s=0; + for(i=0;i<m;i++) + s+=i; + return s; +} + +main() +{ + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/int-compare.c b/gcc/testsuite/gcc.c-torture/execute/int-compare.c new file mode 100644 index 000000000000..017a8cc3f15b --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/int-compare.c @@ -0,0 +1,108 @@ +#include <limits.h> + +gt (a, b) +{ + return a > b; +} + +ge (a, b) +{ + return a >= b; +} + +lt (a, b) +{ + return a < b; +} + +le (a, b) +{ + return a <= b; +} + +void +true (c) +{ + if (!c) + abort(); +} + +void +false (c) +{ + if (c) + abort(); +} + +f () +{ + true (gt (2, 1)); + false (gt (1, 2)); + + true (gt (INT_MAX, 0)); + false (gt (0, INT_MAX)); + true (gt (INT_MAX, 1)); + false (gt (1, INT_MAX)); + + false (gt (INT_MIN, 0)); + true (gt (0, INT_MIN)); + false (gt (INT_MIN, 1)); + true (gt (1, INT_MIN)); + + true (gt (INT_MAX, INT_MIN)); + false (gt (INT_MIN, INT_MAX)); + + true (ge (2, 1)); + false (ge (1, 2)); + + true (ge (INT_MAX, 0)); + false (ge (0, INT_MAX)); + true (ge (INT_MAX, 1)); + false (ge (1, INT_MAX)); + + false (ge (INT_MIN, 0)); + true (ge (0, INT_MIN)); + false (ge (INT_MIN, 1)); + true (ge (1, INT_MIN)); + + true (ge (INT_MAX, INT_MIN)); + false (ge (INT_MIN, INT_MAX)); + + false (lt (2, 1)); + true (lt (1, 2)); + + false (lt (INT_MAX, 0)); + true (lt (0, INT_MAX)); + false (lt (INT_MAX, 1)); + true (lt (1, INT_MAX)); + + true (lt (INT_MIN, 0)); + false (lt (0, INT_MIN)); + true (lt (INT_MIN, 1)); + false (lt (1, INT_MIN)); + + false (lt (INT_MAX, INT_MIN)); + true (lt (INT_MIN, INT_MAX)); + + false (le (2, 1)); + true (le (1, 2)); + + false (le (INT_MAX, 0)); + true (le (0, INT_MAX)); + false (le (INT_MAX, 1)); + true (le (1, INT_MAX)); + + true (le (INT_MIN, 0)); + false (le (0, INT_MIN)); + true (le (INT_MIN, 1)); + false (le (1, INT_MIN)); + + false (le (INT_MAX, INT_MIN)); + true (le (INT_MIN, INT_MAX)); +} + +main () +{ + f (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/loop-1.c b/gcc/testsuite/gcc.c-torture/execute/loop-1.c new file mode 100644 index 000000000000..81aeeb6b392c --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/loop-1.c @@ -0,0 +1,18 @@ +main () +{ + int i, j, k[3]; + + j = 0; + for (i=0; i < 3; i++) + { + k[i] = j++; + } + + for (i=2; i >= 0; i--) + { + if (k[i] != i) + abort (); + } + + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/loop-2.c b/gcc/testsuite/gcc.c-torture/execute/loop-2.c new file mode 100644 index 000000000000..3227734fbf8b --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/loop-2.c @@ -0,0 +1,17 @@ +int a[2]; + +f (b) +{ + unsigned int i; + for (i = 0; i < b; i++) + a[i] = i - 2; +} + +main () +{ + a[0] = a[1] = 0; + f (2); + if (a[0] != -2 || a[1] != -1) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/loop-2b.c b/gcc/testsuite/gcc.c-torture/execute/loop-2b.c new file mode 100644 index 000000000000..7f67bcd639db --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/loop-2b.c @@ -0,0 +1,22 @@ +#include <limits.h> + +int a[2]; + +f (int i) +{ + for (; i < INT_MAX; i++) + { + a[i] = -2; + if (&a[i] == &a[1]) + break; + } +} + +main () +{ + a[0] = a[1] = 0; + f (0); + if (a[0] != -2 || a[1] != -2) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/loop-2c.c b/gcc/testsuite/gcc.c-torture/execute/loop-2c.c new file mode 100644 index 000000000000..9facf3bfd92a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/loop-2c.c @@ -0,0 +1,23 @@ +int a[2]; + +__inline__ f (b, o) +{ + unsigned int i; + int *p; + for (p = &a[b], i = b; --i < ~0; ) + *--p = i * 3 + o; +} + +g(int b) +{ + f (b, (int)a); +} + +main () +{ + a[0] = a[1] = 0; + g (2); + if (a[0] != (int)a || a[1] != (int)a + 3) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/loop-2d.c b/gcc/testsuite/gcc.c-torture/execute/loop-2d.c new file mode 100644 index 000000000000..19272bf01837 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/loop-2d.c @@ -0,0 +1,18 @@ +int a[2]; + +f (b) +{ + unsigned int i; + int *p; + for (p = &a[b], i = b; --i < ~0; ) + *--p = i * 3 + (int)a; +} + +main () +{ + a[0] = a[1] = 0; + f (2); + if (a[0] != (int)a || a[1] != (int)a + 3) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/loop-2e.c b/gcc/testsuite/gcc.c-torture/execute/loop-2e.c new file mode 100644 index 000000000000..b6ee6501501e --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/loop-2e.c @@ -0,0 +1,60 @@ +#include <limits.h> + +#ifdef __unix__ /* ??? Is that good enough? */ +#include <sys/types.h> +#include <sys/mman.h> +#include <sys/stat.h> +#include <fcntl.h> +#ifndef MAP_ANON +#ifdef MAP_ANONYMOUS +#define MAP_ANON MAP_ANONYMOUS +#else +#define MAP_ANON MAP_FILE +#endif +#endif +#ifndef MAP_FILE +#define MAP_FILE 0 +#endif +#ifndef MAP_FIXED +#define MAP_FIXED 0 +#endif +#endif + +#define MAP_START (void *)0x7fff8000 +#define MAP_LEN 0x10000 + +#define OFFSET (MAP_LEN/2 - 2 * sizeof (int)); + +f (int *p, int **q) +{ + int i; + for (i = 0; i < 40; i++) + { + *q++ = &p[i]; + } +} + +main () +{ +#ifdef MAP_ANON + void *p; + int *q[40]; + int dev_zero; + + dev_zero = open ("/dev/zero", O_RDONLY); + /* -1 is OK when we have MAP_ANON; else mmap will flag an error. */ + if (INT_MAX != 0x7fffffffL || sizeof (char *) != sizeof (int)) + exit (0); + p = mmap (MAP_START, MAP_LEN, PROT_READ|PROT_WRITE, + MAP_ANON|MAP_FIXED|MAP_PRIVATE, dev_zero, 0); + if (p != (void *)-1) + { + p = (char *)p + OFFSET; + q[39] = 0; + f (p, q); + if (q[39] != (int *)p + 39) + abort (); + } +#endif + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/loop-2f.c b/gcc/testsuite/gcc.c-torture/execute/loop-2f.c new file mode 100644 index 000000000000..9f544b9fcbde --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/loop-2f.c @@ -0,0 +1,63 @@ +#include <limits.h> + +#ifdef __unix__ /* ??? Is that good enough? */ +#include <sys/types.h> +#include <sys/mman.h> +#include <sys/stat.h> +#include <fcntl.h> +#ifndef MAP_ANON +#ifdef MAP_ANONYMOUS +#define MAP_ANON MAP_ANONYMOUS +#else +#define MAP_ANON MAP_FILE +#endif +#endif +#ifndef MAP_FILE +#define MAP_FILE 0 +#endif +#ifndef MAP_FIXED +#define MAP_FIXED 0 +#endif +#endif + +#define MAP_START (void *)0x7fff8000 +#define MAP_LEN 0x10000 + +#define OFFSET (MAP_LEN/2 - 2 * sizeof (char)); + +f (int s, char *p) +{ + int i; + for (i = s; i >= 0 && &p[i] < &p[40]; i++) + { + p[i] = -2; + } +} + +main () +{ +#ifdef MAP_ANON + char *p; + int dev_zero; + + dev_zero = open ("/dev/zero", O_RDONLY); + /* -1 is OK when we have MAP_ANON; else mmap will flag an error. */ + if (INT_MAX != 0x7fffffffL || sizeof (char *) != sizeof (int)) + exit (0); + p = mmap (MAP_START, MAP_LEN, PROT_READ|PROT_WRITE, + MAP_ANON|MAP_FIXED|MAP_PRIVATE, dev_zero, 0); + if (p != (char *)-1) + { + p += OFFSET; + p[39] = 0; + f (0, p); + if (p[39] != (char)-2) + abort (); + p[39] = 0; + f (-1, p); + if (p[39] != 0) + abort (); + } +#endif + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/loop-3.c b/gcc/testsuite/gcc.c-torture/execute/loop-3.c new file mode 100644 index 000000000000..e314a01b1f18 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/loop-3.c @@ -0,0 +1,27 @@ +#include <limits.h> + +int n = 0; + +g (i) +{ + n++; +} + +f (m) +{ + int i; + i = m; + do + { + g (i * INT_MAX / 2); + } + while (--i > 0); +} + +main () +{ + f (4); + if (n != 4) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/loop-3b.c b/gcc/testsuite/gcc.c-torture/execute/loop-3b.c new file mode 100644 index 000000000000..3de322cf1467 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/loop-3b.c @@ -0,0 +1,28 @@ +#include <limits.h> + +int n = 0; + +g (i) +{ + n++; +} + +f (m) +{ + int i; + i = m; + do + { + g (i * 4); + i -= INT_MAX / 8; + } + while (i > 0); +} + +main () +{ + f (INT_MAX/8*4); + if (n != 4) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/loop-3c.c b/gcc/testsuite/gcc.c-torture/execute/loop-3c.c new file mode 100644 index 000000000000..bc74c2e6d9b2 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/loop-3c.c @@ -0,0 +1,31 @@ +#include <limits.h> + +void * a[255]; + +f (m) +{ + int i; + int sh = 0x100; + i = m; + do + { + a[sh >>= 1] = ((unsigned)i << 3) + (char*)a; + i += 4; + } + while (i < INT_MAX/2 + 1 + 4 * 4); +} + +main () +{ + a[0x10] = 0; + a[0x08] = 0; + f (INT_MAX/2 + INT_MAX/4 + 2); + if (a[0x10] || a[0x08]) + abort (); + a[0x10] = 0; + a[0x08] = 0; + f (INT_MAX/2 + 1); + if (! a[0x10] || a[0x08]) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/memcpy-1.c b/gcc/testsuite/gcc.c-torture/execute/memcpy-1.c new file mode 100644 index 000000000000..684854b66dc0 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/memcpy-1.c @@ -0,0 +1,63 @@ +#include <string.h> + +#if defined (STACK_SIZE) +#define MEMCPY_SIZE (STACK_SIZE / 3) +#else +#define MEMCPY_SIZE (1 << 17) +#endif + + +void *copy (void *o, const void *i, unsigned l) +{ + return memcpy (o, i, l); +} + +main () +{ + unsigned i; + unsigned char src[MEMCPY_SIZE]; + unsigned char dst[MEMCPY_SIZE]; + + for (i = 0; i < MEMCPY_SIZE; i++) + src[i] = (unsigned char) i, dst[i] = 0; + + (void) memcpy (dst, src, MEMCPY_SIZE / 128); + + for (i = 0; i < MEMCPY_SIZE / 128; i++) + if (dst[i] != (unsigned char) i) + abort (); + + (void) memset (dst, 1, MEMCPY_SIZE / 128); + + for (i = 0; i < MEMCPY_SIZE / 128; i++) + if (dst[i] != 1) + abort (); + + (void) memcpy (dst, src, MEMCPY_SIZE); + + for (i = 0; i < MEMCPY_SIZE; i++) + if (dst[i] != (unsigned char) i) + abort (); + + (void) memset (dst, 0, MEMCPY_SIZE); + + for (i = 0; i < MEMCPY_SIZE; i++) + if (dst[i] != 0) + abort (); + + (void) copy (dst, src, MEMCPY_SIZE / 128); + + for (i = 0; i < MEMCPY_SIZE / 128; i++) + if (dst[i] != (unsigned char) i) + abort (); + + (void) memset (dst, 0, MEMCPY_SIZE); + + (void) copy (dst, src, MEMCPY_SIZE); + + for (i = 0; i < MEMCPY_SIZE; i++) + if (dst[i] != (unsigned char) i) + abort (); + + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/mod-1.c b/gcc/testsuite/gcc.c-torture/execute/mod-1.c new file mode 100644 index 000000000000..b460df5cdb12 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/mod-1.c @@ -0,0 +1,11 @@ +f (x, y) +{ + if (x % y != 0) + abort (); +} + +main () +{ + f (-5, 5); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/nest-stdar-1.c b/gcc/testsuite/gcc.c-torture/execute/nest-stdar-1.c new file mode 100644 index 000000000000..2c6108b52e60 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/nest-stdar-1.c @@ -0,0 +1,19 @@ +#include <stdarg.h> + +main () +{ + static double f (int x, ...) + { + va_list args; + double a; + + va_start (args, x); + a = va_arg (args, double); + va_end (args); + return a; + } + + if (f (1, (double)1) != 1.0) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/nestfunc-1.c b/gcc/testsuite/gcc.c-torture/execute/nestfunc-1.c new file mode 100644 index 000000000000..e34a56b3f578 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/nestfunc-1.c @@ -0,0 +1,28 @@ +int +g (int a, int b, int (*gi) (int, int)) +{ + if ((*gi) (a, b)) + return a; + else + return b; +} + +f () +{ +#ifndef NO_TRAMPOLINES + int i, j; + int f2 (int a, int b) + { + return a > b; + } + + if (g (1, 2, f2) != 2) + abort (); +#endif +} + +main () +{ + f (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/packed-1.c b/gcc/testsuite/gcc.c-torture/execute/packed-1.c new file mode 100644 index 000000000000..9b226aeab9b4 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/packed-1.c @@ -0,0 +1,19 @@ +short x1 = 17; + +struct +{ + short i __attribute__ ((packed)); +} t; + +f () +{ + t.i = x1; + if (t.i != 17) + abort (); +} + +main () +{ + f (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/pending-4.c b/gcc/testsuite/gcc.c-torture/execute/pending-4.c new file mode 100644 index 000000000000..8000621e6b6d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/pending-4.c @@ -0,0 +1,33 @@ + +void dummy (x, y) + int *x; + int y; +{} + +int +main (argc, argv) + int argc; + char **argv; +{ + int number_columns=9; + int cnt0 = 0; + int cnt1 = 0; + int i,A1; + + for (i = number_columns-1; i != 0; i--) + { + if (i == 1) + { + dummy(&A1, i); + cnt0++; + } + else + { + dummy(&A1, i-1); + cnt1++; + } + } + if (cnt0 != 1 || cnt1 != 7) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/ptr-arith-1.c b/gcc/testsuite/gcc.c-torture/execute/ptr-arith-1.c new file mode 100644 index 000000000000..46162b8964d8 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/ptr-arith-1.c @@ -0,0 +1,14 @@ +char * +f (char *s, unsigned int i) +{ + return &s[i + 3 - 1]; +} + +main () +{ + char *str = "abcdefghijkl"; + char *x2 = f (str, 12); + if (str + 14 != x2) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/regstack-1.c b/gcc/testsuite/gcc.c-torture/execute/regstack-1.c new file mode 100644 index 000000000000..51fb858cf928 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/regstack-1.c @@ -0,0 +1,26 @@ +long double C = 5; +long double U = 1; +long double Y2 = 11; +long double Y1 = 17; +long double X, Y, Z, T, R, S; +main () +{ + X = (C + U) * Y2; + Y = C - U - U; + Z = C + U + U; + T = (C - U) * Y1; + X = X - (Z + U); + R = Y * Y1; + S = Z * Y2; + T = T - Y; + Y = (U - Y) + R; + Z = S - (Z + U + U); + R = (Y2 + U) * Y1; + Y1 = Y2 * Y1; + R = R - Y2; + Y1 = Y1 - 0.5L; + if (Z != 68. || Y != 49. || X != 58. || Y1 != 186.5 || R != 193. || S != 77. + || T != 65. || Y2 != 11.) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/scope-1.c b/gcc/testsuite/gcc.c-torture/execute/scope-1.c new file mode 100644 index 000000000000..cedd0b48ccb2 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/scope-1.c @@ -0,0 +1,17 @@ +int v = 3; + +f () +{ + int v = 4; + { + extern int v; + if (v != 3) + abort (); + } +} + +main () +{ + f (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/scope-2.c b/gcc/testsuite/gcc.c-torture/execute/scope-2.c new file mode 100644 index 000000000000..c9a4775f6f56 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/scope-2.c @@ -0,0 +1,17 @@ +static int v = 3; + +f () +{ + int v = 4; + { + extern int v; + if (v != 3) + abort (); + } +} + +main () +{ + f (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/strct-pack-1.c b/gcc/testsuite/gcc.c-torture/execute/strct-pack-1.c new file mode 100644 index 000000000000..7b702f2cd682 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/strct-pack-1.c @@ -0,0 +1,25 @@ +typedef struct +{ + short s __attribute__ ((aligned(2), packed)); + double d __attribute__ ((aligned(2), packed)); +} TRIAL; + +int +check (TRIAL *t) +{ + if (t->s != 1 || t->d != 16.0) + return 1; + return 0; +} + +main () +{ + TRIAL trial; + + trial.s = 1; + trial.d = 16.0; + + if (check (&trial) != 0) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/strct-pack-2.c b/gcc/testsuite/gcc.c-torture/execute/strct-pack-2.c new file mode 100644 index 000000000000..be76c764521b --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/strct-pack-2.c @@ -0,0 +1,13 @@ +typedef struct +{ + short a __attribute__ ((aligned (2),packed)); + short *ap[2] __attribute__ ((aligned (2),packed)); +} A; + +main () +{ + short i, j = 1; + A a, *ap = &a; + ap->ap[j] = &i; + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/strct-pack-3.c b/gcc/testsuite/gcc.c-torture/execute/strct-pack-3.c new file mode 100644 index 000000000000..8f91b040ca8c --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/strct-pack-3.c @@ -0,0 +1,28 @@ +typedef struct +{ + short i __attribute__ ((aligned (2),packed)); + int f[2] __attribute__ ((aligned (2),packed)); +} A; + +f (ap) + A *ap; +{ + short i, j = 1; + + i = ap->f[1]; + i += ap->f[j]; + for (j = 0; j < 2; j++) + i += ap->f[j]; + + return i; +} + +main () +{ + A a; + a.f[0] = 100; + a.f[1] = 13; + if (f (&a) != 139) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/strct-pack-4.c b/gcc/testsuite/gcc.c-torture/execute/strct-pack-4.c new file mode 100644 index 000000000000..56d315f47ff0 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/strct-pack-4.c @@ -0,0 +1,29 @@ +typedef struct +{ + unsigned char a __attribute__((packed)); + unsigned short b __attribute__((packed)); +} three_char_t; + +unsigned char +my_set_a (void) +{ + return 0xab; +} + +unsigned short +my_set_b (void) +{ + return 0x1234; +} + +main () +{ + three_char_t three_char; + + three_char.a = my_set_a (); + three_char.b = my_set_b (); + if (three_char.a != 0xab || three_char.b != 0x1234) + abort (); + exit (0); +} + diff --git a/gcc/testsuite/gcc.c-torture/execute/strct-varg-1.c b/gcc/testsuite/gcc.c-torture/execute/strct-varg-1.c new file mode 100644 index 000000000000..f76bb368409a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/strct-varg-1.c @@ -0,0 +1,56 @@ +#ifdef NO_VARARGS +#include <stdarg.h> +#define va_alist int x_attr, ... +#define va_dcl +#else +#include <varargs.h> +#endif + +struct s { int x, y; }; + +f (va_alist) + va_dcl +{ + struct s va_values; + va_list va; + int attr; + int i; + +#ifdef NO_VARARGS + va_start (va, x_attr); + attr = x_attr; +#else + va_start (va); + attr = va_arg (va, int); +#endif + + if (attr != 2) + abort (); + + va_values = va_arg (va, struct s); + if (va_values.x != 0xaaaa || va_values.y != 0x5555) + abort (); + + attr = va_arg (va, int); + if (attr != 3) + abort (); + + va_values = va_arg (va, struct s); + if (va_values.x != 0xffff || va_values.y != 0x1111) + abort (); + + va_end (va); +} + +main () +{ + struct s a, b; + + a.x = 0xaaaa; + a.y = 0x5555; + b.x = 0xffff; + b.y = 0x1111; + + f (2, a, 3, b); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/struct-ini-1.c b/gcc/testsuite/gcc.c-torture/execute/struct-ini-1.c new file mode 100644 index 000000000000..ab2d178a7515 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/struct-ini-1.c @@ -0,0 +1,15 @@ +struct S +{ + char f1; + int f2[2]; +}; + +struct S object = {'X', 8, 9}; + +main () +{ + if (object.f1 != 'X' || object.f2[0] != 8 || object.f2[1] != 9) + abort (); + exit (0); +} + diff --git a/gcc/testsuite/gcc.c-torture/execute/struct-ini-2.c b/gcc/testsuite/gcc.c-torture/execute/struct-ini-2.c new file mode 100644 index 000000000000..c785257ccbaa --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/struct-ini-2.c @@ -0,0 +1,17 @@ +struct { + int a:4; + int :4; + int b:4; + int c:4; +} x = { 2,3,4 }; + +main () +{ + if (x.a != 2) + abort (); + if (x.b != 3) + abort (); + if (x.c != 4) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/struct-ini-3.c b/gcc/testsuite/gcc.c-torture/execute/struct-ini-3.c new file mode 100644 index 000000000000..7d282ecb8afa --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/struct-ini-3.c @@ -0,0 +1,11 @@ +struct +{ + unsigned int f1:1, f2:1, f3:3, f4:3, f5:2, f6:1, f7:1; +} result = {1, 1, 7, 7, 3, 1, 1}; + +main () +{ + if ((result.f3 & ~7) != 0 || (result.f4 & ~7) != 0) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/struct-ini-4.c b/gcc/testsuite/gcc.c-torture/execute/struct-ini-4.c new file mode 100644 index 000000000000..3342439e54d2 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/struct-ini-4.c @@ -0,0 +1,15 @@ +struct s { + int a[3]; + int c[3]; +}; + +struct s s = { + c: {1, 2, 3} +}; + +main() +{ + if (s.c[0] != 1) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/struct-ret-1.c b/gcc/testsuite/gcc.c-torture/execute/struct-ret-1.c new file mode 100644 index 000000000000..e5274ec4c15f --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/struct-ret-1.c @@ -0,0 +1,57 @@ +#include <stdio.h> +#include <string.h> + +char out[100]; + +typedef struct { double d; int i[3]; } B; +typedef struct { char c[33],c1; } X; + +char c1 = 'a'; +char c2 = 127; +char c3 = (char)128; +char c4 = (char)255; +char c5 = -1; + +double d1 = 0.1; +double d2 = 0.2; +double d3 = 0.3; +double d4 = 0.4; +double d5 = 0.5; +double d6 = 0.6; +double d7 = 0.7; +double d8 = 0.8; +double d9 = 0.9; + +B B1 = {0.1,{1,2,3}}; +B B2 = {0.2,{5,4,3}}; +X X1 = {"abcdefghijklmnopqrstuvwxyzABCDEF", 'G'}; +X X2 = {"123",'9'}; +X X3 = {"return-return-return",'R'}; + +X f (B a, char b, double c, B d) +{ + static X xr = {"return val", 'R'}; + X r; + r = xr; + r.c1 = b; + sprintf (out, "X f(B,char,double,B):({%g,{%d,%d,%d}},'%c',%g,{%g,{%d,%d,%d}})", + a.d, a.i[0], a.i[1], a.i[2], b, c, d.d, d.i[0], d.i[1], d.i[2]); + return r; +} + +X (*fp) (B, char, double, B) = &f; + +main () +{ + X Xr; + char tmp[100]; + + Xr = f (B1, c2, d3, B2); + strcpy (tmp, out); + Xr.c[0] = Xr.c1 = '\0'; + Xr = (*fp) (B1, c2, d3, B2); + if (strcmp (tmp, out)) + abort (); + + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/struct-ret-2.c b/gcc/testsuite/gcc.c-torture/execute/struct-ret-2.c new file mode 100644 index 000000000000..06a40a720999 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/struct-ret-2.c @@ -0,0 +1,29 @@ +typedef struct +{ + unsigned char a __attribute__ ((packed)); + unsigned short b __attribute__ ((packed)); +} three_byte_t; + +unsigned char +f (void) +{ + return 0xab; +} + +unsigned short +g (void) +{ + return 0x1234; +} + +main () +{ + three_byte_t three_byte; + + three_byte.a = f (); + three_byte.b = g (); + if (three_byte.a != 0xab || three_byte.b != 0x1234) + abort (); + exit (0); +} + diff --git a/gcc/testsuite/gcc.c-torture/execute/tstdi-1.c b/gcc/testsuite/gcc.c-torture/execute/tstdi-1.c new file mode 100644 index 000000000000..3e31fdf59343 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/tstdi-1.c @@ -0,0 +1,139 @@ +#define FALSE 140 +#define TRUE 13 + +feq (x) + long long int x; +{ + if (x == 0) + return TRUE; + else + return FALSE; +} + +fne (x) + long long int x; +{ + if (x != 0) + return TRUE; + else + return FALSE; +} + +flt (x) + long long int x; +{ + if (x < 0) + return TRUE; + else + return FALSE; +} + +fge (x) + long long int x; +{ + if (x >= 0) + return TRUE; + else + return FALSE; +} + +fgt (x) + long long int x; +{ + if (x > 0) + return TRUE; + else + return FALSE; +} + +fle (x) + long long int x; +{ + if (x <= 0) + return TRUE; + else + return FALSE; +} + +main () +{ + if (feq (0LL) != TRUE) + abort (); + if (feq (-1LL) != FALSE) + abort (); + if (feq (0x8000000000000000LL) != FALSE) + abort (); + if (feq (0x8000000000000001LL) != FALSE) + abort (); + if (feq (1LL) != FALSE) + abort (); + if (feq (0x7fffffffffffffffLL) != FALSE) + abort (); + + if (fne (0LL) != FALSE) + abort (); + if (fne (-1LL) != TRUE) + abort (); + if (fne (0x8000000000000000LL) != TRUE) + abort (); + if (fne (0x8000000000000001LL) != TRUE) + abort (); + if (fne (1LL) != TRUE) + abort (); + if (fne (0x7fffffffffffffffLL) != TRUE) + abort (); + + if (flt (0LL) != FALSE) + abort (); + if (flt (-1LL) != TRUE) + abort (); + if (flt (0x8000000000000000LL) != TRUE) + abort (); + if (flt (0x8000000000000001LL) != TRUE) + abort (); + if (flt (1LL) != FALSE) + abort (); + if (flt (0x7fffffffffffffffLL) != FALSE) + abort (); + + if (fge (0LL) != TRUE) + abort (); + if (fge (-1LL) != FALSE) + abort (); + if (fge (0x8000000000000000LL) != FALSE) + abort (); + if (fge (0x8000000000000001LL) != FALSE) + abort (); + if (fge (1LL) != TRUE) + abort (); + if (fge (0x7fffffffffffffffLL) != TRUE) + abort (); + + if (fgt (0LL) != FALSE) + abort (); + if (fgt (-1LL) != FALSE) + abort (); + if (fgt (0x8000000000000000LL) != FALSE) + abort (); + if (fgt (0x8000000000000001LL) != FALSE) + abort (); + if (fgt (1LL) != TRUE) + abort (); + if (fgt (0x7fffffffffffffffLL) != TRUE) + abort (); + + if (fle (0LL) != TRUE) + abort (); + if (fle (-1LL) != TRUE) + abort (); + if (fle (0x8000000000000000LL) != TRUE) + abort (); + if (fle (0x8000000000000001LL) != TRUE) + abort (); + if (fle (1LL) != FALSE) + abort (); + if (fle (0x7fffffffffffffffLL) != FALSE) + abort (); + + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/va-arg-1.c b/gcc/testsuite/gcc.c-torture/execute/va-arg-1.c new file mode 100644 index 000000000000..3f3b141a9317 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/va-arg-1.c @@ -0,0 +1,24 @@ +#include <stdarg.h> + +typedef unsigned long L; +f (L p0, L p1, L p2, L p3, L p4, L p5, L p6, L p7, L p8, ...) +{ + va_list select; + + va_start (select, p8); + + if (va_arg (select, L) != 10) + abort (); + if (va_arg (select, L) != 11) + abort (); + if (va_arg (select, L) != 0) + abort (); + + va_end (select); +} + +main () +{ + f (1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 0L); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/va-arg-2.c b/gcc/testsuite/gcc.c-torture/execute/va-arg-2.c new file mode 100644 index 000000000000..7675b3f76035 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/va-arg-2.c @@ -0,0 +1,292 @@ +/* The purpose of this test is to catch edge cases when arguments are passed + in regs and on the stack. We test 16 cases, trying to catch multiple + targets (some use 3 regs for argument passing, some use 12, etc.). + We test both the arguments and the `lastarg' (the argument to va_start). */ + +#include <stdarg.h> + +extern __SIZE_TYPE__ strlen (); + +int +to_hex (unsigned int a) +{ + static char hex[] = "0123456789abcdef"; + + if (a > 15) + abort (); + return hex[a]; +} + +void +f0 (char* format, ...) +{ + va_list ap; + + va_start (ap, format); + if (strlen (format) != 16 - 0) + abort (); + while (*format) + if (*format++ != to_hex (va_arg (ap, int))) + abort (); + va_end(ap); +} + +void +f1 (int a1, char* format, ...) +{ + va_list ap; + + va_start(ap, format); + if (strlen (format) != 16 - 1) + abort (); + while (*format) + if (*format++ != to_hex (va_arg (ap, int))) + abort (); + va_end(ap); +} + +void +f2 (int a1, int a2, char* format, ...) +{ + va_list ap; + + va_start(ap, format); + if (strlen (format) != 16 - 2) + abort (); + while (*format) + if (*format++ != to_hex (va_arg (ap, int))) + abort (); + va_end(ap); +} + +void +f3 (int a1, int a2, int a3, char* format, ...) +{ + va_list ap; + + va_start(ap, format); + if (strlen (format) != 16 - 3) + abort (); + while (*format) + if (*format++ != to_hex (va_arg (ap, int))) + abort (); + va_end(ap); +} + +void +f4 (int a1, int a2, int a3, int a4, char* format, ...) +{ + va_list ap; + + va_start(ap, format); + if (strlen (format) != 16 - 4) + abort (); + while (*format) + if (*format++ != to_hex (va_arg (ap, int))) + abort (); + va_end(ap); +} + +void +f5 (int a1, int a2, int a3, int a4, int a5, + char* format, ...) +{ + va_list ap; + + va_start(ap, format); + if (strlen (format) != 16 - 5) + abort (); + while (*format) + if (*format++ != to_hex (va_arg (ap, int))) + abort (); + va_end(ap); +} + +void +f6 (int a1, int a2, int a3, int a4, int a5, + int a6, + char* format, ...) +{ + va_list ap; + + va_start(ap, format); + if (strlen (format) != 16 - 6) + abort (); + while (*format) + if (*format++ != to_hex (va_arg (ap, int))) + abort (); + va_end(ap); +} + +void +f7 (int a1, int a2, int a3, int a4, int a5, + int a6, int a7, + char* format, ...) +{ + va_list ap; + + va_start(ap, format); + if (strlen (format) != 16 - 7) + abort (); + while (*format) + if (*format++ != to_hex (va_arg (ap, int))) + abort (); + va_end(ap); +} + +void +f8 (int a1, int a2, int a3, int a4, int a5, + int a6, int a7, int a8, + char* format, ...) +{ + va_list ap; + + va_start(ap, format); + if (strlen (format) != 16 - 8) + abort (); + while (*format) + if (*format++ != to_hex (va_arg (ap, int))) + abort (); + va_end(ap); +} + +void +f9 (int a1, int a2, int a3, int a4, int a5, + int a6, int a7, int a8, int a9, + char* format, ...) +{ + va_list ap; + + va_start(ap, format); + if (strlen (format) != 16 - 9) + abort (); + while (*format) + if (*format++ != to_hex (va_arg (ap, int))) + abort (); + va_end(ap); +} + +void +f10 (int a1, int a2, int a3, int a4, int a5, + int a6, int a7, int a8, int a9, int a10, + char* format, ...) +{ + va_list ap; + + va_start(ap, format); + if (strlen (format) != 16 - 10) + abort (); + while (*format) + if (*format++ != to_hex (va_arg (ap, int))) + abort (); + va_end(ap); +} + +void +f11 (int a1, int a2, int a3, int a4, int a5, + int a6, int a7, int a8, int a9, int a10, + int a11, + char* format, ...) +{ + va_list ap; + + va_start(ap, format); + if (strlen (format) != 16 - 11) + abort (); + while (*format) + if (*format++ != to_hex (va_arg (ap, int))) + abort (); + va_end(ap); +} + +void +f12 (int a1, int a2, int a3, int a4, int a5, + int a6, int a7, int a8, int a9, int a10, + int a11, int a12, + char* format, ...) +{ + va_list ap; + + va_start(ap, format); + if (strlen (format) != 16 - 12) + abort (); + while (*format) + if (*format++ != to_hex (va_arg (ap, int))) + abort (); + va_end(ap); +} + +void +f13 (int a1, int a2, int a3, int a4, int a5, + int a6, int a7, int a8, int a9, int a10, + int a11, int a12, int a13, + char* format, ...) +{ + va_list ap; + + va_start(ap, format); + if (strlen (format) != 16 - 13) + abort (); + while (*format) + if (*format++ != to_hex (va_arg (ap, int))) + abort (); + va_end(ap); +} + +void +f14 (int a1, int a2, int a3, int a4, int a5, + int a6, int a7, int a8, int a9, int a10, + int a11, int a12, int a13, int a14, + char* format, ...) +{ + va_list ap; + + va_start(ap, format); + if (strlen (format) != 16 - 14) + abort (); + while (*format) + if (*format++ != to_hex (va_arg (ap, int))) + abort (); + va_end(ap); +} + +void +f15 (int a1, int a2, int a3, int a4, int a5, + int a6, int a7, int a8, int a9, int a10, + int a11, int a12, int a13, int a14, int a15, + char* format, ...) +{ + va_list ap; + + va_start(ap, format); + if (strlen (format) != 16 - 15) + abort (); + while (*format) + if (*format++ != to_hex (va_arg (ap, int))) + abort (); + va_end(ap); +} + +main () +{ + char *f = "0123456789abcdef"; + + f0 (f+0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); + f1 (0, f+1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); + f2 (0, 1, f+2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); + f3 (0, 1, 2, f+3, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); + f4 (0, 1, 2, 3, f+4, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); + f5 (0, 1, 2, 3, 4, f+5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); + f6 (0, 1, 2, 3, 4, 5, f+6, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); + f7 (0, 1, 2, 3, 4, 5, 6, f+7, 7, 8, 9, 10, 11, 12, 13, 14, 15); + f8 (0, 1, 2, 3, 4, 5, 6, 7, f+8, 8, 9, 10, 11, 12, 13, 14, 15); + f9 (0, 1, 2, 3, 4, 5, 6, 7, 8, f+9, 9, 10, 11, 12, 13, 14, 15); + f10 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, f+10, 10, 11, 12, 13, 14, 15); + f11 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, f+11, 11, 12, 13, 14, 15); + f12 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, f+12, 12, 13, 14, 15); + f13 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, f+13, 13, 14, 15); + f14 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, f+14, 14, 15); + f15 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, f+15, 15); + + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/va-arg-3.c b/gcc/testsuite/gcc.c-torture/execute/va-arg-3.c new file mode 100644 index 000000000000..7b0a0b0cf36c --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/va-arg-3.c @@ -0,0 +1,339 @@ +/* Same as va-arg-2.c but using varargs.h. */ +/* The purpose of this test is to catch edge cases when arguments are passed + in regs and on the stack. We test 16 cases, trying to catch multiple + targets (some use 3 regs for argument passing, some use 12, etc.). + We test both the arguments and the `lastarg' (the argument to va_start). */ + +#ifdef NO_VARARGS +int main() +{ + exit (0); +} + +#else +#include <varargs.h> + +extern __SIZE_TYPE__ strlen (); + +int +to_hex (unsigned int a) +{ + static char hex[] = "0123456789abcdef"; + + if (a > 15) + abort (); + return hex[a]; +} + +void +f0 (va_alist) + va_dcl +{ + va_list ap; + char *format; + + va_start (ap); + format = va_arg (ap, char *); + if (strlen (format) != 16 - 0) + abort (); + while (*format) + if (*format++ != to_hex (va_arg (ap, int))) + abort (); + va_end(ap); +} + +void +f1 (a1, va_alist) + int a1; + va_dcl +{ + va_list ap; + char *format; + + va_start (ap); + format = va_arg (ap, char *); + if (strlen (format) != 16 - 1) + abort (); + while (*format) + if (*format++ != to_hex (va_arg (ap, int))) + abort (); + va_end(ap); +} + +void +f2 (a1, a2, va_alist) + int a1, a2; + va_dcl +{ + va_list ap; + char *format; + + va_start (ap); + format = va_arg (ap, char *); + if (strlen (format) != 16 - 2) + abort (); + while (*format) + if (*format++ != to_hex (va_arg (ap, int))) + abort (); + va_end(ap); +} + +void +f3 (a1, a2, a3, va_alist) + int a1, a2, a3; + va_dcl +{ + va_list ap; + char *format; + + va_start (ap); + format = va_arg (ap, char *); + if (strlen (format) != 16 - 3) + abort (); + while (*format) + if (*format++ != to_hex (va_arg (ap, int))) + abort (); + va_end(ap); +} + +void +f4 (a1, a2, a3, a4, va_alist) + int a1, a2, a3, a4; + va_dcl +{ + va_list ap; + char *format; + + va_start (ap); + format = va_arg (ap, char *); + if (strlen (format) != 16 - 4) + abort (); + while (*format) + if (*format++ != to_hex (va_arg (ap, int))) + abort (); + va_end(ap); +} + +void +f5 (a1, a2, a3, a4, a5, va_alist) + int a1, a2, a3, a4, a5; + va_dcl +{ + va_list ap; + char *format; + + va_start (ap); + format = va_arg (ap, char *); + if (strlen (format) != 16 - 5) + abort (); + while (*format) + if (*format++ != to_hex (va_arg (ap, int))) + abort (); + va_end(ap); +} + +void +f6 (a1, a2, a3, a4, a5, a6, va_alist) + int a1, a2, a3, a4, a5, a6; + va_dcl +{ + va_list ap; + char *format; + + va_start (ap); + format = va_arg (ap, char *); + if (strlen (format) != 16 - 6) + abort (); + while (*format) + if (*format++ != to_hex (va_arg (ap, int))) + abort (); + va_end(ap); +} + +void +f7 (a1, a2, a3, a4, a5, a6, a7, va_alist) + int a1, a2, a3, a4, a5, a6, a7; + va_dcl +{ + va_list ap; + char *format; + + va_start (ap); + format = va_arg (ap, char *); + if (strlen (format) != 16 - 7) + abort (); + while (*format) + if (*format++ != to_hex (va_arg (ap, int))) + abort (); + va_end(ap); +} + +void +f8 (a1, a2, a3, a4, a5, a6, a7, a8, va_alist) + int a1, a2, a3, a4, a5, a6, a7, a8; + va_dcl +{ + va_list ap; + char *format; + + va_start (ap); + format = va_arg (ap, char *); + if (strlen (format) != 16 - 8) + abort (); + while (*format) + if (*format++ != to_hex (va_arg (ap, int))) + abort (); + va_end(ap); +} + +void +f9 (a1, a2, a3, a4, a5, a6, a7, a8, a9, va_alist) + int a1, a2, a3, a4, a5, a6, a7, a8, a9; + va_dcl +{ + va_list ap; + char *format; + + va_start (ap); + format = va_arg (ap, char *); + if (strlen (format) != 16 - 9) + abort (); + while (*format) + if (*format++ != to_hex (va_arg (ap, int))) + abort (); + va_end(ap); +} + +void +f10 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, va_alist) + int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10; + va_dcl +{ + va_list ap; + char *format; + + va_start (ap); + format = va_arg (ap, char *); + if (strlen (format) != 16 - 10) + abort (); + while (*format) + if (*format++ != to_hex (va_arg (ap, int))) + abort (); + va_end(ap); +} + +void +f11 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, + va_alist) + int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11; + va_dcl +{ + va_list ap; + char *format; + + va_start (ap); + format = va_arg (ap, char *); + if (strlen (format) != 16 - 11) + abort (); + while (*format) + if (*format++ != to_hex (va_arg (ap, int))) + abort (); + va_end(ap); +} + +void +f12 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, va_alist) + int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12; + va_dcl +{ + va_list ap; + char *format; + + va_start (ap); + format = va_arg (ap, char *); + if (strlen (format) != 16 - 12) + abort (); + while (*format) + if (*format++ != to_hex (va_arg (ap, int))) + abort (); + va_end(ap); +} + +void +f13 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, va_alist) + int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13; + va_dcl +{ + va_list ap; + char *format; + + va_start (ap); + format = va_arg (ap, char *); + if (strlen (format) != 16 - 13) + abort (); + while (*format) + if (*format++ != to_hex (va_arg (ap, int))) + abort (); + va_end(ap); +} + +void +f14 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, va_alist) + int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14; + va_dcl +{ + va_list ap; + char *format; + + va_start (ap); + format = va_arg (ap, char *); + if (strlen (format) != 16 - 14) + abort (); + while (*format) + if (*format++ != to_hex (va_arg (ap, int))) + abort (); + va_end(ap); +} + +void +f15 (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, va_alist) + int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15; + va_dcl +{ + va_list ap; + char *format; + + va_start (ap); + format = va_arg (ap, char *); + if (strlen (format) != 16 - 15) + abort (); + while (*format) + if (*format++ != to_hex (va_arg (ap, int))) + abort (); + va_end(ap); +} + +main () +{ + char *f = "0123456789abcdef"; + + f0 (f+0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); + f1 (0, f+1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); + f2 (0, 1, f+2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); + f3 (0, 1, 2, f+3, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); + f4 (0, 1, 2, 3, f+4, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); + f5 (0, 1, 2, 3, 4, f+5, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); + f6 (0, 1, 2, 3, 4, 5, f+6, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15); + f7 (0, 1, 2, 3, 4, 5, 6, f+7, 7, 8, 9, 10, 11, 12, 13, 14, 15); + f8 (0, 1, 2, 3, 4, 5, 6, 7, f+8, 8, 9, 10, 11, 12, 13, 14, 15); + f9 (0, 1, 2, 3, 4, 5, 6, 7, 8, f+9, 9, 10, 11, 12, 13, 14, 15); + f10 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, f+10, 10, 11, 12, 13, 14, 15); + f11 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, f+11, 11, 12, 13, 14, 15); + f12 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, f+12, 12, 13, 14, 15); + f13 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, f+13, 13, 14, 15); + f14 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, f+14, 14, 15); + f15 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, f+15, 15); + + exit (0); +} +#endif /* ! NO_VARARGS */ diff --git a/gcc/testsuite/gcc.c-torture/execute/va-arg-4.c b/gcc/testsuite/gcc.c-torture/execute/va-arg-4.c new file mode 100644 index 000000000000..a824f64ffa1f --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/va-arg-4.c @@ -0,0 +1,33 @@ +/* On the i960 any arg bigger than 16 bytes causes all subsequent args + to be passed on the stack. We test this. */ + +#include <stdarg.h> + +typedef struct { + char a[32]; +} big; + +void +f (big x, char *s, ...) +{ + va_list ap; + + if (x.a[0] != 'a' || x.a[1] != 'b' || x.a[2] != 'c') + abort (); + va_start (ap, s); + if (va_arg (ap, int) != 42) + abort (); + if (va_arg (ap, int) != 'x') + abort (); + if (va_arg (ap, int) != 0) + abort (); + va_end (ap); +} + +main () +{ + static big x = { "abc" }; + + f (x, "", 42, 'x', 0); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/va-arg-5.c b/gcc/testsuite/gcc.c-torture/execute/va-arg-5.c new file mode 100644 index 000000000000..3d8b1a79ad11 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/va-arg-5.c @@ -0,0 +1,44 @@ +#include <stdarg.h> + +va_double (int n, ...) +{ + va_list args; + + va_start (args, n); + + if (va_arg (args, double) != 3.141592) + abort (); + if (va_arg (args, double) != 2.71827) + abort (); + if (va_arg (args, double) != 2.2360679) + abort (); + if (va_arg (args, double) != 2.1474836) + abort (); + + va_end (args); +} + +va_long_double (int n, ...) +{ + va_list args; + + va_start (args, n); + + if (va_arg (args, long double) != 3.141592L) + abort (); + if (va_arg (args, long double) != 2.71827L) + abort (); + if (va_arg (args, long double) != 2.2360679L) + abort (); + if (va_arg (args, long double) != 2.1474836L) + abort (); + + va_end (args); +} + +main () +{ + va_double (4, 3.141592, 2.71827, 2.2360679, 2.1474836); + va_long_double (4, 3.141592L, 2.71827L, 2.2360679L, 2.1474836L); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/va-arg-6.c b/gcc/testsuite/gcc.c-torture/execute/va-arg-6.c new file mode 100644 index 000000000000..e8d495d66e76 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/va-arg-6.c @@ -0,0 +1,35 @@ +#include <stdarg.h> + +f (int n, ...) +{ + va_list args; + + va_start (args, n); + + if (va_arg (args, int) != 10) + abort (); + if (va_arg (args, long long) != 10000000000LL) + abort (); + if (va_arg (args, int) != 11) + abort (); + if (va_arg (args, long double) != 3.14L) + abort (); + if (va_arg (args, int) != 12) + abort (); + if (va_arg (args, int) != 13) + abort (); + if (va_arg (args, long long) != 20000000000LL) + abort (); + if (va_arg (args, int) != 14) + abort (); + if (va_arg (args, double) != 2.72) + abort (); + + va_end(args); +} + +main () +{ + f (4, 10, 10000000000LL, 11, 3.14L, 12, 13, 20000000000LL, 14, 2.72); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/execute/widechar-1.c b/gcc/testsuite/gcc.c-torture/execute/widechar-1.c new file mode 100644 index 000000000000..45b9d89b4b46 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/widechar-1.c @@ -0,0 +1,14 @@ +#define C L'\400' + +#if C +#define zero (!C) +#else +#define zero C +#endif + +main() +{ + if (zero != 0) + abort (); + exit (0); +} diff --git a/gcc/testsuite/gcc.c-torture/noncompile/920507-1.c b/gcc/testsuite/gcc.c-torture/noncompile/920507-1.c new file mode 100644 index 000000000000..e1bd9934de32 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/noncompile/920507-1.c @@ -0,0 +1 @@ +x(){register*a asm("fr1");int*v[1]={a};} diff --git a/gcc/testsuite/gcc.c-torture/noncompile/920616-2.c b/gcc/testsuite/gcc.c-torture/noncompile/920616-2.c new file mode 100644 index 000000000000..ddfa0de1ba1b --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/noncompile/920616-2.c @@ -0,0 +1 @@ +f(void a,...){} diff --git a/gcc/testsuite/gcc.c-torture/noncompile/920721-2.c b/gcc/testsuite/gcc.c-torture/noncompile/920721-2.c new file mode 100644 index 000000000000..4621983e037b --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/noncompile/920721-2.c @@ -0,0 +1 @@ +f(int n){int s;for(s=0;s<n;s++)s==5?1 n=1;} diff --git a/gcc/testsuite/gcc.c-torture/noncompile/920824-1.c b/gcc/testsuite/gcc.c-torture/noncompile/920824-1.c new file mode 100644 index 000000000000..36661f63c178 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/noncompile/920824-1.c @@ -0,0 +1 @@ +struct s{struct s{int i;}x;}; diff --git a/gcc/testsuite/gcc.c-torture/noncompile/920923-1.c b/gcc/testsuite/gcc.c-torture/noncompile/920923-1.c new file mode 100644 index 000000000000..52f8338abf32 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/noncompile/920923-1.c @@ -0,0 +1,36 @@ +typedef BYTE unsigned char;typedef int item_n;typedef int perm_set;struct +PENT{caddr_t v_addr;};typedef struct PENT prec;typedef struct PENT* +prec_t;prec_t mem_hash;BYTE*mem_base;struct PTE{BYTE*p_page;perm_set +p_perms;};typedef struct PTE pte;struct PTP{union{struct*PTP +p_tablep;struct*PTE p_entry;}u;int valid;};typedef struct PTP +(u.p_tablep);int pfree=0;int pcount=0;void mmu_walk_find(va)caddr_t va;{ +BYTE*page_addr;if(mmu_base[Level1(va)]->valid==0x0){l1_base= +mmu_base[Level1(va)]->(u.p_tablep)=p_alloc();mmu_base[Level1(va)]->valid= +0x3;for(idx=0;idx<LEVEL1_ENTRIES;idx++)l1_base[idx]->valid=0x0;goto +build_level2;}else l1_base=mmu_base[Level1(va)]->(u.p_tablep);if +(l1_base[Level2(va)]->valid==0x0){build_level2:l2_base= +l1_base[Level2(va)]->(u.p_tablep)=p_alloc();l1_base[Level2(va)]->valid= +0x3;for(idx=0;idx<LEVEL2_ENTRIES;idx++)l2_base[idx]->valid=0x0;goto +build_page;}else l2_base=mmu_base[Level2(va)]->(u.p_tablep); +page_addr=l2_base[Level2(va)]->valid;}void*a_translate(va_op,v_addr)int +va_op;caddr_t v_addr;{register prec_t bucket;register caddr_t p_addr; +bucket=mem_hash+((((v_addr)>>ITEMBITS))&hash_mask);do{if +(bucket->v_addr==((v_addr)>>ITEMBITS){if(!(bucket->perm_set&va_op)) +goto prot_fault;return mem_base+v_addr;}}while((bucket++)->v_addr!= +((caddr_t)0));page_miss:p_addr=(--bucket)->p_addr;page_type:switch +(p_addr){case BUCKET_FULL:enlarge_hash_table(mem_hash);case((caddr_t)0): +p_addr=fill_item_entry(va_op,v_addr);goto page_type;case((caddr_t)1): +default:((void)(((0))?0:(__eprintf("Failed assertion`%s'at line%d +of`%s'.\n","FALSE",327,"b.c"),0)));}}void flush_hash(hasht, +hash_size)prec_t hasht;int hash_size;{register prec_t bucket;register int +idx;bucket=hasht;for(idx=(hash_size*3)-1;idx>=0;idx--){ +bucket->v_addr=((caddr_t)0);bucket->p_addr=((caddr_t)0); +bucket->perm_set=VA_EMPTY;}}void init_mem(){mem_base=(BYTE*)calloc(1024 +,(1<<13));((void)((mem_base!=(BYTE*)0)?0:(__eprintf("Failed +assertion`%s'at line%d of`%s'.\n","mem_base!=(BYTE*)0",366,"b.c"), +0)));hash_num=INIT_NUM_ENTRIES*3;mem_hash=(prec_t)calloc(hash_num, +sizeof(prec));((void)((mem_hash!=(prec_t)0)?0:(__eprintf("Failed +assertion`%s'at line%d of`%s'.\n","mem_hash!=(prec_t)0",370,"b.c"), +0)));flush_hash(mem_hash,32);build_ptables(mem_base,1024*(1<<13));} +struct tm{int tm_sec;int tm_min;int tm_hour;int tm_mday;int tm_mon;int +tm_year;int tm_wday;int tm_yday;int tm_isdst;char*tm_zone;long tm_gmtoff;}; diff --git a/gcc/testsuite/gcc.c-torture/noncompile/921102-1.c b/gcc/testsuite/gcc.c-torture/noncompile/921102-1.c new file mode 100644 index 000000000000..3fb42f19b564 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/noncompile/921102-1.c @@ -0,0 +1 @@ +int x[]={[0.3 ... 4.6]9}; diff --git a/gcc/testsuite/gcc.c-torture/noncompile/921116-1.c b/gcc/testsuite/gcc.c-torture/noncompile/921116-1.c new file mode 100644 index 000000000000..78a75ea8193e --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/noncompile/921116-1.c @@ -0,0 +1 @@ +void a (void x) {} diff --git a/gcc/testsuite/gcc.c-torture/noncompile/930301-1.c b/gcc/testsuite/gcc.c-torture/noncompile/930301-1.c new file mode 100644 index 000000000000..de4271415e9a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/noncompile/930301-1.c @@ -0,0 +1,5 @@ +struct a *q; +f() +{ + q++; +} diff --git a/gcc/testsuite/gcc.c-torture/noncompile/930622-1.c b/gcc/testsuite/gcc.c-torture/noncompile/930622-1.c new file mode 100644 index 000000000000..27bb9ebd2f2b --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/noncompile/930622-1.c @@ -0,0 +1,6 @@ +f () +{ + double b; + b = b * 10; + goto c; +} diff --git a/gcc/testsuite/gcc.c-torture/noncompile/930622-2.c b/gcc/testsuite/gcc.c-torture/noncompile/930622-2.c new file mode 100644 index 000000000000..a75e0c43889e --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/noncompile/930622-2.c @@ -0,0 +1,6 @@ +f () +{ + int i; + for (i--) + ; +} diff --git a/gcc/testsuite/gcc.c-torture/noncompile/930714-1.c b/gcc/testsuite/gcc.c-torture/noncompile/930714-1.c new file mode 100644 index 000000000000..d940c550f576 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/noncompile/930714-1.c @@ -0,0 +1,25 @@ +typedef union _yystype +{ + int i; + int *iptr; + int (*ifunc)(int); + void (*vfunc)(int); +} +YYSTYPE; + +extern int f1(int k); + +void test() +{ + YYSTYPE a; + int (*iptr)(int); + int foo[5]; + + a = f1; + a = (YYSTYPE)f1; + a = (YYSTYPE)foo; + a = (YYSTYPE)(int *)foo; + iptr = f1; + a = iptr; + a = (YYSTYPE)iptr; +} diff --git a/gcc/testsuite/gcc.c-torture/noncompile/931203-1.c b/gcc/testsuite/gcc.c-torture/noncompile/931203-1.c new file mode 100644 index 000000000000..1f5a8c3d7add --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/noncompile/931203-1.c @@ -0,0 +1,11 @@ +typedef struct +{ + int x, y; +} point_t; + + +point_t +f () +{ + return 0; +} diff --git a/gcc/testsuite/gcc.c-torture/noncompile/940112-1.c b/gcc/testsuite/gcc.c-torture/noncompile/940112-1.c new file mode 100644 index 000000000000..17dda8be54a6 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/noncompile/940112-1.c @@ -0,0 +1,7 @@ +double +f (int x) +{ + double e = 1; + e = 1; + return (e) +} diff --git a/gcc/testsuite/gcc.c-torture/noncompile/940227-1.c b/gcc/testsuite/gcc.c-torture/noncompile/940227-1.c new file mode 100644 index 000000000000..21bba6c9cfe5 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/noncompile/940227-1.c @@ -0,0 +1,5 @@ +struct font { + struct { + char *line,*ulmask; + } c[2]; +} character[1] = { { {"", ""}, {"", ""} } }; diff --git a/gcc/testsuite/gcc.c-torture/noncompile/940510-1.c b/gcc/testsuite/gcc.c-torture/noncompile/940510-1.c new file mode 100644 index 000000000000..9882d155e973 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/noncompile/940510-1.c @@ -0,0 +1 @@ +struct { int a[]; } x = { 0 }; diff --git a/gcc/testsuite/gcc.c-torture/noncompile/940712-1.c b/gcc/testsuite/gcc.c-torture/noncompile/940712-1.c new file mode 100644 index 000000000000..b1b823474835 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/noncompile/940712-1.c @@ -0,0 +1,14 @@ +/* PR 4713 */ + +#include "940712-1.h" +#include "940712-1a.h" +#include "940712-1b.h" + +/* comment start in comment error +/* in a .c file */ + +int main () +{ + return 0; +} + diff --git a/gcc/testsuite/gcc.c-torture/noncompile/940712-1.h b/gcc/testsuite/gcc.c-torture/noncompile/940712-1.h new file mode 100644 index 000000000000..183821334b14 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/noncompile/940712-1.h @@ -0,0 +1,10 @@ +/* comment start in comment error +/* in a .h file */ + +#if 0 +#endif /* comment start in comment error +/* after a cpp directive */ + +/* comment start in comment error + + diff --git a/gcc/testsuite/gcc.c-torture/noncompile/940712-1a.h b/gcc/testsuite/gcc.c-torture/noncompile/940712-1a.h new file mode 100644 index 000000000000..55ab6b844ecc --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/noncompile/940712-1a.h @@ -0,0 +1,4 @@ +/* spanning a .h file */ + +#if 0 +#endif /* comment start in comment error diff --git a/gcc/testsuite/gcc.c-torture/noncompile/940712-1b.h b/gcc/testsuite/gcc.c-torture/noncompile/940712-1b.h new file mode 100644 index 000000000000..d75156c04b97 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/noncompile/940712-1b.h @@ -0,0 +1,2 @@ +/* spanning a .h file */ + diff --git a/gcc/testsuite/gcc.c-torture/noncompile/950825-1.c b/gcc/testsuite/gcc.c-torture/noncompile/950825-1.c new file mode 100644 index 000000000000..6104444da3b8 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/noncompile/950825-1.c @@ -0,0 +1 @@ +main() { return (struct x) {{y: 0}}; } diff --git a/gcc/testsuite/gcc.c-torture/noncompile/950921-1.c b/gcc/testsuite/gcc.c-torture/noncompile/950921-1.c new file mode 100644 index 000000000000..bcf2f05e44f2 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/noncompile/950921-1.c @@ -0,0 +1,10 @@ +typedef enum +{ + a = (X) 0, + b +} c; + +typedef enum +{ + d = (X) 0 +} e; diff --git a/gcc/testsuite/gcc.c-torture/noncompile/951025-1.c b/gcc/testsuite/gcc.c-torture/noncompile/951025-1.c new file mode 100644 index 000000000000..694887290dd1 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/noncompile/951025-1.c @@ -0,0 +1 @@ +#include /\ diff --git a/gcc/testsuite/gcc.c-torture/noncompile/951123-1.c b/gcc/testsuite/gcc.c-torture/noncompile/951123-1.c new file mode 100644 index 000000000000..e9ed3dcd2468 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/noncompile/951123-1.c @@ -0,0 +1,2 @@ +struct S { int a; int b[2]; }; +struct S x = { 0, [0]; }; diff --git a/gcc/testsuite/gcc.c-torture/noncompile/951227-1.c b/gcc/testsuite/gcc.c-torture/noncompile/951227-1.c new file mode 100644 index 000000000000..7c449c8579c2 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/noncompile/951227-1.c @@ -0,0 +1,2 @@ +#if 0xe-1 +#endif diff --git a/gcc/testsuite/gcc.c-torture/noncompile/Makefile.in b/gcc/testsuite/gcc.c-torture/noncompile/Makefile.in new file mode 100644 index 000000000000..e6209dbc6c2d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/noncompile/Makefile.in @@ -0,0 +1,12 @@ +#### host, target, and site specific Makefile frags come in here. + +srcdir = . + +# Nothing to do... +all: + +clean: + -rm -f *.o *.diff *~ *.bad core *.x + +distclean: clean + -rm -f Makefile config.status diff --git a/gcc/testsuite/gcc.c-torture/noncompile/configure.in b/gcc/testsuite/gcc.c-torture/noncompile/configure.in new file mode 100644 index 000000000000..19f62f2dfe5e --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/noncompile/configure.in @@ -0,0 +1,15 @@ +# This file is a shell script fragment that supplies the information +# necessary to tailor a template configure script into the configure +# script appropriate for this directory. For more information, check +# any existing configure script. + +srctrigger=noncompile.exp +srcname="DejaGnu" + +# per-host: + +# per-target: + +target_makefile_frag=../config/mt-${target_alias} + +# post-target: diff --git a/gcc/testsuite/gcc.c-torture/noncompile/init-1.c b/gcc/testsuite/gcc.c-torture/noncompile/init-1.c new file mode 100644 index 000000000000..52f43e81a4f5 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/noncompile/init-1.c @@ -0,0 +1,17 @@ +struct a +{ double a, b, c; }; + +struct b +{ + struct a arr[6]; +}; + +static struct b a_b = +{ + {0,0,0}, + {0,0,0}, + {0,0,0}, + {0,0,0}, + {0,0,0}, + {0,0,0}, +}; diff --git a/gcc/testsuite/gcc.c-torture/noncompile/init-2.c b/gcc/testsuite/gcc.c-torture/noncompile/init-2.c new file mode 100644 index 000000000000..52ee17b019f5 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/noncompile/init-2.c @@ -0,0 +1 @@ +int d[][] = { {1}, {2}, {3} }; diff --git a/gcc/testsuite/gcc.c-torture/noncompile/invalid_asm.c b/gcc/testsuite/gcc.c-torture/noncompile/invalid_asm.c new file mode 100644 index 000000000000..bb017f4315e5 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/noncompile/invalid_asm.c @@ -0,0 +1 @@ +asm_invalid_register_name(){asm("":::"this_is_an_invalid_register_name");} diff --git a/gcc/testsuite/gcc.c-torture/noncompile/noncompile.exp b/gcc/testsuite/gcc.c-torture/noncompile/noncompile.exp new file mode 100644 index 000000000000..cf8166d5308c --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/noncompile/noncompile.exp @@ -0,0 +1,307 @@ +# Copyright (C) 1988, 1990, 1991, 1992, 1997 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +# Please email any bugs, comments, and/or additions to this file to: +# bug-gcc@prep.ai.mit.edu + +# This file was written by Jeff Law. (law@cs.utah.edu) + +# +# These tests come from Torbjorn Granlund (tege@cygnus.com) +# C torture test suite. +# + +load_lib mike-gcc.exp + +# Test 920507-1.c +prebase + +set src_code 920507-1.c +set compiler_output ".*:1:" + +set groups {passed gcc-noncompile} + +postbase $src_code $run $groups + + +# Test 920616-2.c +prebase + +set src_code 920616-2.c +set compiler_output ".*:1:" + +set groups {passed gcc-noncompile} + +postbase $src_code $run $groups + + +# Test 920721-2.c +prebase + +set src_code 920721-2.c +set compiler_output ".*:1:" + +set groups {passed gcc-noncompile} + +postbase $src_code $run $groups + + +# Test 920824-1.c +prebase + +set src_code 920824-1.c +set compiler_output ".*:1:" + +set groups {passed gcc-noncompile} + +postbase $src_code $run $groups + + +# Test 920923-1.c +prebase + +set src_code 920923-1.c +set compiler_output ".*:1:" + +set groups {passed gcc-noncompile} + +postbase $src_code $run $groups + + +# Test 9211102-1.c +prebase + +set src_code 921102-1.c +set compiler_output ".*:1:" + +set groups {passed gcc-noncompile} + +postbase $src_code $run $groups + + +# Test 921116-1.c +prebase + +set src_code 921116-1.c +set compiler_output ".*:1:" + +set groups {passed gcc-noncompile} + +postbase $src_code $run $groups + + +# Test 930301-1.c +prebase + +set src_code 930301-1.c +set compiler_output ".*:4:" + +set groups {passed gcc-noncompile} + +postbase $src_code $run $groups + + +# Test 930622-1.c +prebase + +set src_code 930622-1.c +set compiler_output ".*:5:" + +set groups {passed gcc-noncompile} + +postbase $src_code $run $groups + + +# Test 930622-2.c +prebase + +set src_code 930622-2.c +set compiler_output ".*:4:" + +set groups {passed gcc-noncompile} + +postbase $src_code $run $groups + + +# Test 930714-1.c +prebase + +set src_code 930714-1.c +# Not really sure what the error should be here... +set compiler_output ".*:18.*:23" + +set groups {passed gcc-noncompile} + +postbase $src_code $run $groups + +# Test 931203-1.c +prebase + +set src_code 931203-1.c +set compiler_output ".*:10" + +set groups {passed gcc-noncompile} + +postbase $src_code $run $groups + + +# Test 940112-1.c +prebase + +set src_code 940112-1.c +set compiler_output ".*:7" + +set groups {passed gcc-noncompile} + +postbase $src_code $run $groups + + +# Test 940227-1.c +prebase + +set src_code 940227-1.c +set compiler_output ".*:5.*:5" + +set groups {passed gcc-noncompile} + +postbase $src_code $run $groups + + +# Test 940510-1.c +prebase + +set src_code 940510-1.c +set compiler_output ".*:1.*:1" + +set groups {passed gcc-noncompile} + +postbase $src_code $run $groups + + +# Test 940510-1.c +prebase + +set src_code 940510-1.c +set compiler_output ".*:1.*:1" + +set groups {passed gcc-noncompile} + +postbase $src_code $run $groups + + +# Test 940712-1.c +prebase + +set src_code 940712-1.c +set compiler_output ".*:8.*:4" + +set groups {passed gcc-noncompile} + +postbase $src_code $run $groups + + +# Test 950825-1.c +prebase +set src_code 950825-1.c +set compiler_output ".*:1.*:1.*:1:" + +set groups {passed gcc-noncompile} + +postbase $src_code $run $groups + + +# Test 950921-1.c +prebase +set src_code 950921-1.c +set compiler_output ".*:3.*:3.*:9.*:9:" + +set groups {passed gcc-noncompile} + +postbase $src_code $run $groups + + +# Test 951025-1.c +prebase +set src_code 951025-1.c +set compiler_output ".*:2:" + +set groups {passed gcc-noncompile} + +postbase $src_code $run $groups + + +# Test 951123-1.c +prebase +set src_code 951123-1.c +set compiler_output ".*:2:" + +set groups {passed gcc-noncompile} + +postbase $src_code $run $groups + + +# Test 951227-1.c +prebase +set src_code 951227-1.c +set compiler_output ".*:1:" + +set groups {passed gcc-noncompile} + +postbase $src_code $run $groups + + +# Test init-1.c +prebase +set src_code init-1.c +set compiler_output ".*:12.*:12.*:13.*:13.*:14.*:14.*:15.*:15.*:16.*:16:" + +set groups {passed gcc-noncompile} + +postbase $src_code $run $groups + + +# Test init-2.c +prebase +set src_code init-2.c +set compiler_output ".*:1:" + +set groups {passed gcc-noncompile} + +postbase $src_code $run $groups + + +# Test invalid_asm.c +prebase +set src_code invalid_asm.c +set compiler_output ".*:1:" + +set groups {passed gcc-noncompile} + +postbase $src_code $run $groups + + +# Test va-arg-1.c +# It is debatable if this test should be included at all. +# varags may be implemented by macros, which may not actually +# reference the bogus argument. +prebase + +set src_code va-arg-1.c +set compiler_output ".*:6:" + +set groups {passed gcc-noncompile} + +postbase $src_code $run $groups diff --git a/gcc/testsuite/gcc.c-torture/noncompile/va-arg-1.c b/gcc/testsuite/gcc.c-torture/noncompile/va-arg-1.c new file mode 100644 index 000000000000..0285872860d5 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/noncompile/va-arg-1.c @@ -0,0 +1,8 @@ +#include <stdarg.h> + +f (int x, ...) +{ + va_list args; + va_start (args, bogus_variable); + va_end (args); +} diff --git a/gcc/testsuite/gcc.c-torture/special/920413-1.c b/gcc/testsuite/gcc.c-torture/special/920413-1.c new file mode 100644 index 000000000000..a3e06139a5d6 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/special/920413-1.c @@ -0,0 +1 @@ +x(b){unsigned long c;c=4294967295U/(unsigned long)b;} diff --git a/gcc/testsuite/gcc.c-torture/special/920520-1.c b/gcc/testsuite/gcc.c-torture/special/920520-1.c new file mode 100644 index 000000000000..6b1cd7b17c4a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/special/920520-1.c @@ -0,0 +1 @@ +f(){asm("%0"::"r"(1.5F));}g(){asm("%0"::"r"(1.5));} diff --git a/gcc/testsuite/gcc.c-torture/special/920521-1.c b/gcc/testsuite/gcc.c-torture/special/920521-1.c new file mode 100644 index 000000000000..0f4dc08fb30f --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/special/920521-1.c @@ -0,0 +1 @@ +f(){asm("f":::"cc");}g(x){asm("g"::"%r"(x));} diff --git a/gcc/testsuite/gcc.c-torture/special/920717-x.c b/gcc/testsuite/gcc.c-torture/special/920717-x.c new file mode 100644 index 000000000000..07601e397f0e --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/special/920717-x.c @@ -0,0 +1,3 @@ +/* 920717-1.c */ + +const char s[]="foo"; diff --git a/gcc/testsuite/gcc.c-torture/special/920717-y.c b/gcc/testsuite/gcc.c-torture/special/920717-y.c new file mode 100644 index 000000000000..eaffa5e4bb77 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/special/920717-y.c @@ -0,0 +1,8 @@ +/* 920717-y.c */ + +extern const char s[]; + +main() +{ + puts(s); +} diff --git a/gcc/testsuite/gcc.c-torture/special/920730-1.c b/gcc/testsuite/gcc.c-torture/special/920730-1.c new file mode 100644 index 000000000000..d97d873634d1 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/special/920730-1.c @@ -0,0 +1,32 @@ +/* 920730-1.c */ + +f1() +{ + int b=0x80000000; + return b>=0x80000000; +} + +f2() +{ + int b=0x80000001; + return b>=0x80000001; +} + +f3() +{ + int b=0x7fffffff; + return b>=0x7fffffff; +} + +f4() +{ + int b=0xffffffff; + return b>=0xffffffff; +} + +main () +{ + if((f1()&f2()&f3()&f4())!=1) + abort(); + exit(0); +} diff --git a/gcc/testsuite/gcc.c-torture/special/921210-1.c b/gcc/testsuite/gcc.c-torture/special/921210-1.c new file mode 100644 index 000000000000..bbbf39a314b9 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/special/921210-1.c @@ -0,0 +1,4 @@ +#define a1(y) (y+1) +#define a2(y) a1(y)+1 +#define f a->f +a2(f) diff --git a/gcc/testsuite/gcc.c-torture/special/930510-1.c b/gcc/testsuite/gcc.c-torture/special/930510-1.c new file mode 100644 index 000000000000..f973bc633217 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/special/930510-1.c @@ -0,0 +1,3 @@ +#define ugly 3 +#ugly "foobar" 3 /* { dg-error "invalid" "invalid directive" } */ +main() { exit (0); } diff --git a/gcc/testsuite/gcc.c-torture/special/951130-1.c b/gcc/testsuite/gcc.c-torture/special/951130-1.c new file mode 100644 index 000000000000..c06ba075ff6f --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/special/951130-1.c @@ -0,0 +1,2 @@ +unsigned long long x = -(unsigned long long)(-(long long)(((unsigned long +long)0 - 1) >> 1) - 1); diff --git a/gcc/testsuite/gcc.c-torture/special/960224-1.c b/gcc/testsuite/gcc.c-torture/special/960224-1.c new file mode 100644 index 000000000000..de0a6ae72276 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/special/960224-1.c @@ -0,0 +1,6 @@ +#if 0 +#if 0 +#endif \ +\ + +#endif diff --git a/gcc/testsuite/gcc.c-torture/special/960224-2.c b/gcc/testsuite/gcc.c-torture/special/960224-2.c new file mode 100644 index 000000000000..3d6969406406 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/special/960224-2.c @@ -0,0 +1,4 @@ +#if 0 +#if 0 +#endif / +#endif diff --git a/gcc/testsuite/gcc.c-torture/special/Makefile.in b/gcc/testsuite/gcc.c-torture/special/Makefile.in new file mode 100644 index 000000000000..e6209dbc6c2d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/special/Makefile.in @@ -0,0 +1,12 @@ +#### host, target, and site specific Makefile frags come in here. + +srcdir = . + +# Nothing to do... +all: + +clean: + -rm -f *.o *.diff *~ *.bad core *.x + +distclean: clean + -rm -f Makefile config.status diff --git a/gcc/testsuite/gcc.c-torture/special/configure.in b/gcc/testsuite/gcc.c-torture/special/configure.in new file mode 100644 index 000000000000..b9cbac3fd777 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/special/configure.in @@ -0,0 +1,15 @@ +# This file is a shell script fragment that supplies the information +# necessary to tailor a template configure script into the configure +# script appropriate for this directory. For more information, check +# any existing configure script. + +srctrigger=special.exp +srcname="DejaGnu" + +# per-host: + +# per-target: + +target_makefile_frag=../config/mt-${target_alias} + +# post-target: diff --git a/gcc/testsuite/gcc.c-torture/special/special.exp b/gcc/testsuite/gcc.c-torture/special/special.exp new file mode 100644 index 000000000000..9b1142149e62 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/special/special.exp @@ -0,0 +1,100 @@ +# Copyright (C) 1988, 90-96, 1997 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +# Please email any bugs, comments, and/or additions to this file to: +# bug-gcc@prep.ai.mit.edu + +# This file was written by Rob Savoye. (rob@cygnus.com) + +# +# These tests come from Torbjorn Granlund (tege@cygnus.com) +# C torture test suite. +# + +if $tracelevel then { + strace $tracelevel +} + +# load support procs +load_lib c-torture.exp +load_lib gcc-dg.exp + +################## ADD NEXT CASE HERE (NOT AT THE END) ################## + +# 921210-1 +set lines [gcc_target_compile $srcdir/$subdir/921210-1.c "" preprocess ""] +set lines [split [prune_warnings [prune_gcc_output $lines]] "\n"] +set line [lindex $lines [expr [llength $lines]-1]] +regsub -all " " $line "" clean +if [expr [string compare $clean "(a->f+1)+1"]==0] then { + pass "921210-1.c" +} else { + fail "921210-1.c" +} + +# 920521-1 +c-torture 920521-1.c "-S" + +# 920520-1 +c-torture 920520-1.c "-S" + +# 920717-1 +if [isnative] then { + set lines [gcc_target_compile "$srcdir/$subdir/920717-x.c" "920717-x.o" object {additional_flags="-w"}] + if ![string match "" $lines] then { + fail "920717-x.c" + } else { + # This is a completely bogus test. Sorry. + catch exec "rm -f 920717-y.o" + send_log "cc -c $srcdir/$subdir/920717-y.c 2>/dev/null >/dev/null\n" + catch exec "cc -c $srcdir/$subdir/920717-y.c 2>/dev/null >/dev/null" + if ![file exists "920717-y.o"] then { + send_log "c89 -c $srcdir/$subdir/920717-y.c 2>/dev/null >/dev/null\n" + catch exec "c89 -c $srcdir/$subdir/920717-y.c 2>/dev/null >/dev/null" + } + if [file exists "920717-y.o"] then { + set lines [gcc_target_compile "920717-y.o x.o" "x" executable ""] + if [string match "" $lines] then { + pass "920717-1.c" + } else { + fail "920717-1.c" + } + } + } +} + +# 920730-1 +if [isnative] then { + c-torture "920730-1.c" + c-torture "920730-1.c" "-traditional" +} + +# 920413-1 +c-torture 920413-1.c "-Wtraditional" + +# 930510-1 +dg-init +dg-runtest $srcdir/$subdir/930510-1.c "" "" +dg-finish + +# 951130-1 +c-torture 951130-1.c "-Werror" + +# 960224-1 +c-torture 960224-1.c "-E -ansi -pedantic-errors" + +# 960224-2 +#c-torture 960224-2.c "-E -ansi -pedantic-errors" diff --git a/gcc/testsuite/gcc.c-torture/unsorted/386.c b/gcc/testsuite/gcc.c-torture/unsorted/386.c new file mode 100644 index 000000000000..432cdaddd12d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/386.c @@ -0,0 +1,23 @@ +foo (a, p) + int *p; +{ + p[0] = a; + a = (short) a; + return a; +} + +main () +{ + int i; + foobar (i, &i); +} + + +foobar (a, b) +{ + int c; + + c = a % b; + a = a / b; + return a + b; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/86.c b/gcc/testsuite/gcc.c-torture/unsorted/86.c new file mode 100644 index 000000000000..deea85ee2f45 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/86.c @@ -0,0 +1,19 @@ +m32 (a) + int *a; +{ + a[1] = a[0]; +} + +m16 (a) + short *a; +{ + a[1] = a[0]; +} + + +m8 (a) + char *a; +{ + a[1] = a[0]; +} + diff --git a/gcc/testsuite/gcc.c-torture/unsorted/BUG1.c b/gcc/testsuite/gcc.c-torture/unsorted/BUG1.c new file mode 100644 index 000000000000..ada8eaf49c71 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/BUG1.c @@ -0,0 +1,37 @@ +struct _XtTextSource { + /* ... */ + void (* SetSelection)(); + /* ... */ + }; + +typedef struct _XtTextSource *XtTextSource; + +typedef struct _TextPart { + XtTextSource source; + /* ... */ +} TextPart; + +typedef struct _TextRec { + /* ... */ + TextPart text; +} TextRec; + +typedef struct _TextRec *TextWidget; + + +void XtTextUnsetSelection(w) + TextWidget w; /* original is: Widget w; */ +{ + register TextWidget ctx = (TextWidget) w; + void (*nullProc)() = 0; + +/* + * the following line causes the error, when optimizing: + */ + + if (ctx->text.source->SetSelection != nullProc) { + + foo(); + + } +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/BUG11.c b/gcc/testsuite/gcc.c-torture/unsorted/BUG11.c new file mode 100644 index 000000000000..fe2923a97f0c --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/BUG11.c @@ -0,0 +1,29 @@ +#define DD 2410065408 + +unsigned +foo (d) + double d; +{ + return d; +} + +#if foobar + +main () +{ +#if bar + unsigned u = DD; + double d = (double) u; +#else + double d = (double) DD; +#endif + printf ("%u = %u = %lf\n", foo ((double) DD), foo (d), d); +} +#else + +main () +{ + printf ("%lf\n", (double) ((unsigned) DD)); + foo ((double) DD); +} +#endif diff --git a/gcc/testsuite/gcc.c-torture/unsorted/BUG12.c b/gcc/testsuite/gcc.c-torture/unsorted/BUG12.c new file mode 100644 index 000000000000..b32fa607176a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/BUG12.c @@ -0,0 +1,5 @@ +long long +main () +{ + return 1.1e10; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/BUG13.c b/gcc/testsuite/gcc.c-torture/unsorted/BUG13.c new file mode 100644 index 000000000000..9a302b951529 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/BUG13.c @@ -0,0 +1,19 @@ +struct tree_common +{ + int uid; + unsigned int code : 8; + unsigned int code2 : 8; + unsigned external_attr : 1; + unsigned public_attr : 1; + +}; + +static int +duplicate_decls (x) + register struct tree_common *x; +{ + if (x->external_attr) + if (x->code) + if (x->code2) + x->public_attr = 1; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/BUG16.c b/gcc/testsuite/gcc.c-torture/unsorted/BUG16.c new file mode 100644 index 000000000000..daeae2ca562a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/BUG16.c @@ -0,0 +1,6 @@ +setgetlen (a) + int *a; +{ + while (*a++ & 0x80000000) + ; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/BUG17.c b/gcc/testsuite/gcc.c-torture/unsorted/BUG17.c new file mode 100644 index 000000000000..920587046edd --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/BUG17.c @@ -0,0 +1,8 @@ +double d; + +main() +{ + int i; + + i = (int) d; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/BUG18.c b/gcc/testsuite/gcc.c-torture/unsorted/BUG18.c new file mode 100644 index 000000000000..ed586a7f9d60 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/BUG18.c @@ -0,0 +1,5 @@ +main() +{ + if ((signed int) 1 < (signed int) -2147483648) + printf("true\n"); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/BUG2.c b/gcc/testsuite/gcc.c-torture/unsorted/BUG2.c new file mode 100644 index 000000000000..6dc30be65023 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/BUG2.c @@ -0,0 +1,8 @@ +BUG2 (p) int *p; +{ + int a = 0; + if (*p == a) + return 0; + else + return 1; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/BUG21.c b/gcc/testsuite/gcc.c-torture/unsorted/BUG21.c new file mode 100644 index 000000000000..c8a1157cc460 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/BUG21.c @@ -0,0 +1,22 @@ +typedef struct { + int knock_on_wood; /* leave it out and it works. */ + int f1; +} FOO; + +typedef struct { + FOO *b1; +} BAR; + +Nase () +{ + int i, j; + FOO *foop; + BAR *barp; + + for (i = 0; i < 2; i++) { + foop = &barp->b1[i]; + for (j = 0; j < foop->f1; j++) { + /* dummy() */; /* put it in and it works. */ + } + } +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/BUG22.c b/gcc/testsuite/gcc.c-torture/unsorted/BUG22.c new file mode 100644 index 000000000000..9fd95254d3d2 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/BUG22.c @@ -0,0 +1,6 @@ + +void +Rotate (float angle) +{ + float mag = (angle < 0) ? -angle : angle; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/BUG23.c b/gcc/testsuite/gcc.c-torture/unsorted/BUG23.c new file mode 100644 index 000000000000..1ff429ef0acf --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/BUG23.c @@ -0,0 +1,18 @@ +main() +{ + static char static_char_array[1]; + static char *static_char_pointer; + static char static_char; + char char_array[1]; + char *char_pointer; + char character; + + char *cp, c; + + c = cp - static_char_array; /* error */ + c = cp - static_char_pointer; + c = cp - &static_char; /* error */ + c = cp - char_array; + c = cp - char_pointer; + c = cp - &character; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/BUG24.c b/gcc/testsuite/gcc.c-torture/unsorted/BUG24.c new file mode 100644 index 000000000000..7627a3ddcdd7 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/BUG24.c @@ -0,0 +1,15 @@ +struct ack { + char a, b, c; +}; + +main() +{ + struct ack bad; + + foo(bad); +} + +foo(c) + struct ack c; +{ +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/BUG25.c b/gcc/testsuite/gcc.c-torture/unsorted/BUG25.c new file mode 100644 index 000000000000..574417061255 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/BUG25.c @@ -0,0 +1,5 @@ + +foo (a) +{ + __builtin_ffs (a); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/BUG3.c b/gcc/testsuite/gcc.c-torture/unsorted/BUG3.c new file mode 100644 index 000000000000..30e6622a5667 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/BUG3.c @@ -0,0 +1,8 @@ +BUG2 (p) char *p; +{ + int a = 0; + if (*p == a) + return 0; + else + return 1; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/BUG4.c b/gcc/testsuite/gcc.c-torture/unsorted/BUG4.c new file mode 100644 index 000000000000..be6a14989c27 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/BUG4.c @@ -0,0 +1,20 @@ +int foo() +{ + char c; + + return (c ^ 30 ) > (c ^ 40 ); +/* + these also get the signal : + return (c ^ 30 ) == (c ^ 40 ); + return ((int)c ^ 30 ) > (c ^ 40 ); + also fails if c is "extern char" + + these are ok : + return (c + 30 ) > (c ^ 40 ); + return (c ^ 30 ) > (c + 40 ); + return (c ^ 30 ) + (c ^ 40 ); + return ('a' ^ 30 ) > (c ^ 40 ); + return (c ^ 40 ); + return (c ^ 30 ) > (c ^ 40 ); +*/ +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/BUG5.c b/gcc/testsuite/gcc.c-torture/unsorted/BUG5.c new file mode 100644 index 000000000000..9bed7136f59c --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/BUG5.c @@ -0,0 +1,18 @@ +enum bar +{ + one, + two +}; + +enum bar foo; + +void bar() +{ + switch (foo) + { + case one: + case two: + printf ("one to two\n"); + break; + } +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/BUG6.c b/gcc/testsuite/gcc.c-torture/unsorted/BUG6.c new file mode 100644 index 000000000000..b1394650964c --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/BUG6.c @@ -0,0 +1,8 @@ +main() +{ + unsigned long L; + double D; + D = L = -3; + printf("L=%lu, D=%g\n", L, D); + return 0; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/DFcmp.c b/gcc/testsuite/gcc.c-torture/unsorted/DFcmp.c new file mode 100644 index 000000000000..b32b0ecc6abb --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/DFcmp.c @@ -0,0 +1,280 @@ +#define type double + +type glob0, glob1; + +#define E0 ((type *)10000000) +#define reg0 r0 +#define indreg0 (*p0) +#define imm0 22 +#define limm0 ((type)((int)&glob0)) +#define adr0 (*E0) +#define adrreg0 (p0[10000000]) +#define adrx0 (E0[x0]) +#define regx0 (p0[x0]) + +#define E1 ((type *)11111111) +#define reg1 r1 +#define indreg1 (*p1) +#define imm1 33 +#define limm1 ((type)((int)&glob1)) +#define adr1 (*E1) +#define adrreg1 (p1[1111111/4]) +#define adrx1 (E1[x1]) +#define regx1 (p1[x1]) + +reg0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= reg1) return 1; else return 0;} + +reg0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= indreg1) return 1; else return 0;} + +reg0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= imm1) return 1; else return 0;} + +reg0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= limm1) return 1; else return 0;} + +reg0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= adr1) return 1; else return 0;} + +reg0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= adrreg1) return 1; else return 0;} + +reg0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= adrx1) return 1; else return 0;} + +reg0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= regx1) return 1; else return 0;} + +indreg0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= reg1) return 1; else return 0;} + +indreg0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= indreg1) return 1; else return 0;} + +indreg0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= imm1) return 1; else return 0;} + +indreg0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= limm1) return 1; else return 0;} + +indreg0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= adr1) return 1; else return 0;} + +indreg0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= adrreg1) return 1; else return 0;} + +indreg0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= adrx1) return 1; else return 0;} + +indreg0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= regx1) return 1; else return 0;} + +imm0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= reg1) return 1; else return 0;} + +imm0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= indreg1) return 1; else return 0;} + +imm0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= imm1) return 1; else return 0;} + +imm0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= limm1) return 1; else return 0;} + +imm0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= adr1) return 1; else return 0;} + +imm0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= adrreg1) return 1; else return 0;} + +imm0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= adrx1) return 1; else return 0;} + +imm0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= regx1) return 1; else return 0;} + +limm0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= reg1) return 1; else return 0;} + +limm0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= indreg1) return 1; else return 0;} + +limm0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= imm1) return 1; else return 0;} + +limm0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= limm1) return 1; else return 0;} + +limm0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= adr1) return 1; else return 0;} + +limm0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= adrreg1) return 1; else return 0;} + +limm0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= adrx1) return 1; else return 0;} + +limm0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= regx1) return 1; else return 0;} + +adr0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= reg1) return 1; else return 0;} + +adr0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= indreg1) return 1; else return 0;} + +adr0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= imm1) return 1; else return 0;} + +adr0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= limm1) return 1; else return 0;} + +adr0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= adr1) return 1; else return 0;} + +adr0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= adrreg1) return 1; else return 0;} + +adr0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= adrx1) return 1; else return 0;} + +adr0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= regx1) return 1; else return 0;} + +adrreg0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= reg1) return 1; else return 0;} + +adrreg0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= indreg1) return 1; else return 0;} + +adrreg0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= imm1) return 1; else return 0;} + +adrreg0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= limm1) return 1; else return 0;} + +adrreg0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= adr1) return 1; else return 0;} + +adrreg0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= adrreg1) return 1; else return 0;} + +adrreg0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= adrx1) return 1; else return 0;} + +adrreg0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= regx1) return 1; else return 0;} + +adrx0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= reg1) return 1; else return 0;} + +adrx0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= indreg1) return 1; else return 0;} + +adrx0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= imm1) return 1; else return 0;} + +adrx0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= limm1) return 1; else return 0;} + +adrx0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= adr1) return 1; else return 0;} + +adrx0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= adrreg1) return 1; else return 0;} + +adrx0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= adrx1) return 1; else return 0;} + +adrx0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= regx1) return 1; else return 0;} + +regx0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= reg1) return 1; else return 0;} + +regx0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= indreg1) return 1; else return 0;} + +regx0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= imm1) return 1; else return 0;} + +regx0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= limm1) return 1; else return 0;} + +regx0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= adr1) return 1; else return 0;} + +regx0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= adrreg1) return 1; else return 0;} + +regx0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= adrx1) return 1; else return 0;} + +regx0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= regx1) return 1; else return 0;} + diff --git a/gcc/testsuite/gcc.c-torture/unsorted/HIcmp.c b/gcc/testsuite/gcc.c-torture/unsorted/HIcmp.c new file mode 100644 index 000000000000..eea39841b95a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/HIcmp.c @@ -0,0 +1,280 @@ +#define type short + +type glob0, glob1; + +#define E0 ((type *)10000000) +#define reg0 r0 +#define indreg0 (*p0) +#define imm0 22 +#define limm0 ((type)&glob0) +#define adr0 (*E0) +#define adrreg0 (p0[10000000]) +#define adrx0 (E0[x0]) +#define regx0 (p0[x0]) + +#define E1 ((type *)11111111) +#define reg1 r1 +#define indreg1 (*p1) +#define imm1 33 +#define limm1 ((type)&glob1) +#define adr1 (*E1) +#define adrreg1 (p1[1111111/4]) +#define adrx1 (E1[x1]) +#define regx1 (p1[x1]) + +reg0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= reg1) return 1; else return 0;} + +reg0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= indreg1) return 1; else return 0;} + +reg0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= imm1) return 1; else return 0;} + +reg0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= limm1) return 1; else return 0;} + +reg0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= adr1) return 1; else return 0;} + +reg0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= adrreg1) return 1; else return 0;} + +reg0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= adrx1) return 1; else return 0;} + +reg0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= regx1) return 1; else return 0;} + +indreg0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= reg1) return 1; else return 0;} + +indreg0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= indreg1) return 1; else return 0;} + +indreg0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= imm1) return 1; else return 0;} + +indreg0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= limm1) return 1; else return 0;} + +indreg0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= adr1) return 1; else return 0;} + +indreg0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= adrreg1) return 1; else return 0;} + +indreg0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= adrx1) return 1; else return 0;} + +indreg0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= regx1) return 1; else return 0;} + +imm0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= reg1) return 1; else return 0;} + +imm0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= indreg1) return 1; else return 0;} + +imm0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= imm1) return 1; else return 0;} + +imm0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= limm1) return 1; else return 0;} + +imm0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= adr1) return 1; else return 0;} + +imm0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= adrreg1) return 1; else return 0;} + +imm0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= adrx1) return 1; else return 0;} + +imm0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= regx1) return 1; else return 0;} + +limm0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= reg1) return 1; else return 0;} + +limm0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= indreg1) return 1; else return 0;} + +limm0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= imm1) return 1; else return 0;} + +limm0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= limm1) return 1; else return 0;} + +limm0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= adr1) return 1; else return 0;} + +limm0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= adrreg1) return 1; else return 0;} + +limm0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= adrx1) return 1; else return 0;} + +limm0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= regx1) return 1; else return 0;} + +adr0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= reg1) return 1; else return 0;} + +adr0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= indreg1) return 1; else return 0;} + +adr0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= imm1) return 1; else return 0;} + +adr0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= limm1) return 1; else return 0;} + +adr0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= adr1) return 1; else return 0;} + +adr0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= adrreg1) return 1; else return 0;} + +adr0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= adrx1) return 1; else return 0;} + +adr0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= regx1) return 1; else return 0;} + +adrreg0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= reg1) return 1; else return 0;} + +adrreg0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= indreg1) return 1; else return 0;} + +adrreg0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= imm1) return 1; else return 0;} + +adrreg0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= limm1) return 1; else return 0;} + +adrreg0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= adr1) return 1; else return 0;} + +adrreg0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= adrreg1) return 1; else return 0;} + +adrreg0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= adrx1) return 1; else return 0;} + +adrreg0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= regx1) return 1; else return 0;} + +adrx0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= reg1) return 1; else return 0;} + +adrx0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= indreg1) return 1; else return 0;} + +adrx0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= imm1) return 1; else return 0;} + +adrx0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= limm1) return 1; else return 0;} + +adrx0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= adr1) return 1; else return 0;} + +adrx0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= adrreg1) return 1; else return 0;} + +adrx0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= adrx1) return 1; else return 0;} + +adrx0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= regx1) return 1; else return 0;} + +regx0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= reg1) return 1; else return 0;} + +regx0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= indreg1) return 1; else return 0;} + +regx0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= imm1) return 1; else return 0;} + +regx0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= limm1) return 1; else return 0;} + +regx0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= adr1) return 1; else return 0;} + +regx0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= adrreg1) return 1; else return 0;} + +regx0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= adrx1) return 1; else return 0;} + +regx0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= regx1) return 1; else return 0;} + diff --git a/gcc/testsuite/gcc.c-torture/unsorted/HIset.c b/gcc/testsuite/gcc.c-torture/unsorted/HIset.c new file mode 100644 index 000000000000..8108fbb27c47 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/HIset.c @@ -0,0 +1,216 @@ +#define E0 ((type *)10000000) +#define reg0 r0 +#define indreg0 (*p0) +#define imm0 22 +#define limm0 ((type)(int)&glob0) +#define adr0 (*E0) +#define adrreg0 (p0[10000000]) +#define adrx0 (E0[x0]) +#define regx0 (p0[x0]) + +#define E1 ((type *)11111111) +#define reg1 r1 +#define indreg1 (*p1) +#define imm1 33 +#define limm1 ((type)(int)&glob1) +#define adr1 (*E1) +#define adrreg1 (p1[1111111/4]) +#define adrx1 (E1[x1]) +#define regx1 (p1[x1]) + +int glob0, glob1; + +#define type short + +reg0reg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{reg0 = reg1; } + +reg0indreg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{reg0 = indreg1; } + +reg0imm1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{reg0 = imm1; } + +reg0limm1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{reg0 = limm1; } + +reg0adr1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{reg0 = adr1; } + +reg0adrreg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{reg0 = adrreg1; } + +reg0adrx1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{reg0 = adrx1; } + +reg0regx1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{reg0 = regx1; } + +indreg0reg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{indreg0 = reg1; } + +indreg0indreg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{indreg0 = indreg1; } + +indreg0imm1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{indreg0 = imm1; } + +indreg0limm1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{indreg0 = limm1; } + +indreg0adr1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{indreg0 = adr1; } + +indreg0adrreg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{indreg0 = adrreg1; } + +indreg0adrx1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{indreg0 = adrx1; } + +indreg0regx1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{indreg0 = regx1; } + +adr0reg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adr0 = reg1; } + +adr0indreg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adr0 = indreg1; } + +adr0imm1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adr0 = imm1; } + +adr0limm1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adr0 = limm1; } + +adr0adr1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adr0 = adr1; } + +adr0adrreg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adr0 = adrreg1; } + +adr0adrx1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adr0 = adrx1; } + +adr0regx1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adr0 = regx1; } + +adrreg0reg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrreg0 = reg1; } + +adrreg0indreg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrreg0 = indreg1; } + +adrreg0imm1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrreg0 = imm1; } + +adrreg0limm1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrreg0 = limm1; } + +adrreg0adr1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrreg0 = adr1; } + +adrreg0adrreg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrreg0 = adrreg1; } + +adrreg0adrx1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrreg0 = adrx1; } + +adrreg0regx1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrreg0 = regx1; } + +adrx0reg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrx0 = reg1; } + +adrx0indreg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrx0 = indreg1; } + +adrx0imm1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrx0 = imm1; } + +adrx0limm1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrx0 = limm1; } + +adrx0adr1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrx0 = adr1; } + +adrx0adrreg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrx0 = adrreg1; } + +adrx0adrx1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrx0 = adrx1; } + +adrx0regx1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrx0 = regx1; } + +regx0reg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{regx0 = reg1; } + +regx0indreg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{regx0 = indreg1; } + +regx0imm1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{regx0 = imm1; } + +regx0limm1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{regx0 = limm1; } + +regx0adr1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{regx0 = adr1; } + +regx0adrreg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{regx0 = adrreg1; } + +regx0adrx1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{regx0 = adrx1; } + +regx0regx1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{regx0 = regx1; } + diff --git a/gcc/testsuite/gcc.c-torture/unsorted/Makefile.in b/gcc/testsuite/gcc.c-torture/unsorted/Makefile.in new file mode 100644 index 000000000000..e6209dbc6c2d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/Makefile.in @@ -0,0 +1,12 @@ +#### host, target, and site specific Makefile frags come in here. + +srcdir = . + +# Nothing to do... +all: + +clean: + -rm -f *.o *.diff *~ *.bad core *.x + +distclean: clean + -rm -f Makefile config.status diff --git a/gcc/testsuite/gcc.c-torture/unsorted/PYRBUG.c b/gcc/testsuite/gcc.c-torture/unsorted/PYRBUG.c new file mode 100644 index 000000000000..c64c3f5e1b22 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/PYRBUG.c @@ -0,0 +1,17 @@ +typedef struct +{ + int v; + int h; +} Point; + +typedef struct +{ + int top, left, bottom, right; +} Rect; + +int +x_PtInRect (Point pt, Rect *r) +{ + return pt.v >= r->top && pt.v < r->bottom + && pt.h >= r->left && pt.h < r->right; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/QIcmp.c b/gcc/testsuite/gcc.c-torture/unsorted/QIcmp.c new file mode 100644 index 000000000000..c5161646f2cb --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/QIcmp.c @@ -0,0 +1,280 @@ +#define type signed char + +type glob0, glob1; + +#define E0 ((type *)10000000) +#define reg0 r0 +#define indreg0 (*p0) +#define imm0 22 +#define limm0 ((type)&glob0) +#define adr0 (*E0) +#define adrreg0 (p0[10000000]) +#define adrx0 (E0[x0]) +#define regx0 (p0[x0]) + +#define E1 ((type *)11111111) +#define reg1 r1 +#define indreg1 (*p1) +#define imm1 33 +#define limm1 ((type)&glob1) +#define adr1 (*E1) +#define adrreg1 (p1[1111111/4]) +#define adrx1 (E1[x1]) +#define regx1 (p1[x1]) + +reg0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= reg1) return 1; else return 0;} + +reg0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= indreg1) return 1; else return 0;} + +reg0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= imm1) return 1; else return 0;} + +reg0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= limm1) return 1; else return 0;} + +reg0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= adr1) return 1; else return 0;} + +reg0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= adrreg1) return 1; else return 0;} + +reg0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= adrx1) return 1; else return 0;} + +reg0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= regx1) return 1; else return 0;} + +indreg0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= reg1) return 1; else return 0;} + +indreg0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= indreg1) return 1; else return 0;} + +indreg0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= imm1) return 1; else return 0;} + +indreg0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= limm1) return 1; else return 0;} + +indreg0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= adr1) return 1; else return 0;} + +indreg0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= adrreg1) return 1; else return 0;} + +indreg0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= adrx1) return 1; else return 0;} + +indreg0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= regx1) return 1; else return 0;} + +imm0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= reg1) return 1; else return 0;} + +imm0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= indreg1) return 1; else return 0;} + +imm0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= imm1) return 1; else return 0;} + +imm0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= limm1) return 1; else return 0;} + +imm0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= adr1) return 1; else return 0;} + +imm0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= adrreg1) return 1; else return 0;} + +imm0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= adrx1) return 1; else return 0;} + +imm0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= regx1) return 1; else return 0;} + +limm0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= reg1) return 1; else return 0;} + +limm0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= indreg1) return 1; else return 0;} + +limm0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= imm1) return 1; else return 0;} + +limm0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= limm1) return 1; else return 0;} + +limm0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= adr1) return 1; else return 0;} + +limm0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= adrreg1) return 1; else return 0;} + +limm0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= adrx1) return 1; else return 0;} + +limm0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= regx1) return 1; else return 0;} + +adr0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= reg1) return 1; else return 0;} + +adr0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= indreg1) return 1; else return 0;} + +adr0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= imm1) return 1; else return 0;} + +adr0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= limm1) return 1; else return 0;} + +adr0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= adr1) return 1; else return 0;} + +adr0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= adrreg1) return 1; else return 0;} + +adr0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= adrx1) return 1; else return 0;} + +adr0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= regx1) return 1; else return 0;} + +adrreg0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= reg1) return 1; else return 0;} + +adrreg0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= indreg1) return 1; else return 0;} + +adrreg0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= imm1) return 1; else return 0;} + +adrreg0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= limm1) return 1; else return 0;} + +adrreg0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= adr1) return 1; else return 0;} + +adrreg0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= adrreg1) return 1; else return 0;} + +adrreg0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= adrx1) return 1; else return 0;} + +adrreg0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= regx1) return 1; else return 0;} + +adrx0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= reg1) return 1; else return 0;} + +adrx0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= indreg1) return 1; else return 0;} + +adrx0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= imm1) return 1; else return 0;} + +adrx0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= limm1) return 1; else return 0;} + +adrx0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= adr1) return 1; else return 0;} + +adrx0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= adrreg1) return 1; else return 0;} + +adrx0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= adrx1) return 1; else return 0;} + +adrx0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= regx1) return 1; else return 0;} + +regx0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= reg1) return 1; else return 0;} + +regx0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= indreg1) return 1; else return 0;} + +regx0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= imm1) return 1; else return 0;} + +regx0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= limm1) return 1; else return 0;} + +regx0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= adr1) return 1; else return 0;} + +regx0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= adrreg1) return 1; else return 0;} + +regx0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= adrx1) return 1; else return 0;} + +regx0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= regx1) return 1; else return 0;} + diff --git a/gcc/testsuite/gcc.c-torture/unsorted/QIset.c b/gcc/testsuite/gcc.c-torture/unsorted/QIset.c new file mode 100644 index 000000000000..212609dc864a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/QIset.c @@ -0,0 +1,216 @@ +#define E0 ((type *)10000000) +#define reg0 r0 +#define indreg0 (*p0) +#define imm0 22 +#define limm0 ((type)(int)&glob0) +#define adr0 (*E0) +#define adrreg0 (p0[10000000]) +#define adrx0 (E0[x0]) +#define regx0 (p0[x0]) + +#define E1 ((type *)11111111) +#define reg1 r1 +#define indreg1 (*p1) +#define imm1 33 +#define limm1 ((type)(int)&glob1) +#define adr1 (*E1) +#define adrreg1 (p1[1111111/4]) +#define adrx1 (E1[x1]) +#define regx1 (p1[x1]) + +int glob0, glob1; + +#define type char + +reg0reg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{reg0 = reg1; } + +reg0indreg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{reg0 = indreg1; } + +reg0imm1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{reg0 = imm1; } + +reg0limm1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{reg0 = limm1; } + +reg0adr1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{reg0 = adr1; } + +reg0adrreg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{reg0 = adrreg1; } + +reg0adrx1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{reg0 = adrx1; } + +reg0regx1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{reg0 = regx1; } + +indreg0reg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{indreg0 = reg1; } + +indreg0indreg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{indreg0 = indreg1; } + +indreg0imm1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{indreg0 = imm1; } + +indreg0limm1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{indreg0 = limm1; } + +indreg0adr1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{indreg0 = adr1; } + +indreg0adrreg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{indreg0 = adrreg1; } + +indreg0adrx1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{indreg0 = adrx1; } + +indreg0regx1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{indreg0 = regx1; } + +adr0reg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adr0 = reg1; } + +adr0indreg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adr0 = indreg1; } + +adr0imm1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adr0 = imm1; } + +adr0limm1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adr0 = limm1; } + +adr0adr1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adr0 = adr1; } + +adr0adrreg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adr0 = adrreg1; } + +adr0adrx1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adr0 = adrx1; } + +adr0regx1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adr0 = regx1; } + +adrreg0reg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrreg0 = reg1; } + +adrreg0indreg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrreg0 = indreg1; } + +adrreg0imm1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrreg0 = imm1; } + +adrreg0limm1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrreg0 = limm1; } + +adrreg0adr1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrreg0 = adr1; } + +adrreg0adrreg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrreg0 = adrreg1; } + +adrreg0adrx1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrreg0 = adrx1; } + +adrreg0regx1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrreg0 = regx1; } + +adrx0reg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrx0 = reg1; } + +adrx0indreg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrx0 = indreg1; } + +adrx0imm1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrx0 = imm1; } + +adrx0limm1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrx0 = limm1; } + +adrx0adr1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrx0 = adr1; } + +adrx0adrreg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrx0 = adrreg1; } + +adrx0adrx1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrx0 = adrx1; } + +adrx0regx1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrx0 = regx1; } + +regx0reg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{regx0 = reg1; } + +regx0indreg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{regx0 = indreg1; } + +regx0imm1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{regx0 = imm1; } + +regx0limm1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{regx0 = limm1; } + +regx0adr1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{regx0 = adr1; } + +regx0adrreg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{regx0 = adrreg1; } + +regx0adrx1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{regx0 = adrx1; } + +regx0regx1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{regx0 = regx1; } + diff --git a/gcc/testsuite/gcc.c-torture/unsorted/SFset.c b/gcc/testsuite/gcc.c-torture/unsorted/SFset.c new file mode 100644 index 000000000000..ad3e41b834b8 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/SFset.c @@ -0,0 +1,216 @@ +#define E0 ((type *)10000000) +#define reg0 r0 +#define indreg0 (*p0) +#define imm0 22 +#define limm0 ((type)(int)&glob0) +#define adr0 (*E0) +#define adrreg0 (p0[10000000]) +#define adrx0 (E0[x0]) +#define regx0 (p0[x0]) + +#define E1 ((type *)11111111) +#define reg1 r1 +#define indreg1 (*p1) +#define imm1 33 +#define limm1 ((type)(int)&glob1) +#define adr1 (*E1) +#define adrreg1 (p1[1111111/4]) +#define adrx1 (E1[x1]) +#define regx1 (p1[x1]) + +int glob0, glob1; + +#define type float + +reg0reg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{reg0 = reg1; } + +reg0indreg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{reg0 = indreg1; } + +reg0imm1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{reg0 = imm1; } + +reg0limm1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{reg0 = limm1; } + +reg0adr1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{reg0 = adr1; } + +reg0adrreg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{reg0 = adrreg1; } + +reg0adrx1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{reg0 = adrx1; } + +reg0regx1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{reg0 = regx1; } + +indreg0reg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{indreg0 = reg1; } + +indreg0indreg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{indreg0 = indreg1; } + +indreg0imm1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{indreg0 = imm1; } + +indreg0limm1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{indreg0 = limm1; } + +indreg0adr1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{indreg0 = adr1; } + +indreg0adrreg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{indreg0 = adrreg1; } + +indreg0adrx1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{indreg0 = adrx1; } + +indreg0regx1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{indreg0 = regx1; } + +adr0reg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adr0 = reg1; } + +adr0indreg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adr0 = indreg1; } + +adr0imm1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adr0 = imm1; } + +adr0limm1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adr0 = limm1; } + +adr0adr1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adr0 = adr1; } + +adr0adrreg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adr0 = adrreg1; } + +adr0adrx1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adr0 = adrx1; } + +adr0regx1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adr0 = regx1; } + +adrreg0reg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrreg0 = reg1; } + +adrreg0indreg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrreg0 = indreg1; } + +adrreg0imm1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrreg0 = imm1; } + +adrreg0limm1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrreg0 = limm1; } + +adrreg0adr1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrreg0 = adr1; } + +adrreg0adrreg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrreg0 = adrreg1; } + +adrreg0adrx1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrreg0 = adrx1; } + +adrreg0regx1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrreg0 = regx1; } + +adrx0reg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrx0 = reg1; } + +adrx0indreg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrx0 = indreg1; } + +adrx0imm1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrx0 = imm1; } + +adrx0limm1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrx0 = limm1; } + +adrx0adr1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrx0 = adr1; } + +adrx0adrreg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrx0 = adrreg1; } + +adrx0adrx1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrx0 = adrx1; } + +adrx0regx1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrx0 = regx1; } + +regx0reg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{regx0 = reg1; } + +regx0indreg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{regx0 = indreg1; } + +regx0imm1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{regx0 = imm1; } + +regx0limm1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{regx0 = limm1; } + +regx0adr1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{regx0 = adr1; } + +regx0adrreg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{regx0 = adrreg1; } + +regx0adrx1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{regx0 = adrx1; } + +regx0regx1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{regx0 = regx1; } + diff --git a/gcc/testsuite/gcc.c-torture/unsorted/SIcmp.c b/gcc/testsuite/gcc.c-torture/unsorted/SIcmp.c new file mode 100644 index 000000000000..30e073924673 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/SIcmp.c @@ -0,0 +1,280 @@ +#define type int + +type glob0, glob1; + +#define E0 ((type *)10000000) +#define reg0 r0 +#define indreg0 (*p0) +#define imm0 22 +#define limm0 ((type)&glob0) +#define adr0 (*E0) +#define adrreg0 (p0[10000000]) +#define adrx0 (E0[x0]) +#define regx0 (p0[x0]) + +#define E1 ((type *)11111111) +#define reg1 r1 +#define indreg1 (*p1) +#define imm1 33 +#define limm1 ((type)&glob1) +#define adr1 (*E1) +#define adrreg1 (p1[1111111/4]) +#define adrx1 (E1[x1]) +#define regx1 (p1[x1]) + +reg0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= reg1) return 1; else return 0;} + +reg0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= indreg1) return 1; else return 0;} + +reg0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= imm1) return 1; else return 0;} + +reg0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= limm1) return 1; else return 0;} + +reg0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= adr1) return 1; else return 0;} + +reg0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= adrreg1) return 1; else return 0;} + +reg0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= adrx1) return 1; else return 0;} + +reg0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= regx1) return 1; else return 0;} + +indreg0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= reg1) return 1; else return 0;} + +indreg0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= indreg1) return 1; else return 0;} + +indreg0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= imm1) return 1; else return 0;} + +indreg0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= limm1) return 1; else return 0;} + +indreg0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= adr1) return 1; else return 0;} + +indreg0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= adrreg1) return 1; else return 0;} + +indreg0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= adrx1) return 1; else return 0;} + +indreg0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= regx1) return 1; else return 0;} + +imm0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= reg1) return 1; else return 0;} + +imm0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= indreg1) return 1; else return 0;} + +imm0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= imm1) return 1; else return 0;} + +imm0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= limm1) return 1; else return 0;} + +imm0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= adr1) return 1; else return 0;} + +imm0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= adrreg1) return 1; else return 0;} + +imm0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= adrx1) return 1; else return 0;} + +imm0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= regx1) return 1; else return 0;} + +limm0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= reg1) return 1; else return 0;} + +limm0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= indreg1) return 1; else return 0;} + +limm0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= imm1) return 1; else return 0;} + +limm0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= limm1) return 1; else return 0;} + +limm0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= adr1) return 1; else return 0;} + +limm0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= adrreg1) return 1; else return 0;} + +limm0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= adrx1) return 1; else return 0;} + +limm0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= regx1) return 1; else return 0;} + +adr0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= reg1) return 1; else return 0;} + +adr0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= indreg1) return 1; else return 0;} + +adr0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= imm1) return 1; else return 0;} + +adr0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= limm1) return 1; else return 0;} + +adr0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= adr1) return 1; else return 0;} + +adr0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= adrreg1) return 1; else return 0;} + +adr0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= adrx1) return 1; else return 0;} + +adr0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= regx1) return 1; else return 0;} + +adrreg0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= reg1) return 1; else return 0;} + +adrreg0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= indreg1) return 1; else return 0;} + +adrreg0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= imm1) return 1; else return 0;} + +adrreg0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= limm1) return 1; else return 0;} + +adrreg0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= adr1) return 1; else return 0;} + +adrreg0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= adrreg1) return 1; else return 0;} + +adrreg0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= adrx1) return 1; else return 0;} + +adrreg0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= regx1) return 1; else return 0;} + +adrx0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= reg1) return 1; else return 0;} + +adrx0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= indreg1) return 1; else return 0;} + +adrx0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= imm1) return 1; else return 0;} + +adrx0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= limm1) return 1; else return 0;} + +adrx0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= adr1) return 1; else return 0;} + +adrx0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= adrreg1) return 1; else return 0;} + +adrx0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= adrx1) return 1; else return 0;} + +adrx0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= regx1) return 1; else return 0;} + +regx0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= reg1) return 1; else return 0;} + +regx0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= indreg1) return 1; else return 0;} + +regx0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= imm1) return 1; else return 0;} + +regx0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= limm1) return 1; else return 0;} + +regx0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= adr1) return 1; else return 0;} + +regx0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= adrreg1) return 1; else return 0;} + +regx0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= adrx1) return 1; else return 0;} + +regx0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= regx1) return 1; else return 0;} + diff --git a/gcc/testsuite/gcc.c-torture/unsorted/SIset.c b/gcc/testsuite/gcc.c-torture/unsorted/SIset.c new file mode 100644 index 000000000000..74a51cd0fb48 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/SIset.c @@ -0,0 +1,216 @@ +#define E0 ((type *)10000000) +#define reg0 r0 +#define indreg0 (*p0) +#define imm0 22 +#define limm0 ((type)(int)&glob0) +#define adr0 (*E0) +#define adrreg0 (p0[10000000]) +#define adrx0 (E0[x0]) +#define regx0 (p0[x0]) + +#define E1 ((type *)11111111) +#define reg1 r1 +#define indreg1 (*p1) +#define imm1 33 +#define limm1 ((type)(int)&glob1) +#define adr1 (*E1) +#define adrreg1 (p1[1111111/4]) +#define adrx1 (E1[x1]) +#define regx1 (p1[x1]) + +int glob0, glob1; + +#define type int + +reg0reg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{reg0 = reg1; } + +reg0indreg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{reg0 = indreg1; } + +reg0imm1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{reg0 = imm1; } + +reg0limm1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{reg0 = limm1; } + +reg0adr1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{reg0 = adr1; } + +reg0adrreg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{reg0 = adrreg1; } + +reg0adrx1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{reg0 = adrx1; } + +reg0regx1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{reg0 = regx1; } + +indreg0reg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{indreg0 = reg1; } + +indreg0indreg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{indreg0 = indreg1; } + +indreg0imm1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{indreg0 = imm1; } + +indreg0limm1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{indreg0 = limm1; } + +indreg0adr1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{indreg0 = adr1; } + +indreg0adrreg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{indreg0 = adrreg1; } + +indreg0adrx1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{indreg0 = adrx1; } + +indreg0regx1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{indreg0 = regx1; } + +adr0reg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adr0 = reg1; } + +adr0indreg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adr0 = indreg1; } + +adr0imm1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adr0 = imm1; } + +adr0limm1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adr0 = limm1; } + +adr0adr1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adr0 = adr1; } + +adr0adrreg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adr0 = adrreg1; } + +adr0adrx1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adr0 = adrx1; } + +adr0regx1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adr0 = regx1; } + +adrreg0reg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrreg0 = reg1; } + +adrreg0indreg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrreg0 = indreg1; } + +adrreg0imm1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrreg0 = imm1; } + +adrreg0limm1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrreg0 = limm1; } + +adrreg0adr1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrreg0 = adr1; } + +adrreg0adrreg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrreg0 = adrreg1; } + +adrreg0adrx1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrreg0 = adrx1; } + +adrreg0regx1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrreg0 = regx1; } + +adrx0reg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrx0 = reg1; } + +adrx0indreg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrx0 = indreg1; } + +adrx0imm1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrx0 = imm1; } + +adrx0limm1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrx0 = limm1; } + +adrx0adr1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrx0 = adr1; } + +adrx0adrreg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrx0 = adrreg1; } + +adrx0adrx1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrx0 = adrx1; } + +adrx0regx1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{adrx0 = regx1; } + +regx0reg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{regx0 = reg1; } + +regx0indreg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{regx0 = indreg1; } + +regx0imm1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{regx0 = imm1; } + +regx0limm1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{regx0 = limm1; } + +regx0adr1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{regx0 = adr1; } + +regx0adrreg1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{regx0 = adrreg1; } + +regx0adrx1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{regx0 = adrx1; } + +regx0regx1_set (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{regx0 = regx1; } + diff --git a/gcc/testsuite/gcc.c-torture/unsorted/UHIcmp.c b/gcc/testsuite/gcc.c-torture/unsorted/UHIcmp.c new file mode 100644 index 000000000000..1e969e7103ac --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/UHIcmp.c @@ -0,0 +1,280 @@ +#define type unsigned short + +type glob0, glob1; + +#define E0 ((type *)10000000) +#define reg0 r0 +#define indreg0 (*p0) +#define imm0 22 +#define limm0 ((type)&glob0) +#define adr0 (*E0) +#define adrreg0 (p0[10000000]) +#define adrx0 (E0[x0]) +#define regx0 (p0[x0]) + +#define E1 ((type *)11111111) +#define reg1 r1 +#define indreg1 (*p1) +#define imm1 33 +#define limm1 ((type)&glob1) +#define adr1 (*E1) +#define adrreg1 (p1[1111111/4]) +#define adrx1 (E1[x1]) +#define regx1 (p1[x1]) + +reg0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= reg1) return 1; else return 0;} + +reg0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= indreg1) return 1; else return 0;} + +reg0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= imm1) return 1; else return 0;} + +reg0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= limm1) return 1; else return 0;} + +reg0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= adr1) return 1; else return 0;} + +reg0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= adrreg1) return 1; else return 0;} + +reg0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= adrx1) return 1; else return 0;} + +reg0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= regx1) return 1; else return 0;} + +indreg0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= reg1) return 1; else return 0;} + +indreg0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= indreg1) return 1; else return 0;} + +indreg0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= imm1) return 1; else return 0;} + +indreg0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= limm1) return 1; else return 0;} + +indreg0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= adr1) return 1; else return 0;} + +indreg0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= adrreg1) return 1; else return 0;} + +indreg0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= adrx1) return 1; else return 0;} + +indreg0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= regx1) return 1; else return 0;} + +imm0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= reg1) return 1; else return 0;} + +imm0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= indreg1) return 1; else return 0;} + +imm0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= imm1) return 1; else return 0;} + +imm0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= limm1) return 1; else return 0;} + +imm0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= adr1) return 1; else return 0;} + +imm0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= adrreg1) return 1; else return 0;} + +imm0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= adrx1) return 1; else return 0;} + +imm0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= regx1) return 1; else return 0;} + +limm0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= reg1) return 1; else return 0;} + +limm0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= indreg1) return 1; else return 0;} + +limm0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= imm1) return 1; else return 0;} + +limm0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= limm1) return 1; else return 0;} + +limm0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= adr1) return 1; else return 0;} + +limm0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= adrreg1) return 1; else return 0;} + +limm0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= adrx1) return 1; else return 0;} + +limm0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= regx1) return 1; else return 0;} + +adr0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= reg1) return 1; else return 0;} + +adr0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= indreg1) return 1; else return 0;} + +adr0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= imm1) return 1; else return 0;} + +adr0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= limm1) return 1; else return 0;} + +adr0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= adr1) return 1; else return 0;} + +adr0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= adrreg1) return 1; else return 0;} + +adr0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= adrx1) return 1; else return 0;} + +adr0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= regx1) return 1; else return 0;} + +adrreg0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= reg1) return 1; else return 0;} + +adrreg0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= indreg1) return 1; else return 0;} + +adrreg0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= imm1) return 1; else return 0;} + +adrreg0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= limm1) return 1; else return 0;} + +adrreg0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= adr1) return 1; else return 0;} + +adrreg0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= adrreg1) return 1; else return 0;} + +adrreg0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= adrx1) return 1; else return 0;} + +adrreg0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= regx1) return 1; else return 0;} + +adrx0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= reg1) return 1; else return 0;} + +adrx0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= indreg1) return 1; else return 0;} + +adrx0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= imm1) return 1; else return 0;} + +adrx0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= limm1) return 1; else return 0;} + +adrx0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= adr1) return 1; else return 0;} + +adrx0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= adrreg1) return 1; else return 0;} + +adrx0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= adrx1) return 1; else return 0;} + +adrx0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= regx1) return 1; else return 0;} + +regx0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= reg1) return 1; else return 0;} + +regx0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= indreg1) return 1; else return 0;} + +regx0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= imm1) return 1; else return 0;} + +regx0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= limm1) return 1; else return 0;} + +regx0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= adr1) return 1; else return 0;} + +regx0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= adrreg1) return 1; else return 0;} + +regx0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= adrx1) return 1; else return 0;} + +regx0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= regx1) return 1; else return 0;} + diff --git a/gcc/testsuite/gcc.c-torture/unsorted/UQIcmp.c b/gcc/testsuite/gcc.c-torture/unsorted/UQIcmp.c new file mode 100644 index 000000000000..3e9cdebc903e --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/UQIcmp.c @@ -0,0 +1,280 @@ +#define type unsigned char + +type glob0, glob1; + +#define E0 ((type *)10000000) +#define reg0 r0 +#define indreg0 (*p0) +#define imm0 22 +#define limm0 ((type)&glob0) +#define adr0 (*E0) +#define adrreg0 (p0[10000000]) +#define adrx0 (E0[x0]) +#define regx0 (p0[x0]) + +#define E1 ((type *)11111111) +#define reg1 r1 +#define indreg1 (*p1) +#define imm1 33 +#define limm1 ((type)&glob1) +#define adr1 (*E1) +#define adrreg1 (p1[1111111/4]) +#define adrx1 (E1[x1]) +#define regx1 (p1[x1]) + +reg0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= reg1) return 1; else return 0;} + +reg0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= indreg1) return 1; else return 0;} + +reg0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= imm1) return 1; else return 0;} + +reg0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= limm1) return 1; else return 0;} + +reg0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= adr1) return 1; else return 0;} + +reg0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= adrreg1) return 1; else return 0;} + +reg0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= adrx1) return 1; else return 0;} + +reg0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= regx1) return 1; else return 0;} + +indreg0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= reg1) return 1; else return 0;} + +indreg0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= indreg1) return 1; else return 0;} + +indreg0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= imm1) return 1; else return 0;} + +indreg0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= limm1) return 1; else return 0;} + +indreg0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= adr1) return 1; else return 0;} + +indreg0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= adrreg1) return 1; else return 0;} + +indreg0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= adrx1) return 1; else return 0;} + +indreg0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= regx1) return 1; else return 0;} + +imm0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= reg1) return 1; else return 0;} + +imm0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= indreg1) return 1; else return 0;} + +imm0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= imm1) return 1; else return 0;} + +imm0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= limm1) return 1; else return 0;} + +imm0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= adr1) return 1; else return 0;} + +imm0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= adrreg1) return 1; else return 0;} + +imm0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= adrx1) return 1; else return 0;} + +imm0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= regx1) return 1; else return 0;} + +limm0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= reg1) return 1; else return 0;} + +limm0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= indreg1) return 1; else return 0;} + +limm0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= imm1) return 1; else return 0;} + +limm0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= limm1) return 1; else return 0;} + +limm0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= adr1) return 1; else return 0;} + +limm0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= adrreg1) return 1; else return 0;} + +limm0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= adrx1) return 1; else return 0;} + +limm0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= regx1) return 1; else return 0;} + +adr0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= reg1) return 1; else return 0;} + +adr0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= indreg1) return 1; else return 0;} + +adr0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= imm1) return 1; else return 0;} + +adr0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= limm1) return 1; else return 0;} + +adr0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= adr1) return 1; else return 0;} + +adr0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= adrreg1) return 1; else return 0;} + +adr0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= adrx1) return 1; else return 0;} + +adr0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= regx1) return 1; else return 0;} + +adrreg0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= reg1) return 1; else return 0;} + +adrreg0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= indreg1) return 1; else return 0;} + +adrreg0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= imm1) return 1; else return 0;} + +adrreg0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= limm1) return 1; else return 0;} + +adrreg0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= adr1) return 1; else return 0;} + +adrreg0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= adrreg1) return 1; else return 0;} + +adrreg0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= adrx1) return 1; else return 0;} + +adrreg0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= regx1) return 1; else return 0;} + +adrx0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= reg1) return 1; else return 0;} + +adrx0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= indreg1) return 1; else return 0;} + +adrx0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= imm1) return 1; else return 0;} + +adrx0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= limm1) return 1; else return 0;} + +adrx0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= adr1) return 1; else return 0;} + +adrx0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= adrreg1) return 1; else return 0;} + +adrx0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= adrx1) return 1; else return 0;} + +adrx0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= regx1) return 1; else return 0;} + +regx0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= reg1) return 1; else return 0;} + +regx0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= indreg1) return 1; else return 0;} + +regx0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= imm1) return 1; else return 0;} + +regx0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= limm1) return 1; else return 0;} + +regx0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= adr1) return 1; else return 0;} + +regx0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= adrreg1) return 1; else return 0;} + +regx0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= adrx1) return 1; else return 0;} + +regx0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= regx1) return 1; else return 0;} + diff --git a/gcc/testsuite/gcc.c-torture/unsorted/USIcmp.c b/gcc/testsuite/gcc.c-torture/unsorted/USIcmp.c new file mode 100644 index 000000000000..e2175262a426 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/USIcmp.c @@ -0,0 +1,280 @@ +#define type unsigned int + +type glob0, glob1; + +#define E0 ((type *)10000000) +#define reg0 r0 +#define indreg0 (*p0) +#define imm0 22 +#define limm0 ((type)&glob0) +#define adr0 (*E0) +#define adrreg0 (p0[10000000]) +#define adrx0 (E0[x0]) +#define regx0 (p0[x0]) + +#define E1 ((type *)11111111) +#define reg1 r1 +#define indreg1 (*p1) +#define imm1 33 +#define limm1 ((type)&glob1) +#define adr1 (*E1) +#define adrreg1 (p1[1111111/4]) +#define adrx1 (E1[x1]) +#define regx1 (p1[x1]) + +reg0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= reg1) return 1; else return 0;} + +reg0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= indreg1) return 1; else return 0;} + +reg0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= imm1) return 1; else return 0;} + +reg0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= limm1) return 1; else return 0;} + +reg0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= adr1) return 1; else return 0;} + +reg0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= adrreg1) return 1; else return 0;} + +reg0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= adrx1) return 1; else return 0;} + +reg0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (reg0 <= regx1) return 1; else return 0;} + +indreg0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= reg1) return 1; else return 0;} + +indreg0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= indreg1) return 1; else return 0;} + +indreg0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= imm1) return 1; else return 0;} + +indreg0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= limm1) return 1; else return 0;} + +indreg0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= adr1) return 1; else return 0;} + +indreg0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= adrreg1) return 1; else return 0;} + +indreg0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= adrx1) return 1; else return 0;} + +indreg0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (indreg0 <= regx1) return 1; else return 0;} + +imm0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= reg1) return 1; else return 0;} + +imm0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= indreg1) return 1; else return 0;} + +imm0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= imm1) return 1; else return 0;} + +imm0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= limm1) return 1; else return 0;} + +imm0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= adr1) return 1; else return 0;} + +imm0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= adrreg1) return 1; else return 0;} + +imm0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= adrx1) return 1; else return 0;} + +imm0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (imm0 <= regx1) return 1; else return 0;} + +limm0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= reg1) return 1; else return 0;} + +limm0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= indreg1) return 1; else return 0;} + +limm0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= imm1) return 1; else return 0;} + +limm0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= limm1) return 1; else return 0;} + +limm0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= adr1) return 1; else return 0;} + +limm0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= adrreg1) return 1; else return 0;} + +limm0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= adrx1) return 1; else return 0;} + +limm0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (limm0 <= regx1) return 1; else return 0;} + +adr0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= reg1) return 1; else return 0;} + +adr0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= indreg1) return 1; else return 0;} + +adr0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= imm1) return 1; else return 0;} + +adr0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= limm1) return 1; else return 0;} + +adr0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= adr1) return 1; else return 0;} + +adr0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= adrreg1) return 1; else return 0;} + +adr0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= adrx1) return 1; else return 0;} + +adr0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adr0 <= regx1) return 1; else return 0;} + +adrreg0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= reg1) return 1; else return 0;} + +adrreg0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= indreg1) return 1; else return 0;} + +adrreg0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= imm1) return 1; else return 0;} + +adrreg0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= limm1) return 1; else return 0;} + +adrreg0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= adr1) return 1; else return 0;} + +adrreg0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= adrreg1) return 1; else return 0;} + +adrreg0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= adrx1) return 1; else return 0;} + +adrreg0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrreg0 <= regx1) return 1; else return 0;} + +adrx0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= reg1) return 1; else return 0;} + +adrx0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= indreg1) return 1; else return 0;} + +adrx0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= imm1) return 1; else return 0;} + +adrx0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= limm1) return 1; else return 0;} + +adrx0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= adr1) return 1; else return 0;} + +adrx0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= adrreg1) return 1; else return 0;} + +adrx0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= adrx1) return 1; else return 0;} + +adrx0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (adrx0 <= regx1) return 1; else return 0;} + +regx0reg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= reg1) return 1; else return 0;} + +regx0indreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= indreg1) return 1; else return 0;} + +regx0imm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= imm1) return 1; else return 0;} + +regx0limm1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= limm1) return 1; else return 0;} + +regx0adr1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= adr1) return 1; else return 0;} + +regx0adrreg1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= adrreg1) return 1; else return 0;} + +regx0adrx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= adrx1) return 1; else return 0;} + +regx0regx1 (r0, r1, x0, x1, p0, p1) +type r0, r1; type *p0, *p1; +{if (regx0 <= regx1) return 1; else return 0;} + diff --git a/gcc/testsuite/gcc.c-torture/unsorted/a.c b/gcc/testsuite/gcc.c-torture/unsorted/a.c new file mode 100644 index 000000000000..47fb1f493f22 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/a.c @@ -0,0 +1,4 @@ +foo (a) +{ + return a & 65535; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/a1.c b/gcc/testsuite/gcc.c-torture/unsorted/a1.c new file mode 100644 index 000000000000..654781d05eae --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/a1.c @@ -0,0 +1,7 @@ +int +foo (a, p) + int *p; +{ + p[0] = 85 * a; + p[1] = -86 * a; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/a3.c b/gcc/testsuite/gcc.c-torture/unsorted/a3.c new file mode 100644 index 000000000000..85d2a242630f --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/a3.c @@ -0,0 +1,12 @@ +foo (a) +{ + int i; + + for (i = 1; i < a; i++) + ; + { + int b = (int) &foo; + + return (a & b) == 0; + } +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/aa.c b/gcc/testsuite/gcc.c-torture/unsorted/aa.c new file mode 100644 index 000000000000..61a4147afa67 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/aa.c @@ -0,0 +1,8 @@ +#define w 20 +#define c 1 + +foo (a) + unsigned a; +{ + return ((a & ((1 << w) - 1)) << c) > 0; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/aaa.c b/gcc/testsuite/gcc.c-torture/unsorted/aaa.c new file mode 100644 index 000000000000..e31fb567c1c5 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/aaa.c @@ -0,0 +1,11 @@ +foo (a, b) +{ + int t; + while (b < 0) + { + t = a; + a = b; + b = t; + } + return a + b; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/abs.c b/gcc/testsuite/gcc.c-torture/unsorted/abs.c new file mode 100644 index 000000000000..6a746b126393 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/abs.c @@ -0,0 +1,9 @@ +foo (a) +{ + return __builtin_abs (a); +} + +main () +{ + printf ("%d %d\n", foo (0x80000000), foo (12)); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/ac.c b/gcc/testsuite/gcc.c-torture/unsorted/ac.c new file mode 100644 index 000000000000..1d3c085eec1c --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/ac.c @@ -0,0 +1,30 @@ +barfoo (a) +{ + return (a << 16) & ~0xffff; +} + +foobar (a) +{ + return ((unsigned short) a) << 15;} + +foo (a) +{ + return (a & 0x121) << 31; +} + +bar (a) +{ + return (a & ~0xffff) << 16; +} + +main () +{ + int a; + + for (a = 1; a; a += a) + { + printf ("%d", (foo (a))); + } + puts (""); +} + diff --git a/gcc/testsuite/gcc.c-torture/unsorted/acc.c b/gcc/testsuite/gcc.c-torture/unsorted/acc.c new file mode 100644 index 000000000000..a4a027a5fce3 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/acc.c @@ -0,0 +1,8 @@ +foo (a) +{ + int b = a + 1; + int c = (short) a; + if (b) + return b; + return 1; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/add.c b/gcc/testsuite/gcc.c-torture/unsorted/add.c new file mode 100644 index 000000000000..d796e41c7121 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/add.c @@ -0,0 +1,5 @@ +foo (a, b, p) + int *p; +{ + return 34 + *p; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/add386.c b/gcc/testsuite/gcc.c-torture/unsorted/add386.c new file mode 100644 index 000000000000..bfdffbfe2f21 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/add386.c @@ -0,0 +1,4 @@ +main (a) +{ + return a + 128; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/addcc.c b/gcc/testsuite/gcc.c-torture/unsorted/addcc.c new file mode 100644 index 000000000000..cf52307aa979 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/addcc.c @@ -0,0 +1,18 @@ +foo (p, a, b) + int *p; + int a; + int b; +{ + + a += p[0]; + b += p[1]; + if (a == 0) + return b; + return a; +} + + +bar (a) +{ + return -a > 0 ? 1 : 2; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/andm.c b/gcc/testsuite/gcc.c-torture/unsorted/andm.c new file mode 100644 index 000000000000..17101ae30508 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/andm.c @@ -0,0 +1,15 @@ +foo (p) + int *p; +{ + return (*p & 255) == 0; +} + +bar (a) +{ + return (a & 0xfff00000) == 0; +} + +main () +{ + printf ("%d%d\n", bar (-1), bar(0)); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/andmem.c b/gcc/testsuite/gcc.c-torture/unsorted/andmem.c new file mode 100644 index 000000000000..10bad00f4450 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/andmem.c @@ -0,0 +1,22 @@ +void p1 (p) int *p; +{ *p &= ~0xff; +} +void p2 (p) int *p; +{ *p &= ~0xff00; +} +void p3 (p) int *p; +{ *p &= ~0xffff0000; +} +void p4 (p) int *p; +{ *p &= ~0xffff; +} + +main () +{ + int a; + + a = 0x12345678; p1 (&a); printf ("%x\n", a); + a = 0x12345678; p2 (&a); printf ("%x\n", a); + a = 0x12345678; p3 (&a); printf ("%x\n", a); + a = 0x12345678; p4 (&a); printf ("%x\n", a); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/andn.c b/gcc/testsuite/gcc.c-torture/unsorted/andn.c new file mode 100644 index 000000000000..2e38dd0e36e0 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/andn.c @@ -0,0 +1,5 @@ +foo (a) +{ + int b = 0x1fff; + return a & ~b; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/andok.c b/gcc/testsuite/gcc.c-torture/unsorted/andok.c new file mode 100644 index 000000000000..d55bd01b70db --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/andok.c @@ -0,0 +1,6 @@ +foo (a, b, p) + int *p; +{ + p[1] = a & 0xfff0000; + p[2] = b & 0xfff0000; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/andsi.c b/gcc/testsuite/gcc.c-torture/unsorted/andsi.c new file mode 100644 index 000000000000..b9c3c76de03e --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/andsi.c @@ -0,0 +1,4 @@ +foo () +{ + return (int)&foo; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/andsparc.c b/gcc/testsuite/gcc.c-torture/unsorted/andsparc.c new file mode 100644 index 000000000000..62f0de003b23 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/andsparc.c @@ -0,0 +1,11 @@ +foo (int *p) +{ + int a, b; + + a = 123456; + a += p[0]; + b = p[0]; + if (a == 0) + return b; + return 1; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/aos.c b/gcc/testsuite/gcc.c-torture/unsorted/aos.c new file mode 100644 index 000000000000..77c92f677e40 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/aos.c @@ -0,0 +1,8 @@ +foo (p) + int *p; +{ + if ((int) p > 0) + return 1; + else + return 0; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/arr.c b/gcc/testsuite/gcc.c-torture/unsorted/arr.c new file mode 100644 index 000000000000..ed56667dd75a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/arr.c @@ -0,0 +1,9 @@ +foo (a, b, c) +{ + bar (a, b); + { + int arr[10]; + arr[c] = b; + bar (arr[0], arr[1]); + } +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/as.c b/gcc/testsuite/gcc.c-torture/unsorted/as.c new file mode 100644 index 000000000000..172f88355d94 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/as.c @@ -0,0 +1,14 @@ + +#define S 31 +#define A 17 + +foo (a) + unsigned a; +{ + return (a >> S) & ((1 << A) - 1); +} + +main () +{ + printf ("%d%d\n", foo (-1), foo (0)); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/ase.c b/gcc/testsuite/gcc.c-torture/unsorted/ase.c new file mode 100644 index 000000000000..2d3d8edbd0bc --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/ase.c @@ -0,0 +1,10 @@ +ase (p) + short *p; +{ + int a; + a = p[1]; + p[2] = a; + if ((short) a) + p[a]++; + return (a == 0); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/b.c b/gcc/testsuite/gcc.c-torture/unsorted/b.c new file mode 100644 index 000000000000..498d7552af9e --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/b.c @@ -0,0 +1,4 @@ +main () +{ + *(short *) 25 = 123; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/b1.c b/gcc/testsuite/gcc.c-torture/unsorted/b1.c new file mode 100644 index 000000000000..b6737594cb1d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/b1.c @@ -0,0 +1,11 @@ +foo (long long x) +{ + if (x--) + return 255; + return 0; +} + +main () +{ + printf ("%d\n", foo (0)); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/b2.c b/gcc/testsuite/gcc.c-torture/unsorted/b2.c new file mode 100644 index 000000000000..96e4556a53a5 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/b2.c @@ -0,0 +1,24 @@ + +struct s +{ + unsigned a : 8; + unsigned b : 8; + unsigned c : 8; + unsigned d : 8; +}; + +/* +struct +{ + unsigned a : 8; + unsigned b : 16; + unsigned c : 8; +}; +*/ + +struct s +foo (struct s s, int i) +{ + s.b = i; + return s; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/b3.c b/gcc/testsuite/gcc.c-torture/unsorted/b3.c new file mode 100644 index 000000000000..af693f77931f --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/b3.c @@ -0,0 +1,12 @@ +struct tree_common +{ + unsigned int code : 9; + unsigned int code2 : 7; +}; + +static int +duplicate_decls (x) + register struct tree_common x; +{ + return x.code2; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/b88.c b/gcc/testsuite/gcc.c-torture/unsorted/b88.c new file mode 100644 index 000000000000..971c7c76d925 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/b88.c @@ -0,0 +1,12 @@ +foo (double d) +{ + d = -d; + if (d < 0.0) + return 1; + return 2; +} + +main () +{ + foo (0.0); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/bad.c b/gcc/testsuite/gcc.c-torture/unsorted/bad.c new file mode 100644 index 000000000000..8cc84973b725 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/bad.c @@ -0,0 +1,26 @@ +typedef union longlong +{ + struct {unsigned short h0, h1, h2, h3;} h; + struct {signed long low, high;} si; + struct {unsigned long low, high;} ui; + signed long long sll; + unsigned long long ull; +} long_long; + + +long long +__negdi2 (u) + long long u; +{ + long_long uu; + + uu.sll = u; + + uu.si.low = -uu.si.low; + if (uu.si.low == 0) + uu.si.high = -uu.si.high; + else + uu.si.high = ~uu.si.high; + + return uu.sll; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/band.c b/gcc/testsuite/gcc.c-torture/unsorted/band.c new file mode 100644 index 000000000000..74b02fd3b345 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/band.c @@ -0,0 +1,16 @@ +foo (a) +{ + return (a & (1 << 31)) != 0; +} + +main () +{ + if (foo (0)) + puts ("foo"); + else + puts ("bar"); + if (foo (~0)) + puts ("foo"); + else + puts ("bar"); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/bb0.c b/gcc/testsuite/gcc.c-torture/unsorted/bb0.c new file mode 100644 index 000000000000..aab6d683fbd0 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/bb0.c @@ -0,0 +1,5 @@ +foo (a) +{ + return (a & 0xfff000) != 0; + +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/bb1.c b/gcc/testsuite/gcc.c-torture/unsorted/bb1.c new file mode 100644 index 000000000000..3f9aebe03646 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/bb1.c @@ -0,0 +1,8 @@ +foo (a) +{ + int b = 32; + if (b & a) + return 1; + else + return 0; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/bbb.c b/gcc/testsuite/gcc.c-torture/unsorted/bbb.c new file mode 100644 index 000000000000..837dd9ecf932 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/bbb.c @@ -0,0 +1,12 @@ +struct looksets + { + int lset[10]; + }; + +struct looksets lkst[]; + +flset( p ) +struct looksets *p; +{ + p-- > lkst; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/bc.c b/gcc/testsuite/gcc.c-torture/unsorted/bc.c new file mode 100644 index 000000000000..c713bb61b3dc --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/bc.c @@ -0,0 +1,4 @@ +foo (a, b) +{ + return a % (1 << b); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/bcopy.c b/gcc/testsuite/gcc.c-torture/unsorted/bcopy.c new file mode 100644 index 000000000000..1732b349e4d0 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/bcopy.c @@ -0,0 +1,64 @@ +void +bcopy1 (s, d, c) + long long *s; + long long *d; + int c; +{ + int i; + c = c / 8; + for (i = 0; i < c; i++) + d[i] = s[i]; +} + +void +bcopy2 (s, d, c) + long *s; + long *d; + int c; +{ + int i; + c = c / 4; + for (i = 0; i < c; i++) + d[i] = s[i]; +} + + +void +bcopy3 (s, d, c) + char *s; + char *d; + int c; +{ + long long z0, z1; + int r = d - s; + + int i; + + c /= 16; + + z0 = *((long long *) s); + s += 8; + z1 = *((long long *) s); + s += 8; + for (i = 0; i < c; i++) + { + *(long long *)(s + r) = z0; + z0 = *((long long *) s); + s += 8; + *(long long *)(s + r) = z1; + z1 = *((long long *) s); + s += 8; + } +} + +#define BYTES 16384 + +main () +{ + long long s[BYTES / 8]; + long long d[BYTES / 8]; + int i; + + for (i = 1; i < 67108864 / BYTES; i++) + bcopy (s, d, BYTES); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/bf.c b/gcc/testsuite/gcc.c-torture/unsorted/bf.c new file mode 100644 index 000000000000..821623df09c0 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/bf.c @@ -0,0 +1,31 @@ +typedef unsigned long uint32; +typedef signed long sint32; + +uint32 +ext (sint32 src, unsigned o5, unsigned w5) +{ + return (w5 == 0) ? src >> o5 : (src << (( - o5 - w5) & 31)) >> (32 - w5); +} + +uint32 +extu (uint32 src, unsigned o5, unsigned w5) +{ + return (w5 == 0) ? src >> o5 : (src << (( - o5 - w5) & 31)) >> (32 - w5); +} + +uint32 +mak (uint32 src, unsigned o5, unsigned w5) +{ + return (w5 == 0) ? src << o5 : (src << (32 - w5)) >> (( - o5 - w5) & 31); +} + +uint32 +rot (uint32 src, unsigned o5) +{ + return (src >> o5) | (src << (( - o5) & 31)); +} + +main (int argc, char **argv) +{ + printf ("%x\n", clr (0xffffffff, atoi (argv[2]), atoi (argv[1]))); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/bfins.c b/gcc/testsuite/gcc.c-torture/unsorted/bfins.c new file mode 100644 index 000000000000..e626d82b3cb3 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/bfins.c @@ -0,0 +1,15 @@ +struct foo +{ + unsigned j : 16; + unsigned i : 16; +}; + +struct foo +foo (a, b) + struct foo a; + int b; +{ + a.j = 123; + a.i = b; + return a; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/bfx.c b/gcc/testsuite/gcc.c-torture/unsorted/bfx.c new file mode 100644 index 000000000000..d47bd7d18bc9 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/bfx.c @@ -0,0 +1,9 @@ +foo (x, c) +{ + return x << -c; +} + +main () +{ + printf ("%x\n", foo (0xf05, -4)); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/bge.c b/gcc/testsuite/gcc.c-torture/unsorted/bge.c new file mode 100644 index 000000000000..55f4788299a7 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/bge.c @@ -0,0 +1,7 @@ +foo (a) + double a; +{ + if (a >= 0) + return 1; + return a; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/bit.c b/gcc/testsuite/gcc.c-torture/unsorted/bit.c new file mode 100644 index 000000000000..e76bb45e7cdf --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/bit.c @@ -0,0 +1,13 @@ +bar (a) +{ + return (a == 0); +} + +foo (a) + int a; +{ + if ((a & (1 << 26)) >= 0) + return 1; + else + return 2; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/bitf.c b/gcc/testsuite/gcc.c-torture/unsorted/bitf.c new file mode 100644 index 000000000000..5b0aefc83d48 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/bitf.c @@ -0,0 +1,17 @@ +#define int unsigned + +struct foo +{ + int aa : 1; + int a : 9; + int c : 16; + int d : 6; +}; + + +int +foo (a, b) + struct foo a; +{ + return a.d == 0; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/bitw.c b/gcc/testsuite/gcc.c-torture/unsorted/bitw.c new file mode 100644 index 000000000000..585cd32e6036 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/bitw.c @@ -0,0 +1,9 @@ +foo (a) + unsigned a; +{ + unsigned b = 0; + + if ((a & 12345678) > b) + return 1; + return 0; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/blk.c b/gcc/testsuite/gcc.c-torture/unsorted/blk.c new file mode 100644 index 000000000000..18a9545cc289 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/blk.c @@ -0,0 +1,18 @@ +struct +{ + double a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t; +} foo, bar; + +foobar () +{ + foo = bar; + xxx (&foo, &bar); +} + +main () +{ + bar.g = 1.0; + foo.g = 2.0; + foobar (); + printf ("%lf\n", foo.g); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/bt.c b/gcc/testsuite/gcc.c-torture/unsorted/bt.c new file mode 100644 index 000000000000..ac20c05674dd --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/bt.c @@ -0,0 +1,7 @@ +main () +{ + int i; + + for (i = 1000000; --i;) + ; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/bt386.c b/gcc/testsuite/gcc.c-torture/unsorted/bt386.c new file mode 100644 index 000000000000..283ab5fa64ae --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/bt386.c @@ -0,0 +1,18 @@ +foo (a, b) +{ + return (a & (1 << b)) != 0; +} + +bar (a, b) +{ + a ^= (1 << b); + return a != 0; +} + +main () +{ + int i; + for (i = 0; i < 32; i++) + printf ("%d ", foo (0x8000000f, i)); + puts (""); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/bug.c b/gcc/testsuite/gcc.c-torture/unsorted/bug.c new file mode 100644 index 000000000000..447eb7af297b --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/bug.c @@ -0,0 +1,4 @@ +foo (a, b) +{ + return a - 65536; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/bugc.c b/gcc/testsuite/gcc.c-torture/unsorted/bugc.c new file mode 100644 index 000000000000..b2ce1fad8ac3 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/bugc.c @@ -0,0 +1,7 @@ + +int +reg0indreg1 (r0, p1) + short r0; short *p1; +{ + return (r0); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/buns.c b/gcc/testsuite/gcc.c-torture/unsorted/buns.c new file mode 100644 index 000000000000..f206bfaed0c4 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/buns.c @@ -0,0 +1,12 @@ +foo (a) +{ + int bar = 0; + + return (unsigned) (a - 1) <= (unsigned) bar; +} + +main () +{ + if (foo (-1)) + puts ("The largest possible unsigned <= 0 on this machine..."); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/bx.c b/gcc/testsuite/gcc.c-torture/unsorted/bx.c new file mode 100644 index 000000000000..274fb015cf58 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/bx.c @@ -0,0 +1,12 @@ +unsigned +good (unsigned src, unsigned o5, unsigned w5) +{ + return src & ~((w5 == 0) ? (~0 << o5) : (1 << o5)); +} + +unsigned +bad (unsigned src, unsigned o5, unsigned w5) +{ + return src & ((w5 == 0) ? ~(~0 << o5) : ~(1 << o5)); +} + diff --git a/gcc/testsuite/gcc.c-torture/unsorted/c.c b/gcc/testsuite/gcc.c-torture/unsorted/c.c new file mode 100644 index 000000000000..384ee3e3cf34 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/c.c @@ -0,0 +1,17 @@ +foo (a, b) + long long a, b; +{ + if (a & ~b) + return 1; + else + return 0; +} + +bar (a, b) + long long a, b; +{ + if (a & ~b & ((long long) 87612378)) + return 1; + else + return 0; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/c1.c b/gcc/testsuite/gcc.c-torture/unsorted/c1.c new file mode 100644 index 000000000000..f50d437f60b9 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/c1.c @@ -0,0 +1,7 @@ +unsigned +rec (a, b) + unsigned a; + unsigned b; +{ + return a * rec (a - 1, b + 1); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/c2.c b/gcc/testsuite/gcc.c-torture/unsorted/c2.c new file mode 100644 index 000000000000..ef5a71188d32 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/c2.c @@ -0,0 +1,5 @@ +foo (a) +{ + bar (a); + bar (a); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/call.c b/gcc/testsuite/gcc.c-torture/unsorted/call.c new file mode 100644 index 000000000000..c8106038371c --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/call.c @@ -0,0 +1,7 @@ +int foo () {} + +main (a, b) +{ + foo (foo (a, b), foo (b, a)); + return 0; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/call386.c b/gcc/testsuite/gcc.c-torture/unsorted/call386.c new file mode 100644 index 000000000000..18498932c5bf --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/call386.c @@ -0,0 +1,20 @@ + +foo () {} + +main () +{ + int i; + for (i = 100000; i >= 0; i--) + { + foo (); + foo (); + foo (); + foo (); + foo (); + foo (); + foo (); + foo (); + foo (); + foo (); + } +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/callind.c b/gcc/testsuite/gcc.c-torture/unsorted/callind.c new file mode 100644 index 000000000000..74c0f1f9cef9 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/callind.c @@ -0,0 +1,8 @@ +call (foo, a) + int (**foo) (); +{ + + (foo)[1] = call; + + foo[a] (1); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/cc.c b/gcc/testsuite/gcc.c-torture/unsorted/cc.c new file mode 100644 index 000000000000..e29bec49d413 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/cc.c @@ -0,0 +1,96 @@ +cc8 (a, b) +{ + if (a < 0) + goto L1; + if (a == 0) + goto L2; + L1:b++; + L2:b++; + return b; +} + +cc7 (a) + long long a; +{ + if (a < 0) + return 1; + else + return 0; +} + +cc6 (float a, double p) +{ + p = a; + if (p < 0) + return p; + else + return p + 1; +} + +cc5 (p, a) + char *p; + char a; +{ + p[2] = a; + if (a) + return 0; + else + return 1; +} + + +cc4 (a, b, p) + int a, b; + int *p; +{ + a = (int short)b; + *p = a; + if ((int) a < 0) + return 0; + else + return 1; +} + + +cc1 (a, b) +{ + int x = 0; + + if ((int) a < (int) b) + { + if ((unsigned) a < (unsigned) b) + x++; + x++; + } + + return x; +} + +cc2 (a, b) +{ + int x = 0; + + if ((int) a <= (int) b) + { + if ((int) a < (int) b) + x++; + x++; + } + + return x; +} + +cc3 (a, b) +{ + int x = 0; + + a += b; + if ((unsigned) a > 0) + { + if (a == 0) + x++; + x++; + } + + return x; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/charmtst.c b/gcc/testsuite/gcc.c-torture/unsorted/charmtst.c new file mode 100644 index 000000000000..2945f198e5e2 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/charmtst.c @@ -0,0 +1,15 @@ +c_move_tst (char b) +{ + char a; + + a = b; + b = 'b'; + foo (a); + foo (b); + foo (a); + bar (a, b); + b = a; + if (b == 0) + a++; + return a + b; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/cmb.c b/gcc/testsuite/gcc.c-torture/unsorted/cmb.c new file mode 100644 index 000000000000..1fd946182ba9 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/cmb.c @@ -0,0 +1,6 @@ +foo (p1, p2) + short p1, *p2; +{ + int a; + return (int) p1 + (int) *p2; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/cmp.c b/gcc/testsuite/gcc.c-torture/unsorted/cmp.c new file mode 100644 index 000000000000..a82fe424735b --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/cmp.c @@ -0,0 +1,11 @@ +struct fooalign {char x; double d;}; +union fooround {long x; double d;}; + +int +foo () +{ + int extra = 4; + if (extra < sizeof (union fooround)) + extra = sizeof (union fooround); + return extra; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/cmphi.c b/gcc/testsuite/gcc.c-torture/unsorted/cmphi.c new file mode 100644 index 000000000000..1ffc2140fba8 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/cmphi.c @@ -0,0 +1,4 @@ +foo (short *p, short a) +{ + return a < *p; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/cmpsi386.c b/gcc/testsuite/gcc.c-torture/unsorted/cmpsi386.c new file mode 100644 index 000000000000..50b08d7126d6 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/cmpsi386.c @@ -0,0 +1,14 @@ +foo (a, p) + register int a; + int *p; +{ + + for (a = 10000000; a >= *p; a--) + ; +} + +main () +{ + int a; + foo (a, a); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/cmul.c b/gcc/testsuite/gcc.c-torture/unsorted/cmul.c new file mode 100644 index 000000000000..cce20bc358d6 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/cmul.c @@ -0,0 +1,4 @@ +foo (a) +{ + return a * 84; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/cn1.c b/gcc/testsuite/gcc.c-torture/unsorted/cn1.c new file mode 100644 index 000000000000..866778ca1995 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/cn1.c @@ -0,0 +1,5 @@ +int +foo () +{ + return 7561; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/comb.c b/gcc/testsuite/gcc.c-torture/unsorted/comb.c new file mode 100644 index 000000000000..a4689079b793 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/comb.c @@ -0,0 +1,7 @@ +foo (a, b) +{ + int c = a & b; + if ((a & b) == 0) + return 0; + return c; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/configure.in b/gcc/testsuite/gcc.c-torture/unsorted/configure.in new file mode 100644 index 000000000000..7810172c29e2 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/configure.in @@ -0,0 +1,15 @@ +# This file is a shell script fragment that supplies the information +# necessary to tailor a template configure script into the configure +# script appropriate for this directory. For more information, check +# any existing configure script. + +srctrigger=unsorted.exp +srcname="DejaGnu" + +# per-host: + +# per-target: + +target_makefile_frag=../config/mt-${target_alias} + +# post-target: diff --git a/gcc/testsuite/gcc.c-torture/unsorted/consec.c b/gcc/testsuite/gcc.c-torture/unsorted/consec.c new file mode 100644 index 000000000000..fd76cd2eec43 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/consec.c @@ -0,0 +1,17 @@ +int glob; + +conseq (a, b, c, d) + int *a, *b; +{ + a[2] = d; + a[1] = c; + sequence (a, b, c, d); + sequence (d, c, b, a); + b[0] = 0; + b[1] = 123; + a[0] = 321; + a[1] = 0; + sequence (111, 0, 0, 222, 0, 333); + ((int *)glob)[2] = c; + ((int *)glob)[3] = d; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/const.c b/gcc/testsuite/gcc.c-torture/unsorted/const.c new file mode 100644 index 000000000000..209fc768887b --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/const.c @@ -0,0 +1,4 @@ +main (a) +{ + return a + (~0 - 240); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/conv.c b/gcc/testsuite/gcc.c-torture/unsorted/conv.c new file mode 100644 index 000000000000..70fc024127c3 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/conv.c @@ -0,0 +1,32 @@ +double +u2d (unsigned int u) +{ + return u; +} + +double +i2d (signed int i) +{ + return i; +} + +unsigned int +d2u (double d) +{ + return d; +} + +signed int +d2i (double d) +{ + return d; +} + +main () +{ + printf ("%lf, %lf, %lf\n", u2d (~0), u2d (1 << 31), u2d (1)); + printf ("%lf, %lf, %lf\n", i2d (~0), i2d (1 << 31), i2d (1)); + + printf ("%u, %u, %u\n", d2u (u2d (~0)), d2u (u2d (1 << 31)), d2u (u2d (1))); + printf ("%d, %d, %d\n", d2i (i2d (~0)), d2i (i2d (1 << 31)), d2i (i2d (1))); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/conv_tst.c b/gcc/testsuite/gcc.c-torture/unsorted/conv_tst.c new file mode 100644 index 000000000000..513d6a2471e3 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/conv_tst.c @@ -0,0 +1,66 @@ +#define ID_1 2400000000.0 +#define ID_2 1.7 +#define ID_3 -1.7 + +unsigned ui; +int si; + +conv_i1 () +{ +/* + ui = (unsigned) ID_1; + si = (int) ID_1; +*/ +} + +conv_i2 () +{ + ui = (unsigned) ID_2; + si = (int) ID_2; +} + +conv_i3 () +{ +/* ui = (unsigned) ID_3;*/ + si = (int) ID_3; +} + +conv_1 (d) + double d; +{ + ui = (unsigned) d; +/* + si = (int) d; +*/ +} + +double +foo (u) + unsigned u; +{ + return u; +} + +main () +{ + printf ("%lf\n", foo (2400000000)); + + conv_i1 (); + printf ("%lf, %u, %d\n", ID_1, ui, si); + + conv_i2 (); + printf ("%lf, %u, %d\n", ID_2, ui, si); + + conv_i3 (); + printf ("%lf, %u, %d\n", ID_3, ui, si); + + conv_1 (ID_1); + printf ("%lf, %u, %d\n", ID_1, ui, si); + + conv_1 (ID_2); + printf ("%lf, %u, %d\n", ID_2, ui, si); + + conv_1 (ID_3); + printf ("%lf, %u, %d\n", ID_3, ui, si); + +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/cp.c b/gcc/testsuite/gcc.c-torture/unsorted/cp.c new file mode 100644 index 000000000000..04b1420cb308 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/cp.c @@ -0,0 +1,42 @@ +struct _obstack_chunk +{ + char *limit; + struct _obstack_chunk *prev; + char contents[4]; +}; + +struct obstack +{ + long chunk_size; + struct _obstack_chunk* chunk; + char *object_base; + char *next_free; + char *chunk_limit; + int temp; + int alignment_mask; + struct _obstack_chunk *(*chunkfun) (); + void (*freefun) (); +}; + +struct fooalign {char x; double d;}; +union fooround {long x; double d;}; + +void +_obstack_begin (h, size, alignment, chunkfun, freefun) + struct obstack *h; + int size; + int alignment; + void * (*chunkfun) (); + void (*freefun) (); +{ + register struct _obstack_chunk* chunk; + + if (alignment == 0) + alignment = ((char *)&((struct fooalign *) 0)->d - (char *)0); + if (size == 0) + { + int extra = 4; + if (extra < (sizeof (union fooround))) + extra = (sizeof (union fooround)); + } +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/csebug.c b/gcc/testsuite/gcc.c-torture/unsorted/csebug.c new file mode 100644 index 000000000000..f49f6842c1a7 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/csebug.c @@ -0,0 +1,7 @@ + +int +reg0indreg1 (r0, p1) + short r0; short *p1; +{ + return (r0 + *p1); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/cvt.c b/gcc/testsuite/gcc.c-torture/unsorted/cvt.c new file mode 100644 index 000000000000..716659c4798c --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/cvt.c @@ -0,0 +1,9 @@ +foo (p) + unsigned char *p; +{ + unsigned char a = 0; + + if (*p > 0) + return 1; + return 0; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/d.c b/gcc/testsuite/gcc.c-torture/unsorted/d.c new file mode 100644 index 000000000000..5fca120d85a8 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/d.c @@ -0,0 +1,19 @@ +long long unsigned +str2llu (str) + char *str; +{ + long long unsigned acc; + long long b = 10; + char d; + acc = *str++ - '0'; + for (;;) + { + d = *str++; + if (d == '\0') + break; + d -= '0'; + acc = acc * 10 + d; + } + + return acc; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/dbl_parm.c b/gcc/testsuite/gcc.c-torture/unsorted/dbl_parm.c new file mode 100644 index 000000000000..ce5ba4f16d5f --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/dbl_parm.c @@ -0,0 +1,10 @@ +foo (a, b, c) + double a; + int b; + double c; +{ + if (b) + return a + c; + else + return a - c; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/dblbug.c b/gcc/testsuite/gcc.c-torture/unsorted/dblbug.c new file mode 100644 index 000000000000..cd13b796297a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/dblbug.c @@ -0,0 +1,21 @@ +union real_extract +{ + double d; + int i[sizeof (double ) / sizeof (int)]; +}; + +typedef struct +{ + int zzzz; +} *rtx; + +rtx +immed_real_const_1 (d) + double d; +{ + union real_extract u; + register rtx r; + + u.d = d; + foo (&(r->zzzz), &u); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/ddd.c b/gcc/testsuite/gcc.c-torture/unsorted/ddd.c new file mode 100644 index 000000000000..b0b6809dd698 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/ddd.c @@ -0,0 +1,7 @@ +int foo; +int bar; + +main () +{ + return foo + bar; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/dead.c b/gcc/testsuite/gcc.c-torture/unsorted/dead.c new file mode 100644 index 000000000000..795f7c7e467b --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/dead.c @@ -0,0 +1,5 @@ +foo (a) +{ + ++a; + return a == 0; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/delay.c b/gcc/testsuite/gcc.c-torture/unsorted/delay.c new file mode 100644 index 000000000000..c776383520a3 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/delay.c @@ -0,0 +1,11 @@ +foo (a, b) +{ + if (a == 1) + goto foo1; + if (a == 2) + goto foo2; + foo1: + return 2; + foo2: + return 3; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/di.c b/gcc/testsuite/gcc.c-torture/unsorted/di.c new file mode 100644 index 000000000000..476bf700fb31 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/di.c @@ -0,0 +1,12 @@ +long long +foo (a, b) + long long a, b; +{ + return a * b; +} + +main () +{ + int a = foo ((long long) 2, (long long) 3); + printf ("%d\n", a); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/dic.c b/gcc/testsuite/gcc.c-torture/unsorted/dic.c new file mode 100644 index 000000000000..9c2c9f90fd68 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/dic.c @@ -0,0 +1,5 @@ +unsigned long long +main () +{ + return (unsigned long long) 7816234 << 671111; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/dilayout.c b/gcc/testsuite/gcc.c-torture/unsorted/dilayout.c new file mode 100644 index 000000000000..4bba661c0a4b --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/dilayout.c @@ -0,0 +1,33 @@ +struct ii +{ + int a; + int b; +}; + +struct foo +{ + int a; + struct ii ab; + int b; +}; + +struct ii +foo (int *p, struct foo a) +{ + p[0] = a.a; + p[1] = a.ab.a; + p[2] = a.ab.b; + p[3] = a.b; + return a.ab; +} + +str (struct ii ab, struct ii *p) +{ + *p = ab; +} + +ll (long long ab, long long *p) +{ + *p = ab; +} + diff --git a/gcc/testsuite/gcc.c-torture/unsorted/dimove.c b/gcc/testsuite/gcc.c-torture/unsorted/dimove.c new file mode 100644 index 000000000000..7caf3fa468ba --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/dimove.c @@ -0,0 +1,4 @@ +foo (long long *p) +{ + p[0] = p[1]; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/dimul.c b/gcc/testsuite/gcc.c-torture/unsorted/dimul.c new file mode 100644 index 000000000000..c8529565fa90 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/dimul.c @@ -0,0 +1,6 @@ +long long +foo (a, b) + long long a, b; +{ + return a * b; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/div.c b/gcc/testsuite/gcc.c-torture/unsorted/div.c new file mode 100644 index 000000000000..1f0904a649d3 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/div.c @@ -0,0 +1,4 @@ +foo (a, b) +{ + return a / b; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/divdf.c b/gcc/testsuite/gcc.c-torture/unsorted/divdf.c new file mode 100644 index 000000000000..5ea89ae3ddc3 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/divdf.c @@ -0,0 +1,5 @@ +double +foo (float a, float b) +{ + return (double)a / (double)b; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/dm.c b/gcc/testsuite/gcc.c-torture/unsorted/dm.c new file mode 100644 index 000000000000..67c60ee98203 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/dm.c @@ -0,0 +1,24 @@ +struct dm +{ + unsigned q; + unsigned r; +}; + +struct dm +dm (a, b) + unsigned a, b; +{ + struct dm qr; + + qr.q = a / b; + qr.r = a % b; + return qr; +} + +main () +{ + struct dm qr; + + qr = dm (100, 30); + printf ("%u, %u\n", qr.q, qr.r); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/dshift.c b/gcc/testsuite/gcc.c-torture/unsorted/dshift.c new file mode 100644 index 000000000000..94750cc3cbcc --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/dshift.c @@ -0,0 +1,10 @@ +foo (b, c) + unsigned b, c; +{ + return (b << 12) | (c >> 20); +} + +main () +{ + printf ("0x%x\n", foo (0x11223344, 0xaabbccdd)); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/e.c b/gcc/testsuite/gcc.c-torture/unsorted/e.c new file mode 100644 index 000000000000..fa20e00ef8f0 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/e.c @@ -0,0 +1,10 @@ +foo (short a, int *p, short *s) +{ + int i; + for (i = 10; i >= 0; i--) + { + a = (short) bar (); + p[i] = a; + s[i] = a; + } +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/ex.c b/gcc/testsuite/gcc.c-torture/unsorted/ex.c new file mode 100644 index 000000000000..f5d90fd2e65b --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/ex.c @@ -0,0 +1,11 @@ +foo (a, b) +{ + if ((a & (1 << b)) == 0) + return 1; + return 0; +} + +main () +{ + printf ("%d\n", foo ()); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/ext.c b/gcc/testsuite/gcc.c-torture/unsorted/ext.c new file mode 100644 index 000000000000..8fa8cd733633 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/ext.c @@ -0,0 +1,13 @@ +struct foo +{ + unsigned b31 : 1; + unsigned b30 : 1; + unsigned b29 : 1; + unsigned b28 : 1; + unsigned rest : 28; +}; +foo(a) + struct foo a; +{ + return a.b30; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/f1.c b/gcc/testsuite/gcc.c-torture/unsorted/f1.c new file mode 100644 index 000000000000..446acc6e1a17 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/f1.c @@ -0,0 +1,5 @@ +double +foo () +{ + return 1.2587624368724; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/f2.c b/gcc/testsuite/gcc.c-torture/unsorted/f2.c new file mode 100644 index 000000000000..8bb384902b99 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/f2.c @@ -0,0 +1,4 @@ +foo (double *p) +{ + p[0] = p[1]; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/fdmul.c b/gcc/testsuite/gcc.c-torture/unsorted/fdmul.c new file mode 100644 index 000000000000..711707b51fcf --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/fdmul.c @@ -0,0 +1,2 @@ +double +foo (float a, float b) { return (double) a * (double) b; } diff --git a/gcc/testsuite/gcc.c-torture/unsorted/flo.c b/gcc/testsuite/gcc.c-torture/unsorted/flo.c new file mode 100644 index 000000000000..2a213b7ab793 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/flo.c @@ -0,0 +1,7 @@ +foo (a) + double a; +{ + double b = 0.0; + + return (a == 0); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/float.c b/gcc/testsuite/gcc.c-torture/unsorted/float.c new file mode 100644 index 000000000000..b6789203b5db --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/float.c @@ -0,0 +1,6 @@ +double +foo (a, b, c) + double a, b, c; +{ + return a * b + c * a; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/flt_const.c b/gcc/testsuite/gcc.c-torture/unsorted/flt_const.c new file mode 100644 index 000000000000..65700ba77303 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/flt_const.c @@ -0,0 +1,5 @@ +double +foo () +{ + return 3.141592653589793238462643; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/fnul.c b/gcc/testsuite/gcc.c-torture/unsorted/fnul.c new file mode 100644 index 000000000000..b0c9816adf70 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/fnul.c @@ -0,0 +1,23 @@ +main () +{ + int i; + int f; + + for (i = 0;; i--) + { + f = 0; + + if ((i & (i - 1)) == 0) + { + printf ("d"); + f = 1; + } + if ((i & -i) == i) + { + printf ("t"); + f = 1; + } + if (f) + printf ("%d\n", i); + } +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/foo.c b/gcc/testsuite/gcc.c-torture/unsorted/foo.c new file mode 100644 index 000000000000..762d7e457d06 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/foo.c @@ -0,0 +1,8 @@ +int * +main (s1, s2) + int *s1; int *s2; +{ + while ((*s1++ = *s2++) != '\0') + ; + return s1 - 1; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/forgetcc.c b/gcc/testsuite/gcc.c-torture/unsorted/forgetcc.c new file mode 100644 index 000000000000..4105408a0507 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/forgetcc.c @@ -0,0 +1,11 @@ +foo (hp, p, a) + short *hp; + int *p; + int a; +{ + hp[10] = a; + p[0] = 10; + if (hp[10] > 0) + return 1; + return 0; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/fq.c b/gcc/testsuite/gcc.c-torture/unsorted/fq.c new file mode 100644 index 000000000000..c4ac36960961 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/fq.c @@ -0,0 +1,25 @@ +expand_to_ascii (int *i, int *o) +{ + unsigned x, y, out; + unsigned x1; + + /* Big endian code. */ + + x = *i++; + + y = x >> (32 - 13); + out = (y / 91); + out = (out << 8) | (y % 91); + + x <<= 13; + y = x >> (32 - 13); + out = (out << 8) | (y / 91); + out = (out << 8) | (y % 91); + + *o++ = out + 0x20202020; + + /* 6 bits left in x. */ + + x1 = *i++; + x = (x << 26) | (x1 >> 6); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/g.c b/gcc/testsuite/gcc.c-torture/unsorted/g.c new file mode 100644 index 000000000000..e00f1244fc40 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/g.c @@ -0,0 +1,9 @@ +foo (a, b) + long long a, b; + +{ + if (a == b) + return 0; + else + return 1; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/gen_tst.c b/gcc/testsuite/gcc.c-torture/unsorted/gen_tst.c new file mode 100644 index 000000000000..5a7a3763a3ae --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/gen_tst.c @@ -0,0 +1,67 @@ +/* Compiler Test Generator Program. + Copyright (C) 1989 FSF. */ + + +#define E0 ((type *)10000000) +#define reg0 r0 +#define indreg0 (*p0) +#define imm0 22 +#define limm0 ((type)(int)&glob0) +#define adr0 (*E0) +#define adrreg0 (p0[10000000]) +#define adrx0 (E0[x0]) +#define regx0 (p0[x0]) + +#define E1 ((type *)11111111) +#define reg1 r1 +#define indreg1 (*p1) +#define imm1 33 +#define limm1 ((type)(int)&glob1) +#define adr1 (*E1) +#define adrreg1 (p1[1111111/4]) +#define adrx1 (E1[x1]) +#define regx1 (p1[x1]) + +int glob0, glob1; + +#define type double + +char *a0[] = {"reg0", "indreg0", "imm0", "limm0", + "adr0", "adrreg0", "adrx0", "regx0"}; +char *a1[] = {"reg1", "indreg1", "imm1", "limm1", + "adr1", "adrreg1", "adrx1", "regx1"}; + +main_compare () +{ + int i0, i1; + + for (i0 = 0; i0 < 8; i0++) + { + for (i1 = 0; i1 < 8; i1++) + { + printf ("%s%s_cmp (r0, r1, x0, x1, p0, p1)\n", a0[i0], a1[i1]); + printf ("type r0, r1; type *p0, *p1;\n"); + printf ("{if (%s <= %s) return 1; else return 0;}\n\n", + a0[i0], a1[i1], a0[i0]); + } + } +} + +main_assign () +{ + int i0, i1; + + for (i0 = 0; i0 < 8; i0++) + { + if (i0 < 2 || i0 > 3) + for (i1 = 0; i1 < 8; i1++) + { + printf ("%s%s_set (r0, r1, x0, x1, p0, p1)\n", a0[i0], a1[i1]); + printf ("type r0, r1; type *p0, *p1;\n"); + printf ("{%s = %s; }\n\n", + a0[i0], a1[i1]); + } + } +} + +main () {main_assign ();} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/glob.c b/gcc/testsuite/gcc.c-torture/unsorted/glob.c new file mode 100644 index 000000000000..e3206154fd9c --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/glob.c @@ -0,0 +1,12 @@ +typedef int tt; + +tt a1; +tt a2; +tt a3; + +foo () +{ + a1++; + a2++; + a1++; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/gronk.c b/gcc/testsuite/gcc.c-torture/unsorted/gronk.c new file mode 100644 index 000000000000..c1bb767e5769 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/gronk.c @@ -0,0 +1,8 @@ +test_opt (a, b) + unsigned a, b; +{ + a = a / b; + if (a == 0) + a++; + return a; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/hi.c b/gcc/testsuite/gcc.c-torture/unsorted/hi.c new file mode 100644 index 000000000000..1624f7779956 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/hi.c @@ -0,0 +1,5 @@ +foo (a, b) + short a, b; +{ + return a < b; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/hibug.c b/gcc/testsuite/gcc.c-torture/unsorted/hibug.c new file mode 100644 index 000000000000..ad5c82679942 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/hibug.c @@ -0,0 +1,15 @@ +struct foo +{ + short d; + int a; +}; + +int +bar (d, u) + short d; + struct foo u; +{ + + u.d = d; + return (int) (&u); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/i++.c b/gcc/testsuite/gcc.c-torture/unsorted/i++.c new file mode 100644 index 000000000000..01d9ca95a8a2 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/i++.c @@ -0,0 +1,7 @@ +int main () +{ + int i = 2; + + i = i++; + printf ("%d\n",i); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/i.c b/gcc/testsuite/gcc.c-torture/unsorted/i.c new file mode 100644 index 000000000000..3bee8eacb807 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/i.c @@ -0,0 +1,8 @@ +ase (p) + short *p; +{ + int a; + + a = *p; + *p = a + 1; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/i386bug.c b/gcc/testsuite/gcc.c-torture/unsorted/i386bug.c new file mode 100644 index 000000000000..395bfa6c3e2c --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/i386bug.c @@ -0,0 +1,51 @@ +typedef union { + struct { + long RH, LH; + } v; + struct { + unsigned char B1; + } u; +} twohalves; + + +typedef union { + long cint; + twohalves hhfield; + +} memoryword; + + +extern memoryword mem[262]; + +long znewstructure ( p ) +long p; +{ + long q, r; + { + q = mem [ p + 2 ] .hhfield .v.RH; + r = mem [ q + 1 ] .hhfield .v.LH; + do { + q = r; + r = mem [ r ] .hhfield .v.RH; + } while ( ! ( r == p ) ); + r = foo((long) ( 3 )); + mem [ q ] .hhfield .v.RH = r; + mem [ r + 2 ] = mem [ p + 2 ]; + if ( mem [ p + 2 ] .hhfield .v.LH == 0 ) + { + q = mem [ p + 2 ] .hhfield .v.RH + 1; + while ( mem [ q ] .hhfield .v.RH != p ) q = mem [ q ] .hhfield .v.RH; + mem [ q ] .hhfield .v.RH = r; + } + } + mem [ r ] .hhfield .u.B1 = mem [ p ] .hhfield .u.B1; + mem [ r + 1 ] .hhfield .v.LH = p; + + q = foo((long) ( 3 )); + + mem [ r + 1 ] .hhfield .v.RH = q; + mem [ q + 2 ] .hhfield .v.RH = r; + + + return(r); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/ic.c b/gcc/testsuite/gcc.c-torture/unsorted/ic.c new file mode 100644 index 000000000000..150e1e8ed7e9 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/ic.c @@ -0,0 +1,7 @@ +foo (int *ip, int a) +{ + a++; + if (a < ip[a]) + return 1; + return 0; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/icmp.c b/gcc/testsuite/gcc.c-torture/unsorted/icmp.c new file mode 100644 index 000000000000..dc9678ec3356 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/icmp.c @@ -0,0 +1,10 @@ +foo (a, b) +{ + b++; + if (a <= b) + if ((int) a < (int) b) + b--; + else + b++; + return b; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/ifreg.c b/gcc/testsuite/gcc.c-torture/unsorted/ifreg.c new file mode 100644 index 000000000000..9e2f9562e385 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/ifreg.c @@ -0,0 +1,12 @@ +union foo +{ + float f; + int i; +}; + +foo (int a, float c) +{ + union foo b; + b.i = a; + return b.f + c; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/imm.c b/gcc/testsuite/gcc.c-torture/unsorted/imm.c new file mode 100644 index 000000000000..c3efba45eee2 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/imm.c @@ -0,0 +1,7 @@ +int +imm () + +{ + return 11234; + +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/isinf.c b/gcc/testsuite/gcc.c-torture/unsorted/isinf.c new file mode 100644 index 000000000000..12a8283747f6 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/isinf.c @@ -0,0 +1,5 @@ +int +isinf () +{ + return 0; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/jmp.c b/gcc/testsuite/gcc.c-torture/unsorted/jmp.c new file mode 100644 index 000000000000..474206a1f5e1 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/jmp.c @@ -0,0 +1,20 @@ +foo (a) +{ + if (a) + goto a1; + goto a2; + a1: goto a3; + a2: goto a4; + a3: goto a5; + a4: goto a6; + a5: goto a7; + a6: goto a8; + a7: goto a9; + a8: goto a10; + a9: goto a11; + a10: goto a12; + a11: goto a13; + a12:; + a13:; + return -a; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/jumptab.c b/gcc/testsuite/gcc.c-torture/unsorted/jumptab.c new file mode 100644 index 000000000000..d86c30e40d6a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/jumptab.c @@ -0,0 +1,20 @@ +jumptab (a) +{ + int b; + switch (a) + { + case 0: + b = 6;break; + case 1: + b = 5;break; + case 2: + b = 4;break; + case 3: + b = 3;break; + case 4: + b = 2;break; + case 5: + b = 1;break; + } + return b; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/l.c b/gcc/testsuite/gcc.c-torture/unsorted/l.c new file mode 100644 index 000000000000..cc23b190b1db --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/l.c @@ -0,0 +1,4 @@ +main (a) +{ + return - 256 + a; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/layout.c b/gcc/testsuite/gcc.c-torture/unsorted/layout.c new file mode 100644 index 000000000000..04c825df6451 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/layout.c @@ -0,0 +1,13 @@ +struct foo +{ + char a; +}; + +foo () +{ + struct foo bar[3]; + bar[0].a = '0'; + bar[1].a = '1'; + bar[2].a = '2'; + foof (bar); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/lbug.c b/gcc/testsuite/gcc.c-torture/unsorted/lbug.c new file mode 100644 index 000000000000..0440a0a7a9d7 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/lbug.c @@ -0,0 +1,7 @@ +long long x = 0; +main() +{ + if (x--) + return 255; + return 0; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/ll1.c b/gcc/testsuite/gcc.c-torture/unsorted/ll1.c new file mode 100644 index 000000000000..9009e77b6f4c --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/ll1.c @@ -0,0 +1,5 @@ +long long +foo (long long a) +{ + return a + ((long long) 10230101 << 32) + 7561; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/llbug.c b/gcc/testsuite/gcc.c-torture/unsorted/llbug.c new file mode 100644 index 000000000000..8c56dfbe70df --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/llbug.c @@ -0,0 +1,13 @@ +union foo +{ + long long d; +}; + +int +bar (long long d) +{ + union foo u; + + u.d = d; + return (int) &u; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/lll.c b/gcc/testsuite/gcc.c-torture/unsorted/lll.c new file mode 100644 index 000000000000..dee9dc37d159 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/lll.c @@ -0,0 +1,45 @@ + +byte_match_count2 (buf, n, xm, m1, m2, m3, m4) + unsigned *buf; + unsigned n; + unsigned xm; + unsigned m1, m2, m3, m4; +{ + unsigned w, cnt = 0; + unsigned *bp; + + n /= 4; + + bp = buf; + while (bp < buf + n) + { + w = *bp++; + w ^= xm; + cnt += ((m1 & w) == 0); + cnt += ((m2 & w) == 0); + cnt += ((m3 & w) == 0); + cnt += ((m4 & w) == 0); + + w = *bp++; + w ^= xm; + cnt += ((m1 & w) == 0); + cnt += ((m2 & w) == 0); + cnt += ((m3 & w) == 0); + cnt += ((m4 & w) == 0); + + w = *bp++; + w ^= xm; + cnt += ((m1 & w) == 0); + cnt += ((m2 & w) == 0); + cnt += ((m3 & w) == 0); + cnt += ((m4 & w) == 0); + + w = *bp++; + w ^= xm; + cnt += ((m1 & w) == 0); + cnt += ((m2 & w) == 0); + cnt += ((m3 & w) == 0); + cnt += ((m4 & w) == 0); + } + return cnt; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/load8.c b/gcc/testsuite/gcc.c-torture/unsorted/load8.c new file mode 100644 index 000000000000..947a8165c29c --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/load8.c @@ -0,0 +1,4 @@ +foo () +{ + return *(short *) 126; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/loadhicc.c b/gcc/testsuite/gcc.c-torture/unsorted/loadhicc.c new file mode 100644 index 000000000000..a7540894f5e6 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/loadhicc.c @@ -0,0 +1,15 @@ +typedef int xtype; + +foo (p, pc) + xtype *p; + char *pc; +{ + xtype a; + unsigned b = 0; + + a = *p; + p[1] = a; + if ((unsigned) p[1] > 0) + return 1; + return a; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/log2.c b/gcc/testsuite/gcc.c-torture/unsorted/log2.c new file mode 100644 index 000000000000..39b857840699 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/log2.c @@ -0,0 +1,6 @@ +log2 (a, b) +{ + int c; + c = ~(~a & ~b); + return c; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/logic.c b/gcc/testsuite/gcc.c-torture/unsorted/logic.c new file mode 100644 index 000000000000..a9d6e9d0c2d4 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/logic.c @@ -0,0 +1,37 @@ +logic (a, b) + int *a, b; +{ + if (*a & 123) + b = 1; + if (*a & ~222) + b = 2; + if (124 & *a) + b = 3; + if (~111 & *a) + b = 4; + + if (~*a & 23) + b = 1; + if (~*a & ~22) + b = 2; + if (24 & ~*a) + b = 3; + if (~11 & ~*a) + b = 4; + + if (~*a & b) + b = 1; + if (~*a & ~b) + b = 2; + if (*a & ~*a) + b = 3; + return b; +} + +x (a, b, c) +{ + for (a = 0; --a > 0;); + for (b = -1; --b > 0;); + for (c = -65536; --c > 0;); + return a + b + c; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/loop-1.c b/gcc/testsuite/gcc.c-torture/unsorted/loop-1.c new file mode 100644 index 000000000000..e50687a9fdd5 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/loop-1.c @@ -0,0 +1,11 @@ +foo (a) +{ + while ((a -= 1) != -1) + bar (270000); + putchar ('\n'); +} + +main () +{ + foo (5); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/loop386.c b/gcc/testsuite/gcc.c-torture/unsorted/loop386.c new file mode 100644 index 000000000000..429a320abbda --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/loop386.c @@ -0,0 +1,15 @@ +foo (a) +{ + do + { + puts ("a"); + a -= 1; + } + while (a != 0); +} + +main () +{ + int p[100]; + printf ("%d\n", foo (3)); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/lop.c b/gcc/testsuite/gcc.c-torture/unsorted/lop.c new file mode 100644 index 000000000000..72464111d4df --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/lop.c @@ -0,0 +1,6 @@ +lop (a) +{ + do + a--; + while (a >= -1); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/m1.c b/gcc/testsuite/gcc.c-torture/unsorted/m1.c new file mode 100644 index 000000000000..8660f60c950d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/m1.c @@ -0,0 +1,5 @@ +foo (p) + int *p; +{ + *p = 1234; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/m2.c b/gcc/testsuite/gcc.c-torture/unsorted/m2.c new file mode 100644 index 000000000000..203c855b5eb6 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/m2.c @@ -0,0 +1,44 @@ +void +store16 (p, a) + short *p; + short a; +{ + *p = a; +} + +signed int +sign_extend16 (p) + signed short *p; +{ + return *p; +} + +unsigned int +zero_extend16 (p) + unsigned short *p; +{ + return *p; +} + +void +store8 (p, a) + char *p; + char a; +{ + *p = a; +} + +signed int +sign_extend8 (p) + signed char *p; +{ + return *p; +} + +unsigned int +zero_extend8 (p) + unsigned char *p; +{ + return *p; +} + diff --git a/gcc/testsuite/gcc.c-torture/unsorted/m5.c b/gcc/testsuite/gcc.c-torture/unsorted/m5.c new file mode 100644 index 000000000000..23ad8445d321 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/m5.c @@ -0,0 +1,4 @@ +foo (a) +{ + return a * 5 + 12; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/m68.c b/gcc/testsuite/gcc.c-torture/unsorted/m68.c new file mode 100644 index 000000000000..a1ee486d4c2f --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/m68.c @@ -0,0 +1,14 @@ +foo (a) +{ + return a | 12345; +} + +bar (a) +{ + return a & (0xffff0000 | 12345); +} + +foobar (a) +{ + return a - 128; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/mbyte.c b/gcc/testsuite/gcc.c-torture/unsorted/mbyte.c new file mode 100644 index 000000000000..a8a23eab90ae --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/mbyte.c @@ -0,0 +1,14 @@ +foo1 (p) + char *p; +{ + p[0] = p[1]; + return p[0]; +} + +foo2 (p, x) + char *p; +{ + p[0] = x; + return p[0]; +} + diff --git a/gcc/testsuite/gcc.c-torture/unsorted/mchar.c b/gcc/testsuite/gcc.c-torture/unsorted/mchar.c new file mode 100644 index 000000000000..a1b106037f7c --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/mchar.c @@ -0,0 +1,11 @@ +int +foo (char *a, char *b) +{ + int x; + *a = *b; + x = *b; + if ((char) x) + return 1; + else + return 0; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/mcmp.c b/gcc/testsuite/gcc.c-torture/unsorted/mcmp.c new file mode 100644 index 000000000000..6008008e1649 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/mcmp.c @@ -0,0 +1,9 @@ +foo (ip, a, x) + int a; + int *ip; + int x; +{ + if (a >= 1) + x++; + return x; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/mdouble.c b/gcc/testsuite/gcc.c-torture/unsorted/mdouble.c new file mode 100644 index 000000000000..992db2205f24 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/mdouble.c @@ -0,0 +1,6 @@ +double +foo (double a) +{ + + return 1.123486712; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/memtst.c b/gcc/testsuite/gcc.c-torture/unsorted/memtst.c new file mode 100644 index 000000000000..b345ba00b3c9 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/memtst.c @@ -0,0 +1,20 @@ +memtst (int *p, int a) +{ + do + { + if (p[a] == 1) + break; + } + while (--a); +} + +main () +{ + int a[65536]; + int i; + bzero (a, 65536 * 4); + for (i = 0; i < 100; i++) + { + memtst (a, 65536); + } +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/miscomp.c b/gcc/testsuite/gcc.c-torture/unsorted/miscomp.c new file mode 100644 index 000000000000..0bcb568d54b0 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/miscomp.c @@ -0,0 +1,15 @@ +unsigned char foo(unsigned long); +main() +{ + unsigned char AChar; + unsigned long ALong = 0x12345678; + + AChar = foo(ALong); + + printf("AChar = %x\n",(int)AChar); +} +unsigned char +foo( unsigned long TheLong) +{ + return( (unsigned char) (TheLong & 0xff) ); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/mm.c b/gcc/testsuite/gcc.c-torture/unsorted/mm.c new file mode 100644 index 000000000000..a8efaae21cb3 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/mm.c @@ -0,0 +1,4 @@ +foo (a, b) +{ + return a * 2; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/mod.c b/gcc/testsuite/gcc.c-torture/unsorted/mod.c new file mode 100644 index 000000000000..c33211dc7fc6 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/mod.c @@ -0,0 +1,4 @@ +foo (a, b) +{ + return a % b; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/modcc.c b/gcc/testsuite/gcc.c-torture/unsorted/modcc.c new file mode 100644 index 000000000000..2574090e96c0 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/modcc.c @@ -0,0 +1,4 @@ +foo (a, b) +{ + return (a % b) == 0; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/move.c b/gcc/testsuite/gcc.c-torture/unsorted/move.c new file mode 100644 index 000000000000..78e00ff2100e --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/move.c @@ -0,0 +1,9 @@ +typedef char type; + +type +foo (b) +{ + type a; + for (a = 10; a < b; a++) + ; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/move_qhi.c b/gcc/testsuite/gcc.c-torture/unsorted/move_qhi.c new file mode 100644 index 000000000000..9bc9cb6630cf --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/move_qhi.c @@ -0,0 +1,12 @@ +move (a, b) + char a, b; +{ + char s; + s = a; + if (s) + gurka (s); + foo (b, a); + a = bar (); + b = bar (); + gra (s); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/mregtst.c b/gcc/testsuite/gcc.c-torture/unsorted/mregtst.c new file mode 100644 index 000000000000..b6bb6c21f55e --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/mregtst.c @@ -0,0 +1,17 @@ +foo (a, p) + int *p; +{ + int old, new, i; + + old = 0; + for (i = 1; i < 100; i++) + { + new = p[i]; + if (new < old) + a++; + old = new; + if (old == 0) + return 0; + } + return a; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/msp.c b/gcc/testsuite/gcc.c-torture/unsorted/msp.c new file mode 100644 index 000000000000..c73cedd294c5 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/msp.c @@ -0,0 +1,5 @@ +foo () +{ + int a[16384]; + bar (a); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/mtst.c b/gcc/testsuite/gcc.c-torture/unsorted/mtst.c new file mode 100644 index 000000000000..4f43137b705a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/mtst.c @@ -0,0 +1,17 @@ +foo (int *p, int c) +{ + int a, b; + a = p[0]; + b = p[1]; + c = p[2]; + if (b == 0) + goto foo1; + if (b < 0) + goto foo2;; + + return a + b + c; + foo1: + return 1; + foo2: + return 2; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/mu.c b/gcc/testsuite/gcc.c-torture/unsorted/mu.c new file mode 100644 index 000000000000..c469a6e3a9b3 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/mu.c @@ -0,0 +1,4 @@ +foo (a, b) +{ + return a * b; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/mul.c b/gcc/testsuite/gcc.c-torture/unsorted/mul.c new file mode 100644 index 000000000000..cc5d06b5fac1 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/mul.c @@ -0,0 +1,5 @@ +void +mulqi (char *p, char a, char b) +{ + p[0] = a/b; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/mword.c b/gcc/testsuite/gcc.c-torture/unsorted/mword.c new file mode 100644 index 000000000000..873e08868c53 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/mword.c @@ -0,0 +1,29 @@ +int +foo (a, b) +int *a, *b; +{ + int x, y; + x++; + *a = *b; + y = *b; + + if ((int) x) + return 1; + else + return y; +} + +foo1 (p) + int *p; +{ + p[0] = p[1]; + return p[0]; +} + +foo2 (p, x) + int *p; +{ + p[0] = x; + return p[0]; +} + diff --git a/gcc/testsuite/gcc.c-torture/unsorted/mword1.c b/gcc/testsuite/gcc.c-torture/unsorted/mword1.c new file mode 100644 index 000000000000..690703eb8bfd --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/mword1.c @@ -0,0 +1,12 @@ +int +foo (a, b) +int *a, *b; +{ + int x; + *a = (*b + 1); + x = *b; + if ((int) x) + return 1; + else + return 0; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/n.c b/gcc/testsuite/gcc.c-torture/unsorted/n.c new file mode 100644 index 000000000000..1a9a86974176 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/n.c @@ -0,0 +1,6 @@ +char_autoincr (b1, c) + short *b1; + short c; +{ + *b1 = c; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/n1.c b/gcc/testsuite/gcc.c-torture/unsorted/n1.c new file mode 100644 index 000000000000..dfa93cebed4a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/n1.c @@ -0,0 +1,10 @@ +foo (a, p) + long long a; + int *p; +{ + int b = (int)-a; + if (b > 32) + return 1; + else + return 0; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/nand.c b/gcc/testsuite/gcc.c-torture/unsorted/nand.c new file mode 100644 index 000000000000..8228a3c3a42f --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/nand.c @@ -0,0 +1,4 @@ +nadn (a, b) +{ + return (~a) | (~b); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/neg.c b/gcc/testsuite/gcc.c-torture/unsorted/neg.c new file mode 100644 index 000000000000..c005b1327dda --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/neg.c @@ -0,0 +1 @@ +foo (a) {return -a;} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/o.c b/gcc/testsuite/gcc.c-torture/unsorted/o.c new file mode 100644 index 000000000000..e8b78e383cbe --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/o.c @@ -0,0 +1,12 @@ +foo (a, p) + char a; + int *p; +{ + int b = a; + *p = b; + a = (char) a; + if (a) + return b; + else + return b + 1; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/omit.c b/gcc/testsuite/gcc.c-torture/unsorted/omit.c new file mode 100644 index 000000000000..f59d6ee8f278 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/omit.c @@ -0,0 +1,11 @@ +omit (a, b) + char a; + char *b; +{ + char x; + int i; + x = *b; + b[1] = x; + foo ((int)x); + return x + 1; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/opout.c b/gcc/testsuite/gcc.c-torture/unsorted/opout.c new file mode 100644 index 000000000000..6d3736e059a9 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/opout.c @@ -0,0 +1,10 @@ +x () +{} + +y () +{} + +z (a, b) +{ + return (int) &a + (int) &b + (int) x + (int) z; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/opt.c b/gcc/testsuite/gcc.c-torture/unsorted/opt.c new file mode 100644 index 000000000000..faad10e48fe0 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/opt.c @@ -0,0 +1,5 @@ +int +foo (a) +{ + return (a == 2); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/or.c b/gcc/testsuite/gcc.c-torture/unsorted/or.c new file mode 100644 index 000000000000..2a2e3b668b75 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/or.c @@ -0,0 +1,4 @@ +foo (a) +{ + return a | 0xffff0101; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/or386.c b/gcc/testsuite/gcc.c-torture/unsorted/or386.c new file mode 100644 index 000000000000..ad49f35043ca --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/or386.c @@ -0,0 +1,13 @@ +typedef int xtype; + +xtype +foo (a) + xtype a; +{ + return a | 0x7f; +} + +main () +{ + printf ("%08x\n", foo (-1)); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/p.c b/gcc/testsuite/gcc.c-torture/unsorted/p.c new file mode 100644 index 000000000000..465e741592a2 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/p.c @@ -0,0 +1,6 @@ +foo (a, b, p) + short *p; +{ + p[0] = a; + p[1] = b; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/parms.c b/gcc/testsuite/gcc.c-torture/unsorted/parms.c new file mode 100644 index 000000000000..26c2c7017568 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/parms.c @@ -0,0 +1,7 @@ +#define alloca __builtin_alloca + +x (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, x, y) +{ + foo (alloca (8)); + return a+b+c+d+e+f+g+h+i+j+k+l+m+n+o+p+q+r+s+t+u+v+x+y; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/pass.c b/gcc/testsuite/gcc.c-torture/unsorted/pass.c new file mode 100644 index 000000000000..6b663828aee0 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/pass.c @@ -0,0 +1,13 @@ +int +foo (a, b, c) +{ + return a + b + c; +} + +int +bar () +{ + int q, w, e, r, t, y; + + return foo ((int) & q, q, w, e, q, (int) &w); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/pmt.c b/gcc/testsuite/gcc.c-torture/unsorted/pmt.c new file mode 100644 index 000000000000..b6aced6ec81d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/pmt.c @@ -0,0 +1,6 @@ +long long +foo (a, b) + long long a, b; +{ + return a; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/poor.c b/gcc/testsuite/gcc.c-torture/unsorted/poor.c new file mode 100644 index 000000000000..66d584aff432 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/poor.c @@ -0,0 +1,34 @@ +typedef struct +{ + char c[510]; +} s510; + +typedef struct +{ + char c[511]; +} s511; + +s510 G510, s1; +s511 G511; +int I, J; +double D; + +void main(void); +void f0(double D, ...); +s510 f1(double D, ...); +void f2a(s510 S); +void f2b(s511 S); + + +void main(void) +{ + + f0(D, I, J); + + s1 = f1(D, I, D); + + f2a(G510); + + f2b(G511); + +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/pp.c b/gcc/testsuite/gcc.c-torture/unsorted/pp.c new file mode 100644 index 000000000000..7d38d53de0f5 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/pp.c @@ -0,0 +1,9 @@ +foo (a, b, c, d, e, i0, f, i1) + double a, b, c, d, e, f; + int i0, i1; +{} + +main () +{ + foo (1.0, 2.0, 3.0, 4.0, 5.0, 1, 6.0, 2); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/pret-arg.c b/gcc/testsuite/gcc.c-torture/unsorted/pret-arg.c new file mode 100644 index 000000000000..a7fa8562830a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/pret-arg.c @@ -0,0 +1,5 @@ +foo (a, b, c, d, e, f, g, h, i, j, xx) + double xx; +{ + return xx + 1.2345; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/pyr.c b/gcc/testsuite/gcc.c-torture/unsorted/pyr.c new file mode 100644 index 000000000000..d25b2a99aa5d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/pyr.c @@ -0,0 +1,11 @@ +foo (char *a) +{ + char b; + int c; + b = *a; + c = b; + if (c < 0) + return 1; + a[1] = b; + +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/pyr2.c b/gcc/testsuite/gcc.c-torture/unsorted/pyr2.c new file mode 100644 index 000000000000..12e2ccd24b2a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/pyr2.c @@ -0,0 +1,4 @@ +foo (a) +{ + return ((int *)0)[a]; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/q.c b/gcc/testsuite/gcc.c-torture/unsorted/q.c new file mode 100644 index 000000000000..fa08e758a520 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/q.c @@ -0,0 +1,7 @@ + +unsigned +reg0indreg1 (r0, p1) + unsigned short r0; unsigned short p1; +{ + return (r0 + p1); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/r.c b/gcc/testsuite/gcc.c-torture/unsorted/r.c new file mode 100644 index 000000000000..19eeda7ab44f --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/r.c @@ -0,0 +1,7 @@ +r (a, b) +{ + if (a < b) + return 1; + else + return 2; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/r1.c b/gcc/testsuite/gcc.c-torture/unsorted/r1.c new file mode 100644 index 000000000000..0b277b0f8dca --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/r1.c @@ -0,0 +1,29 @@ +void assert (a) {if (a != 1) abort ();} + +int h1 (int *p) {return *p & 255;} + +void p1 () {int a = 0x01020304; assert (h1 (&a) == 0x04);} + + +int h2 (a) {return a > 0;} + +p2 () {assert (h2 (1));} + +h3 (int *p) +{ + *p |= 255; +} + +p3 () +{ + int *p; + h3 (p); +} + +main () +{ + p1 (); + p2 (); + p3 (); + puts ("Compiler test passed."); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/rel.c b/gcc/testsuite/gcc.c-torture/unsorted/rel.c new file mode 100644 index 000000000000..54d36052ed3f --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/rel.c @@ -0,0 +1,8 @@ +foo (int *c, int b) +{ + int a; + + a = *c + b; + c[1] = a; + return b; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/rmsc.c b/gcc/testsuite/gcc.c-torture/unsorted/rmsc.c new file mode 100644 index 000000000000..5c97c6dae140 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/rmsc.c @@ -0,0 +1,46 @@ + +cc1 (x, y) + int x, y; +{ + int z; + z = x - y; + if (x >= y) + return z + 1; + else + return z + 0; +} + +cc2 (x, y) + int x, y; +{ + int z; + + z = x - y; + if (z >= 0) + return z + 1; + else + return z + 0; +} + +cc3 (x, y) + unsigned x, y; +{ + unsigned z; + z = x - y; + if (x >= y) + return z + 1; + else + return z + 0; +} + +cc4 (x, y) + unsigned x, y; +{ + unsigned z; + + z = x - y; + if (z >= 0) + return z + 1; + else + return z + 0; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/round.c b/gcc/testsuite/gcc.c-torture/unsorted/round.c new file mode 100644 index 000000000000..5233e65ea90e --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/round.c @@ -0,0 +1,13 @@ +foo (a) + double a; +{ + printf ("%d\n", (int) a); +} + +main () +{ + foo (1.6); + foo (1.4); + foo (-1.4); + foo (-1.6); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/run.c b/gcc/testsuite/gcc.c-torture/unsorted/run.c new file mode 100644 index 000000000000..40892f6037ff --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/run.c @@ -0,0 +1,11 @@ +main () +{ + typedef short int xtype; + + xtype i; + xtype ii; + + for (i = 0; i < 100; i++) + for (ii = 65535; --ii;) + ; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/s.c b/gcc/testsuite/gcc.c-torture/unsorted/s.c new file mode 100644 index 000000000000..e0c84262208a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/s.c @@ -0,0 +1,24 @@ +struct foo +{ + int a, b, c, d; + double doubl; +} s1, s2; + +struct foo +structret (s1, i1, i2, s2) + struct foo s1, s2; + int i1, i2; +{ + if (i1 != i2) + { + if (i1 < i2) + return s1; + else + return s2; + } + s2.a = 11; + s2.b = 22; + s2.c = s1.c; + s2.d = s1.d; + return s2; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/sar.c b/gcc/testsuite/gcc.c-torture/unsorted/sar.c new file mode 100644 index 000000000000..9bf9bec06256 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/sar.c @@ -0,0 +1,10 @@ +struct foo +{ + char a; +} foo[100]; + +main () +{ + foo[1].a = '1'; + foo[2].a = '2'; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/sc.c b/gcc/testsuite/gcc.c-torture/unsorted/sc.c new file mode 100644 index 000000000000..84dc60f7e90f --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/sc.c @@ -0,0 +1,5 @@ +foo (a, b) + int a, b; +{ + return (a < 0) | (a <= 0) | (a == 0) | (a != 0) | (a >= 0) | (a > 0); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/scal.c b/gcc/testsuite/gcc.c-torture/unsorted/scal.c new file mode 100644 index 000000000000..94e22aa80f5b --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/scal.c @@ -0,0 +1,19 @@ +int g1, g2; + +void +write_at (addr, off, val) + int *addr; + int off; + int val; +{ + g2 = 1; + addr[off] = val; + g2++; +} + +main () +{ + g2 = 12; + write_at (&g1, &g2 - &g1, 12345); + printf ("%d\n", g2); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/scc.c b/gcc/testsuite/gcc.c-torture/unsorted/scc.c new file mode 100644 index 000000000000..79ae4e12f45d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/scc.c @@ -0,0 +1,11 @@ +foo (a, b) +{ + if (a < 0) + goto ret1; + if (a == 0) + return 2; + return 3; + ret1: + return 1; +} + diff --git a/gcc/testsuite/gcc.c-torture/unsorted/scond.c b/gcc/testsuite/gcc.c-torture/unsorted/scond.c new file mode 100644 index 000000000000..087b0a66e945 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/scond.c @@ -0,0 +1,4 @@ +scond (a, b, c, d) +{ + return (a > b) & (c < d); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/selfrec.c b/gcc/testsuite/gcc.c-torture/unsorted/selfrec.c new file mode 100644 index 000000000000..c7aaca552a0f --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/selfrec.c @@ -0,0 +1,5 @@ +int +foo (a) +{ + return foo (a - 1) * a; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/seq.c b/gcc/testsuite/gcc.c-torture/unsorted/seq.c new file mode 100644 index 000000000000..0793228b491d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/seq.c @@ -0,0 +1,4 @@ +foo (a) +{ + return a < 0; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/set386.c b/gcc/testsuite/gcc.c-torture/unsorted/set386.c new file mode 100644 index 000000000000..c16ae8dbdfe6 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/set386.c @@ -0,0 +1,5 @@ +foo (a, p) + int *p; +{ + *p = a > 0; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/set88.c b/gcc/testsuite/gcc.c-torture/unsorted/set88.c new file mode 100644 index 000000000000..8069ea622a3d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/set88.c @@ -0,0 +1,9 @@ +foo (a) +{ + return -1 << a; +} + +bar (a, b) +{ + return b | (-1 << a); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/sh.c b/gcc/testsuite/gcc.c-torture/unsorted/sh.c new file mode 100644 index 000000000000..8d3265f83f75 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/sh.c @@ -0,0 +1,4 @@ +foo (a, b) +{ + return a << b; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/shand.c b/gcc/testsuite/gcc.c-torture/unsorted/shand.c new file mode 100644 index 000000000000..5a401961355e --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/shand.c @@ -0,0 +1,11 @@ +int +foo (x, c) + int x; +{ + return x >> 24 & 0xff; +} + +bar (x) +{ + return (int)(x & 0xfffff) << 13; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/shft.c b/gcc/testsuite/gcc.c-torture/unsorted/shft.c new file mode 100644 index 000000000000..7d318c863c54 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/shft.c @@ -0,0 +1,15 @@ +foo (a) + int a; +{ + int b = 8; + + if ((a << b) >= 0) + return 1; + return a; +} + +main () +{ + if (foo (0x00ffffff) == 1) + puts ("y"); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/shift.c b/gcc/testsuite/gcc.c-torture/unsorted/shift.c new file mode 100644 index 000000000000..1ed1879c616f --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/shift.c @@ -0,0 +1,7 @@ +foo (a) +{ + if (a >= 0) + return (unsigned) a << 10; + else + return (int) a << 10; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/shloop.c b/gcc/testsuite/gcc.c-torture/unsorted/shloop.c new file mode 100644 index 000000000000..f4c9366394af --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/shloop.c @@ -0,0 +1,7 @@ +main () +{ + int volatile p; + int i; + for (i = 10000000; i > 0; i--) + p = i >> 10; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/shm.c b/gcc/testsuite/gcc.c-torture/unsorted/shm.c new file mode 100644 index 000000000000..b667b26abe90 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/shm.c @@ -0,0 +1,5 @@ +foo (int *p) +{ + int a = *p; + return a >> 24; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/signext.c b/gcc/testsuite/gcc.c-torture/unsorted/signext.c new file mode 100644 index 000000000000..2724098d0318 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/signext.c @@ -0,0 +1,27 @@ +void longprint (x) + long long x; +{ + printf (" %d, %d\n", (unsigned) ((unsigned long long) x >> 32), + (unsigned) x); +} + +void +k_min (p, qa, d) + int d; +{ + int s = 1; + long long x; + + if (s >= d) + s -= d; + + x = ((long long)((8 * s) % 3) + qa) % d; + longprint (x); +} + +int +main () +{ + k_min (100003, -600017, 3); + return 0; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/signext2.c b/gcc/testsuite/gcc.c-torture/unsorted/signext2.c new file mode 100644 index 000000000000..d2eb6370df81 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/signext2.c @@ -0,0 +1,11 @@ +long long +foo (a) + int a; +{ + return a; +} + +main () +{ + printf ("%d\n", (int) (foo (-1) >> 32)); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/sim.c b/gcc/testsuite/gcc.c-torture/unsorted/sim.c new file mode 100644 index 000000000000..e8c4fb42f533 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/sim.c @@ -0,0 +1,7 @@ +main () +{ + int i; + + for (i = 1; i < 10000; i++) + ; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/simple.c b/gcc/testsuite/gcc.c-torture/unsorted/simple.c new file mode 100644 index 000000000000..614acba82d90 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/simple.c @@ -0,0 +1,4 @@ +foo (a) +{ + return a; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/sne.c b/gcc/testsuite/gcc.c-torture/unsorted/sne.c new file mode 100644 index 000000000000..6844a6e53b98 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/sne.c @@ -0,0 +1,4 @@ +foo (double a) +{ + return (a != 0); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/sound.c b/gcc/testsuite/gcc.c-torture/unsorted/sound.c new file mode 100644 index 000000000000..be727e3febb0 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/sound.c @@ -0,0 +1,13 @@ + +main () +{ + char audio[8192]; + int i; + + for (i = 0; i < 4095; i += 1) + audio[i] = i / 8, + audio[8191 - i] = i / 8; + + for (;;) + write (1, audio, 8192); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/sparcbug.c b/gcc/testsuite/gcc.c-torture/unsorted/sparcbug.c new file mode 100644 index 000000000000..cd42a86ccccc --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/sparcbug.c @@ -0,0 +1,5 @@ +foo (a) +{ + int b = a; + return b + 8762345; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/speed.c b/gcc/testsuite/gcc.c-torture/unsorted/speed.c new file mode 100644 index 000000000000..d61407e321d4 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/speed.c @@ -0,0 +1,8 @@ +main () +{ + int i; + + for (i = 5000000; i >=0; i--) + { + } +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/stor.c b/gcc/testsuite/gcc.c-torture/unsorted/stor.c new file mode 100644 index 000000000000..57981eff5a63 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/stor.c @@ -0,0 +1,12 @@ +#define C 1 + +foo (p) + int *p; +{ + p[0] = C; + p[1] = C; + p[2] = C; + p[3] = C; + p[4] = C; + p[5] = C; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/store0.c b/gcc/testsuite/gcc.c-torture/unsorted/store0.c new file mode 100644 index 000000000000..3b7b16ef3bc5 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/store0.c @@ -0,0 +1,4 @@ +foo (int *p) +{ + p[10] = 0; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/storecc.c b/gcc/testsuite/gcc.c-torture/unsorted/storecc.c new file mode 100644 index 000000000000..116346910915 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/storecc.c @@ -0,0 +1,6 @@ +foo (char *p, int a) +{ + *p = a; + if ((char) a) + return 1; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/str.c b/gcc/testsuite/gcc.c-torture/unsorted/str.c new file mode 100644 index 000000000000..d2dec4b2303e --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/str.c @@ -0,0 +1,13 @@ +typedef struct +{ + char a; + char b; +} foo; + +bar () +{ + foo foobar[100]; + foobar[1].a = 'a'; + foobar[2].a = 'b'; + barfoo (foobar); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/stru.c b/gcc/testsuite/gcc.c-torture/unsorted/stru.c new file mode 100644 index 000000000000..042c52217846 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/stru.c @@ -0,0 +1,9 @@ +struct foo +{ + int a, b, c; +}; + +foo (struct foo *a) +{ + a[0] = a[1]; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/structret.c b/gcc/testsuite/gcc.c-torture/unsorted/structret.c new file mode 100644 index 000000000000..9c705d4c0a22 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/structret.c @@ -0,0 +1,69 @@ +struct foo +{ + int a, b, c, d; + double doubl; +} s1, s2; + +#ifndef ONLY2 + +struct foo +structret (s1, i1, i2, s2) + struct foo s1, s2; + int i1, i2; +{ + if (i1 != i2) + { + if (i1 < i2) + return s1; + else + return s2; + } + s2.a = 11; + s2.b = 22; + s2.c = s1.c; + s2.d = s1.d; + return s2; +} + +#endif + +#ifndef ONLY1 + +struct foo +mani (a, b) +{ + return structret (s1, a, b, s2); +} + +init () +{ + s1.a = 1; + s1.b = 2; + s1.c = 3; + s1.d = 4; + s1.doubl = 3.1415; + s2.a = -1; + s2.b = -2; + s2.c = -3; + s2.d = -4; + s2.doubl = 2.71818; +} + +main () +{ + struct foo s; + + init (); + s = mani (1, 1); + printf ("%d, %d, %d, %d : %f\n", s.a, s.b, s.c, s.d, s.doubl); + + init (); + s = mani (2, 1); + printf ("%d, %d, %d, %d : %f\n", s.a, s.b, s.c, s.d, s.doubl); + + init (); + s = mani (1, 2); + printf ("%d, %d, %d, %d : %f\n", s.a, s.b, s.c, s.d, s.doubl); +} + +#endif diff --git a/gcc/testsuite/gcc.c-torture/unsorted/stuct.c b/gcc/testsuite/gcc.c-torture/unsorted/stuct.c new file mode 100644 index 000000000000..bf7e2329bd9d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/stuct.c @@ -0,0 +1,16 @@ +struct foo +{ + int a, b, c; + int arr[10000000]; +}; + +struct foo s, ss; + +main () +{ + + s.b = 2; + s.c = 3; + ss.b = 2; + ss.c = 3; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/sub32.c b/gcc/testsuite/gcc.c-torture/unsorted/sub32.c new file mode 100644 index 000000000000..93114d96cd70 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/sub32.c @@ -0,0 +1,4 @@ +foo (a) +{ + return a + 32; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/subcc.c b/gcc/testsuite/gcc.c-torture/unsorted/subcc.c new file mode 100644 index 000000000000..d50114eee424 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/subcc.c @@ -0,0 +1,31 @@ +foo (a, c) +{ + int b; + + if (a + c >= 0) /* b < 0 ==== a < 10? */ + return a | 0x80000000; + return 0; +} + +bar (a) +{ + if (foo (a, 10) & 0x80000000) + printf ("y"); + else + printf ("n"); +} + +main () +{ + bar (0); + bar (1); + bar (-1); + bar (10); + bar (-10); + bar (11); + bar (-11); + bar (0x7fffffff); + bar (-0x7fffffff); + + puts (""); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/subcse.c b/gcc/testsuite/gcc.c-torture/unsorted/subcse.c new file mode 100644 index 000000000000..0a10991f18aa --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/subcse.c @@ -0,0 +1,6 @@ +foo (a, b, p) + int *p; +{ + p[0] = 1230 - a; + p[1] = 1230 - b; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/sym.c b/gcc/testsuite/gcc.c-torture/unsorted/sym.c new file mode 100644 index 000000000000..8a0fe323b03e --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/sym.c @@ -0,0 +1,4 @@ +foo () +{ + return (int) &foo; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/symconst.c b/gcc/testsuite/gcc.c-torture/unsorted/symconst.c new file mode 100644 index 000000000000..7add218108e4 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/symconst.c @@ -0,0 +1,4 @@ +foo () +{ + return (int)foo; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/t.c b/gcc/testsuite/gcc.c-torture/unsorted/t.c new file mode 100644 index 000000000000..48095e7c38bc --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/t.c @@ -0,0 +1,18 @@ +#define B 95 + +foo (a, b, p) + unsigned a, b; + int *p; +{ + p[1] = a % B; + p[0] = a / B; +} + +bar (a, b, p) + unsigned a, b; + int *p; +{ + p[0] = a / B; + p[1] = a % B; +} + diff --git a/gcc/testsuite/gcc.c-torture/unsorted/test-flow.c b/gcc/testsuite/gcc.c-torture/unsorted/test-flow.c new file mode 100644 index 000000000000..01ec724eb2fe --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/test-flow.c @@ -0,0 +1,12 @@ +foo (a, b, c, d) +{ + if (a < 0) + { + b = c; + } + else + { + b = d; + } + return b + 75; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/test-loop.c b/gcc/testsuite/gcc.c-torture/unsorted/test-loop.c new file mode 100644 index 000000000000..d441dde0ca9a --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/test-loop.c @@ -0,0 +1,7 @@ +main () +{ + int i; + for (i = 100; i >= -1; i--) + foo (); + +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/test.c b/gcc/testsuite/gcc.c-torture/unsorted/test.c new file mode 100644 index 000000000000..46e830a3521b --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/test.c @@ -0,0 +1,6 @@ +foo (a) +{ + if (a & 38) + return 1; + return 0; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/time.c b/gcc/testsuite/gcc.c-torture/unsorted/time.c new file mode 100644 index 000000000000..7e22681d98b5 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/time.c @@ -0,0 +1,7 @@ +main () +{ + int i; + for (i = 3000000; --i;) + { + } +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/tmp.c b/gcc/testsuite/gcc.c-torture/unsorted/tmp.c new file mode 100644 index 000000000000..463d9fb530d0 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/tmp.c @@ -0,0 +1,5 @@ +foo (a, b) +{ + return (a - b) == 0; +} + diff --git a/gcc/testsuite/gcc.c-torture/unsorted/trivial.c b/gcc/testsuite/gcc.c-torture/unsorted/trivial.c new file mode 100644 index 000000000000..e9665cd8dd74 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/trivial.c @@ -0,0 +1 @@ +foo () {} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/trunc.c b/gcc/testsuite/gcc.c-torture/unsorted/trunc.c new file mode 100644 index 000000000000..dee0e158728c --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/trunc.c @@ -0,0 +1,11 @@ +main () +{ + printf ("%x, %x\n", (unsigned char) main, main); +} + +foo (p) + char *p; +{ + p[0] = (char)foo; + p[1] = (char)foo; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/u.c b/gcc/testsuite/gcc.c-torture/unsorted/u.c new file mode 100644 index 000000000000..7fc0dda3784e --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/u.c @@ -0,0 +1 @@ +foo (a, b) { return a % b; } diff --git a/gcc/testsuite/gcc.c-torture/unsorted/udconvert.c b/gcc/testsuite/gcc.c-torture/unsorted/udconvert.c new file mode 100644 index 000000000000..31b494fe08a1 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/udconvert.c @@ -0,0 +1,30 @@ +double +unsigned_to_double1 (u) + unsigned u; +{ + double d; + d = (int) u; /* convert as from a *signed* integer */ + return ((int) u < 0) + ? d + 4294967296.0 + : d; +} + +/* Alternatively */ + +double +unsigned_to_double2 (u) + unsigned u; +{ + double d; + u -= 2147483648; /* complement sign bit */ + d = (int) u; /* convert as from a *signed* integer */ + return d + 2147483648.0; +} + +unsigned +double_to_unsigned (d) + double d; +{ + d += 2147483648.0; + return ((int) d) - 2147483648; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/udivmod4.c b/gcc/testsuite/gcc.c-torture/unsorted/udivmod4.c new file mode 100644 index 000000000000..40d2fa8d07c0 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/udivmod4.c @@ -0,0 +1,56 @@ +long long +xlrandom () +{ + long long x; + unsigned a; + int bits = 64; + unsigned b; + + do + { + a = random (); + b = (a & 15) + 1; + x <<= b; /* shift up 1-16 steps */ + a = (a >> 18) & 1; + if (a) + x |= (unsigned) (1 << b) - 1; + bits -= b; + } + while (bits >= 0); + return x; +} + + +unsigned long long __udivmoddi4(); + +main () +{ + int i; + unsigned long long n, d, q, r, rr; + + for (i = 0; ;i++) + { + n = xlrandom (); + d = xlrandom (); + if (d == 0) + continue; + + q = __udivmoddi4 (n, d, &r); + + if (i % 1000000 == 0) + printf ("Testing udivmoddi4: %d iterations made\n", i); + + rr = n - q * d; + if (rr != r || r >= d) + { + printf ("Testing udivmoddi4: failure after %d iterations\n", i); + printf ("n=%lX%08lX\n", (unsigned) (n >> 32), (unsigned) n); + printf ("d=%lX%08lX\n", (unsigned) (d >> 32), (unsigned) d); + printf ("q=%lX%08lX\n", (unsigned) (q >> 32), (unsigned) q); + printf ("r=%lX%08lX\n", (unsigned) (r >> 32), (unsigned) r); + printf ("rr=%lX%08lX\n", (unsigned) (rr >> 32), (unsigned) rr); + abort (); + } + } + +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/uns.c b/gcc/testsuite/gcc.c-torture/unsorted/uns.c new file mode 100644 index 000000000000..314704f89d38 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/uns.c @@ -0,0 +1,5 @@ +foo (a) +{ + if ((unsigned) a < 234) + return 1; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/uns_tst.c b/gcc/testsuite/gcc.c-torture/unsorted/uns_tst.c new file mode 100644 index 000000000000..e34ffaf30eb6 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/uns_tst.c @@ -0,0 +1,19 @@ +a (c) + unsigned char c; +{ + unsigned u = c; + if ((int)u < 0) + return 1; + else + return 0; +} + +b (x, y) + unsigned x, y; +{ + x /= y; + if ((int)x < 0) + return 1; + else + return 0; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/unsorted.exp b/gcc/testsuite/gcc.c-torture/unsorted/unsorted.exp new file mode 100644 index 000000000000..a586170a48ad --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/unsorted.exp @@ -0,0 +1,54 @@ +# +# Expect driver script for GCC Regression Tests +# Copyright (C) 1993, 1997 Free Software Foundation +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# Written by Jeffrey Wheat (cassidy@cygnus.com) +# + +# +# These tests come from Torbjorn Granlund's (tege@cygnus.com) +# C torture test suite, and other contributors. +# + +if $tracelevel then { + strace $tracelevel +} + +# load support procs +load_lib c-torture.exp + +# +# This loop will run c-torture on any *.c file found in this directory. +# If a *.c has a corresponding *.exp file, then the test is skipped as +# as the *.exp will drive the test itself. It is done this way so that +# generic tests do not need a seperate .exp for it. Only the tests that +# require unique options need their own .exp file. +# + +foreach testcase [glob -nocomplain $srcdir/$subdir/*.c] { + if [file exists [file rootname $testcase].exp] then { + verbose "INFO:\"[file rootname $testcase].exp\" exists, skipping test" 3 + continue + } + + # If we're only testing specific files and this isn't one of them, skip it. + if ![runtest_file_p $runtests $testcase] then { + continue + } + + c-torture $testcase +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/uuarg.c b/gcc/testsuite/gcc.c-torture/unsorted/uuarg.c new file mode 100644 index 000000000000..8928b3e07683 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/uuarg.c @@ -0,0 +1,4 @@ +foo (a, b, c, d, e, f, g, h, i) +{ + return foo () + i; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/v.c b/gcc/testsuite/gcc.c-torture/unsorted/v.c new file mode 100644 index 000000000000..87ac00aef64c --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/v.c @@ -0,0 +1,11 @@ +main (int *p) +{ + int a; + + a = 0; + p[1] = a; + a = 0; + p[2] = a; + a = 123456; + p[3] = a; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/w.c b/gcc/testsuite/gcc.c-torture/unsorted/w.c new file mode 100644 index 000000000000..1acfe1512a53 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/w.c @@ -0,0 +1 @@ +int foo (unsigned short a, unsigned short b) { return a + b; } diff --git a/gcc/testsuite/gcc.c-torture/unsorted/ww.c b/gcc/testsuite/gcc.c-torture/unsorted/ww.c new file mode 100644 index 000000000000..657f8c6b8396 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/ww.c @@ -0,0 +1,7 @@ +foo (p) + short *p; +{ + static int *foo; + *p = 1234; + *foo = 1234; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/x.c b/gcc/testsuite/gcc.c-torture/unsorted/x.c new file mode 100644 index 000000000000..baf98960cfd7 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/x.c @@ -0,0 +1 @@ +f(m){int i,s=0;for(i=0;i<m;i++)s+=i;return s;} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/xb.c b/gcc/testsuite/gcc.c-torture/unsorted/xb.c new file mode 100644 index 000000000000..09087ccf387f --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/xb.c @@ -0,0 +1,17 @@ +foo (a, b) +{ + unsigned x = 1; + + a += b; + a += x; + if (a <= 0) + return 1; + return 0; +} + +main () +{ + printf ("%d\n", foo (1, ~0)); + printf ("%d\n", foo (0, ~0)); + printf ("%d\n", foo (-1, ~0)); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/xbg.c b/gcc/testsuite/gcc.c-torture/unsorted/xbg.c new file mode 100644 index 000000000000..b600964d4203 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/xbg.c @@ -0,0 +1,14 @@ +typedef short type; + +short +foo (type *sp, int a) +{ + type t; + int i; + + t = sp[a]; + i = (int)(type)sp[a]; + if (i) + return 0; + return t; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/xc.c b/gcc/testsuite/gcc.c-torture/unsorted/xc.c new file mode 100644 index 000000000000..aed06a04ecdd --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/xc.c @@ -0,0 +1,11 @@ +foo (a, p) + int *p; +{ + int b; + + a++; + b = *p; + if (a) + return 1; + return b; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/xcsebug.c b/gcc/testsuite/gcc.c-torture/unsorted/xcsebug.c new file mode 100644 index 000000000000..614a6e80ebf3 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/xcsebug.c @@ -0,0 +1,14 @@ +int g1; +int g2; + +foo () +{ + int i = 1; + int x; + + x = g1; + (*(&g1 + i - 1)) = x + 1; + x = g1; + (*(&g1 + i - 1)) = x + 1; + g1++; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/xdi.c b/gcc/testsuite/gcc.c-torture/unsorted/xdi.c new file mode 100644 index 000000000000..413dd6cf84d9 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/xdi.c @@ -0,0 +1,15 @@ +foo (long long *p, int a, int b) +{ + *(p + a + b) = 876243243874343LL; +} + +bar (p, pp) + long long *p, *pp; +{ + long long a; + *p++ = a; + fee (*p); + *p++ = *pp--; + *p++ = *pp--; + return (int) p; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/xfoo.c b/gcc/testsuite/gcc.c-torture/unsorted/xfoo.c new file mode 100644 index 000000000000..da879d2aa134 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/xfoo.c @@ -0,0 +1,4 @@ +foo (a) +{ + return (a & ~0xfff) == 0; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/xi.c b/gcc/testsuite/gcc.c-torture/unsorted/xi.c new file mode 100644 index 000000000000..54b42c5a3777 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/xi.c @@ -0,0 +1,7 @@ +foo (a) +{ + int r = 0; + if (a) + r = 1; + return r; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/xlop.c b/gcc/testsuite/gcc.c-torture/unsorted/xlop.c new file mode 100644 index 000000000000..6506bfd3415e --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/xlop.c @@ -0,0 +1,11 @@ +foo (a) +{ + int b; + do + { + b = bar (); + a = b - 10; + } + while (a > 10); + return a; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/xmtst.c b/gcc/testsuite/gcc.c-torture/unsorted/xmtst.c new file mode 100644 index 000000000000..ca78fcaac123 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/xmtst.c @@ -0,0 +1,26 @@ +p1 (int b, int *p, int a) +{ + p[0] = p[1]; + return p[0]; +} +p2 (int b, int *p, int a) +{ + p[0] = p[1]; + return p[0] == 0; +} +p3 (int b, int *p, int a) +{ + p[0] = p[1]; + a = p[0]; + if (a) + return 0; + return a; +} +p4 (int b, int *p, int a) +{ + a = p[1]; + p[0] = p[1]; + if (a) + return 0; + return a; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/xneg.c b/gcc/testsuite/gcc.c-torture/unsorted/xneg.c new file mode 100644 index 000000000000..ff5b85034823 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/xneg.c @@ -0,0 +1,5 @@ +foo (a) + double a; +{ + return -a; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/xopt.c b/gcc/testsuite/gcc.c-torture/unsorted/xopt.c new file mode 100644 index 000000000000..b1a50f86cef2 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/xopt.c @@ -0,0 +1,35 @@ +proc1 (a) + unsigned a; +{ + return (a >> 20) & 0x010fffff; +} + +proc2 (a) + unsigned a; +{ + return (a << 17) & 0xfffff001; +} + +proc3 (a) + unsigned a; +{ + return (a & 0xff00000a) >> 25; +} + +proc4 (a) + unsigned a; +{ + return (a & 0x100000ff) << 25; +} + +proc5 (a) + unsigned a; +{ + return (unsigned char) (a >> 24); +} + +proc6 (a) + unsigned a; +{ + return ((unsigned char) a) << 30; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/xor.c b/gcc/testsuite/gcc.c-torture/unsorted/xor.c new file mode 100644 index 000000000000..435f2231e649 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/xor.c @@ -0,0 +1,4 @@ +foo (a, b) +{ + return ~(a ^ ~123); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/xorn.c b/gcc/testsuite/gcc.c-torture/unsorted/xorn.c new file mode 100644 index 000000000000..d7b75f936bd5 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/xorn.c @@ -0,0 +1,31 @@ +int +xorn (a, b) + int a, b; +{ + return a ^ ~b; +} + +int +not (a) + int a; +{ + return ~a; +} + +int +xor (a, b) + int a, b; +{ + return a ^ b; +} + +main () +{ + int i, j; + + for (i = 0; i <= 1; i++) + for (j = 0; j <= 1; j++) + printf ("%d op %d = %d = %d?\n", i, j, + 1 & xor (i, not (j)), + 1 & xorn (i, j)); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/xp.c b/gcc/testsuite/gcc.c-torture/unsorted/xp.c new file mode 100644 index 000000000000..139335c02876 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/xp.c @@ -0,0 +1,4 @@ +foo (a) +{ + return a & 255; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/xpp.c b/gcc/testsuite/gcc.c-torture/unsorted/xpp.c new file mode 100644 index 000000000000..daf3399a3f4d --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/xpp.c @@ -0,0 +1,12 @@ +foo (a) +{ + a++; + if (a < 10) + return 1; + return a; +} + +main () +{ + printf ("%d\n", foo ((1 << 31) - 1)); +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/xs.c b/gcc/testsuite/gcc.c-torture/unsorted/xs.c new file mode 100644 index 000000000000..24f773e7577b --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/xs.c @@ -0,0 +1,9 @@ +foo (a, b) +{ + for (b = 0; b < 10; b++) + ; + for (a = 0; a < 10; a++) + ; + a = b << 1; + return a; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/xsh.c b/gcc/testsuite/gcc.c-torture/unsorted/xsh.c new file mode 100644 index 000000000000..9ba0b6c9e023 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/xsh.c @@ -0,0 +1,7 @@ +foo (a, b) +{ + a = b + b; + if (a) + return a; + return b; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/xxs.c b/gcc/testsuite/gcc.c-torture/unsorted/xxs.c new file mode 100644 index 000000000000..1757f9760083 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/xxs.c @@ -0,0 +1,202 @@ +void *malloc (); +struct timeval { + long tv_sec; + long tv_usec; +}; +struct timezone { + int tz_minuteswest; + int tz_dsttime; +}; +struct itimerval { + struct timeval it_interval; + struct timeval it_value; +}; +typedef int sigset_t; +typedef unsigned int speed_t; +typedef unsigned long tcflag_t; +typedef unsigned char cc_t; +typedef int pid_t; +typedef unsigned short mode_t; +typedef short nlink_t; +typedef long clock_t; +typedef long time_t; +typedef int size_t; +typedef int ptrdiff_t; +typedef unsigned short wchar_t; +struct tm { + int tm_sec; + int tm_min; + int tm_hour; + int tm_mday; + int tm_mon; + int tm_year; + int tm_wday; + int tm_yday; + int tm_isdst; + char *tm_zone; + long tm_gmtoff; +}; +extern struct tm *gmtime(), *localtime(); +extern char *asctime(), *ctime(); +extern void tzset(), tzsetwall(); +extern int dysize(); +extern time_t timelocal(), timegm(); +struct rusage { + struct timeval ru_utime; + struct timeval ru_stime; + long ru_maxrss; + long ru_ixrss; + long ru_idrss; + long ru_isrss; + long ru_minflt; + long ru_majflt; + long ru_nswap; + long ru_inblock; + long ru_oublock; + long ru_msgsnd; + long ru_msgrcv; + long ru_nsignals; + long ru_nvcsw; + long ru_nivcsw; +}; +struct rlimit { + int rlim_cur; + int rlim_max; +}; +unsigned long +cputime () +{ + struct rusage rus; + getrusage (0, &rus); + return (((rus.ru_utime.tv_sec + rus.ru_stime.tv_sec) * 1000000) + + rus.ru_utime.tv_usec + rus.ru_stime.tv_usec) / 1000; +} +int +do_assoc_test (mem, start, cc) + register char *mem; + register int start; + register int cc; +{ + register int j; + register int ind = start; + register int x; + for (j = 0x100000; --j >= 0; ) + { + int x = ((volatile char *) mem)[ind]; + ind -= cc; + if (ind < 0) + ind = start; + } + return x; +} +int +determine_assoc (size) +{ + register char *mem = malloc (size * (1 << 5 )); + int cc = size; + int lbsets; + int times[5 + 1]; + for (lbsets = 0; lbsets <= 5; lbsets++) + { + int t = cputime (); + do_assoc_test (mem, (cc << lbsets) - cc, cc); + t = cputime () - t; + times[lbsets] = t; + printf ("sets = %2u: %u ms\n", 1 << lbsets, t); + } + free (mem); + { + int max = 1000 * times[1] / times[0]; + int maxindex = 0; + int min = 1000 * times[1] / times[0]; + int minindex = 0; + for (lbsets = 1; lbsets < 4; lbsets++) + { + int x = 1000 * times[lbsets + 1] / times[lbsets]; + if (x > max) + { + max = x; + maxindex = lbsets; + } + if (x < min) + { + min = x; + minindex = lbsets; + } + } + if (min * 100 > max * 75) + return 0; + return 1 << maxindex; + } +} +do_size_test(mem, size, reps) + register int *mem; + register int size; + register int reps; +{ + register int j, i, x; + mem += size; + for (j = reps; --j >= 0;) + for (i = -size; i < 0; i++) + x = ((volatile int *) mem)[i]; +} +int +determine_size() +{ + register int *mem = malloc (1 << 20 ); + int lbsize; + int times[20 ]; + for (lbsize = 12; lbsize < 20; lbsize++) + { + int t = cputime (); + do_size_test (mem, (1 << lbsize) / sizeof (int) - 64, + 0x1000000 >> lbsize); + t = cputime () - t; + times[lbsize] = t; + printf ("size = %2u: %u ms\n", 1 << lbsize, t); + } + free (mem); + { + int max = 1000 * times[12 + 1] / times[12 ]; + int maxindex = 0; + int min = 1000 * times[12 + 1] / times[12 ]; + int minindex = 0; + for (lbsize = 12; lbsize < 20 - 1; lbsize++) + { + int x = 1000 * times[lbsize + 1] / times[lbsize]; + if (x > max) + { + max = x; + maxindex = lbsize; + } + if (x < min) + { + min = x; + minindex = lbsize; + } + } + if (min * 100 > max * 75) + return 0; + return 1 << maxindex; + } +} +int +main() +{ + int size, assoc; + size = determine_size(); + if (size) + printf ("I guess this cache is %d bytes.\n", size); + else + printf ("I can't determine the size from this run.\n"); + if (size == 0) + size = 65536; + assoc = determine_assoc(size); + if (assoc > 1) + printf ("I guess this cache is %d-way set associative.\n", assoc); + else if (assoc == 1) + printf ("I guess this cache is direct mapped.\n"); + else + printf ("I can't determine the associativity from this run.\n"); + return 0; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/xz.c b/gcc/testsuite/gcc.c-torture/unsorted/xz.c new file mode 100644 index 000000000000..97a1d1e2cdc0 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/xz.c @@ -0,0 +1,4 @@ +foo (int *p) +{ + *p = (unsigned short) *p; +} diff --git a/gcc/testsuite/gcc.c-torture/unsorted/xzz.c b/gcc/testsuite/gcc.c-torture/unsorted/xzz.c new file mode 100644 index 000000000000..f1972b6c6186 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/unsorted/xzz.c @@ -0,0 +1,4 @@ +foo (a, b) +{ + return a >> (char) b; +} diff --git a/gcc/testsuite/gcc.dg/README b/gcc/testsuite/gcc.dg/README new file mode 100644 index 000000000000..6f14899edf94 --- /dev/null +++ b/gcc/testsuite/gcc.dg/README @@ -0,0 +1,16 @@ +Notes for testsuite/gcc.dg. + +1) There should be only one driver, dg.exp. + +2) Try to organize the tests by topic using file name prefixes. + + Eg: All bitfield tests are named "bf-*.c". + + This lets the person running the tests choose particular sets of tests to + run easily (using wildcards). + + Eg: make check RUNTESTFLAGS='dg.exp=bf-*.c' + +3) Remember DOS file name restrictions (8.3). Sigh. + +4) Send bugs, comments, etc. to dje@cygnus.com. \ No newline at end of file diff --git a/gcc/testsuite/gcc.dg/bf-spl1.c b/gcc/testsuite/gcc.dg/bf-spl1.c new file mode 100644 index 000000000000..df3f4817043a --- /dev/null +++ b/gcc/testsuite/gcc.dg/bf-spl1.c @@ -0,0 +1,58 @@ +/* { dg-do run { target m68k-*-* sparc-*-* } } */ +/* { dg-options { -m68000 -O2 } { target m68k-*-* } } */ +/* { dg-options { -O2 } { target sparc-*-* } } */ + +typedef SFtype __attribute__ ((mode (SF))); +typedef DFtype __attribute__ ((mode (DF))); + +typedef int HItype __attribute__ ((mode (HI))); +typedef int SItype __attribute__ ((mode (SI))); +typedef int DItype __attribute__ ((mode (DI))); + +typedef unsigned int UHItype __attribute__ ((mode (HI))); +typedef unsigned int USItype __attribute__ ((mode (SI))); +typedef unsigned int UDItype __attribute__ ((mode (DI))); + +typedef UDItype fractype; +typedef USItype halffractype; +typedef DFtype FLO_type; +typedef DItype intfrac; + + +typedef union +{ + long long foo; + FLO_type value; + struct + { + fractype fraction:52 __attribute__ ((packed)); + unsigned int exp:11 __attribute__ ((packed)); + unsigned int sign:1 __attribute__ ((packed)); + } + bits; +} FLO_union_type; + +void foo (long long a); +long long x; + +void +pack_d () +{ + FLO_union_type dst = { 0x0123456789abcdefLL }; + + x = dst.bits.fraction; +} + +main () +{ + pack_d (); + foo (x); + return 0; +} + +void +foo (long long a) +{ + if (a != 0x0123456789abcLL) + abort (); +} diff --git a/gcc/testsuite/gcc.dg/cpp-mi.c b/gcc/testsuite/gcc.dg/cpp-mi.c new file mode 100644 index 000000000000..f667d0c4b9dd --- /dev/null +++ b/gcc/testsuite/gcc.dg/cpp-mi.c @@ -0,0 +1,34 @@ +/* Test "ignore redundant include" facility. + This doesn't test for the case where the file is opened, and then ignored + (the file shouldn't have even been opened). That would require tracing + system calls. It could be done on some systems however. */ + +/* We have to test two cases: C comments at the top and C++ comments + at the top. */ + +/* +{ dg-do preprocess } +{ dg-options "-Wp,-lang-c-c++-comments" } +*/ + +#include "cpp-mic.h" +#include "cpp-mic.h" + +#include "cpp-micc.h" +#include "cpp-micc.h" + +main () +{ +} + +/* + { dg-final { if ![file exists cpp-mi.i] { return } } } + + { dg-final { set tmp [grep cpp-mi.i cpp-micc? line] } } + { dg-final { # send_user "$tmp\n" } } + { dg-final { if [regexp "^{\[0-9\]+ cpp-mic} {\[0-9\]+ cpp-micc}$" $tmp] \{ } } + { dg-final { pass "cpp-mi.c: redundant include check" } } + { dg-final { \} else \{ } } + { dg-final { fail "cpp-mi.c: redundant include check" } } + { dg-final { \} } } +*/ diff --git a/gcc/testsuite/gcc.dg/cpp-mic.h b/gcc/testsuite/gcc.dg/cpp-mic.h new file mode 100644 index 000000000000..bae9d8b6db7e --- /dev/null +++ b/gcc/testsuite/gcc.dg/cpp-mic.h @@ -0,0 +1,10 @@ +/* Redundant header include test with C comments at top. */ + +#ifndef CPP_MIC_H +#define CPP_MIC_H + +int a; + +#endif + +/* And at the end too! */ diff --git a/gcc/testsuite/gcc.dg/cpp-micc.h b/gcc/testsuite/gcc.dg/cpp-micc.h new file mode 100644 index 000000000000..52c9dccca891 --- /dev/null +++ b/gcc/testsuite/gcc.dg/cpp-micc.h @@ -0,0 +1,10 @@ +// Redundant header include test with C comments at top. + +#ifndef CPP_MICC_H +#define CPP_MICC_H + +int a; + +#endif + +// And at the end too! diff --git a/gcc/testsuite/gcc.dg/dg.exp b/gcc/testsuite/gcc.dg/dg.exp new file mode 100644 index 000000000000..6edb5dcae015 --- /dev/null +++ b/gcc/testsuite/gcc.dg/dg.exp @@ -0,0 +1,69 @@ +# Copyright (C) 1997 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# Please email any bugs, comments, and/or additions to this file to: +# bug-gcc@prep.ai.mit.edu + +# GCC testsuite that uses the `dg.exp' driver. + +# Load support procs. +load_lib gcc-dg.exp + +# Utility for scanning compiler result, invoked via dg-final. +# Call pass if pattern is present, otherwise fail. +proc scan-assembler { testcase pattern } { + global subdir + + set fd [open [file rootname $testcase].s r] + set text [read $fd] + close $fd + + if [regexp -- $pattern $text] { + pass "$subdir/$testcase scan-assembler" + } else { + fail "$subdir/$testcase scan-assembler" + } +} + +# Call pass if pattern is not present, otherwise fail. +proc scan-assembler-not { testcase pattern } { + global subdir + + set fd [open [file rootname $testcase].s r] + set text [read $fd] + close $fd + + if ![regexp -- $pattern $text] { + pass "$subdir/$testcase scan-assembler-not" + } else { + fail "$subdir/$testcase scan-assembler-not" + } +} + +# If a testcase doesn't have special options, use these. +global DEFAULT_CFLAGS +if ![info exists DEFAULT_CFLAGS] then { + set DEFAULT_CFLAGS " -ansi -pedantic-errors" +} + +# Initialize `dg'. +dg-init + +# Main loop. +dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.c]] "" $DEFAULT_CFLAGS + +# All done. +dg-finish diff --git a/gcc/testsuite/gcc.dg/dll-1.c b/gcc/testsuite/gcc.dg/dll-1.c new file mode 100644 index 000000000000..72c6ba5b24e8 --- /dev/null +++ b/gcc/testsuite/gcc.dg/dll-1.c @@ -0,0 +1,9 @@ +/* { dg-do compile { target arm*-*-pe* } } */ +/* { dg-options -mno-nop-fun-dllimport } */ + +__declspec (dllimport) void imp (); + +__declspec (dllexport) void exp () { imp (); } + +/* { dg-final { scan-assembler dll-1.c "__imp_imp.*\.section\[ \t\]*.drectve\n\[^\n\]*-export:exp" } } */ +/* { dg-final { scan-assembler-not dll-1.c "__imp_exp" } } */ diff --git a/gcc/testsuite/gcc.dg/dll-2.c b/gcc/testsuite/gcc.dg/dll-2.c new file mode 100644 index 000000000000..e49f6e2027d3 --- /dev/null +++ b/gcc/testsuite/gcc.dg/dll-2.c @@ -0,0 +1,23 @@ +/* These dllimport and dllexport appearing for a symbol. + The desired behaviour is that if both dllimport + and dllexport appear (in either order) the result is dllexport. + + Microsoft's MSVC 2.0 allows dllimport followed by dllexport for variables, + but does not allow dllexport followed by dllimport. + + In C, it's ok to redeclare a variable so this works for variables + and functions. In C++, it only works for functions. */ + +/* { dg-do compile { target arm*-*-pe* } } */ + +__declspec (dllimport) int foo1 (); +__declspec (dllexport) int foo1 (); + +__declspec (dllexport) int foo2 (); +__declspec (dllimport) int foo2 (); + +__declspec (dllimport) int bar1; +__declspec (dllexport) int bar1; + +__declspec (dllexport) int bar2; +__declspec (dllimport) int bar2; diff --git a/gcc/testsuite/gcc.dg/dll-3.c b/gcc/testsuite/gcc.dg/dll-3.c new file mode 100644 index 000000000000..4976ebbbcc6f --- /dev/null +++ b/gcc/testsuite/gcc.dg/dll-3.c @@ -0,0 +1,15 @@ +/* Ensure dllexport overrides dllimport. */ + +/* { dg-do compile { target arm*-*-pe* } } */ + +__declspec (dllimport) int foo1 (); +__declspec (dllexport) int foo1 (); + +__declspec (dllexport) int foo2 (); +__declspec (dllimport) int foo2 (); + +__declspec (dllexport) int foo1 () { return foo2 (); } +__declspec (dllexport) int foo2 () { return foo1 (); } + +/* { dg-final { scan-assembler dll-3.c "\.section\[ \t\]*\.drectve\n\[^\n\]*-export:foo1.*\.section\[ \t\]*\.drectve\n\[^\n\]*-export:foo2" } } */ +/* { dg-final { scan-assembler-not dll-3.c "(__imp_foo1|__imp_foo2)" } } */ diff --git a/gcc/testsuite/gcc.dg/dll-4.c b/gcc/testsuite/gcc.dg/dll-4.c new file mode 100644 index 000000000000..ae617861951e --- /dev/null +++ b/gcc/testsuite/gcc.dg/dll-4.c @@ -0,0 +1,13 @@ +/* { dg-do compile { target arm*-*-pe* } } */ + +__declspec (dllimport) int foo1; +int foo1; + +__declspec (dllimport) int foo2; +int foo2 = 5; + +int f () { return foo1 + foo2; } + +/* FIXME: We should scan the output of nm for this case. */ +/* { dg-final { scan-assembler dll-4.c "(\.comm\[ \t\]*foo1.*\nfoo2:|\nfoo2:.*\.comm\[ \t\]*foo1)" } } */ +/* { dg-final { scan-assembler-not dll-4.c "__imp_" } } */ diff --git a/gcc/testsuite/gcc.dg/splet-1.c b/gcc/testsuite/gcc.dg/splet-1.c new file mode 100644 index 000000000000..03dbb2e3a3cd --- /dev/null +++ b/gcc/testsuite/gcc.dg/splet-1.c @@ -0,0 +1,21 @@ +/* Test inl-sparc.h. */ + +/* { dg-do run { target sparclet-*-* } } */ +/* { dg-options -mcpu=sparclet } */ + +#include <inl-sparc.h> + +main () +{ + int a,b; + + a = scan (1, 2); + if (a != 3) + abort (); + + b = shuffle (4, 5); + if (b != 6) + abort (); + + exit (0); +} diff --git a/gcc/testsuite/gcc.dg/struct-ret-1.c b/gcc/testsuite/gcc.dg/struct-ret-1.c new file mode 100644 index 000000000000..f581aad07d2c --- /dev/null +++ b/gcc/testsuite/gcc.dg/struct-ret-1.c @@ -0,0 +1,45 @@ +/* { dg-do run { target hppa*-*-* } } */ +/* { dg-options { -O2 } { target hppa*-*-* } } */ +typedef struct { + int x; + int y; +} point_t; + +int main(int argc, char *argv[]); +int printPoints(point_t a, point_t b); +point_t toPoint(int x1, int y1); + +int +main(int argc, char *argv[]) +{ + + if (printPoints(toPoint(0, 0), toPoint(1000, 1000)) != 1) + abort(); + else + exit(); + + return 0; +} + +int +printPoints(point_t a, point_t b) +{ + if (a.x != 0 + || a.y != 0 + || b.x != 1000 + || b.y != 1000) + return 0; + else + return 1; +} + +point_t +toPoint(int x1, int y1) +{ + point_t p; + + p.x = x1; + p.y = y1; + + return p; +} diff --git a/gcc/testsuite/gcc.failure/940409-1.c b/gcc/testsuite/gcc.failure/940409-1.c new file mode 100644 index 000000000000..3c945dab7fbc --- /dev/null +++ b/gcc/testsuite/gcc.failure/940409-1.c @@ -0,0 +1,2 @@ +int f (register struct S {volatile int field;} arg); +int g (register struct S { int volatile member; }); diff --git a/gcc/testsuite/gcc.failure/940409-1.cexp b/gcc/testsuite/gcc.failure/940409-1.cexp new file mode 100644 index 000000000000..aac012776169 --- /dev/null +++ b/gcc/testsuite/gcc.failure/940409-1.cexp @@ -0,0 +1,6 @@ +# gcc doesn't handle compile/940409-1.cexp properly, but it's an obscure bug +# so rather than constantly seeing it fail, just record it as expected to +# fail. + +set torture_compile_xfail "*-*-*" +return 0 ;# `0' says we didn't handle the testcase ourselves so continue diff --git a/gcc/testsuite/gcc.failure/failure.exp b/gcc/testsuite/gcc.failure/failure.exp new file mode 100644 index 000000000000..bfd9f3487ea9 --- /dev/null +++ b/gcc/testsuite/gcc.failure/failure.exp @@ -0,0 +1,58 @@ +# +# Expect driver script for GCC Regression Tests +# Copyright (C) 1993, 1997 Free Software Foundation +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +# Written by Jeffrey Wheat (cassidy@cygnus.com) +# + +# +# These tests come from Torbjorn Granlund's (tege@cygnus.com) +# C torture test suite, and other contributors. +# + +if $tracelevel then { + strace $tracelevel +} + +# load support procs +load_lib c-torture.exp + +# +# This loop will run c-torture on any *.c file found in this directory. +# If a *.c has a corresponding *.exp file, then the test is skipped as +# as the *.exp will drive the test itself. I did things this way so that +# generic tests did not need a seperate .exp for it. Only the tests that +# required unique options would need it's own .exp file. +# + +# +# The main logic is in ../lib/c-torture.exp. This was done to eliminate +# redundant code that otherwise lived in each of these driver files. +# +foreach testcase [glob -nocomplain $srcdir/$subdir/*.c] { + + # let c-torture.exp figure out the path. this lets users add new + # special tests without having to remeber to use $srcdir/$subdir + + if [file exists [file rootname $testcase].exp] then { + verbose "INFO:\"[file rootname $testcase].exp\"exists, skipping test" 1 + continue + } else { + c-torture [file tail $testcase] + } +} + diff --git a/gcc/testsuite/gcc.misc-tests/Makefile.in b/gcc/testsuite/gcc.misc-tests/Makefile.in new file mode 100644 index 000000000000..e6209dbc6c2d --- /dev/null +++ b/gcc/testsuite/gcc.misc-tests/Makefile.in @@ -0,0 +1,12 @@ +#### host, target, and site specific Makefile frags come in here. + +srcdir = . + +# Nothing to do... +all: + +clean: + -rm -f *.o *.diff *~ *.bad core *.x + +distclean: clean + -rm -f Makefile config.status diff --git a/gcc/testsuite/gcc.misc-tests/acker1.c b/gcc/testsuite/gcc.misc-tests/acker1.c new file mode 100644 index 000000000000..9e77e42bedd9 --- /dev/null +++ b/gcc/testsuite/gcc.misc-tests/acker1.c @@ -0,0 +1,20 @@ +int acker(int, int); + +void main() +{ + acker(3,6); + /* */ + exit(0); + /* */ +} + +int +acker(int x,int y) +{ + if (x==0) + return(y+1); + else if (y==0) + return(acker(x-1,1)); + else + return(acker(x-1, acker(x, y-1))); +} diff --git a/gcc/testsuite/gcc.misc-tests/acker1.exp b/gcc/testsuite/gcc.misc-tests/acker1.exp new file mode 100644 index 000000000000..3462d66bbc4e --- /dev/null +++ b/gcc/testsuite/gcc.misc-tests/acker1.exp @@ -0,0 +1,31 @@ +# Copyright (C) 1997 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# Please email any bugs, comments, and/or additions to this file to: +# bug-gcc@prep.ai.mit.edu + +global PERF_TEST +if { ![info exists PERF_TEST] || "$PERF_TEST" != "yes" } { + return +} + +load_lib mike-gcc.exp + +prebase +set actions run +set compiler_output "^$" +set program_output "^$" +postbase acker1.c $run $groups diff --git a/gcc/testsuite/gcc.misc-tests/configure.in b/gcc/testsuite/gcc.misc-tests/configure.in new file mode 100644 index 000000000000..e4cc69d249e3 --- /dev/null +++ b/gcc/testsuite/gcc.misc-tests/configure.in @@ -0,0 +1,15 @@ +# This file is a shell script fragment that supplies the information +# necessary to tailor a template configure script into the configure +# script appropriate for this directory. For more information, check +# any existing configure script. + +srctrigger=compile.exp +srcname="DejaGnu" + +# per-host: + +# per-target: + +target_makefile_frag=../config/mt-${target_alias} + +# post-target: diff --git a/gcc/testsuite/gcc.misc-tests/dg-1.c b/gcc/testsuite/gcc.misc-tests/dg-1.c new file mode 100644 index 000000000000..319f8a20a7b8 --- /dev/null +++ b/gcc/testsuite/gcc.misc-tests/dg-1.c @@ -0,0 +1,14 @@ +/* Test the tester. */ +/* { dg-prms-id 42 } */ +/* { dg-do compile } */ + +main () { return 0; } + +/* { dg-final { if ![file exists dg-1.s] { fail "dg-1.c (compile)"; return; } } } */ + +/* { dg-final { set tmp [grep dg-1.s main line] } } */ +/* { dg-final { if ![string match "" $tmp] \{ } } */ +/* { dg-final { pass "dg-1.c (main function present)" } } */ +/* { dg-final { \} else \{ } } */ +/* { dg-final { fail "dg-1.c (main function not present)" } } */ +/* { dg-final { \} } } */ diff --git a/gcc/testsuite/gcc.misc-tests/dg-10.c b/gcc/testsuite/gcc.misc-tests/dg-10.c new file mode 100644 index 000000000000..6d7b3441623b --- /dev/null +++ b/gcc/testsuite/gcc.misc-tests/dg-10.c @@ -0,0 +1,12 @@ +/* Test the tester. */ +/* { dg-prms-id 42 } */ +/* { dg-options "-Wall" } */ + +/* FIXME: we want to test dg-lose here. Anyone know of a good way to + crash the compiler? */ + +int +main (int argc, char *argv[]) +{ + return 0; +} diff --git a/gcc/testsuite/gcc.misc-tests/dg-11.c b/gcc/testsuite/gcc.misc-tests/dg-11.c new file mode 100644 index 000000000000..e4f86ba2b12d --- /dev/null +++ b/gcc/testsuite/gcc.misc-tests/dg-11.c @@ -0,0 +1,9 @@ +/* Test the tester. */ +/* { dg-prms-id 42 } */ +/* { dg-do run { target sparc-sun-solaris2* } } */ +/* The \n is left out of the pattern because tcl's exec will remove it. */ +/* { dg-output {^Hello world[.]$} } */ + +#include <stdio.h> + +main () { printf ("Hello world.\n"); return 0; } diff --git a/gcc/testsuite/gcc.misc-tests/dg-12.c b/gcc/testsuite/gcc.misc-tests/dg-12.c new file mode 100644 index 000000000000..ad0870d88cce --- /dev/null +++ b/gcc/testsuite/gcc.misc-tests/dg-12.c @@ -0,0 +1,9 @@ +/* Test the tester. */ +/* { dg-prms-id 42 } */ +/* { dg-do run { target foo-bar-eh } } */ +/* The \n is left out of the pattern because tcl's exec will remove it. */ +/* { dg-output {^Hello world[.]$} } */ + +#include <stdio.h> + +main () { printf ("Hello world.\n"); return 0; } diff --git a/gcc/testsuite/gcc.misc-tests/dg-2.c b/gcc/testsuite/gcc.misc-tests/dg-2.c new file mode 100644 index 000000000000..bb40387e632c --- /dev/null +++ b/gcc/testsuite/gcc.misc-tests/dg-2.c @@ -0,0 +1,11 @@ +/* Test the tester. */ +/* { dg-prms-id 42 } */ +/* { dg-do assemble } */ + +main () { return 0; } + +/* { dg-final { if [file exists dg-2.o] \{ } } */ +/* { dg-final { pass "dg-2.c (assemble: produce .o test)" } } */ +/* { dg-final { \} else \{ } } */ +/* { dg-final { fail "dg-2.c (assemble: produce .o test)" } } */ +/* { dg-final { \} } } */ diff --git a/gcc/testsuite/gcc.misc-tests/dg-3.c b/gcc/testsuite/gcc.misc-tests/dg-3.c new file mode 100644 index 000000000000..017ab279f8ea --- /dev/null +++ b/gcc/testsuite/gcc.misc-tests/dg-3.c @@ -0,0 +1,11 @@ +/* Test the tester. */ +/* { dg-prms-id 42 } */ +/* { dg-do link } */ + +main () { return 0; } + +/* { dg-final { if [file exists a.out] \{ } } */ +/* { dg-final { pass "dg-2.c (link: produce a.out test)" } } */ +/* { dg-final { \} else \{ } } */ +/* { dg-final { fail "dg-2.c (link: produce a.out test)" } } */ +/* { dg-final { \} } } */ diff --git a/gcc/testsuite/gcc.misc-tests/dg-4.c b/gcc/testsuite/gcc.misc-tests/dg-4.c new file mode 100644 index 000000000000..806bdfbf91ae --- /dev/null +++ b/gcc/testsuite/gcc.misc-tests/dg-4.c @@ -0,0 +1,5 @@ +/* Test the tester. */ +/* { dg-prms-id 42 } */ +/* { dg-do run } */ + +main () { return 0; } diff --git a/gcc/testsuite/gcc.misc-tests/dg-5.c b/gcc/testsuite/gcc.misc-tests/dg-5.c new file mode 100644 index 000000000000..33a5b4e893b6 --- /dev/null +++ b/gcc/testsuite/gcc.misc-tests/dg-5.c @@ -0,0 +1,9 @@ +/* Test the tester. */ +/* { dg-prms-id 42 } */ +/* { dg-do run } */ +/* The \n is left out of the pattern because tcl's exec will remove it. */ +/* { dg-output {^Hello world[.]$} } */ + +#include <stdio.h> + +main () { printf ("Hello world.\n"); return 0; } diff --git a/gcc/testsuite/gcc.misc-tests/dg-6.c b/gcc/testsuite/gcc.misc-tests/dg-6.c new file mode 100644 index 000000000000..f9273f873ee2 --- /dev/null +++ b/gcc/testsuite/gcc.misc-tests/dg-6.c @@ -0,0 +1,9 @@ +/* Test the tester. */ +/* { dg-prms-id 42 } */ +/* { dg-do run { target *-*-* } } */ +/* The \n is left out of the pattern because tcl's exec will remove it. */ +/* { dg-output {^Hello world[.]$} { xfail *-*-* } } */ + +#include <stdio.h> + +main () { printf ("Hello world (oops).\n"); return 0; } diff --git a/gcc/testsuite/gcc.misc-tests/dg-7.c b/gcc/testsuite/gcc.misc-tests/dg-7.c new file mode 100644 index 000000000000..068749f71b2a --- /dev/null +++ b/gcc/testsuite/gcc.misc-tests/dg-7.c @@ -0,0 +1,5 @@ +/* Test the tester. */ +/* { dg-prms-id 42 } */ +/* { dg-do run { xfail *-*-* } } */ + +main () { abort (); return 0; } diff --git a/gcc/testsuite/gcc.misc-tests/dg-8.c b/gcc/testsuite/gcc.misc-tests/dg-8.c new file mode 100644 index 000000000000..63a5b0e73fa0 --- /dev/null +++ b/gcc/testsuite/gcc.misc-tests/dg-8.c @@ -0,0 +1,9 @@ +/* Test the tester. */ +/* { dg-prms-id 42 } */ +/* { dg-options "-Wall" } */ +/* { dg-do run } */ +/* { dg-excess-errors "excess errors" } */ + +/* should get warning about defaulting return type - excess error */ + +main () { return 0; } diff --git a/gcc/testsuite/gcc.misc-tests/dg-9.c b/gcc/testsuite/gcc.misc-tests/dg-9.c new file mode 100644 index 000000000000..43b7ab34b0d9 --- /dev/null +++ b/gcc/testsuite/gcc.misc-tests/dg-9.c @@ -0,0 +1,15 @@ +/* Test the tester. */ +/* { dg-prms-id 42 } */ +/* { dg-options "-Wall" } */ + +f () +{ /* { dg-warning "return-type" "warning test" } */ +} /* { dg-warning "control reaches end" "warning test" } */ + +main (int argc, char *argv[]) +{ /* { dg-warning "return-type" "warning test" } */ + foo a; /* { dg-error "syntax" "error test" } */ + /* { dg-bogus "foobar" "bogus fail test" } */ + + return a; /* { dg-bogus "undeclared|identifier|appears" "bogus pass test" { xfail *-*-* } } */ +} /* { dg-warning "control reaches end" "warning test" } */ diff --git a/gcc/testsuite/gcc.misc-tests/dg-test.exp b/gcc/testsuite/gcc.misc-tests/dg-test.exp new file mode 100644 index 000000000000..42364252b63b --- /dev/null +++ b/gcc/testsuite/gcc.misc-tests/dg-test.exp @@ -0,0 +1,41 @@ +# Copyright (C) 1997 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# Please email any bugs, comments, and/or additions to this file to: +# bug-gcc@prep.ai.mit.edu + +# Test the dg.exp driver. +# This is a testsuite tester tester. As such we *want* to test things like +# expected failure handling. But expected failures must continually be +# monitored and so in the normal case we create unnecessary work. So only +# run these tests if DG_TEST is defined to "yes". + +global DG_TEST +if { ![info exists DG_TEST] || "$DG_TEST" != "yes" } { + return +} + +# Load support procs. +load_lib gcc-dg.exp + +# Initialize harness. +dg-init + +# Main loop. +dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/dg-*.c]] "" "" + +# All done. +dg-finish diff --git a/gcc/testsuite/gcc.misc-tests/dhry.c b/gcc/testsuite/gcc.misc-tests/dhry.c new file mode 100644 index 000000000000..ae29a693654e --- /dev/null +++ b/gcc/testsuite/gcc.misc-tests/dhry.c @@ -0,0 +1,602 @@ +/* + **************************************************************************** + * + * "DHRYSTONE" Benchmark Program + * ----------------------------- + * + * Version: C, Version 2.1 + * + * File: dhry_1.c (part 2 of 3) + * + * Date: May 25, 1988 + * + * Author: Reinhold P. Weicker + * + **************************************************************************** + */ + +#include "dhry.h" + +/* Global Variables: */ + +Rec_Pointer Ptr_Glob, + Next_Ptr_Glob; +int Int_Glob; +Boolean Bool_Glob; +char Ch_1_Glob, + Ch_2_Glob; +int Arr_1_Glob [50]; +int Arr_2_Glob [50] [50]; + +extern char *malloc (); +Enumeration Func_1 (); + /* forward declaration necessary since Enumeration may not simply be int */ + +#ifndef REG + Boolean Reg = false; +#define REG + /* REG becomes defined as empty */ + /* i.e. no register variables */ +#else + Boolean Reg = true; +#endif + +/* variables for time measurement: */ + +/* +#ifdef TIMES +struct tms time_info; +extern int times (); +#endif +*/ +/* +#ifdef TIME +extern long time(); +#endif +*/ +#define Too_Small_Time 2 + /* Measurements should last at least 2 seconds */ + +long Begin_Time, + End_Time, + User_Time; +float Microseconds, + Dhrystones_Per_Second; + +/* end of variables for time measurement */ + + +main () +/*****/ + + /* main program, corresponds to procedures */ + /* Main and Proc_0 in the Ada version */ +{ + One_Fifty Int_1_Loc; + REG One_Fifty Int_2_Loc; + One_Fifty Int_3_Loc; + REG char Ch_Index; + Enumeration Enum_Loc; + Str_30 Str_1_Loc; + Str_30 Str_2_Loc; + REG int Run_Index; + REG int Number_Of_Runs; + + /* Initializations */ + + Next_Ptr_Glob = (Rec_Pointer) malloc (sizeof (Rec_Type)); + Ptr_Glob = (Rec_Pointer) malloc (sizeof (Rec_Type)); + + Ptr_Glob->Ptr_Comp = Next_Ptr_Glob; + Ptr_Glob->Discr = Ident_1; + Ptr_Glob->variant.var_1.Enum_Comp = Ident_3; + Ptr_Glob->variant.var_1.Int_Comp = 40; + strcpy (Ptr_Glob->variant.var_1.Str_Comp, + "DHRYSTONE PROGRAM, SOME STRING"); + strcpy (Str_1_Loc, "DHRYSTONE PROGRAM, 1'ST STRING"); + + Arr_2_Glob [8][7] = 10; + /* Was missing in published program. Without this statement, */ + /* Arr_2_Glob [8][7] would have an undefined value. */ + /* Warning: With 16-Bit processors and Number_Of_Runs > 32000, */ + /* overflow may occur for this array element. */ + +/* + printf ("\n"); + printf ("Dhrystone Benchmark, Version 2.1 (Language: C)\n"); + printf ("\n"); +*/ + if (Reg) + { +/* + printf ("Program compiled with 'register' attribute\n"); + printf ("\n"); +*/ + } + else + { +/* + printf ("Program compiled without 'register' attribute\n"); + printf ("\n"); +*/ + } +/* + printf ("Please give the number of runs through the benchmark: "); +*/ + { + int n; +/* + scanf ("%d", &n); +*/ + Number_Of_Runs = n=1000; + } +/* + printf ("\n"); + + printf ("Execution starts, %d runs through Dhrystone\n", Number_Of_Runs); +*/ + + /***************/ + /* Start timer */ + /***************/ + +/* +#ifdef TIMES + times (&time_info); + Begin_Time = (long) time_info.tms_utime; +#endif +#ifdef TIME + Begin_Time = time ( (long *) 0); +#endif +*/ + + for (Run_Index = 1; Run_Index <= Number_Of_Runs; ++Run_Index) + { + + Proc_5(); + Proc_4(); + /* Ch_1_Glob == 'A', Ch_2_Glob == 'B', Bool_Glob == true */ + Int_1_Loc = 2; + Int_2_Loc = 3; + strcpy (Str_2_Loc, "DHRYSTONE PROGRAM, 2'ND STRING"); + Enum_Loc = Ident_2; + Bool_Glob = ! Func_2 (Str_1_Loc, Str_2_Loc); + /* Bool_Glob == 1 */ + while (Int_1_Loc < Int_2_Loc) /* loop body executed once */ + { + Int_3_Loc = 5 * Int_1_Loc - Int_2_Loc; + /* Int_3_Loc == 7 */ + Proc_7 (Int_1_Loc, Int_2_Loc, &Int_3_Loc); + /* Int_3_Loc == 7 */ + Int_1_Loc += 1; + } /* while */ + /* Int_1_Loc == 3, Int_2_Loc == 3, Int_3_Loc == 7 */ + Proc_8 (Arr_1_Glob, Arr_2_Glob, Int_1_Loc, Int_3_Loc); + /* Int_Glob == 5 */ + Proc_1 (Ptr_Glob); + for (Ch_Index = 'A'; Ch_Index <= Ch_2_Glob; ++Ch_Index) + /* loop body executed twice */ + { + if (Enum_Loc == Func_1 (Ch_Index, 'C')) + /* then, not executed */ + { + Proc_6 (Ident_1, &Enum_Loc); + strcpy (Str_2_Loc, "DHRYSTONE PROGRAM, 3'RD STRING"); + Int_2_Loc = Run_Index; + Int_Glob = Run_Index; + } + } + /* Int_1_Loc == 3, Int_2_Loc == 3, Int_3_Loc == 7 */ + Int_2_Loc = Int_2_Loc * Int_1_Loc; + Int_1_Loc = Int_2_Loc / Int_3_Loc; + Int_2_Loc = 7 * (Int_2_Loc - Int_3_Loc) - Int_1_Loc; + /* Int_1_Loc == 1, Int_2_Loc == 13, Int_3_Loc == 7 */ + Proc_2 (&Int_1_Loc); + /* Int_1_Loc == 5 */ + + } /* loop "for Run_Index" */ + + /**************/ + /* Stop timer */ + /**************/ + +/* +#ifdef TIMES + times (&time_info); + End_Time = (long) time_info.tms_utime; +#endif +#ifdef TIME + End_Time = time ( (long *) 0); +#endif +*/ + +/* + printf ("Execution ends\n"); + printf ("\n"); + printf ("Final values of the variables used in the benchmark:\n"); + printf ("\n"); + printf ("Int_Glob: %d\n", Int_Glob); + printf (" should be: %d\n", 5); + printf ("Bool_Glob: %d\n", Bool_Glob); + printf (" should be: %d\n", 1); + printf ("Ch_1_Glob: %c\n", Ch_1_Glob); + printf (" should be: %c\n", 'A'); + printf ("Ch_2_Glob: %c\n", Ch_2_Glob); + printf (" should be: %c\n", 'B'); + printf ("Arr_1_Glob[8]: %d\n", Arr_1_Glob[8]); + printf (" should be: %d\n", 7); + printf ("Arr_2_Glob[8][7]: %d\n", Arr_2_Glob[8][7]); + printf (" should be: Number_Of_Runs + 10\n"); + printf ("Ptr_Glob->\n"); + printf (" Ptr_Comp: %d\n", (int) Ptr_Glob->Ptr_Comp); + printf (" should be: (implementation-dependent)\n"); + printf (" Discr: %d\n", Ptr_Glob->Discr); + printf (" should be: %d\n", 0); + printf (" Enum_Comp: %d\n", Ptr_Glob->variant.var_1.Enum_Comp); + printf (" should be: %d\n", 2); + printf (" Int_Comp: %d\n", Ptr_Glob->variant.var_1.Int_Comp); + printf (" should be: %d\n", 17); + printf (" Str_Comp: %s\n", Ptr_Glob->variant.var_1.Str_Comp); + printf (" should be: DHRYSTONE PROGRAM, SOME STRING\n"); + printf ("Next_Ptr_Glob->\n"); + printf (" Ptr_Comp: %d\n", (int) Next_Ptr_Glob->Ptr_Comp); + printf (" should be: (implementation-dependent), same as above\n"); + printf (" Discr: %d\n", Next_Ptr_Glob->Discr); + printf (" should be: %d\n", 0); + printf (" Enum_Comp: %d\n", Next_Ptr_Glob->variant.var_1.Enum_Comp); + printf (" should be: %d\n", 1); + printf (" Int_Comp: %d\n", Next_Ptr_Glob->variant.var_1.Int_Comp); + printf (" should be: %d\n", 18); + printf (" Str_Comp: %s\n", + Next_Ptr_Glob->variant.var_1.Str_Comp); + printf (" should be: DHRYSTONE PROGRAM, SOME STRING\n"); + printf ("Int_1_Loc: %d\n", Int_1_Loc); + printf (" should be: %d\n", 5); + printf ("Int_2_Loc: %d\n", Int_2_Loc); + printf (" should be: %d\n", 13); + printf ("Int_3_Loc: %d\n", Int_3_Loc); + printf (" should be: %d\n", 7); + printf ("Enum_Loc: %d\n", Enum_Loc); + printf (" should be: %d\n", 1); + printf ("Str_1_Loc: %s\n", Str_1_Loc); + printf (" should be: DHRYSTONE PROGRAM, 1'ST STRING\n"); + printf ("Str_2_Loc: %s\n", Str_2_Loc); + printf (" should be: DHRYSTONE PROGRAM, 2'ND STRING\n"); + printf ("\n"); +*/ + + User_Time = End_Time - Begin_Time; + + if (User_Time < Too_Small_Time) + { +/* + printf ("Measured time too small to obtain meaningful results\n"); + printf ("Please increase number of runs\n"); + printf ("\n"); +*/ + } + else + { +#ifdef TIME +/* + Microseconds = (float) User_Time * Mic_secs_Per_Second + / (float) Number_Of_Runs; + Dhrystones_Per_Second = (float) Number_Of_Runs / (float) User_Time; +*/ +#else +/* + Microseconds = (float) User_Time * Mic_secs_Per_Second + / ((float) HZ * ((float) Number_Of_Runs)); + Dhrystones_Per_Second = ((float) HZ * (float) Number_Of_Runs) + / (float) User_Time; +*/ +#endif +/* + printf ("Microseconds for one run through Dhrystone: "); + printf ("%6.1f \n", Microseconds); + printf ("Dhrystones per Second: "); + printf ("%6.1f \n", Dhrystones_Per_Second); + printf ("\n"); +*/ + } + + exit (0); +} + + +Proc_1 (Ptr_Val_Par) +/******************/ + +REG Rec_Pointer Ptr_Val_Par; + /* executed once */ +{ + REG Rec_Pointer Next_Record = Ptr_Val_Par->Ptr_Comp; + /* == Ptr_Glob_Next */ + /* Local variable, initialized with Ptr_Val_Par->Ptr_Comp, */ + /* corresponds to "rename" in Ada, "with" in Pascal */ + + structassign (*Ptr_Val_Par->Ptr_Comp, *Ptr_Glob); + Ptr_Val_Par->variant.var_1.Int_Comp = 5; + Next_Record->variant.var_1.Int_Comp + = Ptr_Val_Par->variant.var_1.Int_Comp; + Next_Record->Ptr_Comp = Ptr_Val_Par->Ptr_Comp; + Proc_3 (&Next_Record->Ptr_Comp); + /* Ptr_Val_Par->Ptr_Comp->Ptr_Comp + == Ptr_Glob->Ptr_Comp */ + if (Next_Record->Discr == Ident_1) + /* then, executed */ + { + Next_Record->variant.var_1.Int_Comp = 6; + Proc_6 (Ptr_Val_Par->variant.var_1.Enum_Comp, + &Next_Record->variant.var_1.Enum_Comp); + Next_Record->Ptr_Comp = Ptr_Glob->Ptr_Comp; + Proc_7 (Next_Record->variant.var_1.Int_Comp, 10, + &Next_Record->variant.var_1.Int_Comp); + } + else /* not executed */ + structassign (*Ptr_Val_Par, *Ptr_Val_Par->Ptr_Comp); +} /* Proc_1 */ + + +Proc_2 (Int_Par_Ref) +/******************/ + /* executed once */ + /* *Int_Par_Ref == 1, becomes 4 */ + +One_Fifty *Int_Par_Ref; +{ + One_Fifty Int_Loc; + Enumeration Enum_Loc; + + Int_Loc = *Int_Par_Ref + 10; + do /* executed once */ + if (Ch_1_Glob == 'A') + /* then, executed */ + { + Int_Loc -= 1; + *Int_Par_Ref = Int_Loc - Int_Glob; + Enum_Loc = Ident_1; + } /* if */ + while (Enum_Loc != Ident_1); /* true */ +} /* Proc_2 */ + + +Proc_3 (Ptr_Ref_Par) +/******************/ + /* executed once */ + /* Ptr_Ref_Par becomes Ptr_Glob */ + +Rec_Pointer *Ptr_Ref_Par; + +{ + if (Ptr_Glob != Null) + /* then, executed */ + *Ptr_Ref_Par = Ptr_Glob->Ptr_Comp; + Proc_7 (10, Int_Glob, &Ptr_Glob->variant.var_1.Int_Comp); +} /* Proc_3 */ + + +Proc_4 () /* without parameters */ +/*******/ + /* executed once */ +{ + Boolean Bool_Loc; + + Bool_Loc = Ch_1_Glob == 'A'; + Bool_Glob = Bool_Loc | Bool_Glob; + Ch_2_Glob = 'B'; +} /* Proc_4 */ + + +Proc_5 () /* without parameters */ +/*******/ + /* executed once */ +{ + Ch_1_Glob = 'A'; + Bool_Glob = false; +} /* Proc_5 */ + + + /* Procedure for the assignment of structures, */ + /* if the C compiler doesn't support this feature */ +#ifdef NOSTRUCTASSIGN +memcpy (d, s, l) +register char *d; +register char *s; +register int l; +{ + while (l--) *d++ = *s++; +} +#endif + + +/* + **************************************************************************** + * + * "DHRYSTONE" Benchmark Program + * ----------------------------- + * + * Version: C, Version 2.1 + * + * File: dhry_2.c (part 3 of 3) + * + * Date: May 25, 1988 + * + * Author: Reinhold P. Weicker + * + **************************************************************************** + */ + +#ifndef REG +#define REG + /* REG becomes defined as empty */ + /* i.e. no register variables */ +#endif + +extern int Int_Glob; +extern char Ch_1_Glob; + + +Proc_6 (Enum_Val_Par, Enum_Ref_Par) +/*********************************/ + /* executed once */ + /* Enum_Val_Par == Ident_3, Enum_Ref_Par becomes Ident_2 */ + +Enumeration Enum_Val_Par; +Enumeration *Enum_Ref_Par; +{ + *Enum_Ref_Par = Enum_Val_Par; + if (! Func_3 (Enum_Val_Par)) + /* then, not executed */ + *Enum_Ref_Par = Ident_4; + switch (Enum_Val_Par) + { + case Ident_1: + *Enum_Ref_Par = Ident_1; + break; + case Ident_2: + if (Int_Glob > 100) + /* then */ + *Enum_Ref_Par = Ident_1; + else *Enum_Ref_Par = Ident_4; + break; + case Ident_3: /* executed */ + *Enum_Ref_Par = Ident_2; + break; + case Ident_4: break; + case Ident_5: + *Enum_Ref_Par = Ident_3; + break; + } /* switch */ +} /* Proc_6 */ + + +Proc_7 (Int_1_Par_Val, Int_2_Par_Val, Int_Par_Ref) +/**********************************************/ + /* executed three times */ + /* first call: Int_1_Par_Val == 2, Int_2_Par_Val == 3, */ + /* Int_Par_Ref becomes 7 */ + /* second call: Int_1_Par_Val == 10, Int_2_Par_Val == 5, */ + /* Int_Par_Ref becomes 17 */ + /* third call: Int_1_Par_Val == 6, Int_2_Par_Val == 10, */ + /* Int_Par_Ref becomes 18 */ +One_Fifty Int_1_Par_Val; +One_Fifty Int_2_Par_Val; +One_Fifty *Int_Par_Ref; +{ + One_Fifty Int_Loc; + + Int_Loc = Int_1_Par_Val + 2; + *Int_Par_Ref = Int_2_Par_Val + Int_Loc; +} /* Proc_7 */ + + +Proc_8 (Arr_1_Par_Ref, Arr_2_Par_Ref, Int_1_Par_Val, Int_2_Par_Val) +/*********************************************************************/ + /* executed once */ + /* Int_Par_Val_1 == 3 */ + /* Int_Par_Val_2 == 7 */ +Arr_1_Dim Arr_1_Par_Ref; +Arr_2_Dim Arr_2_Par_Ref; +int Int_1_Par_Val; +int Int_2_Par_Val; +{ + REG One_Fifty Int_Index; + REG One_Fifty Int_Loc; + + Int_Loc = Int_1_Par_Val + 5; + Arr_1_Par_Ref [Int_Loc] = Int_2_Par_Val; + Arr_1_Par_Ref [Int_Loc+1] = Arr_1_Par_Ref [Int_Loc]; + Arr_1_Par_Ref [Int_Loc+30] = Int_Loc; + for (Int_Index = Int_Loc; Int_Index <= Int_Loc+1; ++Int_Index) + Arr_2_Par_Ref [Int_Loc] [Int_Index] = Int_Loc; + Arr_2_Par_Ref [Int_Loc] [Int_Loc-1] += 1; + Arr_2_Par_Ref [Int_Loc+20] [Int_Loc] = Arr_1_Par_Ref [Int_Loc]; + Int_Glob = 5; +} /* Proc_8 */ + + +Enumeration Func_1 (Ch_1_Par_Val, Ch_2_Par_Val) +/*************************************************/ + /* executed three times */ + /* first call: Ch_1_Par_Val == 'H', Ch_2_Par_Val == 'R' */ + /* second call: Ch_1_Par_Val == 'A', Ch_2_Par_Val == 'C' */ + /* third call: Ch_1_Par_Val == 'B', Ch_2_Par_Val == 'C' */ + +Capital_Letter Ch_1_Par_Val; +Capital_Letter Ch_2_Par_Val; +{ + Capital_Letter Ch_1_Loc; + Capital_Letter Ch_2_Loc; + + Ch_1_Loc = Ch_1_Par_Val; + Ch_2_Loc = Ch_1_Loc; + if (Ch_2_Loc != Ch_2_Par_Val) + /* then, executed */ + return (Ident_1); + else /* not executed */ + { + Ch_1_Glob = Ch_1_Loc; + return (Ident_2); + } +} /* Func_1 */ + + +Boolean Func_2 (Str_1_Par_Ref, Str_2_Par_Ref) +/*************************************************/ + /* executed once */ + /* Str_1_Par_Ref == "DHRYSTONE PROGRAM, 1'ST STRING" */ + /* Str_2_Par_Ref == "DHRYSTONE PROGRAM, 2'ND STRING" */ + +Str_30 Str_1_Par_Ref; +Str_30 Str_2_Par_Ref; +{ + REG One_Thirty Int_Loc; + Capital_Letter Ch_Loc; + + Int_Loc = 2; + while (Int_Loc <= 2) /* loop body executed once */ + if (Func_1 (Str_1_Par_Ref[Int_Loc], + Str_2_Par_Ref[Int_Loc+1]) == Ident_1) + /* then, executed */ + { + Ch_Loc = 'A'; + Int_Loc += 1; + } /* if, while */ + if (Ch_Loc >= 'W' && Ch_Loc < 'Z') + /* then, not executed */ + Int_Loc = 7; + if (Ch_Loc == 'R') + /* then, not executed */ + return (true); + else /* executed */ + { + if (strcmp (Str_1_Par_Ref, Str_2_Par_Ref) > 0) + /* then, not executed */ + { + Int_Loc += 7; + Int_Glob = Int_Loc; + return (true); + } + else /* executed */ + return (false); + } /* if Ch_Loc */ +} /* Func_2 */ + + +Boolean Func_3 (Enum_Par_Val) +/***************************/ + /* executed once */ + /* Enum_Par_Val == Ident_3 */ +Enumeration Enum_Par_Val; +{ + Enumeration Enum_Loc; + + Enum_Loc = Enum_Par_Val; + if (Enum_Loc == Ident_3) + /* then, executed */ + return (true); + else /* not executed */ + return (false); +} /* Func_3 */ + diff --git a/gcc/testsuite/gcc.misc-tests/dhry.exp b/gcc/testsuite/gcc.misc-tests/dhry.exp new file mode 100644 index 000000000000..890f25018a88 --- /dev/null +++ b/gcc/testsuite/gcc.misc-tests/dhry.exp @@ -0,0 +1,31 @@ +# Copyright (C) 1997 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# Please email any bugs, comments, and/or additions to this file to: +# bug-gcc@prep.ai.mit.edu + +global PERF_TEST +if { ![info exists PERF_TEST] || "$PERF_TEST" != "yes" } { + return +} + +load_lib mike-gcc.exp + +prebase +set actions run +set compiler_output "^$" +set program_output "^$" +postbase dhry.c $run $groups diff --git a/gcc/testsuite/gcc.misc-tests/dhry.h b/gcc/testsuite/gcc.misc-tests/dhry.h new file mode 100644 index 000000000000..8d42da0094d1 --- /dev/null +++ b/gcc/testsuite/gcc.misc-tests/dhry.h @@ -0,0 +1,431 @@ +/* + **************************************************************************** + * + * "DHRYSTONE" Benchmark Program + * ----------------------------- + * + * Version: C, Version 2.1 + * + * File: dhry.h (part 1 of 3) + * + * Date: May 25, 1988 + * + * Author: Reinhold P. Weicker + * Siemens AG, AUT E 51 + * Postfach 3220 + * 8520 Erlangen + * Germany (West) + * Phone: [+49]-9131-7-20330 + * (8-17 Central European Time) + * Usenet: ..!mcsun!unido!estevax!weicker + * + * Original Version (in Ada) published in + * "Communications of the ACM" vol. 27., no. 10 (Oct. 1984), + * pp. 1013 - 1030, together with the statistics + * on which the distribution of statements etc. is based. + * + * In this C version, the following C library functions are used: + * - strcpy, strcmp (inside the measurement loop) + * - printf, scanf (outside the measurement loop) + * In addition, Berkeley UNIX system calls "times ()" or "time ()" + * are used for execution time measurement. For measurements + * on other systems, these calls have to be changed. + * + * Collection of Results: + * Reinhold Weicker (address see above) and + * + * Rick Richardson + * PC Research. Inc. + * 94 Apple Orchard Drive + * Tinton Falls, NJ 07724 + * Phone: (201) 389-8963 (9-17 EST) + * Usenet: ...!uunet!pcrat!rick + * + * Please send results to Rick Richardson and/or Reinhold Weicker. + * Complete information should be given on hardware and software used. + * Hardware information includes: Machine type, CPU, type and size + * of caches; for microprocessors: clock frequency, memory speed + * (number of wait states). + * Software information includes: Compiler (and runtime library) + * manufacturer and version, compilation switches, OS version. + * The Operating System version may give an indication about the + * compiler; Dhrystone itself performs no OS calls in the measurement loop. + * + * The complete output generated by the program should be mailed + * such that at least some checks for correctness can be made. + * + *************************************************************************** + * + * History: This version C/2.1 has been made for two reasons: + * + * 1) There is an obvious need for a common C version of + * Dhrystone, since C is at present the most popular system + * programming language for the class of processors + * (microcomputers, minicomputers) where Dhrystone is used most. + * There should be, as far as possible, only one C version of + * Dhrystone such that results can be compared without + * restrictions. In the past, the C versions distributed + * by Rick Richardson (Version 1.1) and by Reinhold Weicker + * had small (though not significant) differences. + * + * 2) As far as it is possible without changes to the Dhrystone + * statistics, optimizing compilers should be prevented from + * removing significant statements. + * + * This C version has been developed in cooperation with + * Rick Richardson (Tinton Falls, NJ), it incorporates many + * ideas from the "Version 1.1" distributed previously by + * him over the UNIX network Usenet. + * I also thank Chaim Benedelac (National Semiconductor), + * David Ditzel (SUN), Earl Killian and John Mashey (MIPS), + * Alan Smith and Rafael Saavedra-Barrera (UC at Berkeley) + * for their help with comments on earlier versions of the + * benchmark. + * + * Changes: In the initialization part, this version follows mostly + * Rick Richardson's version distributed via Usenet, not the + * version distributed earlier via floppy disk by Reinhold Weicker. + * As a concession to older compilers, names have been made + * unique within the first 8 characters. + * Inside the measurement loop, this version follows the + * version previously distributed by Reinhold Weicker. + * + * At several places in the benchmark, code has been added, + * but within the measurement loop only in branches that + * are not executed. The intention is that optimizing compilers + * should be prevented from moving code out of the measurement + * loop, or from removing code altogether. Since the statements + * that are executed within the measurement loop have NOT been + * changed, the numbers defining the "Dhrystone distribution" + * (distribution of statements, operand types and locality) + * still hold. Except for sophisticated optimizing compilers, + * execution times for this version should be the same as + * for previous versions. + * + * Since it has proven difficult to subtract the time for the + * measurement loop overhead in a correct way, the loop check + * has been made a part of the benchmark. This does have + * an impact - though a very minor one - on the distribution + * statistics which have been updated for this version. + * + * All changes within the measurement loop are described + * and discussed in the companion paper "Rationale for + * Dhrystone version 2". + * + * Because of the self-imposed limitation that the order and + * distribution of the executed statements should not be + * changed, there are still cases where optimizing compilers + * may not generate code for some statements. To a certain + * degree, this is unavoidable for small synthetic benchmarks. + * Users of the benchmark are advised to check code listings + * whether code is generated for all statements of Dhrystone. + * + * Version 2.1 is identical to version 2.0 distributed via + * the UNIX network Usenet in March 1988 except that it corrects + * some minor deficiencies that were found by users of version 2.0. + * The only change within the measurement loop is that a + * non-executed "else" part was added to the "if" statement in + * Func_3, and a non-executed "else" part removed from Proc_3. + * + *************************************************************************** + * + * Defines: The following "Defines" are possible: + * -DREG=register (default: Not defined) + * As an approximation to what an average C programmer + * might do, the "register" storage class is applied + * (if enabled by -DREG=register) + * - for local variables, if they are used (dynamically) + * five or more times + * - for parameters if they are used (dynamically) + * six or more times + * Note that an optimal "register" strategy is + * compiler-dependent, and that "register" declarations + * do not necessarily lead to faster execution. + * -DNOSTRUCTASSIGN (default: Not defined) + * Define if the C compiler does not support + * assignment of structures. + * -DNOENUMS (default: Not defined) + * Define if the C compiler does not support + * enumeration types. + * -DTIMES (default) + * -DTIME + * The "times" function of UNIX (returning process times) + * or the "time" function (returning wallclock time) + * is used for measurement. + * For single user machines, "time ()" is adequate. For + * multi-user machines where you cannot get single-user + * access, use the "times ()" function. If you have + * neither, use a stopwatch in the dead of night. + * "printf"s are provided marking the points "Start Timer" + * and "Stop Timer". DO NOT use the UNIX "time(1)" + * command, as this will measure the total time to + * run this program, which will (erroneously) include + * the time to allocate storage (malloc) and to perform + * the initialization. + * -DHZ=nnn + * In Berkeley UNIX, the function "times" returns process + * time in 1/HZ seconds, with HZ = 60 for most systems. + * CHECK YOUR SYSTEM DESCRIPTION BEFORE YOU JUST APPLY + * A VALUE. + * + *************************************************************************** + * + * Compilation model and measurement (IMPORTANT): + * + * This C version of Dhrystone consists of three files: + * - dhry.h (this file, containing global definitions and comments) + * - dhry_1.c (containing the code corresponding to Ada package Pack_1) + * - dhry_2.c (containing the code corresponding to Ada package Pack_2) + * + * The following "ground rules" apply for measurements: + * - Separate compilation + * - No procedure merging + * - Otherwise, compiler optimizations are allowed but should be indicated + * - Default results are those without register declarations + * See the companion paper "Rationale for Dhrystone Version 2" for a more + * detailed discussion of these ground rules. + * + * For 16-Bit processors (e.g. 80186, 80286), times for all compilation + * models ("small", "medium", "large" etc.) should be given if possible, + * together with a definition of these models for the compiler system used. + * + ************************************************************************** + * + * Dhrystone (C version) statistics: + * + * [Comment from the first distribution, updated for version 2. + * Note that because of language differences, the numbers are slightly + * different from the Ada version.] + * + * The following program contains statements of a high level programming + * language (here: C) in a distribution considered representative: + * + * assignments 52 (51.0 %) + * control statements 33 (32.4 %) + * procedure, function calls 17 (16.7 %) + * + * 103 statements are dynamically executed. The program is balanced with + * respect to the three aspects: + * + * - statement type + * - operand type + * - operand locality + * operand global, local, parameter, or constant. + * + * The combination of these three aspects is balanced only approximately. + * + * 1. Statement Type: + * ----------------- number + * + * V1 = V2 9 + * (incl. V1 = F(..) + * V = Constant 12 + * Assignment, 7 + * with array element + * Assignment, 6 + * with record component + * -- + * 34 34 + * + * X = Y +|-|"&&"|"|" Z 5 + * X = Y +|-|"==" Constant 6 + * X = X +|- 1 3 + * X = Y *|/ Z 2 + * X = Expression, 1 + * two operators + * X = Expression, 1 + * three operators + * -- + * 18 18 + * + * if .... 14 + * with "else" 7 + * without "else" 7 + * executed 3 + * not executed 4 + * for ... 7 | counted every time + * while ... 4 | the loop condition + * do ... while 1 | is evaluated + * switch ... 1 + * break 1 + * declaration with 1 + * initialization + * -- + * 34 34 + * + * P (...) procedure call 11 + * user procedure 10 + * library procedure 1 + * X = F (...) + * function call 6 + * user function 5 + * library function 1 + * -- + * 17 17 + * --- + * 103 + * + * The average number of parameters in procedure or function calls + * is 1.82 (not counting the function values as implicit parameters). + * + * + * 2. Operators + * ------------ + * number approximate + * percentage + * + * Arithmetic 32 50.8 + * + * + 21 33.3 + * - 7 11.1 + * * 3 4.8 + * / (int div) 1 1.6 + * + * Comparison 27 42.8 + * + * == 9 14.3 + * /= 4 6.3 + * > 1 1.6 + * < 3 4.8 + * >= 1 1.6 + * <= 9 14.3 + * + * Logic 4 6.3 + * + * && (AND-THEN) 1 1.6 + * | (OR) 1 1.6 + * ! (NOT) 2 3.2 + * + * -- ----- + * 63 100.1 + * + * + * 3. Operand Type (counted once per operand reference): + * --------------- + * number approximate + * percentage + * + * Integer 175 72.3 % + * Character 45 18.6 % + * Pointer 12 5.0 % + * String30 6 2.5 % + * Array 2 0.8 % + * Record 2 0.8 % + * --- ------- + * 242 100.0 % + * + * When there is an access path leading to the final operand (e.g. a record + * component), only the final data type on the access path is counted. + * + * + * 4. Operand Locality: + * ------------------- + * number approximate + * percentage + * + * local variable 114 47.1 % + * global variable 22 9.1 % + * parameter 45 18.6 % + * value 23 9.5 % + * reference 22 9.1 % + * function result 6 2.5 % + * constant 55 22.7 % + * --- ------- + * 242 100.0 % + * + * + * The program does not compute anything meaningful, but it is syntactically + * and semantically correct. All variables have a value assigned to them + * before they are used as a source operand. + * + * There has been no explicit effort to account for the effects of a + * cache, or to balance the use of long or short displacements for code or + * data. + * + *************************************************************************** + */ + +/* Compiler and system dependent definitions: */ +/* +#ifndef TIME +#define TIMES +#endif +*/ /* Use times(2) time function unless */ + /* explicitly defined otherwise */ + +/* + #ifndef HZ + #define HZ 60 + #endif +*/ + +/* +#ifdef TIMES +#include <sys/types.h> +#include <sys/times.h> +*/ /* for "times" */ +/* +#endif +*/ +#define Mic_secs_Per_Second 1000000.0 + /* Berkeley UNIX C returns process times in seconds/HZ */ + +#ifdef NOSTRUCTASSIGN +#define structassign(d, s) memcpy(&(d), &(s), sizeof(d)) +#else +#define structassign(d, s) d = s +#endif + +#ifdef NOENUM +#define Ident_1 0 +#define Ident_2 1 +#define Ident_3 2 +#define Ident_4 3 +#define Ident_5 4 + typedef int Enumeration; +#else + typedef enum {Ident_1, Ident_2, Ident_3, Ident_4, Ident_5} + Enumeration; +#endif + /* for boolean and enumeration types in Ada, Pascal */ + +/* General definitions: */ + +#include <stdio.h> + /* for strcpy, strcmp */ + +#define Null 0 + /* Value of a Null pointer */ +#define true 1 +#define false 0 + +typedef int One_Thirty; +typedef int One_Fifty; +typedef char Capital_Letter; +typedef int Boolean; +typedef char Str_30 [31]; +typedef int Arr_1_Dim [50]; +typedef int Arr_2_Dim [50] [50]; + +typedef struct record + { + struct record *Ptr_Comp; + Enumeration Discr; + union { + struct { + Enumeration Enum_Comp; + int Int_Comp; + char Str_Comp [31]; + } var_1; + struct { + Enumeration E_Comp_2; + char Str_2_Comp [31]; + } var_2; + struct { + char Ch_1_Comp; + char Ch_2_Comp; + } var_3; + } variant; + } Rec_Type, *Rec_Pointer; + + diff --git a/gcc/testsuite/gcc.misc-tests/gcov-1.c b/gcc/testsuite/gcc.misc-tests/gcov-1.c new file mode 100644 index 000000000000..20fc950dddc0 --- /dev/null +++ b/gcc/testsuite/gcc.misc-tests/gcov-1.c @@ -0,0 +1,20 @@ +/* Test Gcov basics. */ + +/* { dg-options "-fprofile-arcs -ftest-coverage" } */ +/* { dg-do run { target native } } */ + +noop () +{ +} + +main () +{ + int i; + + for (i = 0; i < 10; i++) /* count(11) */ + noop (); /* count(10) */ + + return 0; /* count(1) */ +} + +/* { dg-final { run-gcov gcov-1.c } } */ diff --git a/gcc/testsuite/gcc.misc-tests/gcov-2.c b/gcc/testsuite/gcc.misc-tests/gcov-2.c new file mode 100644 index 000000000000..3d64d8cad4ed --- /dev/null +++ b/gcc/testsuite/gcc.misc-tests/gcov-2.c @@ -0,0 +1,21 @@ +/* Test Gcov basics. */ + +/* { dg-prms-id 8294 } */ +/* { dg-options "-fprofile-arcs -ftest-coverage -g" } */ +/* { dg-do run { target native } } */ + +noop () +{ +} + +main () +{ + int i; + + for (i = 0; i < 10; i++) /* count(11) */ + noop (); /* count(10) */ + + return 0; /* count(1) */ +} + +int a_variable = 0; diff --git a/gcc/testsuite/gcc.misc-tests/gcov.exp b/gcc/testsuite/gcc.misc-tests/gcov.exp new file mode 100644 index 000000000000..747465d82ce0 --- /dev/null +++ b/gcc/testsuite/gcc.misc-tests/gcov.exp @@ -0,0 +1,95 @@ +# Copyright (C) 1997 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# Please email any bugs, comments, and/or additions to this file to: +# bug-gcc@prep.ai.mit.edu + +# Gcov test driver. + +# Load support procs. +load_lib gcc-dg.exp + +global GCC_UNDER_TEST + +# For now find gcov in the same directory as $GCC_UNDER_TEST. +if { ![is_remote host] && [string match "*/*" [lindex $GCC_UNDER_TEST 0]] } { + set GCOV [file dirname [lindex $GCC_UNDER_TEST 0]]/gcov +} else { + set GCOV gcov +} + +# Proc to delete the working files created by the compiler for gcov. + +proc clean-gcov { testcase } { + set basename [file tail $testcase] + set base [file rootname $basename] + remote_file host delete $base.bb $base.bbg $base.da $basename.gcov +} + +# Called by dg-final to run gcov and analyze the results. + +proc run-gcov { testcase } { + global GCOV + + verbose "Running $GCOV $testcase" 2 + set testcase [remote_download host $testcase]; + set result [remote_exec host $GCOV $testcase]; + if { [lindex $result 0] != 0 } { + fail "gcov failed: [lindex $result 1]" + clean-gcov $testcase + return + } + + remote_upload host $testcase.gcov $testcase.gcov; + set output [grep $testcase.gcov ".*count\\(\[0-9\]+\\)" line] + #send_user "output:$output\n" + set failed 0 + foreach line $output { + verbose "Processing count line: $line" 3 + #send_user "line:$line\n" + if [regexp "(\[0-9\]+) *(\[0-9\]+).*count\\((\[0-9\]+)\\)" "$line" all n is shouldbe] { + #send_user "n $n:is $is:shouldbe $shouldbe\n" + if { $is == "" } { + fail "$testcase:$n:no data available for this line" + incr failed + } elseif { $is != $shouldbe } { + fail "$testcase:$n:is $is:should be $shouldbe" + incr failed + } + } else { + fail "$testcase: can't parse $line (in wrong place?)" + incr failed + } + } + clean-gcov $testcase + if !$failed { + pass "gcov $testcase" + } +} + +# Initialize harness. +dg-init + +# Delete old .da files. +set files [glob -nocomplain gcov-*.da]; +if { $files != "" } { + eval "remote_file build delete $files"; +} + +# Main loop. +dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/gcov-*.c]] "" "" + +dg-finish diff --git a/gcc/testsuite/gcc.misc-tests/m-un-1.c b/gcc/testsuite/gcc.misc-tests/m-un-1.c new file mode 100644 index 000000000000..ad84d44ca151 --- /dev/null +++ b/gcc/testsuite/gcc.misc-tests/m-un-1.c @@ -0,0 +1,37 @@ +/* m-un-1.c: "un" for "uninitialized" */ + +/* +From: Jim Wilson <wilson@cygnus.com> +Date: Wed, 6 Jul 1994 13:11:47 -0700 +To: dje@cygnus.com +Subject: Re: devo/gcc ChangeLog.fsf stmt.c +Cc: cvs-gcc@cygnus.com, tege@cygnus.com + + How about a test case? :-) + +Compile with -O -Wall and the broken compiler gives you: +tmp.c:6: warning: `k' might be used uninitialized in this function +The fixed compiler (and gcc 2.5.8) gives no warning. + +This happens to fix a performance regression in the code generated for +while loops, but that is presumably much much harder to test for. +*/ + +/* { dg-do compile } */ +/* { dg-options "-O -Wall" } */ + +int +sub () +{ + int i = 0; + int j = 0; + int k; /* { dg-bogus "`k' might be used uninitialized" "uninitialized warning regression" } */ + + while (i == 0 && j == 0) + { + k = 10; + i = sub (); + } + + return k; +} diff --git a/gcc/testsuite/gcc.misc-tests/matrix1.c b/gcc/testsuite/gcc.misc-tests/matrix1.c new file mode 100644 index 000000000000..62c711507919 --- /dev/null +++ b/gcc/testsuite/gcc.misc-tests/matrix1.c @@ -0,0 +1,46 @@ +/* Matrix operations */ + +#define BOUND 100 + +int a[BOUND][BOUND],b[BOUND][BOUND],c[BOUND][BOUND]; + +main() +{ +int i,j,k; + + + + for (i=0; i<BOUND; i++) + { + for (j=0; j<BOUND; j++) + { + a[i][j] = 1; + b[i][j] = 1; + } + } + for (i=0; i<BOUND; i++) + { + for (j=0; j<BOUND; j++) + { + c[i][j] = 0; + for (k=0; k<BOUND; k++) + { + c[i][j] = c[i][j] + a[i][k] * b[k][j]; + } + } + } + for (i=0; i<BOUND; i++) + { + for (j=0; j<BOUND; j++) + { + if (c[i][j] != BOUND) + { + /*printf("ERROR\n");*/ + return 0; + } + } + } + i=5; + + exit (0); +} diff --git a/gcc/testsuite/gcc.misc-tests/matrix1.exp b/gcc/testsuite/gcc.misc-tests/matrix1.exp new file mode 100644 index 000000000000..a90ae5c64fec --- /dev/null +++ b/gcc/testsuite/gcc.misc-tests/matrix1.exp @@ -0,0 +1,31 @@ +# Copyright (C) 1997 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# Please email any bugs, comments, and/or additions to this file to: +# bug-gcc@prep.ai.mit.edu + +global PERF_TEST +if { ![info exists PERF_TEST] || "$PERF_TEST" != "yes" } { + return +} + +load_lib mike-gcc.exp + +prebase +set actions run +set compiler_output "^$" +set program_output "^$" +postbase matrix1.c $run $groups diff --git a/gcc/testsuite/gcc.misc-tests/mg.c b/gcc/testsuite/gcc.misc-tests/mg.c new file mode 100644 index 000000000000..5359714572f0 --- /dev/null +++ b/gcc/testsuite/gcc.misc-tests/mg.c @@ -0,0 +1,8 @@ +/* PR 2981 */ + +#include "nonexist.h" +int +main () +{ + return 0; +} diff --git a/gcc/testsuite/gcc.misc-tests/mg.exp b/gcc/testsuite/gcc.misc-tests/mg.exp new file mode 100644 index 000000000000..845e3e6eb6cb --- /dev/null +++ b/gcc/testsuite/gcc.misc-tests/mg.exp @@ -0,0 +1,27 @@ +# Copyright (C) 1997 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# Please email any bugs, comments, and/or additions to this file to: +# bug-gcc@prep.ai.mit.edu + +# Test the -MG flag. + +load_lib mike-gcc.exp + +prebase +set actions none-of-the-above +set compiler_output "mg.o ?: .*mg.c \[ \\\n\]*nonexist.h" +postbase mg.c "" "" "-MM -MG 2>/dev/null" diff --git a/gcc/testsuite/gcc.misc-tests/msgs.exp b/gcc/testsuite/gcc.misc-tests/msgs.exp new file mode 100644 index 000000000000..dbe3f24a78eb --- /dev/null +++ b/gcc/testsuite/gcc.misc-tests/msgs.exp @@ -0,0 +1,33 @@ +# Copyright (C) 1997 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# Please email any bugs, comments, and/or additions to this file to: +# bug-gcc@prep.ai.mit.edu + +# Test gcc warning and error messages. +# Our testcases are named m-*.c ("m" and not "msg" to avoid DOS problems). + +# Load support procs. +load_lib gcc-dg.exp + +# Initialize harness. +dg-init + +# Main loop. +dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/m-*.c]] "" "" + +# All done. +dg-finish diff --git a/gcc/testsuite/gcc.misc-tests/optbench.c b/gcc/testsuite/gcc.misc-tests/optbench.c new file mode 100644 index 000000000000..9cee4305b64f --- /dev/null +++ b/gcc/testsuite/gcc.misc-tests/optbench.c @@ -0,0 +1,288 @@ +/* ----------------------------------------------------- * + | | + | PC Tech Journal Benchmark Series | + | C Code Optimization Benchmark | + | | + | Copyright (c) 1988 Ziff-Davis Publishing Company | + | | + | This benchmark code is designed to test the | + | code optimization techniques applied by a C | + | compiler. It does not produce meaningful results | + | when executed, or represent good style. | + | | + * ----------------------------------------------------- */ + +#include <string.h> + +#define max_vector 2 +#define constant5 5 + +typedef unsigned char uchar; + +int i, j, k , l, m; +int i2, j2, k2; +int g3, h3, i3, k3, m3; +int i4, j4; +int i5, j5, k5; + +double flt_1, flt_2, flt_3, flt_4, flt_5, flt_6; + +int ivector[ 3 ]; +uchar ivector2[ 3 ]; +short ivector4[ 6 ]; +int ivector5[ 203 ]; + +#ifndef NO_PROTOTYPES +void dead_code( int, char * ); +void unnecessary_loop( void ); +void loop_jamming( int ); +void loop_unrolling( int ); +int jump_compression ( int, int, int, int, int ); +#else +void dead_code(); +void unnecessary_loop(); +void loop_jamming(); +void loop_unrolling(); +int jump_compression(); +#endif + + +int main( argc, argv ) /* optbench */ + int argc; + char **argv; + { + /* ------------------------------ * + | Constant and copy propagation | + * ------------------------------ */ + + j4 = 2; + if( i2 < j4 && i4 < j4 ) + i5 = 2; + + j4 = k5; + if( i2 < j4 && i4 < j4 ) + i5 = 3; + + /* ---------------------------------------- * + | Constant folding, arithmetic identities | + | and redundant load/store operations | + * ---------------------------------------- */ + + i3 = 1 + 2; + flt_1 = 2.4 + 6.3; + i2 = 5; + j2 = i + 0; + k2 = i / 1; + i4 = i * 1; + i5 = i * 0; + +#ifndef NO_ZERO_DIVIDE + /* + * Some compilers correctly recognize a zero divide + * error and do not generate any object code. + */ +/* + i2 = i / 0; + flt_2 = flt_1 / 0.0; +*/ +#else +/* + printf( "This compiler handles divide-by-zero as an +error\n"); +*/; +#endif + flt_3 = 2.4 / 1.0; + flt_4 = 1.0 + 0.0000001; + flt_5 = flt_6 * 0.0; + flt_6 = flt_2 * flt_3; + + /* ------------ * + | Dead store | + * ------------ */ + + k3 = 1; + k3 = 1; + + /* --------------------- * + | Strength reduction | + * --------------------- */ + + k2 = 4 * j5; + for( i = 0; i <= 5; i++ ) + ivector4[ i ] = i * 2; + + /* ----------- * + | Simple loop | + * ----------- */ + + j5 = 0; + k5 = 10000; + do { + k5 = k5 - 1; + j5 = j5 + 1; + i5 = ( k5 * 3 ) / ( j5 * constant5 ); + } while ( k5 > 0 ); + + /* ----------------------------------- * + | Loop induction variable handling | + * ----------------------------------- */ + + for( i = 0; i < 100; i++) + ivector5[ i * 2 + 3 ] = 5; + + /* ----------------------------- * + | Very busy expression handling | + * ----------------------------- */ + + if( i < 10 ) + j5 = i5 + i2; + else + k5 = i5 + i2; + + /* -------------------------------------------- * + | Check how the compiler generates the address | + | of a variable with a constant subscript, | + | copy propagation, and register propagation. | + * -------------------------------------------- */ + + ivector[ 0 ] = 1; /* constant address generation */ + ivector[ i2 ] = 2; /* i2 should be a propagated value +*/ + ivector[ i2 ] = 2; /* register propagation */ + ivector[ 2 ] = 3; /* constant address generation */ + + + /* ---------------------------------- * + | Common subexpression elimination | + * ---------------------------------- */ + + if(( h3 + k3 ) < 0 || ( h3 + k3 ) > 5 ) + /* + printf("Common subexpression elimination\n"); + + */; + else { + m3 = ( h3 + k3 ) / i3; + g3 = i3 + (h3 + k3); + } + /* --------------------------------------- * + | Invariant code motion | + | (j * k) can be moved outside the loop. | + * --------------------------------------- */ + + for( i4 = 0; i4 <= max_vector; i4++ ) + ivector2[ i4 ] = j * k; + + /* ---------------------------- * + | Function call with arguments | + * ---------------------------- */ + + dead_code( 1, "This line should not be printed" ); + + /* ------------------------------- * + | Function call without arguments | + * ------------------------------- */ + + unnecessary_loop(); + + exit (0); + + } /* end of main */ + + +/* --------------------------------------------- * + | Function: dead_code | + | Test for dead code and dead stores. | + | NO code should be generated. | + * ----------------------------------------------*/ + +void dead_code( a, b ) + int a; + char *b; + { + int idead_store; + + idead_store = a; + if( 0 ) + /* + printf( "%s\n", b ); + */; + } /* end of dead_code */ + +/* ----------------------------------------------- * + | Function: unnecessary_loop | + | The loop in the following function is | + | not necessary since the value of the | + | assignment is constant. Ideally, the | + | loop should be optimized out. | + * ----------------------------------------------- */ + +void unnecessary_loop() + { + int x; + + x = 0; + for( i = 0; i < 5; i++ ) /* loop should not be generated */ + k5 = x + j5; + } /* end of unnecessary_loop */ + +/* --------------------------------------------- * + | Function: loop_jamming | + | The two loop in this function share | + | the same loop conditions and could | + | be coalesced together. | + * --------------------------------------------- */ + +void loop_jamming( x ) + int x; + { + for( i = 0; i < 5; i++ ) + k5 = x + j5 * i; + for( i = 0; i < 5; i++ ) + i5 = x * k5 * i; + } /* end of loop_jamming */ + +/* ------------------------------------------------ * + | Function: loop_unrolling | + | The loop in this function should be | + | replaced with three inline word stores | + | using constant array arithmetic or by | + | specialized machine instructions used | + | for block memory initializiation. | + * ------------------------------------------------ */ + +void loop_unrolling( x ) + int x; + { + for( i = 0; i < 6; i++ ) + ivector4[ i ] = 0; + } /* end of loop_unrolling */ + +/* ------------------------------------------------------ * + | Function: jump_compression | + | This awkward code is useful to illustrate | + | jump chain compression. The goto 'end_1' can | + | be replaced by a direct jump to 'beg_1'. | + *------------------------------------------------------ */ + +int jump_compression ( i, j, k, l, m ) +int i,j ,l, m; + { +beg_1: + if( i < j ) + if( j < k ) + if( k < l ) + if ( l < m ) + l += m; + else + goto end_1; + else + k += l; + else { + j += k; +end_1: goto beg_1; + } + else + i += j; + return( i + j + k + l + m ); + } /* end of jump_compression */ diff --git a/gcc/testsuite/gcc.misc-tests/optbench.exp b/gcc/testsuite/gcc.misc-tests/optbench.exp new file mode 100644 index 000000000000..a54fd2dc4686 --- /dev/null +++ b/gcc/testsuite/gcc.misc-tests/optbench.exp @@ -0,0 +1,31 @@ +# Copyright (C) 1997 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# Please email any bugs, comments, and/or additions to this file to: +# bug-gcc@prep.ai.mit.edu + +global PERF_TEST +if { ![info exists PERF_TEST] || "$PERF_TEST" != "yes" } { + return +} + +load_lib mike-gcc.exp + +prebase +set actions run +set compiler_output "^$" +set program_output "^$" +postbase optbench.c $run $groups diff --git a/gcc/testsuite/gcc.misc-tests/sieve.c b/gcc/testsuite/gcc.misc-tests/sieve.c new file mode 100644 index 000000000000..41897f178c41 --- /dev/null +++ b/gcc/testsuite/gcc.misc-tests/sieve.c @@ -0,0 +1,26 @@ + +#define TRUE 1 +#define FALSE 0 +#define SIZE 8190 + +char flags[SIZE+1]; + +main() +{ + register int i, prime, k, count, iter; + for (iter=1;iter<=100;iter++) { + count=0; + for (i=0;i<=SIZE;i++) + flags[i]=TRUE; + for (i=0;i<=SIZE;i++) { + if (flags[i]) { + prime=i+i+3; + for (k=i+prime;k<=SIZE;k+=prime) + flags[k]=FALSE; + count++; + } + } + } +/* */ exit(0); /* */ +} + diff --git a/gcc/testsuite/gcc.misc-tests/sieve.exp b/gcc/testsuite/gcc.misc-tests/sieve.exp new file mode 100644 index 000000000000..a6c7665bc52d --- /dev/null +++ b/gcc/testsuite/gcc.misc-tests/sieve.exp @@ -0,0 +1,31 @@ +# Copyright (C) 1997 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# Please email any bugs, comments, and/or additions to this file to: +# bug-gcc@prep.ai.mit.edu + +global PERF_TEST +if { ![info exists PERF_TEST] || "$PERF_TEST" != "yes" } { + return +} + +load_lib mike-gcc.exp + +prebase +set actions run +set compiler_output "^$" +set program_output "^$" +postbase sieve.c $run $groups diff --git a/gcc/testsuite/gcc.misc-tests/sort2.c b/gcc/testsuite/gcc.misc-tests/sort2.c new file mode 100644 index 000000000000..3d86e1ecc24b --- /dev/null +++ b/gcc/testsuite/gcc.misc-tests/sort2.c @@ -0,0 +1,54 @@ +/* Simple test program: bubble sort of a fixed table. */ +/* This demonstrates some of the compiler's common-subexpression*/ +/* elimination capabilities. For example, inspect the code */ +/* generated for procedure Sort_array. See the Programmer's */ +/* Guide for how to request an assembly listing on your host. */ + +typedef unsigned char boolean; + +void Sort_array(); +int Tab[100]; + +main () { + int I,J,K,L; + +for (L = 0; L < 1000; L++) { + /* Initialize the table that will be sorted. */ + K = 0; + for (I = 9; I >= 0; I--) + for (J = I*10; J < (I+1)*10; J++) + Tab[K++] = J&1 ? J+1 : J-1; + +/* Print_array(); */ + Sort_array(Tab,99); /* Sort it. */ +/* Print_array(); */ +} +/* */ exit(0); /* */ +} + +void Sort_array(Tab,Last) int Tab[]; int Last; { + boolean Swap; + int Temp,I; + do { + Swap = 0; + for (I = 0; I<Last; I++) + if (Tab[I] > Tab[I+1]) { + Temp = Tab[I]; + Tab[I] = Tab[I+1]; + Tab[I+1] = Temp; + Swap = 1; + } + } + while (Swap); +} + + +void Print_array() { + int I,J; + /*printf("\nArray Contents:\n");*/ + for (I=0; I<=9; I++) { + /*printf("%5d:",10*I); */ + for (J=0; J<=9; J++); /*printf("%5d",Tab[10*I+J]); */ + /* printf("\n");*/ + } +} diff --git a/gcc/testsuite/gcc.misc-tests/sort2.exp b/gcc/testsuite/gcc.misc-tests/sort2.exp new file mode 100644 index 000000000000..ab5f0996426b --- /dev/null +++ b/gcc/testsuite/gcc.misc-tests/sort2.exp @@ -0,0 +1,31 @@ +# Copyright (C) 1997 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# Please email any bugs, comments, and/or additions to this file to: +# bug-gcc@prep.ai.mit.edu + +global PERF_TEST +if { ![info exists PERF_TEST] || "$PERF_TEST" != "yes" } { + return +} + +load_lib mike-gcc.exp + +prebase +set actions run +set compiler_output "^$" +set program_output "^$" +postbase sort2.c $run $groups diff --git a/gcc/testsuite/lib/c-torture.exp b/gcc/testsuite/lib/c-torture.exp new file mode 100644 index 000000000000..76732eceeea0 --- /dev/null +++ b/gcc/testsuite/lib/c-torture.exp @@ -0,0 +1,319 @@ +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# Please email any bugs, comments, and/or additions to this file to: +# bug-dejagnu.prep.ai.mit.edu + +# This file was written by Rob Savoye. (rob@cygnus.com) + +# The default option list can be overridden by +# TORTURE_OPTIONS="{ { list1 } ... { listN } }" + +if ![info exists TORTURE_OPTIONS] { + # FIXME: We should test -g at least once. + set TORTURE_OPTIONS [list \ + { -O0 } { -O1 } { -O2 } \ + { -O2 -fomit-frame-pointer -finline-functions } \ + { -O2 -fomit-frame-pointer -finline-functions -funroll-loops } \ + { -O2 -fomit-frame-pointer -finline-functions -funroll-all-loops }] +} + + +# Split TORTURE_OPTIONS into two choices: one for testcases with loops and +# one for testcases without loops. + +set torture_with_loops $TORTURE_OPTIONS +set torture_without_loops "" +foreach option $TORTURE_OPTIONS { + if ![string match "*loop*" $option] { + lappend torture_without_loops $option + } +} + +# +# c-torture-compile -- runs the Tege C-torture test +# +# SRC is the full pathname of the testcase. +# OPTION is the specific compiler flag we're testing (eg: -O2). +# +proc c-torture-compile { src option } { + global output + global srcdir tmpdir + global host_triplet + + set output "$tmpdir/[file tail [file rootname $src]].o" + + regsub "^$srcdir/?" $src "" testcase + # If we couldn't rip $srcdir out of `src' then just do the best we can. + # The point is to reduce the unnecessary noise in the logs. Don't strip + # out too much because different testcases with the same name can confuse + # `test-tool'. + if [string match "/*" $testcase] { + set testcase "[file tail [file dirname $src]]/[file tail $src]" + } + + verbose "Testing $testcase, $option" 1 + + # Run the compiler and analyze the results. + set options "" + lappend options "additional_flags=-w $option" + + set comp_output [gcc_target_compile "$src" "$output" object $options]; + + # Set a few common compiler messages. + set fatal_signal "*cc: Internal compiler error: program*got fatal signal" + + if [string match "$fatal_signal 6" $comp_output] then { + gcc_fail $testcase "Got Signal 6, $option" + remote_file build delete $output + return + } + + if [string match "$fatal_signal 11" $comp_output] then { + gcc_fail $testcase "Got Signal 11, $option" + remote_file build delete $output + return + } + + # We shouldn't get these because of -w, but just in case. + if [string match "*cc:*warning:*" $comp_output] then { + warning "$testcase: (with warnings) $option" + send_log "$comp_output\n" + unresolved "$testcase, $option" + remote_file build delete $output + return + } + + set comp_output [prune_warnings $comp_output] + + set unsupported_message [gcc_check_unsupported_p $comp_output] + if { $unsupported_message != "" } { + unsupported "$testcase: $unsupported_message" + remote_file build delete $output + return + } + + # remove any leftover LF/CR to make sure any output is legit + regsub -all -- "\[\r\n\]*" $comp_output "" comp_output + # If any message remains, we fail. + if ![string match "" $comp_output] then { + gcc_fail $testcase $option + remote_file build delete $output + return + } + + gcc_pass $testcase $option + remote_file build delete $output +} + +# +# c-torture-execute -- utility to compile and execute a testcase +# +# SRC is the full pathname of the testcase. +# +# If the testcase has an associated .cexp file, we source that to run the +# test instead. We use .cexp instead of .exp so that the testcase is still +# controlled by the main .exp driver (this is useful when one wants to only +# run the compile.exp tests for example - one need only pass compile.exp to +# dejagnu, and not compile.exp, foo1.exp, foo2.exp, etc.). +# +proc c-torture-execute { src } { + global tmpdir tool srcdir output + + # Check for alternate driver. + if [file exists [file rootname $src].cexp] { + verbose "Using alternate driver [file rootname [file tail $src]].cexp" 2 + set done_p 0 + catch "set done_p \[source [file rootname $src].cexp\]" + if { $done_p } { + return + } + } + + # Look for a loop within the source code - if we don't find one, + # don't pass -funroll[-all]-loops. + global torture_with_loops torture_without_loops + if [expr [search_for $src "for*("]+[search_for $src "while*("]] then { + set option_list $torture_with_loops + } else { + set option_list $torture_without_loops + } + + set executable $tmpdir/[file tail [file rootname $src].x] + + regsub "^$srcdir/?" $src "" testcase + # If we couldn't rip $srcdir out of `src' then just do the best we can. + # The point is to reduce the unnecessary noise in the logs. Don't strip + # out too much because different testcases with the same name can confuse + # `test-tool'. + if [string match "/*" $testcase] { + set testcase "[file tail [file dirname $src]]/[file tail $src]" + } + + foreach option $option_list { + # torture_{compile,execute}_xfail are set by the .cexp script + # (if present) + if [info exists torture_compile_xfail] { + setup_xfail $torture_compile_xfail + } + remote_file build delete $executable + verbose "Testing $testcase, $option" 1 + + set options "" + lappend options "additional_flags=-w $option" + set comp_output [gcc_target_compile "$src" "$executable" executable $options]; + + # Set a few common compiler messages. + set fatal_signal "*cc: Internal compiler error: program*got fatal signal" + + if [string match "$fatal_signal 6" $comp_output] then { + gcc_fail $testcase "Got Signal 6, $option" + remote_file build delete $executable + continue + } + + if [string match "$fatal_signal 11" $comp_output] then { + gcc_fail $testcase "Got Signal 11, $option" + remote_file build delete $executable + continue + } + + # We shouldn't get these because of -w, but just in case. + if [string match "*cc:*warning:*" $comp_output] then { + warning "$testcase: (with warnings) $option" + send_log "$comp_output\n" + unresolved "$testcase, $option" + remote_file build delete $executable + continue + } + + set comp_output [prune_warnings $comp_output] + + set unsupported_message [gcc_check_unsupported_p $comp_output] + + if { $unsupported_message != "" } { + unsupported "$testcase: $unsupported_message" + continue + } elseif ![file exists $executable] { + if ![is3way] { + fail "$testcase compilation, $option" + untested "$testcase execution, $option" + continue + } else { + # FIXME: since we can't test for the existance of a remote + # file without short of doing an remote file list, we assume + # that since we got no output, it must have compiled. + pass "$testcase compilation, $option" + } + } else { + pass "$testcase compilation, $option" + } + + # See if this source file uses "long long" types, if it does, and + # no_long_long is set, skip execution of the test. + if [target_info exists no_long_long] then { + if [expr [search_for $src "long long"]] then { + untested "$testcase execution, $option" + continue + } + } + + if [info exists torture_execute_xfail] { + setup_xfail $torture_execute_xfail + } + + set result [gcc_load "$executable" "" ""] + set status [lindex $result 0]; + set output [lindex $result 1]; + if { $status == "pass" } { + remote_file build delete $executable + } + $status "$testcase execution, $option" + } +} + +# +# search_for -- looks for a string match in a file +# +proc search_for { file pattern } { + set fd [open $file r] + while { [gets $fd cur_line]>=0 } { + if [string match "*$pattern*" $cur_line] then { + close $fd + return 1 + } + } + close $fd + return 0 +} + +# +# c-torture -- the c-torture testcase source file processor +# +# This runs compilation only tests (no execute tests). +# SRC is the full pathname of the testcase, or just a file name in which case +# we prepend $srcdir/$subdir. +# +# If the testcase has an associated .cexp file, we source that to run the +# test instead. We use .cexp instead of .exp so that the testcase is still +# controlled by the main .exp driver (this is useful when one wants to only +# run the compile.exp tests for example - one need only pass compile.exp to +# dejagnu, and not compile.exp, foo1.exp, foo2.exp, etc.). +# +proc c-torture { args } { + global srcdir subdir + + set src [lindex $args 0]; + if { [llength $args] > 1 } { + set options [lindex $args 1]; + } else { + set options "" + } + + # Prepend $srdir/$subdir if missing. + if ![string match "*/*" $src] { + set src "$srcdir/$subdir/$src" + } + + # Check for alternate driver. + if [file exists [file rootname $src].cexp] { + verbose "Using alternate driver [file rootname [file tail $src]].cexp" 2 + set done_p 0 + catch "set done_p \[source [file rootname $src].cexp\]" + if { $done_p } { + return + } + } + + # Look for a loop within the source code - if we don't find one, + # don't pass -funroll[-all]-loops. + global torture_with_loops torture_without_loops + if [expr [search_for $src "for*("]+[search_for $src "while*("]] then { + set option_list $torture_with_loops + } else { + set option_list $torture_without_loops + } + + # loop through all the options + foreach option $option_list { + # torture_compile_xfail is set by the .cexp script (if present) + if [info exists torture_compile_xfail] { + setup_xfail $torture_compile_xfail + } + + c-torture-compile $src "$option $options" + } +} diff --git a/gcc/testsuite/lib/chill.exp b/gcc/testsuite/lib/chill.exp new file mode 100644 index 000000000000..bd8c4f64f2b5 --- /dev/null +++ b/gcc/testsuite/lib/chill.exp @@ -0,0 +1,365 @@ +# +# Expect script for Chill Regression Tests +# Copyright (C) 1993, 1996, 1997 Free Software Foundation +# +# This file is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# Written by Jeffrey Wheat (cassidy@cygnus.com) +# + +# +# chill support library procedures and testsuite specific instructions +# + +# +# default_chill_version +# extract and print the version number of the chill compiler +# exits if compiler does not exist +# +proc default_chill_version { } { + global GCC_UNDER_TEST + + # ignore any arguments after the command + set compiler [lindex $GCC_UNDER_TEST 0] + + # verify that the compiler exists + if {[which $compiler] != 0} then { + set tmp [ exec $compiler -v ] + regexp "version.*$" $tmp version + + if [info exists version] then { + clone_output "[which $compiler] $version\n" + } + } else { + warning "$compiler does not exist" + exit -1 + } +} + +# +# chill_compile +# compile the specified file +# +# returns values: +# return 0 on success +# return 1 on failure with $result containing compiler output +# exit with -1 if compiler doesn't exist +# +# verbosity output: +# 1 - indicate compile in progress +# 2 - indicate compile, target name +# 3 - indicate compile, target name, exec command, and result +# +proc chill_compile { src obj } { + global GCC_UNDER_TEST + global CFLAGS + + global errno + global result + global verbose + + global subdir + global tmpdir + + set errno 0 + set cflags $CFLAGS + set dumpfile [file rootname $obj].cmp ;# name of file to dump stderr in + + # verify that the compiler exists + if { [which $GCC_UNDER_TEST] == 0 } then { + warning "$GCC_UNDER_TEST does not exist" + exit -1 + } + + if { $verbose == 1 } then { + send_user "Compiling... " + } else { + verbose " - CMPL: Compiling [file tail $src]" 2 + } + + # if object type is a grt file, then only build a grant file + if [string match "*.grt" $obj] then { + set cflags [concat $cflags -fgrant-only] + } + + # build command line + set commandline "$GCC_UNDER_TEST $cflags -I$subdir -c $src" + + # write command line to logfile + send_log "\n### EXEC: $commandline\n" + + # tell us whats going on if verbose + verbose "### EXEC: $commandline" 3 + + # exec the compiler with the appropriate flags + set errno [catch "exec $commandline" result] + + # dump compiler's stderr output into $dumpfile - this is a gross hack + set dumpfile [open $dumpfile w+]; puts $dumpfile $result; close $dumpfile + + # log any compiler output unless its null + if ![string match "" $result] then { send_log "\n$result\n" } + unset cflags + return +} + +# +# chill_link +# link the specified files +# +# returns values: +# return 0 on success +# return 1 on failure with $result containing compiler output +# exit with -1 if compiler doesn't exist +# +# verbosity output: +# 1 - indicate linking in progress +# 2 - indicate linking, target name +# 3 - indicate linking, target name, exec command, and result +# +proc chill_link { target } { + global GCC_UNDER_TEST + global CFLAGS + + global errno + global result + global verbose + global tmptarget + + global crt0 + global libs + global objs + + set errno 0 + + # verify that the compiler exists + if { [which $GCC_UNDER_TEST] == 0 } then { + warning "$GCC_UNDER_TEST does not exist" + exit -1 + } + + if { $verbose == 1 } then { + send_user "Linking... " + } else { + verbose " - LINK: Linking [file tail $target]" 2 + } + + # verify that the object exists + if ![file exists $target.o] then { + set errno 1 + set result "file $target.o doesn'timeout exist" + return + } + + # build command line + set commandline "$GCC_UNDER_TEST $CFLAGS -o $target $target.o $objs $crt0 $libs" + + # write command line to logfile + send_log "\n### EXEC: $commandline\n" + + # tell us whats going on if we are verbose + verbose "### EXEC: $commandline" 3 + + # link the objects, sending any linker output to $result + set errno [catch "exec $commandline > $tmptarget.lnk" result] + + # log any linker output unless its null + if ![string match "" $result] then { send_log "\n$result\n" } + return +} + +# +# default_chill_start +# +proc default_chill_start { } { + global srcdir + global subdir + global tmpdir + global verbose + + if { $verbose > 1 } then { send_user "Configuring testsuite... " } + + # tmpdir is obtained from $objdir/site.exp. if not, set it to /tmp + if ![info exists tmpdir] then { set tmpdir /tmp } + + # save and convert $srcdir to an absolute pathname, stomp on the old value + # stomp on $subdir and set to the absolute path to the subdirectory + global osrcdir; set osrcdir $srcdir; set srcdir [cd $srcdir; pwd] + global osubdir; set osubdir $subdir; set subdir $srcdir/$subdir + + # cd the temporary directory, $tmpdir + cd $tmpdir; verbose "### PWD: [pwd]" 5 + + # copy init files to the tmpdir + foreach initfile [glob -nocomplain $subdir/*.init] { + set targfile $tmpdir/[file tail [file rootname $initfile]] + verbose "### EXEC: cp $initfile $targfile" 5 + if [catch "exec cp $initfile $targfile"] then { + send_user "\nConfigure failed.\n" + exit -1 + } + } + if { $verbose > 1 } then { send_user "Configuring finished.\n" } +} + +# +# default_chill_exit +# +# +proc default_chill_exit { } { + global srcdir + global objdir + global tmpdir + global osrcdir + global osubdir + + # reset directory variables + set srcdir $osrcdir; set subdir $osubdir + + # remove all generated targets and objects + verbose "### EXEC: rm -f $tmpdir/*" 3 + catch "exec rm -f $tmpdir/*" result + + # change back to the main object directory + cd $objdir + verbose "### SANITY: [pwd]" 5 +} + +# +# chill_diff +# compare two files line-by-line +# +# returns values: +# return 0 on success +# return 1 if different +# return -1 if output file doesn't exist +# +# verbosity output: +# 1 - indicate diffing in progress +# 2 - indicate diffing, target names +# 3 - indicate diffing, target names, and result +# +proc chill_diff { file_1 file_2 } { + global errno + global result + global target + global tmptarget + + global verbose + + set eof -1 + set errno 0 + set differences 0 + + if { $verbose == 1 } then { + send_user "Diffing... " + } else { + verbose " - DIFF: Diffing [file tail $file_1] [file tail $file_2]" 2 + } + + # write command line to logfile + send_log "### EXEC: diff $file_1 $file_2\n" + + # tell us whats going on if we are verbose + verbose "### EXEC: diff $file_1 $file_2" 3 + + # verify file exists and open it + if [file exists $file_1] then { + set file_a [open $file_1 r] + } else { + set errno -1; set result "$file_1 doesn't exist" + return + } + + # verify file exists and is not zero length, and then open it + if [file exists $file_2] then { + if [file size $file_2]!=0 then { + set file_b [open $file_2 r] + } else { + set errno -1; set result "$file_2 is zero bytes"; return + } + } else { + set errno -1; set result "$file_2 doesn't exist"; return + } + + # spoof the diff routine + lappend list_a $target + + while { [gets $file_a line] != $eof } { + if [regexp "^#.*$" $line] then { + continue + } else { + lappend list_a $line + } + } + close $file_a + + # spoof the diff routine + lappend list_b $target + + while { [gets $file_b line] != $eof } { + if [regexp "^#.*$" $line] then { + continue + } else { + # use [file tail $line] to strip off pathname + lappend list_b [file tail $line] + } + } + close $file_b + + for { set i 0 } { $i < [llength $list_a] } { incr i } { + set line_a [lindex $list_a $i] + set line_b [lindex $list_b $i] + + if [string compare $line_a $line_b] then { + set errno 1 + set count [expr $i+1] + set linenum [format %dc%d $count $count] + verbose "$linenum" 3 + verbose "< $line_a" 3 + verbose "---" 3 + verbose "> $line_b" 3 + + send_log "$file_1: < $count: $line_a\n" + send_log "$file_2: > $count: $line_b\n" + set result "differences found" + } + } + return +} + +# +# chill_fail +# a wrapper around the framework fail proc +# +proc chill_fail { target result } { + global verbose + + if { $verbose == 1 } then { send_user "\n" } + fail $target + verbose "--------------------------------------------------" 3 + verbose "### RESULT: $result" 3 +} + +# +# chill_pass +# a wrapper around the framework fail proc +# +proc chill_pass { target } { + global verbose + + if { $verbose == 1 } then { send_user "\n" } + pass $target +} diff --git a/gcc/testsuite/lib/g++.exp b/gcc/testsuite/lib/g++.exp new file mode 100644 index 000000000000..2433e03be014 --- /dev/null +++ b/gcc/testsuite/lib/g++.exp @@ -0,0 +1,229 @@ +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# Please email any bugs, comments, and/or additions to this file to: +# bug-g++@prep.ai.mit.edu + +# This file was written by Rob Savoye (rob@cygnus.com) +# Many modifications by Jeffrey Wheat (cassidy@cygnus.com) +# With modifications by Mike Stump <mrs@cygnus.com>. + +# +# g++ support library routines +# + +# +# GXX_UNDER_TEST is the compiler under test. +# + + +set gpp_compile_options "" + +# +# g++_version -- extract and print the version number of the compiler +# +proc g++_version { } { + global GXX_UNDER_TEST + + # ignore any arguments after the command + set compiler [lindex $GXX_UNDER_TEST 0] + + # verify that the compiler exists + if { [is_remote host] || [which $compiler] != 0 } then { + set tmp [remote_exec host "$compiler -v"] + set status [lindex $tmp 0]; + set output [lindex $tmp 1]; + regexp "version.*$" $output version + if { $status == 0 && [info exists version] } then { + if [is_remote host] { + clone_output "$compiler $version\n" + } else { + clone_output "[which $compiler] $version\n" + } + } else { + clone_output "Couldn't determine version of [which $compiler]\n" + } + } else { + # compiler does not exist (this should have already been detected) + warning "$compiler does not exist" + } +} + +# +# g++_init -- called at the start of each subdir of tests +# + +proc g++_init { args } { + global subdir + global gpp_initialized + global base_dir + global tmpdir + global libdir + global gluefile wrap_flags; + global objdir srcdir + global ALWAYS_CXXFLAGS + global TOOL_EXECUTABLE TOOL_OPTIONS + global GXX_UNDER_TEST + + if ![info exists GXX_UNDER_TEST] then { + if [info exists TOOL_EXECUTABLE] { + set GXX_UNDER_TEST $TOOL_EXECUTABLE; + } else { + if [is_remote host] { + set GXX_UNDER_TEST [transform c++] + } else { + set GXX_UNDER_TEST [findfile $base_dir/../xgcc "$base_dir/../xgcc -B$base_dir/../" [transform c++]] + } + } + } + + # Bleah, nasty. Bad taste. + if [ishost "*-dos-*" ] { + regsub "c\\+\\+" "$GXX_UNDER_TEST" "gcc" GXX_UNDER_TEST + } + + if ![is_remote host] { + if { [which $GXX_UNDER_TEST] == 0 } then { + perror "GXX_UNDER_TEST does not exist" + exit 1 + } + } + if ![info exists tmpdir] { + set tmpdir "/tmp" + } + + if [info exists gluefile] { + unset gluefile + } + + if { [target_info needs_status_wrapper] != "" } { + set gluefile ${tmpdir}/testglue.o; + set result [build_wrapper $gluefile]; + if { $result != "" } { + set gluefile [lindex $result 0]; + set wrap_flags [lindex $result 1]; + } else { + unset gluefile + } + } + + set ALWAYS_CXXFLAGS "" + + if ![is_remote host] { + lappend ALWAYS_CXXFLAGS "additional_flags=[g++_include_flags]"; + lappend ALWAYS_CXXFLAGS "ldflags=[g++_link_flags]"; + lappend ALWAYS_CXXFLAGS "incdir=$base_dir/../include" + } + + if [info exists TOOL_OPTIONS] { + lappend ALWAYS_CXXFLAGS "additional_flags=$TOOL_OPTIONS"; + } + + verbose -log "ALWAYS_CXXFLAGS set to $ALWAYS_CXXFLAGS" + + verbose "g++ is initialized" 3 +} + + +proc g++_target_compile { source dest type options } { + global tmpdir; + global gpp_compile_options + global gluefile wrap_flags + global ALWAYS_CXXFLAGS; + global GXX_UNDER_TEST; + + if { [target_info needs_status_wrapper] != "" && [info exists gluefile] } { + lappend options "libs=${gluefile}" + lappend options "ldflags=${wrap_flags}" + } + + lappend options "additional_flags=[libio_include_flags]" + lappend options "compiler=$GXX_UNDER_TEST"; + + set options [concat $options $gpp_compile_options] + + set options [concat $options "$ALWAYS_CXXFLAGS"]; + + return [target_compile $source $dest $type $options] +} + +proc g++_exit { args } { + global gluefile; + + if [info exists gluefile] { + file_on_build delete $gluefile; + unset gluefile; + } +} + +# If this is an older version of dejagnu (without runtest_file_p), +# provide one and assume the old syntax: foo1.exp bar1.c foo2.exp bar2.c. +# This can be deleted after the next dejagnu release. + +if { [info procs runtest_file_p] == "" } then { + proc runtest_file_p { runtests testcase } { + if { $runtests != "" && [regexp "\[.\]\[cC\]" $runtests] } then { + if { [lsearch $runtests [file tail $testcase]] >= 0 } then { + return 1 + } else { + return 0 + } + } + return 1 + } +} + +# Provide a definition of this if missing (delete after next dejagnu release). + +if { [info procs prune_warnings] == "" } then { + proc prune_warnings { text } { + return $text + } +} + +# Utility used by mike-g++.exp and old-dejagnu.exp. +# Check the compiler(/assembler/linker) output for text indicating that +# the testcase should be marked as "unsupported". +# +# When dealing with a large number of tests, it's difficult to weed out the +# ones that are too big for a particular cpu (eg: 16 bit with a small amount +# of memory). There are various ways to deal with this. Here's one. +# Fortunately, all of the cases where this is likely to happen will be using +# gld so we can tell what the error text will look like. + +proc ${tool}_check_unsupported_p { output } { + if [regexp "(^|\n)\[^\n\]*: region \[^\n\]* is full" $output] { + return "memory full" + } + return "" +} + +proc ${tool}_option_help { } { + send_user "--additional_options,OPTIONS\t\tUse OPTIONS to compile the testcase files. OPTIONS should be comma-separated." +} + +proc ${tool}_option_proc { option } { + if[regexp "^--additional_options," $option] { + global gpp_compile_options + regsub "--additional_options," $option "" option + foreach x [split $option ","] { + lappend gpp_compile_options "additional_flags=$x" + } + return 1; + } else { + return 0 + } +} diff --git a/gcc/testsuite/lib/gcc-dg.exp b/gcc/testsuite/lib/gcc-dg.exp new file mode 100644 index 000000000000..9c66a5068c3e --- /dev/null +++ b/gcc/testsuite/lib/gcc-dg.exp @@ -0,0 +1,84 @@ +# Copyright (C) 1997 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# Please email any bugs, comments, and/or additions to this file to: +# bug-gcc@prep.ai.mit.edu + +# Define gcc callbacks for dg.exp. + +load_lib dg.exp + +proc gcc-dg-test { prog do_what extra_tool_flags } { + # Set up the compiler flags, based on what we're going to do. + + switch $do_what { + "preprocess" { + set compile_type "preprocess" + set output_file "[file rootname [file tail $prog]].i" + } + "compile" { + set compile_type "object" + set output_file "[file rootname [file tail $prog]].s" + } + "assemble" { + set compile_type "assembly" + set output_file "[file rootname [file tail $prog]].o" + } + "link" { + set compile_type "executable" + set output_file "a.out" + # The following line is needed for targets like the i960 where + # the default output file is b.out. Sigh. + } + "run" { + set compile_type "executable" + # FIXME: "./" is to cope with "." not being in $PATH. + # Should this be handled elsewhere? + # YES. + set output_file "./a.out" + # This is the only place where we care if an executable was + # created or not. If it was, dg.exp will try to run it. + remote_file build delete $output_file; + } + default { + perror "$do_what: not a valid dg-do keyword" + return "" + } + } + set options "" + if { $extra_tool_flags != "" } { + lappend options "additional_flags=$extra_tool_flags" + } + + set comp_output [gcc_target_compile "$prog" "$output_file" "$compile_type" $options]; + + return [list $comp_output $output_file] +} + + +proc gcc-dg-prune { system text } { + set text [prune_gcc_output $text] + + # If we see "region xxx is full" then the testcase is too big for ram. + # This is tricky to deal with in a large testsuite like c-torture so + # deal with it here. Just mark the testcase as unsupported. + if [regexp "(^|\n)\[^\n\]*: region \[^\n\]* is full" $text] { + # The format here is important. See dg.exp. + return "::unsupported::memory full" + } + + return $text +} diff --git a/gcc/testsuite/lib/gcc.exp b/gcc/testsuite/lib/gcc.exp new file mode 100644 index 000000000000..ac11d0ba26de --- /dev/null +++ b/gcc/testsuite/lib/gcc.exp @@ -0,0 +1,268 @@ +# Copyright (C) 1992, 1993, 1994, 1996, 1997 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# Please email any bugs, comments, and/or additions to this file to: +# bug-gcc@prep.ai.mit.edu + +# This file was written by Rob Savoye (rob@cygnus.com) +# Currently maintained by Doug Evans (dje@cygnus.com) + +# This file is loaded by the tool init file (eg: unix.exp). It provides +# default definitions for gcc_start, etc. and other supporting cast members. + +# These globals are used by gcc_start if no compiler arguments are provided. +# They are also used by the various testsuites to define the environment: +# where to find stdio.h, libc.a, etc. + +# we want to use libgloss so we can get find_gcc. +load_lib libgloss.exp + +# +# GCC_UNDER_TEST is the compiler under test. +# + +# +# default_gcc_version -- extract and print the version number of the compiler +# + +proc default_gcc_version { } { + global GCC_UNDER_TEST + + gcc_init; + + # ignore any arguments after the command + set compiler [lindex $GCC_UNDER_TEST 0] + + if ![is_remote host] { + set compiler_name [which $compiler]; + } else { + set compiler_name $compiler; + } + + # verify that the compiler exists + if { $compiler_name != 0 } then { + set tmp [remote_exec host "$compiler -v"] + set status [lindex $tmp 0]; + set output [lindex $tmp 1]; + regexp "version.*$" $output version + if { $status == 0 && [info exists version] } then { + clone_output "$compiler_name $version\n" + } else { + clone_output "Couldn't determine version of $compiler_name: $output\n" + } + } else { + # compiler does not exist (this should have already been detected) + warning "$compiler does not exist" + } +} + +# +# Call gcc_version. We do it this way so we can override it if needed. +# +proc gcc_version { } { + default_gcc_version; +} + +# +# gcc_init -- called at the start of each .exp script. +# +# There currently isn't much to do, but always using it allows us to +# make some enhancements without having to go back and rewrite the scripts. +# + +set gcc_initialized 0 + +proc gcc_init { args } { + global tmpdir + global libdir + global gluefile wrap_flags + global gcc_initialized + global GCC_UNDER_TEST + global TOOL_EXECUTABLE + + if { $gcc_initialized == 1 } { return; } + + if ![info exists GCC_UNDER_TEST] { + if [info exists TOOL_EXECUTABLE] { + set GCC_UNDER_TEST $TOOL_EXECUTABLE; + } else { + set GCC_UNDER_TEST "[find_gcc]" + } + } + + if ![info exists tmpdir] then { + set tmpdir /tmp + } + if { [target_info needs_status_wrapper]!="" && ![info exists gluefile] } { + set gluefile ${tmpdir}/testglue.o; + set result [build_wrapper $gluefile]; + if { $result != "" } { + set gluefile [lindex $result 0]; + set wrap_flags [lindex $result 1]; + } else { + unset gluefile + } + } +} + +proc gcc_target_compile { source dest type options } { + global tmpdir; + global gluefile wrap_flags; + global GCC_UNDER_TEST + global TOOL_OPTIONS + + if { [target_info needs_status_wrapper]!="" && [info exists gluefile] } { + lappend options "libs=${gluefile}" + lappend options "ldflags=$wrap_flags" + } + + if [target_info exists gcc,stack_size] { + lappend options "additional_flags=-DSTACK_SIZE=[target_info gcc,stack_size]" + } + if [target_info exists gcc,no_trampolines] { + lappend options "additional_flags=-DNO_TRAMPOLINES" + } + if [target_info exists gcc,no_label_values] { + lappend options "additional_flags=-DNO_LABEL_VALUES" + } + if [info exists TOOL_OPTIONS] { + lappend options "additional_flags=$TOOL_OPTIONS" + } + if [target_info exists gcc,no_varargs] { + lappend options "additional_flags=-DNO_VARARGS" + } + lappend options "compiler=$GCC_UNDER_TEST" + return [target_compile $source $dest $type $options] +} + +# +# gcc_pass -- utility to record a testcase passed +# + +proc gcc_pass { testcase cflags } { + if { "$cflags" == "" } { + pass "$testcase" + } else { + pass "$testcase, $cflags" + } +} + +# +# gcc_fail -- utility to record a testcase failed +# + +proc gcc_fail { testcase cflags } { + if { "$cflags" == "" } { + fail "$testcase" + } else { + fail "$testcase, $cflags" + } +} + +# +# gcc_finish -- called at the end of every .exp script that calls gcc_init +# +# The purpose of this proc is to hide all quirks of the testing environment +# from the testsuites. It also exists to undo anything that gcc_init did +# (that needs undoing). +# + +proc gcc_finish { } { + # The testing harness apparently requires this. + global errorInfo; + + if [info exists errorInfo] then { + unset errorInfo + } + + # Might as well reset these (keeps our caller from wondering whether + # s/he has to or not). + global prms_id bug_id + set prms_id 0 + set bug_id 0 +} + +proc gcc_exit { } { + global gluefile; + + if [info exists gluefile] { + file_on_build delete $gluefile; + unset gluefile; + } +} + +# If this is an older version of dejagnu (without runtest_file_p), +# provide one and assume the old syntax: foo1.exp bar1.c foo2.exp bar2.c. +# This can be deleted after next dejagnu release. + +if { [info procs runtest_file_p] == "" } then { + proc runtest_file_p { runtests testcase } { + if { $runtests != "" && [regexp "\[.\]\[cC\]" $runtests] } then { + if { [lsearch $runtests [file tail $testcase]] >= 0 } then { + return 1 + } else { + return 0 + } + } + return 1 + } +} + +# Provide a definition of this if missing (delete after next dejagnu release). + +if { [info procs prune_warnings] == "" } then { + proc prune_warnings { text } { + return $text + } +} + +# Utility used by mike-gcc.exp and c-torture.exp. +# Check the compiler(/assembler/linker) output for text indicating that +# the testcase should be marked as "unsupported". +# +# When dealing with a large number of tests, it's difficult to weed out the +# ones that are too big for a particular cpu (eg: 16 bit with a small amount +# of memory). There are various ways to deal with this. Here's one. +# Fortunately, all of the cases where this is likely to happen will be using +# gld so we can tell what the error text will look like. + +proc ${tool}_check_unsupported_p { output } { + if [regexp "(^|\n)\[^\n\]*: region \[^\n\]* is full" $output] { + return "memory full" + } + return "" +} + +# Prune messages from gcc that aren't useful. + +proc prune_gcc_output { text } { + #send_user "Before:$text\n" + regsub -all "(^|\n)\[^\n\]*: In (function|method) \[^\n\]*" $text "" text + regsub -all "(^|\n)\[^\n\]*: At top level:\[^\n\]*" $text "" text + + # It would be nice to avoid passing anything to gcc that would cause it to + # issue these messages (since ignoring them seems like a hack on our part), + # but that's too difficult in the general case. For example, sometimes + # you need to use -B to point gcc at crt0.o, but there are some targets + # that don't have crt0.o. + regsub -all "(^|\n)\[^\n\]*file path prefix \[^\n\]* never used" $text "" text + regsub -all "(^|\n)\[^\n\]*linker input file unused since linking not done" $text "" text + + #send_user "After:$text\n" + + return $text +} + diff --git a/gcc/testsuite/lib/mike-g++.exp b/gcc/testsuite/lib/mike-g++.exp new file mode 100644 index 000000000000..10a1d2bcbb9c --- /dev/null +++ b/gcc/testsuite/lib/mike-g++.exp @@ -0,0 +1,264 @@ +# Copyright (C) 1988, 90, 91, 92, 95, 96, 1997 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# This file was written by Mike Stump <mrs@cygnus.com> + +# Please email any bugs, comments, and/or additions to this file to: +# bug-g++@prep.ai.mit.edu + +# +# mike_cleanup -- remove any files that are created by the testcase +# +proc mike_cleanup { src_code output_file assembly_file } { + remote_file build delete $output_file $assembly_file; +} + +# +# prebase -- sets up a Mike Stump (mrs@cygnus.com) style G++ test +# +proc prebase { } { + global compiler_output + global not_compiler_output + global compiler_result + global not_compiler_result + global program_output + global groups + global run + global actions + global target_regexp + + set compiler_output "^$" + set not_compiler_output ".*Internal compiler error.*" + set compiler_result "" + set not_compiler_result "" + set program_output ".*PASS.*" + set groups {} + set run no + set actions assemble + set target_regexp ".*" +} + +# +# run the test +# +proc postbase { src_code run groups args } { + global verbose + global srcdir + global subdir + global not_compiler_output + global compiler_output + global compiler_result + global not_compiler_result + global program_output + global actions + global target_regexp + global host_triplet + global target_triplet + global tool + global tmpdir + global objdir + global base_dir + + if ![regexp $target_regexp $target_triplet] { + unsupported $subdir/$src_code + return + } + + if { [llength $args] > 0 } { + set comp_options [lindex $args 0]; + } else { + set comp_options "" + } + + set fail_message $subdir/$src_code + set pass_message $subdir/$src_code + + if [info exists GROUP] { + if {[lsearch $groups $GROUP] == -1} { + return + } + } + + if [string match $run yes] { + set actions run + } + + set output_file "$tmpdir/[file tail [file rootname $src_code]]" + set assembly_file "$output_file" + append assembly_file ".S" + + set compile_type "none" + + case $actions { + compile + { + set compile_type "assembly"; + set output_file $assembly_file; + } + assemble + { + set compile_type "object"; + append output_file ".o"; + } + link + { + set compile_type "executable"; + set output_file "$tmpdir/a.out"; + } + run + { + set compile_type "executable"; + set output_file "$tmpdir/a.out"; + set run yes; + } + default + { + set output_file ""; + set compile_type "none"; + } + } + + set src_file "$srcdir/$subdir/$src_code" + set options "" + + if { $comp_options != "" } { + lappend options "additional_flags=$comp_options" + } + + if ![ishost "*-dos-*"] { + lappend options "libs=-lstdc++ -lg++" + } else { + lappend options "libs=-lstdcxx -lgxx" + } + + set comp_output [g++_target_compile $src_file $output_file $compile_type $options] + + set pass no + + # Delete things like "ld.so warning" messages. + set comp_output [prune_warnings $comp_output] + + if [regexp -- $not_compiler_output $comp_output] { + if { $verbose > 1 } { + send_user "\nChecking:\n$not_compiler_output\nto make sure it does not match:\n$comp_output\nbut it does.\n\n" + } else { + send_log "\nCompiler output:\n$comp_output\n\n" + } + fail $fail_message + # The framework doesn't like to see any error remnants, + # so remove them. + uplevel { + if [info exists errorInfo] { + unset errorInfo + } + } + mike_cleanup $src_code $output_file $assembly_file + return + } + + # remove any leftover CRs. + regsub -all -- "\r" $comp_output "" comp_output + + regsub -all "(^|\n)\[^\n\]*linker input file unused since linking not done" $comp_output "" comp_output + regsub -all "(^|\n)\[^\n\]*file path prefix \[^\n\]* never used" $comp_output "" comp_output + + set unsupported_message [${tool}_check_unsupported_p $comp_output] + if { $unsupported_message != "" } { + unsupported "$subdir/$src_code: $unsupported_message" + mike_cleanup $src_code $output_file $assembly_file + return + } + + if { $verbose > 1 } { + send_user "\nChecking:\n$compiler_output\nto see if it matches:\n$comp_output\n" + } else { + send_log "\nCompiler output:\n$comp_output\n\n" + } + if [regexp -- $compiler_output $comp_output] { + if { $verbose > 1 } { + send_user "Yes, it matches.\n\n" + } + set pass yes + if [file exists [file rootname [file tail $src_code]].s] { + set fd [open [file rootname [file tail $src_code]].s r] + set dot_s [read $fd] + close $fd + if { $compiler_result != "" } { + verbose "Checking .s file for $compiler_result" 2 + if [regexp -- $compiler_result $dot_s] { + verbose "Yes, it matches." 2 + } else { + verbose "Nope, doesn't match." 2 + verbose $dot_s 4 + set pass no + } + } + if { $not_compiler_result != "" } { + verbose "Checking .s file for not $not_compiler_result" 2 + if ![regexp -- $not_compiler_result $dot_s] { + verbose "Nope, not found (that's good)." 2 + } else { + verbose "Uh oh, it was found." 2 + verbose $dot_s 4 + set pass no + } + } + } + if [string match $run yes] { + set result [g++_load $output_file] + set status [lindex $result 0]; + set output [lindex $result 1]; + + if { $status == -1 } { + mike_cleanup $src_code $output_file $assembly_file; + return; + } + if { $verbose > 1 } { + send_user "Checking:\n$program_output\nto see if it matches:\n$output\n\n" + } + if ![regexp -- $program_output $output] { + set pass no + if { $verbose > 1 } { + send_user "Nope, does not match.\n\n" + } + } else { + if { $verbose > 1 } { + send_user "Yes, it matches.\n\n" + } + } + } + } else { + if { $verbose > 1 } { + send_user "Nope, does not match.\n\n" + } + } + + if [string match $pass "yes"] { + pass $pass_message + } else { + fail $fail_message + } + + # The framework doesn't like to see any error remnants, + # so remove them. + uplevel { + if [info exists errorInfo] { + unset errorInfo + } + } + + mike_cleanup $src_code $output_file $assembly_file +} diff --git a/gcc/testsuite/lib/mike-gcc.exp b/gcc/testsuite/lib/mike-gcc.exp new file mode 100644 index 000000000000..f9c766a90264 --- /dev/null +++ b/gcc/testsuite/lib/mike-gcc.exp @@ -0,0 +1,262 @@ +# Copyright (C) 1988, 90, 91, 92, 95, 96, 1997 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# This file was derived from mike-g++.exp written by Mike Stump <mrs@cygnus.com> + +# Please email any bugs, comments, and/or additions to this file to: +# bug-gcc@prep.ai.mit.edu + +# +# mike_cleanup -- remove any files that are created by the testcase +# +proc mike_cleanup { src_code output_file assembly_file } { + remote_file build delete $output_file $assembly_file; +} + +# +# prebase -- sets up a Mike Stump (mrs@cygnus.com) style gcc test +# +proc prebase { } { + global compiler_output + global not_compiler_output + global compiler_result + global not_compiler_result + global program_output + global groups + global run + global actions + global target_regexp + + set compiler_output "^$" + set not_compiler_output ".*Internal compiler error.*" + set compiler_result "" + set not_compiler_result "" + set program_output ".*PASS.*" + set groups {} + set run no + set actions assemble + set target_regexp ".*" +} + +# +# run the test +# +proc postbase { src_code run groups args } { + global verbose + global srcdir + global subdir + global not_compiler_output + global compiler_output + global compiler_result + global not_compiler_result + global program_output + global actions + global target_regexp + global host_triplet + global target_triplet + global tool + global tmpdir + global GCC_UNDER_TEST + global GROUP + + if ![info exists GCC_UNDER_TEST] { + error "No compiler specified for testing." + } + + if ![regexp $target_regexp $target_triplet] { + unsupported $subdir/$src_code + return + } + + if { [llength $args] > 0 } { + set comp_options [lindex $args 0]; + } else { + set comp_options "" + } + + set fail_message $subdir/$src_code + set pass_message $subdir/$src_code + + if [info exists GROUP] { + if {[lsearch $groups $GROUP] == -1} { + return + } + } + + if [string match $run yes] { + set actions run + } + + set output_file "$tmpdir/[file tail [file rootname $src_code]]" + set assembly_file "$output_file" + append assembly_file ".S" + + set compile_type "none" + + case $actions { + compile + { + set compile_type "assembly"; + set output_file $assembly_file; + } + assemble + { + set compile_type "object"; + append output_file ".o"; + } + link + { + set compile_type "executable"; + set output_file "$tmpdir/a.out"; + } + run + { + set compile_type "executable"; + set output_file "$tmpdir/a.out"; + set run yes; + } + default + { + set output_file ""; + set compile_type "none"; + } + } + + set src_file "$srcdir/$subdir/$src_code" + set options "" + lappend options "compiler=$GCC_UNDER_TEST" + + if { $comp_options != "" } { + lappend options "additional_flags=$comp_options" + } + + set comp_output [gcc_target_compile $src_file $output_file $compile_type $options]; + + set pass no + + # Delete things like "ld.so warning" messages. + set comp_output [prune_warnings $comp_output] + + if [regexp -- $not_compiler_output $comp_output] { + if { $verbose > 1 } { + send_user "\nChecking:\n$not_compiler_output\nto make sure it does not match:\n$comp_output\nbut it does.\n\n" + } else { + send_log "\nCompiler output:\n$comp_output\n\n" + } + fail $fail_message + # The framework doesn't like to see any error remnants, + # so remove them. + uplevel { + if [info exists errorInfo] { + unset errorInfo + } + } + mike_cleanup $src_code $output_file $assembly_file + return + } + + # remove any leftover CRs. + regsub -all -- "\r" $comp_output "" comp_output + + regsub -all "(^|\n)\[^\n\]*linker input file unused since linking not done" $comp_output "" comp_output + regsub -all "(^|\n)\[^\n\]*file path prefix \[^\n\]* never used" $comp_output "" comp_output + + set unsupported_message [${tool}_check_unsupported_p $comp_output] + if { $unsupported_message != "" } { + unsupported "$subdir/$src_code: $unsupported_message" + mike_cleanup $src_code $output_file $assembly_file + return + } + + if { $verbose > 1 } { + send_user "\nChecking:\n$compiler_output\nto see if it matches:\n$comp_output\n" + } else { + send_log "\nCompiler output:\n$comp_output\n\n" + } + if [regexp -- $compiler_output $comp_output] { + if { $verbose > 1 } { + send_user "Yes, it matches.\n\n" + } + set pass yes + if [file exists [file rootname [file tail $src_code]].s] { + set fd [open [file rootname [file tail $src_code]].s r] + set dot_s [read $fd] + close $fd + if { $compiler_result != "" } { + verbose "Checking .s file for $compiler_result" 2 + if [regexp -- $compiler_result $dot_s] { + verbose "Yes, it matches." 2 + } else { + verbose "Nope, doesn't match." 2 + verbose $dot_s 4 + set pass no + } + } + if { $not_compiler_result != "" } { + verbose "Checking .s file for not $not_compiler_result" 2 + if ![regexp -- $not_compiler_result $dot_s] { + verbose "Nope, not found (that's good)." 2 + } else { + verbose "Uh oh, it was found." 2 + verbose $dot_s 4 + set pass no + } + } + } + if [string match $run yes] { + set result [gcc_load $output_file] + set status [lindex $result 0]; + set output [lindex $result 1]; + if { $status == -1 } { + mike_cleanup $src_code $output_file $assembly_file; + return; + } + if { $verbose > 1 } { + send_user "Checking:\n$program_output\nto see if it matches:\n$output\n\n" + } + if ![regexp -- $program_output $output] { + set pass no + if { $verbose > 1 } { + send_user "Nope, does not match.\n\n" + } + } else { + if { $verbose > 1 } { + send_user "Yes, it matches.\n\n" + } + } + } + } else { + if { $verbose > 1 } { + send_user "Nope, does not match.\n\n" + } + } + + if [string match $pass "yes"] { + pass $pass_message + } else { + fail $fail_message + } + + # The framework doesn't like to see any error remnants, + # so remove them. + uplevel { + if [info exists errorInfo] { + unset errorInfo + } + } + + mike_cleanup $src_code $output_file $assembly_file +} diff --git a/gcc/testsuite/lib/old-dejagnu.exp b/gcc/testsuite/lib/old-dejagnu.exp new file mode 100644 index 000000000000..cd7f46b4f176 --- /dev/null +++ b/gcc/testsuite/lib/old-dejagnu.exp @@ -0,0 +1,536 @@ +# Copyright (C) 1988, 90, 91, 92, 1994, 1996, 1997 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# Please email any bugs, comments, and/or additions to this file to: +# bug-g++@prep.ai.mit.edu + +# This file was written by Rob Savoye. (rob@cygnus.com) +# With modifications by Mike Stump <mrs@cygnus.com>. + +# These tests come from the original DejaGnu test suite +# developed at Cygnus Support. If this isn't deja gnu, I +# don't know what is. +# +# Language independence is achieved by: +# +# 1) Using global $tool to indicate the language (eg: gcc, g++, etc.). +# This should only be used to look up other objects. We don't want to +# have to add code for each new language that is supported. If this is +# done right, no code needs to be added here for each new language. +# +# 2) Passing compiler options in as arguments. +# +# We require a bit of smarts in our caller to isolate us from the vagaries of +# each language. See old-deja.exp for the g++ example. + +# Useful subroutines. + +# process-option -- Look for and process a test harness option in the testcase. +# +# PROG is the pathname of the testcase. +# OPTION is the string to look for. +# MESSAGE is what to print if $verbose > 1. +# FLAG_NAME is one of ERROR, WARNING, etc. +# PATTERN is ??? + +proc process-option { prog option message flag_name pattern } { + global verbose + + set result "" + + set tmp [grep $prog "$option.*" line] + if ![string match "" $tmp] then { + foreach i $tmp { + #send_user "Found: $i\n" + set xfail_test 0 + set triplet_match 0 + regsub "\\*/$" [string trim $i] "" i + if [regexp "LINE +\[0-9\]+" $i xopt] then { + regsub "LINE" $xopt "" xopt; + regsub "LINE +\[0-9\]+" $i "" i + set i [lreplace $i 0 0 [expr "${xopt}-0"]]; + } + if [regexp "XFAIL( +\[^ \]+-\[^ \]+-\[^ \]+)*" $i xopt] then { + set xfail_test 1 + regsub "XFAIL( +\[^ \]+-\[^ \]+-\[^ \]+)*" $i "" i + regsub "XFAIL" $xopt "" xopt + if ![string match "" [string trim $xopt]] then { + foreach triplet $xopt { + if [istarget $triplet] { + set triplet_match 1; + break; + } + } + } else { + set triplet_match 1 + } + } + set compos [expr [llength $option] + 1] ;# Start of comment, if any + if { $xfail_test && $triplet_match } then { + lappend result [list [lindex $i 0] "X$flag_name" [lrange $i $compos end] "$pattern"] + } else { + lappend result [list [lindex $i 0] "$flag_name" [lrange $i $compos end] "$pattern"] + } + if { $verbose > 1 } then { + if [string match "" [lrange $i $compos end]] then { + send_user "Found $message for line [lindex $i 0]\n" + } else { + send_user "Found $message \"[lrange $i $compos end]\" for line [lindex $i 0]\n" + } + } + } + } + + #send_user "Returning: $result\n" + return $result +} + +# old-dejagnu-init -- set up some statistics collectors +# +# There currently isn't much to do, but always calling it allows us to add +# enhancements without having to update our callers. +# It must be run before calling `old-dejagnu'. + +proc old-dejagnu-init { } { +} + +# old-dejagnu-stat -- print the stats of this run +# +# ??? This is deprecated, and can be removed. + +proc old-dejagnu-stat { } { +} + +# old-dejagnu -- runs an old style DejaGnu test. +# +# Returns 0 if successful, 1 if their were any errors. +# PROG is the full path name of the file to compile. +# +# CFLAGS_VAR is the name of the global variable containing compiler flags. +# We ignore this now. +# +# CFLAGS is the options to always pass to the compiler. +# This is also ignored. +# +# DEFAULT_CFLAGS are additional options if the testcase has none. +# +# LIBS_VAR is the name of the global variable containing libraries (-lxxx's). +# This is also ignored. +# +# LIBS is any additional libraries to link with. This *cannot* be specified +# with the compiler flags because otherwise gcc will issue, for example, a +# "-lg++ argument not used since linking not done" warning which will screw up +# the test for excess errors. We could ignore such messages instead. +# +# Think of "cflags" here as "compiler flags", not "C compiler flags". + +proc old-dejagnu { compiler prog cflagsx default_cflags libs } { + global verbose + global tool + global subdir ;# eg: g++.old-dejagnu + global host_triplet + global tmpdir + + set runflag 1 + set execbug_flag 0 + set excessbug_flag 0 + set pattern "" + set text "\[- A-Za-z0-9\.\;\"\_\:\'\`\(\)\!\#\=\+\?\&\*]*" + + if ![info exists tmpdir] then { + set tmpdir "/tmp" + } + +# look for keywords that change the compiler options +# +# There are two types of test, negative and affirmative. Negative +# tests have the keyword of "ERROR - " or "WARNING - " on the line +# expected to produce an error. This is followed by the pattern. If +# the desired error or warning message appears, then the test passes. +# +# Affirmative test can have the following keywords "gets bogus error", +# "causes invalid C code", "invalid assembly code", "causes abort", +# "causes segfault", "causes linker error", "execution test fails". If +# the pattern after the keyword matches, then the test is a failure. +# +# One can specify particular targets for expected failures of the above +# keywords by putting "XFAIL target-triplet" after the keyword. +# +# Example: +# +# void f () +#{ +# int i[2], j; +# A a (int (i[1]), j); // gets bogus error - late parsing XFAIL *-*-* +# A b (int (i[1]), int j); // function +# a.k = 0; // gets bogus error - late parsing XFAIL *-*-* +# b (i, j); +#} +# +# Note also, that one can add a comment with the keyword ("late parsing" +# in the above example). +# +# If any of the tests contain the special pattern "FIXME -" that test is +# not run because it will produce incorrect output. +# +# Testcases can supply special options to the compiler with a line containing +# "Special.*Options: ...", where ".*" can be anything (eg: g++) and "..." are +# the additional options to pass to the compiler. Nothing else may appear +# after the options. IE: for a C testcase +# /* Special Options: -fomit-frame-pointer */ /* Oops! */ +# is wrong, +# /* Special Options: -fomit-frame-pointer */ +# is right. If no such Special Options are found, $default_cflags is used. +# FIXME: Can there be multiple lines of these? +# +# Other keywords: "Build don't link:", "Build don't run:". + + # FIXME: none of the current test cases use this, so It's not implemented + # set tmp [grep $prog "remove -sanitize"] + + set name "[file tail [file dirname $prog]]/[file tail $prog]" + + set tmp [grep $prog "FIXME -.*"] + if ![string match "" $tmp] then { + foreach i $tmp { + warning "[file tail [file dirname $prog]]/[file tail $prog] [lrange $i 2 end]" + } + return 1 + } + + set tmp [lindex [grep $prog "Special.*Options:.*"] 0] + set cflags "" + + regsub -all "\n\[^\n\]+(\n|$)" $tmp "\n" tmp + set tmp [string trim $tmp] + if ![string match "" $tmp] then { + regsub "^.*Special.*Options:" $tmp "" tmp + lappend cflags "additional_flags=$tmp" + verbose "Adding special options $tmp" 2 + } else { + lappend cflags "additional_flags=$default_cflags" + } + + if { $cflagsx != "" } { + lappend cflags "additional_flags=$cflagsx" + } + + lappend cflags "compiler=$compiler" + + set output "$tmpdir/a.out" + set compile_type "executable" + + set tmp [lindex [grep $prog "Build don.t link:"] 0] + if ![string match "" $tmp] then { + set compile_type "object" + set runflag 0 + set output "$tmpdir/[file tail [file rootname $prog]].o" + verbose "Will compile $prog to object" 3 + } + + set tmp [lindex [grep $prog "Build don.t run:"] 0] + if ![string match "" $tmp] then { + set runflag 0 + verbose "Will compile $prog to binary" 3 + } + + set tmp [grep $prog "Skip if (|not )feature:.*"]; + if { $tmp != "" } { + foreach line $tmp { + if [regexp "Skip if not feature" $line] { + set not 1; + } else { + set not 0; + } + regsub "^.*Skip if (|not )feature:\[ \]*" "$line" "" i; + set is_set 0; + foreach j $i { + if [target_info exists $j] { + set is_set 1; + break; + } + } + if { $is_set != $not } { + untested "$name: Test skipped: ${line}($j set)" + return; + } + } + } + + set tmp [grep $prog "Skip if (|not )target:.*"]; + if { $tmp != "" } { + foreach line $tmp { + if [regexp "Skip if not target:" $line] { + set not 1; + } else { + set not 0; + } + regsub "^.*Skip if (|not )target:\[ \]*" "$line" "" i; + set ist 0; + foreach j $i { + if [istarget $j] { + set ist 1; + break; + } + } + if { $ist != $not } { + untested "$name: Test skipped: ${line}" + return; + } + } + } + + if ![isnative] { + set tmp [lindex [grep $prog "Skip if not native"] 0]; + if { $tmp != "" } { + untested "$name: Test skipped because not native"; + return; + } + } else { + set tmp [lindex [grep $prog "Skip if native"] 0]; + if { $tmp != "" } { + untested "$name: Test skipped because native"; + return; + } + } + + lappend cflags "libs=$libs" + +# +# Look for the other keywords and extract the error messages. +# `message' contains all the things we found. +# ??? We'd like to use lappend below instead of concat, but that doesn't +# work (adds an extra level of nesting to $tmp). +# + + set message "" + + set tmp [process-option $prog "ERROR - " "an error message" ERROR "$text error$text"] + if ![string match "" $tmp] then { + set runflag 0 + set message [concat $message $tmp] + } + + set tmp [process-option $prog "WARNING - " "a warning message" WARNING "warning"] + if ![string match "" $tmp] then { + set runflag 0 + set message [concat $message $tmp] + } + + set tmp [process-option $prog "gets bogus error" "a bogus error" BOGUS $text] + if ![string match "" $tmp] then { + set message [concat $message $tmp] + } + + set tmp [process-option $prog "causes invalid C code" "a bad C translation" BADC $text] + if ![string match "" $tmp] then { + set message [concat $message $tmp] + } + + set tmp [process-option $prog "invalid assembly code" "some invalid assembly code" BADASM $text] + if ![string match "" $tmp] then { + set message [concat $message $tmp] + } + + set tmp [process-option $prog "causes abort" "an abort cause" ABORT $text] + if ![string match "" $tmp] then { + set message [concat $message $tmp] + } + + set tmp [process-option $prog "causes segfault" "a segfault cause" SEGFAULT $text] + if ![string match "" $tmp] then { + set message [concat $message $tmp] + } + + set tmp [process-option $prog "causes linker error" "a linker error" LINKER $text] + if ![string match "" $tmp] then { + set message [concat $message $tmp] + } + + set tmp [process-option $prog "execution test fails" "an execution failure" EXEC $text] + if ![string match "" $tmp] then { + set execbug_flag 1 + set message [concat $message $tmp] + } + + set tmp [process-option $prog "excess errors test fails" "an excess error failure" EXCESSO $text] + if ![string match "" $tmp] then { + set excessbug_flag 1 + set message [concat $message $tmp] + warning "please use excess errors test - XFAIL *-*-* in $prog instead" + } + + set tmp [process-option $prog "excess errors test - " "an excess error failure" EXCESS $text] + if ![string match "" $tmp] then { + set message [concat $message $tmp] + } + +# +# run the compiler and analyze the results +# + + # Since we don't check return status of the compiler, make sure + # we can't run a.out when the compilation fails. + remote_file build delete $output + set comp_output [${tool}_target_compile $prog $output $compile_type $cflags] + + # Delete things like "ld.so: warning" messages. + set comp_output [prune_warnings $comp_output] + + if [string match "*Internal compiler error: program*got fatal signal 6" $comp_output] then { + fail "$name Got Signal 6" + remote_file build delete $output + return 1 + } + if [string match "*Internal compiler error: program*got fatal signal 11" $comp_output] then { + fail "$name Got Signal 11" + remote_file build delete $output + return 1 + } + + #send_user "\nold_dejagnu.exp: comp_output1 = :$comp_output:\n\n" + #send_user "\nold_dejagnu.exp: message = :$message:\n\n" + #send_user "\nold_dejagnu.exp: message length = [llength $message]\n\n" + + foreach i $message { + + #send_user "\nold_dejagnu.exp: i = :$i:\n\n" + + # Remove all error messages for the line [lindex $i 0] + # in the source file. If we find any, success! + set line [lindex $i 0] + set pattern [lindex $i 2] + if [regsub -all "(^|\n)\[^\n\]+:$line:\[^\n\]*" $comp_output "" comp_output] then { + set comp_output [string trimleft $comp_output] + set ok pass + set uhoh fail + } else { + set ok fail + set uhoh pass + } + + case [lindex $i 1] { + "ERROR" { + $ok "$name $pattern (test for errors, line $line)" + } + "XERROR" { + x$ok "$name $pattern (test for errors, line $line)" + } + "WARNING" { + $ok "$name $pattern (test for warnings, line $line)" + } + "XWARNING" { + x$ok "$name $pattern (test for warnings, line $line)" + } + "BOGUS" { + $uhoh "$name $pattern (test for bogus messages, line $line)" + } + "XBOGUS" { + x$uhoh "$name $pattern (test for bogus messages, line $line)" + } + "ABORT" { + $uhoh "$name $pattern (test for compiler aborts, line $line)" + } + "XABORT" { + x$uhoh "$name $pattern (test for compiler aborts, line $line)" + } + "SEGFAULT" { + $uhoh "$name $pattern (test for compiler segfaults, line $line)" + } + "XSEGFAULT" { + x$uhoh "$name $pattern (test for compiler segfaults, line $line)" + } + "LINKER" { + $uhoh "$name $pattern (test for linker problems, line $line)" + } + "XLINKER" { + x$uhoh "$name $pattern (test for linker problems, line $line)" + } + "BADC" { + $uhoh "$name $pattern (test for Bad C code, line $line)" + } + "XBADC" { + x$uhoh "$name $pattern (test for Bad C code, line $line)" + } + "BADASM" { + $uhoh "$name $pattern (test for bad assembler, line $line)" + } + "XBADASM" { + x$uhoh "$name $pattern (test for bad assembler, line $line)" + } + "XEXEC" { } + "XEXCESS" { + set excessbug_flag 1 + } + } + #send_user "\nold_dejagnu.exp: comp_output2= :$comp_output:\n\n" + } + #send_user "\nold_dejagnu.exp: comp_output3 = :$comp_output:\n\n" + + #look to see if this is all thats left, if so, all messages have been handled + #send_user "comp_output: $comp_output\n" + regsub -all "(^|\n)\[^\n\]*: In (function|method) \[^\n\]*" $comp_output "" comp_output + regsub -all "(^|\n)\[^\n\]*: At top level:\[^\n\]*" $comp_output "" comp_output + regsub -all "(^|\n)\[^\n\]*file path prefix \[^\n\]* never used" $comp_output "" comp_output + regsub -all "(^|\n)\[^\n\]*linker input file unused since linking not done" $comp_output "" comp_output + + set unsupported_message [${tool}_check_unsupported_p $comp_output] + if { $unsupported_message != "" } { + unsupported "$name: $unsupported_message" + return + } + + # someone forgot to delete the extra lines + regsub -all "\n+" $comp_output "\n" comp_output + regsub "^\n+" $comp_output "" comp_output + #send_user "comp_output: $comp_output\n" + + # excess errors + if $excessbug_flag then { + setup_xfail "*-*-*" + } + if ![string match "" $comp_output] then { + fail "$name (test for excess errors)" + send_log "$comp_output\n" + } else { + pass "$name (test for excess errors)" + } + + # run the executable image + if $runflag then { + set executable $output + if ![file exists $executable] then { + # Since we couldn't run it, we consider it an expected failure, + # so that test cases don't appear to disappear, and reappear. + setup_xfail "*-*-*" + fail "$name $pattern Execution test" + } else { + set status -1 + set result [eval [format "%s_load %s" $tool $executable]] + set status [lindex $result 0]; + set output [lindex $result 1]; + remote_file build delete $executable; + if { $execbug_flag || $excessbug_flag } then { + setup_xfail "*-*-*" + } + $status "$name $pattern Execution test" + } + } + + verbose "deleting $output" + remote_file build delete $output + return 0 +} -- GitLab