#!/bin/ksh ############################################################################### # # C++ source for the C++ Language System, Release 3.0. This product # is a new release of the original cfront developed in the computer # science research center of AT&T Bell Laboratories. # # Copyright (c) 1993 UNIX System Laboratories, Inc. # Copyright (c) 1991, 1992 AT&T and UNIX System Laboratories, Inc. # Copyright (c) 1984, 1989, 1990 AT&T. All Rights Reserved. # # THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE of AT&T and UNIX System # # Laboratories, Inc. The copyright notice above does not evidence # any actual or intended publication of such source code. # ############################################################################### PATH=/bin:/usr/bin:/usr/ucb pn="ts" test_CC=${test_CC-"`pwd`/../../CC"} if [ ! -x "$test_CC" ] then print 'test_CC not executable' exit 1 fi NMFLAGS="-p" # use empty string for UTS systems, -B for mips nmap=defmap rep=ptrepository repm=$rep/$nmap sep='===============' TMPDIR=${TMPDIR-/usr/tmp} rm -rf $TMPDIR/$pn.td*.* td=$TMPDIR/$pn.td.$$ td2=$TMPDIR/$pn.td2.$$ mkdir $td chmod g-s $td mkdir $td2 chmod g-s $td2 cd $td t1=$td/t1.$$.c t1o=t1o.$$.o t2=$td/t2.$$ t2x=$td/t2x.$$ t3=$td/t3.$$.c t4=$td/t4.$$.c t5=$td/t5.c t5x=$td/t5.x t6=$td/t6.$$.c t7=$td/t7.$$.c t8=t8.$$.c t8h=t8.h t8c=t8.c t8o=t8.$$.o t9=$td/t9.$$.c t9h=$td/t9.h t9c=$td/t9.c t10=$td/t10.$$.c t10h=$td/t10.h t10c=$td/t10.c t10h2=$td/t10_2.h t10h3=$td/t10_3.h t11=$td/t11.$$.c t11h=$td/t11.h t11c=$td/t11.c t11_2=$td/t11_2.c mkdir $td/xxx mkdir $td/xxx/xxx mkdir $td/yyy t12=$td/xxx/t12.$$.c t12h=$td/xxx/t12.h t12c=$td/xxx/t12.c t12_2=$td/xxx/t12_2.c t12_3=$td/yyy/t12_3.h t13=$td/t13.$$.c t13h=$td/t13.h t13c=$td/t13.c t13o=$td/t13.$$.o t14=$td/t14.c t14h1=$td/t14_1.h t14h2=$td/t14_2.h t14c1=$td/t14_1.c t14c2=$td/t14_2.c t15=$td/t15.c t15h=$td/t15.h t16=$td/t16.c t16h=$td/t16.h t17=$td/t17.c t17h=$td/t17x.h t17c=$td/t17xx.c t18=$td/t18.c t18h=$td/t18_1.h t18c=$td/t18_1.c t18h2=$td/t18_2.h t18c2=$td/t18_2.c t19=$td/t19app..c t19a=$td/t19.a t19h=$td/t19.h t19c=$td/t19.c t19a1=$td/t19a1.c t19a2=$td/t19a2.c t19o1=$td/t19a1.o t19o2=$td/t19a2.o t20c=$td/t20.c t20o=$td/t20.o t21=$td/t21.c t21h=$td/t21_1.h t21c=$td/t21_1.c t22=$td/t22.c t22h=$td/t22_1.h t22c=$td/t22_1.c t23=$td/t23.c t23h=$td/19t23_1.h t23c=$td/19t23_1.c t24=$td/t24.c t25s1=$td/t25s1.c t25s2=$td/t25s2.c t25s3=$td/t25s3.c t25s4=$td/t25s4.c t25s1o=$td/t25s1.o t25s2o=$td/t25s2.o t25s3o=$td/t25s3.o t25s4o=$td/t25s4.o t26=$td/t26.$$.c t26h=$td/t26.h t27=$td/t27.$$.c t27h=$td/t27.h t27c=$td/t27.c t28=$td/t28.$$.c t28h=$td/t28.h t28c=$td/t28.c t29=$td/t29.c t30=$td/t30.c t31=$td/t31.c t32=$td/t32.c t33=$td/t33.c t34=$td/t34.c t35=$td/t35.c t35h=$td/t35_1.h t35c=$td/t35_1.c t36=$td/t36.c t37=$td/t37.c t37o=$td/t37.o t38=$td/t38.c t39=$td/t39.c t40=$td/t40.c t40h=$td/t40_1.h t40c=$td/t40_1.c t41=$td/t41.c t42_1=$td/t42_1.c t42_2=$td/t42_2.c t42_3=$td/t42_3.c t42_4=$td/t42_4.c t42_5=$td/t42_5.c t42_6=$td/t42_6.c t43=$td/t43.c t44=$td/t44.c t45=$td/t45.c t451=$td/t45_1.h t452=$td/t45_1.c t453=$td/t45_2.c t453o=$td/t45_2.o t46a=$td/t46a.c t46b=$td/t46b.c t461=$td/t46_1.h t462=$td/t46_1.c t47=$td/t47.c t48=$td/t48.c t491=$td/t491.c t492=$td/t492.c t491o=$td/t491.o t492o=$td/t492.o t50=$td/t50.c t51=$td/t51.c t51h=$td/51.h t51hx=$td/xxx/51.h function cleanup { /bin/rm -rf $rep $t1o } function printmap { sed '/@tab/,/@etab/d' $1 | awk ' $1 == "@dec" { tn = $2 } $1 != "@dec" { printf "%s %s\n", tn, $1 } ' | sort } function printmap2 { awk ' BEGIN { intab = 0 } $1 == "@tab" { intab = 1 tn = 0; next } $1 == "@etab" { intab = 0 next } intab == 1 { tab[tn++] = $0 next } { if ($1 == "@dec") { printf "\n" flag = 1 flag2 = 0 } else { flag = 0 } for (i = 1; i <= NF; i++) { if ($i == "\\") { flag2 = 1 continue } if (i > 1 && substr($i, 1, 1) == "@") s = tab[substr($i, 2) + 0] else s = $i if (i > 1) printf " %s", s else printf "%s", s # if (i > 2 && !flag || i > 1 && flag) # printf " \\\n" } printf "\n" } ' $repm } cat <$t1 template struct A {}; A a; struct B {}; EOF cat <$t3 struct A {}; enum E {}; int x; EOF cat <$t4 template struct A { T x; }; struct B; A a; EOF cat <$t5 struct A {}; union B {}; class C {}; enum D {}; typedef int E; typedef C F; struct {} a; union {} b; typedef struct {} I; void J() {} struct K {void f();}; void K::f() {} template void operator!(T); template void operator&&(T, int) {} template struct L { void f(); static int x; }; template void L::f() {} template int L::x = 37; struct M {} c; template class N; template class N; template class N { int x; }; struct O; template void P(T); template struct G {}; struct G {}; struct Q { struct R {}; typedef int T; enum U {}; }; void f() { struct A2 {}; union B2 {}; class C2 {}; enum D2 {}; typedef int E2; typedef C F2; struct {} a2; union {} b2; typedef struct {} I2; struct K2 {void f() {}}; struct M2 {} c; struct O2; struct Q2 { struct R2 {}; typedef int T2; enum U2 {}; }; } EOF cat <$t5x A "t5.c" B "t5.c" C "t5.c" D "t5.c" G "t5.c" G__pt__2_i "t5.c" I "t5.c" K "t5.c" L "t5.c" M "t5.c" N "t5.c" P "t5.c" Q "t5.c" __nt "t5.c" EOF cat <$t6 template void f(T); template void f(T); template void f(T); template void operator!(T); template void operator!(T); template void operator!(T); template void f(T); template void f(T); template void f(T); template void operator!(T); template void operator!(T); template void operator!(T); EOF cat <$t7 main() {} EOF cat <$t8 #include "t8.h" union Lurch {}; main() { A a; A b; a.f(); b.f(); a.g(); b.g(); f(37, 12.34); f("xxx", 'x'); return 0; } EOF cat <$t8h #ifndef T8_INCL #define T8_INCL template struct A { void f(); void g(); }; template void f(T, U); #endif EOF cat <$t8c template void A::f() { static int x = 0; if (x++ < 5) g(); } template void A::g() { static int x = 0; if (x++ < 5) f(); } template void f(T t, U u) { static int x = 0; if (x++ < 5) f(t, u); } EOF cat <$t9h template struct A { void f(); void g(); }; EOF cat <$t9c template void A::f() {} EOF cat <$t9 #include "t9.h" main() { A a; a.f(); a.g(); } EOF cat <$t10h template struct A { void f(); }; template void ff(T, U, V, W, X); struct AA {}; EOF cat <$t10c template void A::f() {} template void ff(T,U,V,W,X) {} EOF cat <$t10h2 enum BB {bb = 47}; EOF cat <$t10h3 union C {}; EOF cat <$t10 #include "t10.h" #include "t10_2.h" #include "t10_3.h" A a; main() { AA a; BB b; AA* ap; BB& br = b; C c; ff(a, b, ap, br, c); } EOF cat <$t11h template struct A { void f(); }; EOF cat <$t11c template void A::f() {} EOF cat <$t11 #include "t11.h" struct B {}; main() { extern void g(); A a; a.f(); g(); } EOF cat <$t11_2 #include "t11.h" struct B {}; void g() { A a; } EOF cat <$t12 #include "t12.h" main() { AA a; AA b; a.f(); b.f(); ff(37, 12.34L); ff("xxx", (short)'x'); } EOF cat <$t12h template struct AA { void f(); int zzz[N]; }; template void ff(T, U); #ifdef XXX #include "t12_3.h" #endif #ifdef ZZZ const int NN = 83; #endif EOF cat <$t12_3 const int NN = 97; EOF cat <$t12c template void AA::f() {int x[NN];} template void ff(T, U) {} EOF cat <$t13 #include "t13.h" main() { A a; A b; a.f(); b.f(); f(37, 12.34); f("xxx", 'x'); } EOF cat <$t13h template struct A { void f(); }; template void f(T, U); EOF cat <$t13c template void A::f() {} template void f(T, U) {} EOF cat <$t14h1 template void f(char*, T); EOF cat <$t14h2 template void f(T); EOF cat <$t14c1 template void f(char*, T) {} EOF cat <$t14c2 template void f(T) {} EOF cat <$t14 #include "t14_1.h" #include "t14_2.h" main() { f("foo", 37); } EOF cat <$t15 #include "t15.h" main() {} EOF cat <$t16 #include "t16.h" main() {} EOF cat <$t17 #include "t17x.h" main() { A a; a.f(); } EOF cat <$t17h template struct A { void f(); }; EOF cat <$t17c template void A::f() {} EOF cat <$t18 #include "t18_1.h" main() { A a; a.f(); } EOF cat <$t18h template struct A { void f(); }; EOF cat <$t18c #include "t18_2.h" template void A::f() { B b; b.f(); } EOF cat <$t18h2 template struct B { void f(); }; EOF cat <$t18c2 template void B::f() {} EOF cat <$t19 main() { extern void f(); f(); } EOF cat <$t19a1 #include "t19.h" void g() { A a; a.f(); } EOF cat <$t19a2 void f() { extern void g(); g(); }; EOF cat <$t19h template struct A { void f(); }; EOF cat <$t19c template void A::f() { } EOF cat <$t20c static int x111 = 35; static void f222() {} EOF cat <$t21 #include "t21_1.h" char c; A<&c> a1; void f(int) {} B<&f> a2; C a3; ZZ z; E<&z, D<-27> > a4; main() { a1.f(); a2.f(); a3.f(); a4.f(); } void Z::f() {} EOF cat <$t21h template struct A {void f();}; typedef void (*fp)(int); template struct B {void f();}; struct Z { void f(); }; typedef void (Z::*pmf)(); template struct C {void f();}; template struct D {void f();}; struct ZZ {}; template struct E {void f();}; EOF cat <$t21c template void A

::f() {} template void B

::f() {} template void C

::f() {} template void D::f() {} template void E::f() {} EOF cat <$t22 #include "t22_1.h" struct B; A x; main() { x.f(); } EOF cat <$t22h template struct A { void f(); }; EOF cat <$t22c template void A::f() {} EOF cat <$t23 #include #include "19t23_1.h" A a; main() { cout << a << "\n"; return 0; } EOF cat <$t23h template struct A { operator int(); }; EOF cat <$t23c #include template A::operator int() { cout << "foo" << "\n"; return 97; } EOF cat <$t24 template struct A { void f(); }; template void A::f() { } struct B {}; main() { A a; a.f(); } EOF cat <$t25s1 #include "t1.h" int A::f() { return 47; } EOF cat <$t25s2 #include "t2.h" int B::g() { return 47; } EOF cat <$t25s3 #include "t1.h" #include "t2.h" #include "t3.h" extern "C" void exit(int); main() { A a; B b; if (a.f() != 47) exit(1); b.f(); if (b.g() != 47) exit(2); f(1234L); if (f(83) != 57) exit(3); exit(0); } EOF cat <$t25s4 #include "t3.h" int f(int t) { return 57; } EOF cat <$td/t1.h template struct A { int f(); }; EOF cat <$td/t1.c template int A::f() {return 37;} EOF cat <$td/t2.h template struct B { int f(); int g(); }; EOF cat <$td/t2.c template int B::f() { return 37; } template int B::g() { return 37; } EOF cat <$td/t3.h template int f(T); EOF cat <$td/t3.c template int f(T t) { return 83; } EOF cat <$t26 #include "t26.h" main() { A a; A b; a.f(); b.f(); a.g(); b.g(); f(37, 12.34); f("xxx", 'x'); return 0; } EOF cat <$t26h template struct A { void f(); void g(); }; template void f(T, U); template void A::f() {} template void A::g() {} template void f(T, U) {} EOF cat <$t27 #include "t27.h" #ifdef OVER int A::x = 47; #endif main() { A a; if (a.f() != VAL) return 1; return 0; } EOF cat <$t27h template struct A { int f(); static int x; }; EOF cat <$t27c template int A::x = 37; template int A::f() { return x; } EOF cat <$t28 #include "t28.h" main() { A a; int i = a.x; if (i != VAL) return 1; return 0; } EOF cat <$t28h template struct A { static int x; }; EOF cat <$t28c #ifdef INIT template int A::x = 37; #endif EOF cat <$t29 template struct A { void f(); }; template void A::f() { } template struct B { void f(); }; template void B::f() { } template struct C { void f(); }; template void C::f() { } main() { A a; B<59L> b; C<'x'> c; a.f(); b.f(); c.f(); } EOF cat <$t30 struct A { struct B { virtual void f(); }; virtual void f(); }; main() { A a; A* ap = &a; A::B ab; A::B* abp = &ab; ap->f(); abp->f(); } EOF cat <$t31 extern "C" void strcpy(char*, char*); extern f(int); main() { char buf[10]; strcpy(buf, ""); f(37); } EOF cat <$t32 template struct A { #ifdef INLINE inline void f(); #else void f(); #endif }; #ifdef INLINE template inline void A::f() #else template void A::f() #endif { } main() { A a; a.f(); } EOF cat <$t33 template struct A { void f(); }; template void A::f() {} #include main() { complex c; A a; c = 12.34; c = c * c; a.f(); } EOF cat <$t34 template struct A { static int x; void f(); }; template void A::f() {} template int A::x; main() { A a; a.f(); } EOF cat <$t35h template struct A { void f(); void g(); }; EOF cat <$t35c template void A::f() { #ifdef BAD zzz(); #endif } template void A::g() { #ifndef BAD zzz(); #endif } EOF cat <$t35 #include "t35_1.h" main() { A a; a.f(); } EOF cat <$t36 template struct A { virtual void f(); void g(); }; template void A::f() { g(); } template void A::g() { } main() { A* p; A a; p = &a; p->f(); } EOF cat <$t37 template struct A { virtual void f1(); void f2(); }; template void A::f1() { } template void A::f2() { } main() { A a; A* p = &a; p->f1(); p->f2(); } void A::f1() { } EOF cat <$t38 template struct A { void f(); }; template void A::f() EOF cat <$t39 template void f(T); template void f(T) { } main() { f(37); f(37L); } EOF cat <$t40 #include "t40_1.h" main() { f(37); f(37L); } EOF cat <$t40h template void f(T); EOF cat <$t40c extern int x; template void f(T) { x++; } EOF cat <$t41 template struct A { void f1(); void f2(); void g(); }; template void A::f1() { g(); } template void A::g() { } main() { A a; a.f1(); a.f2(); } EOF cat <$t42_1 template struct A { void g(); }; template void A::g() {} int i; main() { A<&i> a; a.g(); } EOF cat <$t42_2 template struct A { void g(); }; template void A::g() {} struct B { static int i; }; int B::i = 37; main() { A<&B::i> a; a.g(); } EOF cat <$t42_3 typedef void (*fp)(int); template struct A { void g(); }; template void A

::g() {} void f(int) {} main() { A<&f> a; a.g(); } EOF cat <$t42_4 typedef void (*fp)(int); template struct A { void g(); }; template void A

::g() {} struct B { static void f(int); }; void B::f(int) {} main() { A<&B::f> a; a.g(); } EOF cat <$t42_5 struct B { void f(int); }; void B::f(int) {} typedef void (B::*pmf)(int); template struct A { void g(); }; template void A::g() {} B b; main() { A<&B::f> a; a.g(); } EOF cat <$t42_6 struct B { int i; }; typedef int B::*pmf; template struct A { void g(); }; template void A::g() {} B b; main() { A<&B::i> a; a.g(); } EOF cat <$t43 template void f(T, U); template void f(T, U) {} struct A {}; struct B { void f(); }; void B::f() {} main() { A a; f(a, B::f); } EOF cat <$t44 #include "t8.H" union Lurch {}; main() { A a; A b; a.f(); b.f(); a.g(); b.g(); f(37, 12.34); f("xxx", 'x'); return 0; } EOF cat <$t45 #include "t45_1.h" main() { A a; A* p = &a; p->f1(); p->f2(); } EOF cat <$t451 template struct A { virtual void f1(); virtual void f2(); }; EOF cat <$t452 template void A::f2() { } EOF cat <$t453 #include "t45_1.h" void A::f1() { } EOF cat <$t46a #include "t46_1.h" main() { A a; a.f(); } EOF cat <$t46b #include main() { A a; a.f(); } EOF cat <$t461 template struct A { void f(); }; EOF cat <$t462 template void A::f() { } EOF cat <$t47 struct Base { Base(); virtual ~Base(); }; inline Base:: Base() { } inline Base:: ~Base() { } template struct Der : public Base { Der(); T* tp; }; template Der:: Der() { } main() { Der der; } EOF cat <$t48 template struct Map { void f(); }; template void Map::f() {} struct Junk; typedef Map T; main() { T t; t.f(); } EOF cat <$t491 template struct B { void f(); }; template void B::f() {} void f2() { B b; b.f(); } EOF cat <$t492 template struct A { void f(); }; template void A::f() {extern void f2(); f2();} main() { A a; a.f(); } EOF cat <$t50 template struct A { void f(); T t; }; template void A::f() { t.g(); } struct B { void g(); }; struct C { void g(); }; void B::g() { } void C::g() { } main() { A b; A c; A d; b.f(); c.f(); d.f(); } EOF cat <$t51 #include <51.h> main() { B b; b.f(); } EOF cat <$t51h template struct B { void f(); }; template void B::f() { } EOF cat <$t51hx #include "t8.h" template struct B { void f(); }; template void B::f() { } EOF ############################## PTLINK TESTS ############################## print "$sep dynamic extensions $sep" cleanup PTHDR= $test_CC -ptn $t37 >/dev/null 2>$t2 if [ $? -ne 0 ] then print '*** error #1 ***' fi egrep 'assuming INC_EXT' $t2 >/dev/null if [ $? -ne 0 ] then print '*** error #2 ***' fi cleanup PTSRC= $test_CC -ptn $t37 >/dev/null 2>$t2 if [ $? -ne 0 ] then print '*** error #3 ***' fi egrep 'assuming SRC_EXT' $t2 >/dev/null if [ $? -ne 0 ] then print '*** error #4 ***' fi cleanup PTSRC="." $test_CC -ptn $t37 >/dev/null 2>$t2 if [ $? -ne 0 ] then print '*** error #5 ***' fi egrep 'illegal extension' $t2 >/dev/null if [ $? -ne 0 ] then print '*** error #6 ***' fi cleanup PTHDR="xxx" $test_CC -ptn $t37 >/dev/null 2>$t2 if [ $? -ne 0 ] then print '*** error #7 ***' fi egrep 'illegal extension' $t2 >/dev/null if [ $? -ne 0 ] then print '*** error #8 ***' fi cleanup PTSRC=".xxxx" $test_CC -ptn $t37 >/dev/null 2>$t2 if [ $? -ne 0 ] then print '*** error #9 ***' fi egrep 'illegal extension' $t2 >/dev/null if [ $? -ne 0 ] then print '*** error #10 ***' fi cleanup PTHDR=".xxx,.yyy, ,,,, .h " PTSRC=".zzz,,, .c" $test_CC -ptn $t37 >/dev/null 2>$t2 if [ $? -ne 0 ] then print '*** error #11 ***' fi egrep 'illegal extension' $t2 >/dev/null if [ $? -eq 0 ] then print '*** error #12 ***' fi print "$sep pass through cfront options $sep" cleanup $test_CC -ptn -ptv -gdump $t37 >/dev/null 2>$t2 if [ $? -ne 0 ] then print '*** error #1 ***' fi fgrep 'gdump' $t2 >/dev/null if [ $? -ne 0 ] then print '*** error #2 ***' fi cleanup $test_CC -ptn -ptv -gdem $t37 >/dev/null 2>$t2 if [ $? -ne 0 ] then print '*** error #3 ***' fi fgrep 'gdem' $t2 >/dev/null if [ $? -ne 0 ] then print '*** error #4 ***' fi cleanup $test_CC -ptn -ptv -ispeed $t37 >/dev/null 2>$t2 if [ $? -ne 0 ] then print '*** error #5 ***' fi fgrep 'ispeed' $t2 >/dev/null if [ $? -ne 0 ] then print '*** error #6 ***' fi cleanup $test_CC -ptn -ptv -ispace $t37 >/dev/null 2>$t2 if [ $? -ne 0 ] then print '*** error #7 ***' fi fgrep 'ispace' $t2 >/dev/null if [ $? -ne 0 ] then print '*** error #8 ***' fi cleanup $test_CC -ptn -ptv +d $t37 >/dev/null 2>$t2 if [ $? -ne 0 ] then print '*** error #9 ***' fi fgrep '+d' $t2 >/dev/null if [ $? -ne 0 ] then print '*** error #10 ***' fi print "$sep -pth $sep" cleanup $test_CC -ptn -pth $t37 >/dev/null 2>&1 if [ $? -ne 0 ] then print '*** error #1 ***' fi x=`ls $rep/pt[0-9]* | wc -l` if [ $x -lt 5 ] then print '*** error #2 ***' fi print "$sep -I optimization $sep" cleanup $test_CC -ptn -ptv $t37 >/dev/null 2>$t2 if [ $? -ne 0 ] then print '*** error #1 ***' fi fgrep 'compiled' $t2 >/dev/null if [ $? -ne 0 ] then print '*** error #2 ***' fi $test_CC -Ixxxx -ptn -ptv $t37 >/dev/null 2>$t2 if [ $? -ne 0 ] then print '*** error #3 ***' fi fgrep 'compiled' $t2 >/dev/null if [ $? -eq 0 ] then print '*** error #4 ***' fi cleanup $test_CC -I. -ptn -ptv $t51 >/dev/null 2>$t2 if [ $? -ne 0 ] then print '*** error #5 ***' fi fgrep 'compiled' $t2 >/dev/null if [ $? -ne 0 ] then print '*** error #6 ***' fi $test_CC -Ixxx -I. -ptn -ptv $t51 >/dev/null 2>$t2 if [ $? -ne 0 ] then print '*** error #7 ***' fi fgrep 'compiled' $t2 >/dev/null if [ $? -ne 0 ] then print '*** error #8 ***' fi $test_CC -Ixxx -I. -ptn -ptv $t51 >/dev/null 2>$t2 if [ $? -ne 0 ] then print '*** error #9 ***' fi fgrep 'compiled' $t2 >/dev/null if [ $? -eq 0 ] then print '*** error #10 ***' fi $test_CC -I. -ptn -ptv $t51 >/dev/null 2>$t2 if [ $? -ne 0 ] then print '*** error #11 ***' fi fgrep 'compiled' $t2 >/dev/null if [ $? -ne 0 ] then print '*** error #12 ***' fi print "$sep -ptm $sep" cleanup $test_CC -ptn -ptm./xmap $t37 >/dev/null 2>&1 if [ $? -ne 0 ] then print '*** error #1 ***' fi egrep 'unconditional' xmap >/dev/null 2>&1 if [ $? -ne 0 ] then print '*** error #2 ***' fi egrep 'symbol.*needed' xmap >/dev/null 2>&1 if [ $? -ne 0 ] then print '*** error #3 ***' fi print "$sep -ptk $sep" cleanup $test_CC -ptn -ptk $t50 >/dev/null 2>$t2 if [ $? -eq 0 ] then print '*** error #1 ***' fi fgrep 'fatal error' $t2 >/dev/null 2>&1 if [ $? -eq 0 ] then print '*** error #2 ***' fi fgrep 'instantiation errors' $t2 >/dev/null 2>&1 if [ $? -ne 0 ] then print '*** error #3 ***' fi print "$sep countdown list $sep" cleanup $test_CC -ptn -ptv $t37 >/dev/null 2>$t2 if [ $? -ne 0 ] then print '*** error #1 ***' fi fgrep 'left to do' $t2 1>/dev/null 2>/dev/null if [ $? -ne 0 ] then print '*** error #2 ***' fi print "$sep @tab in middle $sep" cleanup mkdir $rep cat <$rep/nmap001 @dec X fff ggg.h @tab zzz @etab EOF $test_CC -ptn $t37 >/dev/null 2>&1 if [ $? -eq 0 ] then print '*** error #1 ***' fi print "$sep spacing in map file $sep" cleanup $test_CC -ptn -c $t37 >/dev/null 2>&1 if [ $? -ne 0 ] then print '*** error #1 ***' fi sed 's/\(@de[cf]\) /\1 /g' $repm >x cp x $repm $test_CC -ptn $t37o >/dev/null 2>&1 if [ $? -ne 0 ] then print '*** error #2 ***' fi print "$sep link order $sep" cleanup $test_CC -c -ptn $t491 $t492 >/dev/null 2>&1 if [ $? -ne 0 ] then print '*** error #1 ***' fi rm -f xlib.a ar cr xlib.a $t491o if [ -x /bin/ranlib -o -x /usr/bin/ranlib ] then ranlib xlib.a fi $test_CC $t492o xlib.a >/dev/null 2>&1 if [ $? -ne 0 ] then print '*** error #2 ***' fi print "$sep -ptt with header cache $sep" cleanup $test_CC -ptn -ptt -ptv $t37 2>$t2 1>/dev/null if [ $? -ne 0 ] then print '*** error #1 ***' fi fgrep 'rebuilt header file cache' $t2 >/dev/null if [ $? -ne 0 ] then print '*** error #2 ***' fi $test_CC -Ixxx -ptn -ptt -ptv $t37 2>$t2 1>/dev/null if [ $? -ne 0 ] then print '*** error #3 ***' fi fgrep 'rebuilt header file cache' $t2 >/dev/null if [ $? -ne 0 ] then print '*** error #4 ***' fi $test_CC -Dxxx -ptn -ptt -ptv $t37 2>$t2 1>/dev/null if [ $? -ne 0 ] then print '*** error #5 ***' fi fgrep 'rebuilt header file cache' $t2 >/dev/null if [ $? -ne 0 ] then print '*** error #6 ***' fi rm -f $rep/*.he $test_CC -Dxxx -ptn -ptt -ptv $t37 2>$t2 1>/dev/null if [ $? -ne 0 ] then print '*** error #7 ***' fi fgrep 'rebuilt header file cache' $t2 >/dev/null if [ $? -ne 0 ] then print '*** error #8 ***' fi for i in $rep/*.he do > $i done $test_CC -Dxxx -ptn -ptt -ptv $t37 2>$t2 1>/dev/null if [ $? -ne 0 ] then print '*** error #9 ***' fi fgrep 'rebuilt header file cache' $t2 >/dev/null if [ $? -ne 0 ] then print '*** error #10 ***' fi touch $rep/*.c $test_CC -Dxxx -ptn -ptt -ptv $t37 2>$t2 1>/dev/null if [ $? -ne 0 ] then print '*** error #11 ***' fi fgrep 'rebuilt header file cache' $t2 >/dev/null if [ $? -ne 0 ] then print '*** error #12 ***' fi fgrep '.c' $rep/*.he | fgrep -v 't37' cleanup $test_CC -ptt -ptv $t23 2>$t2 1>/dev/null if [ $? -ne 0 ] then print '*** error #13 ***' fi fgrep 'rebuilt header file cache' $t2 >/dev/null if [ $? -ne 0 ] then print '*** error #14 ***' fi $test_CC -ptt -ptv $t23 2>$t2 1>/dev/null if [ $? -ne 0 ] then print '*** error #15 ***' fi fgrep 'rebuilt header file cache' $t2 >/dev/null if [ $? -eq 0 ] then print '*** error #16 ***' fi $test_CC -ptt -ptv $t23 2>$t2 1>/dev/null if [ $? -ne 0 ] then print '*** error #17 ***' fi fgrep 'rebuilt header file cache' $t2 >/dev/null if [ $? -eq 0 ] then print '*** error #18 ***' fi touch $t23c $test_CC -ptt -ptv $t23 2>$t2 1>/dev/null if [ $? -ne 0 ] then print '*** error #19 ***' fi fgrep 'rebuilt header file cache' $t2 >/dev/null if [ $? -ne 0 ] then print '*** error #20 ***' fi fgrep 'compiled' $t2 >/dev/null if [ $? -ne 0 ] then print '*** error #21 ***' fi touch $rep/*.c $test_CC -ptt -ptv $t23 2>$t2 1>/dev/null if [ $? -ne 0 ] then print '*** error #22 ***' fi fgrep 'rebuilt header file cache' $t2 >/dev/null if [ $? -ne 0 ] then print '*** error #23 ***' fi fgrep 'compiled' $t2 >/dev/null if [ $? -ne 0 ] then print '*** error #24 ***' fi $test_CC -DZZZ -ptt -ptv $t23 2>$t2 1>/dev/null if [ $? -ne 0 ] then print '*** error #25 ***' fi fgrep 'rebuilt header file cache' $t2 >/dev/null if [ $? -ne 0 ] then print '*** error #26 ***' fi fgrep 'compiled' $t2 >/dev/null if [ $? -ne 0 ] then print '*** error #27 ***' fi sort $rep/*.he | uniq -c | awk '$1 > 1{print}' awk 'NR > 1 && NF == 1 && $1 + 0 == 0{print}' $rep/*.he >$t2 sort $t2 | cmp - $t2 print "$sep pointer to function as actual $sep" cleanup $test_CC -ptn $t48 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi print "$sep -I prefixes $sep" cleanup mv $t8h $td/xxx/xxx $test_CC -c -I$td/xxx -I$td/xxx/xxx $t8 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi mv $td/xxx/xxx/t8.h . grep 'xxx' $repm >/dev/null if [ $? -eq 0 ] then print '*** error #2 ***' fi print "$sep -pta and @alltc $sep" cleanup $test_CC -ptn -pta $t36 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi $test_CC -ptn -ptv $t36 2>$t2 1>/dev/null if [ $? -ne 0 ] then print '*** error #2 ***' fi grep 'compiled' $t2 >/dev/null if [ $? -eq 0 ] then print '*** error #3 ***' fi print 'int zzz = 57;' >> $t36 $test_CC -ptn -ptv $t36 2>$t2 1>/dev/null if [ $? -ne 0 ] then print '*** error #4 ***' fi grep 'compiled' $t2 >/dev/null if [ $? -ne 0 ] then print '*** error #5 ***' fi print "$sep check defmap in multiple repositories $sep" cleanup $test_CC -c $t37 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi mkdir zzz $test_CC -ptrzzz -ptr$rep -ptn $t37o 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #2 ***' fi rm -rf zzz print "$sep -ptt and local files $sep" cleanup cp $t8h $t8c $td2 $test_CC $t8 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi touch $t8h $test_CC -ptt -ptv $t8 2>$t2 1>/dev/null if [ $? -ne 0 ] then print '*** error #2 ***' fi grep 'compiled' $t2 >/dev/null if [ $? -ne 0 ] then print '*** error #3 ***' fi touch $td2/t8.h $test_CC -ptt -ptv $t8 2>$t2 1>/dev/null if [ $? -ne 0 ] then print '*** error #4 ***' fi grep 'compiled' $t2 >/dev/null if [ $? -eq 0 ] then print '*** error #5 ***' fi cleanup rm -f t8.h $test_CC -ptt -ptv -I$td2 $t8 2>$t2 1>/dev/null if [ $? -ne 0 ] then print '*** error #6 ***' fi grep 'compiled' $t2 >/dev/null if [ $? -ne 0 ] then print '*** error #7 ***' fi cp $td2/t8.c . $test_CC -ptt -ptv -I$td2 $t8 2>$t2 1>/dev/null if [ $? -ne 0 ] then print '*** error #8 ***' fi grep 'compiled' $t2 >/dev/null if [ $? -eq 0 ] then print '*** error #9 ***' fi cp $td2/t8.h . print "$sep -pts and dependency analysis $sep" cleanup $test_CC -pts $t8 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi $test_CC -pts -ptv $t8 2>$t2 1>/dev/null if [ $? -ne 0 ] then print '*** error #2 ***' fi grep 'compiled' $t2 >/dev/null if [ $? -eq 0 ] then print '*** error #3 ***' fi $test_CC -pts -ptt -ptv $t8 2>$t2 1>/dev/null if [ $? -ne 0 ] then print '*** error #4 ***' fi grep 'compiled' $t2 >/dev/null if [ $? -eq 0 ] then print '*** error #5 ***' fi print "$sep definitions found down -I path $sep" cleanup mv $t8c $td2 $test_CC -I$td2 -ptv $t8 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi mv $td2/t8.c . print "$sep basenames and archives $sep" cleanup $test_CC -c $t8 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi rm -f xlib.a ar cr xlib.a $t8o if [ -x /bin/ranlib -o -x /usr/bin/ranlib ] then ranlib xlib.a fi print 'void f() {main();}' >x.c cc -c x.c $test_CC x.o xlib.a 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #2 ***' fi rm -f xlib.a print "$sep CC path $sep" cleanup PATH="`dirname $test_CC`":$PATH CC -ptn $t37 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi print "$sep inlines and vtbls $sep" cleanup $test_CC -ptn $t47 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi print "$sep preserving quotes or brackets $sep" cleanup $test_CC -c -I. $t8 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi cat <$rep/nmap001 @dec A @dec f @dec Lurch "t8.$$.c" EOF cat <$repm @dec ZZZ zzz.h EOF $test_CC -I. $t8o 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #2 ***' fi grep '"t8\.[hc]"' $rep/*.c >/dev/null if [ $? -eq 0 ] then print '*** error #3 ***' fi grep "" $rep/*.c if [ $? -eq 0 ] then print '*** error #4 ***' fi cat <$rep/nmap001 @dec A "t8.h" @dec f "t8.h" @dec Lurch EOF $test_CC -I. $t8o 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #5 ***' fi grep '' $rep/*.c >/dev/null if [ $? -eq 0 ] then print '*** error #6 ***' fi grep "\"t8\.$$\.c\"" $rep/*.c if [ $? -eq 0 ] then print '*** error #7 ***' fi print "$sep numeric literals $sep" cleanup $test_CC -ptn $t29 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi print "$sep literals and pointers $sep" cleanup $test_CC -ptn $t42_1 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi cleanup $test_CC -ptn $t42_2 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #2 ***' fi cleanup $test_CC -ptn $t42_3 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #3 ***' fi cleanup $test_CC -ptn $t42_4 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #4 ***' fi cleanup $test_CC -ptn $t42_5 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #5 ***' fi cleanup $test_CC -ptn $t42_6 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #6 ***' fi print "$sep type checking of unused $sep" cleanup $test_CC -ptn $t35 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi $test_CC -ptn -DBAD $t35 2>/dev/null 1>&2 if [ $? -eq 0 ] then print '*** error #2 ***' fi print "$sep deleting old entries $sep" cleanup cat <$t15h template struct A {}; enum E {}; EOF $test_CC -c $t15 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi printmap2 | grep "@dec E t15" >/dev/null 2>&1 if [ $? -ne 0 ] then print '*** error #2 ***' fi cat <$t15h template struct A {}; EOF $test_CC -c $t15 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #3 ***' fi printmap2 | grep "@dec E .*t15" >/dev/null 2>&1 if [ $? -eq 0 ] then print '*** error #4 ***' fi cleanup cat <$t15h template struct A {}; enum E {}; EOF $test_CC -c $t15 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #5 ***' fi printmap2 | grep "@dec E t15" >/dev/null 2>&1 if [ $? -ne 0 ] then print '*** error #6 ***' fi cat <$t16h template struct A {}; enum E {}; EOF $test_CC -c $t16 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #7 ***' fi printmap2 | grep "@dec E t15" >/dev/null 2>&1 if [ $? -ne 0 ] then print '*** error #8 ***' fi cat <$t16h template struct A {}; EOF $test_CC -c $t16 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #9 ***' fi printmap2 | grep "@dec E t15" >/dev/null 2>&1 if [ $? -ne 0 ] then print '*** error #10 ***' fi cleanup cat <$t15h template struct A {}; enum E {}; EOF $test_CC -c $t15 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #11 ***' fi printmap2 | grep "@dec E t15" >/dev/null 2>&1 if [ $? -ne 0 ] then print '*** error #12 ***' fi cat <$repm @dec A t15 t15.h @dec E t15 t15.h xxx.h EOF cat <$t15h template struct A {}; EOF $test_CC -c $t15 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #13 ***' fi printmap2 | grep "@dec E t15" >/dev/null 2>&1 if [ $? -ne 0 ] then print '*** error #14 ***' fi cat <$repm @dec A t15 t15.h @dec E t15 xxx.h EOF cat <$t15h template struct A {}; EOF $test_CC -c $t15 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #15 ***' fi printmap2 | grep "@dec E t15" >/dev/null 2>&1 if [ $? -ne 0 ] then print '*** error #16 ***' fi print "$sep basenames carried along $sep" cleanup $test_CC $t8 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi printmap2 | grep " t8.$$" >/dev/null 2>&1 if [ $? -ne 0 ] then print '*** error #2 ***' fi $test_CC $t8 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #3 ***' fi printmap2 | grep "t8.$$ t8.$$" >/dev/null 2>&1 if [ $? -eq 0 ] then print '*** error #4 ***' fi $test_CC $t10 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #5 ***' fi printmap2 | grep "@dec A .*t8.$$" >/dev/null 2>&1 if [ $? -ne 0 ] then print '*** error #6 ***' fi printmap2 | grep "@dec A t10.$$" >/dev/null 2>&1 if [ $? -ne 0 ] then print '*** error #7 ***' fi print "$sep override quotes with brackets $sep" cleanup print 'template struct A {};' >xxx5.h print '#include "xxx5.h"' >xxx5.c $test_CC -c xxx5.c 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi print 'template struct A {};' >$td2/xxx5.h print '#include ' >xxx5.c $test_CC -c -I$td2 xxx5.c 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #2 ***' fi x=`grep 'xxx5.h' $repm | wc -l` if [ $x -ne 1 ] then print '*** error #3 ***' fi print "$sep quotes vs brackets $sep" cleanup print 'foobar' >$td2/t46_1.h $test_CC -I$td2 $t46a 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi cleanup cp t46_1.h t46_1.bak cp t46_1.h t46_1.c $td2 print 'foobar' >$td/t46_1.h $test_CC -I$td2 $t46b 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #2 ***' fi cp t46_1.bak t46_1.h print "$sep cross device repositories $sep" cleanup cp $t37 $HOME cp $t37 t37.bak cd rm -f $TMPDIR/*.cs 2>/dev/null $test_CC -ptn -ptr$TMPDIR t37.c 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi rm -f t37.c cd $td cp t37.bak t37.c print "$sep +a0 $sep" cleanup $test_CC +a0 -ptn -ptv $t37 2>$t2 1>/dev/null if [ $? -ne 0 ] then print '*** error #1 ***' fi grep '\+a0' $t2 >/dev/null if [ $? -ne 0 ] then print '*** error #2 ***' fi print "$sep vtbl and specializations $sep" cleanup $test_CC -c $t453 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi $test_CC $t45 $t453o 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #2 ***' fi print "$sep -pto $sep" cleanup $test_CC -ptn $t37 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi $test_CC -ptn -ptv $t37 2>$t2 1>/dev/null if [ $? -ne 0 ] then print '*** error #2 ***' fi grep 'compiled' $t2 >/dev/null if [ $? -eq 0 ] then print '*** error #3 ***' fi cd $rep ls *.o | sed -n '1,1p' > ../x cd .. print '@delete' >>x $test_CC -ptn -ptv -ptox $t37 2>$t2 1>/dev/null if [ $? -ne 0 ] then print '*** error #4 ***' fi grep 'compiled' $t2 >/dev/null if [ $? -ne 0 ] then print '*** error #5 ***' fi if [ -f x ] then print '*** error #6 ***' fi print '@delete' >x $test_CC -ptn -ptv -ptox $t37 2>$t2 1>/dev/null if [ $? -ne 0 ] then print '*** error #7 ***' fi grep 'compiled' $t2 >/dev/null if [ $? -eq 0 ] then print '*** error #8 ***' fi if [ -f x ] then print '*** error #9 ***' fi print "$sep .c not overwritten $sep" cleanup $test_CC -ptn $t37 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi if [ -f $rep/_instfile ] then print '*** error #2 ***' fi $test_CC -ptn $t37 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #3 ***' fi if [ ! -f $rep/_instfile ] then print '*** error #4 ***' fi print "$sep .H/.C $sep" cleanup cp $t8h t8.H cp $t8c t8.C $test_CC $t44 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi print "$sep long lists of basenames $sep" cleanup for i in 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 do cp $t8 xx${i}.c $test_CC -c -ptn xx${i}.c 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi done $test_CC xx25.o 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #2 ***' fi rm -f xx[0-9]* print "$sep hard path with -ptt $sep" cleanup mkdir $rep rm -rf xdir mkdir xdir cp $t37 xdir cat <$rep/nmap001 @dec A t37 xdir/$t37 EOF $test_CC -ptt -Ixdir $t37 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi rm -rf xdir print "$sep function templates and pointers to members $sep" cleanup $test_CC -ptn $t43 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi print "$sep U then C when fakelinking $sep" cleanup print 'extern int x; void f() {x++;}' > x1.c print 'int x;' > x2.c print 'int x = 59;' > x3.c cc -c x1.c x2.c x3.c >/dev/null 2>&1 ar cr xlib.a x2.o >/dev/null 2>&1 if [ -x /bin/ranlib -o -x /usr/bin/ranlib ] then ranlib xlib.a fi $test_CC -ptn x1.o xlib.a x3.o $t37 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi rm -f xlib.a print "$sep use of forwards $sep" cleanup $test_CC $t22 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi $test_CC -ptt $t22 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #2 ***' fi print "$sep PTOPTS $sep" cleanup PTOPTS="-ptv -ptz" $test_CC -C -ptn $t37 2>$t2 1>/dev/null if [ $? -ne 0 ] then print '*** error #1 ***' fi grep 'ptlink' $t2 >/dev/null if [ $? -ne 0 ] then print '*** error #2 ***' fi print "$sep basenames for x/y $sep" cleanup mkdir x mv $t37 x $test_CC -ptn x/t37.c 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi mv x/t37.c . rm -rf x print "$sep demangle works on ld output $sep" cleanup $test_CC $t30 1>$t2 2>/dev/null if [ $? -eq 0 ] then print '*** error #1 ***' fi grep "class 'A':" $t2 >/dev/null if [ $? -ne 0 ] then print '*** error #2 ***' fi grep "class 'A::B':" $t2 >/dev/null if [ $? -ne 0 ] then print '*** error #3 ***' fi print "$sep use of literals $sep" cleanup $test_CC $t21 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi print "$sep -pts after -pta $sep" cleanup $test_CC -pta $t8 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi $test_CC $t8 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #2 ***' fi cleanup $test_CC -pta $t8 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #3 ***' fi $test_CC -pts $t8 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #4 ***' fi cleanup $test_CC $t8 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #5 ***' fi $test_CC -pta $t8 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #6 ***' fi cleanup $test_CC $t8 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #7 ***' fi $test_CC -pts $t8 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #8 ***' fi cleanup $test_CC -pts $t8 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #9 ***' fi $test_CC -pta $t8 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #10 ***' fi cleanup $test_CC -pts $t8 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #11 ***' fi $test_CC $t8 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #12 ***' fi print "$sep archive searched repeatedly $sep" cleanup $test_CC -c $t19a1 $t19a2 1>/dev/null 2>&1 if [ $? -ne 0 ] then print '*** error #1 ***' fi rm -f $t19a ar cr $t19a $t19o1 $t19o2 >/dev/null 2>&1 if [ $? -ne 0 ] then print '*** error #2 ***' fi if [ -x /bin/ranlib -o -x /usr/bin/ranlib ] then ranlib $t19a if [ $? -ne 0 ] then print '*** error #3 ***' fi fi cleanup mkdir $rep cat <$rep/nmap999 @dec A t19.h EOF cat <$repm @dec ZZZ zzz.h @def ZZZ zzz.c EOF $test_CC $t19 $t19a 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #4 ***' fi print "$sep cppC options $sep" cleanup #export cppC="/lib/cpp -Ifoo" cppC="${cppC-/lib/cpp} -Ifoo" $test_CC -ptn $t37 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi #unset cppC print "$sep map file formatting $sep" cleanup mkdir $rep cat <$repm @tab @etab @dec A zzz.h EOF $test_CC -c $t8 2>/dev/null 1>&2 if [ $? -eq 0 ] then print '*** error #1 ***' fi cleanup mkdir $rep cat <$repm @tab xxx @etab @dec A @1 zzz.h EOF $test_CC -c $t8 2>/dev/null 1>&2 if [ $? -eq 0 ] then print '*** error #2 ***' fi cleanup mkdir $rep cat <$repm @dex ZZZ zzz.h EOF $test_CC -c $t8 2>/dev/null 1>&2 if [ $? -eq 0 ] then print '*** error #3 ***' fi cleanup mkdir $rep cat <$repm @dec ZZZ @def ZZZZ zzz.h EOF $test_CC -c $t8 2>/dev/null 1>&2 if [ $? -eq 0 ] then print '*** error #4 ***' fi cleanup mkdir $rep cat <$rep/nmap001 @tab @etab @dec A zzz.h EOF $test_CC $t8 2>/dev/null 1>&2 if [ $? -eq 0 ] then print '*** error #5 ***' fi cleanup mkdir $rep cat <$rep/nmap001 @tab xxx @etab @dec A @1 zzz.h EOF $test_CC $t8 2>/dev/null 1>&2 if [ $? -eq 0 ] then print '*** error #6 ***' fi cleanup mkdir $rep cat <$rep/nmap001 @dex ZZZ zzz.h EOF $test_CC $t8 2>/dev/null 1>&2 if [ $? -eq 0 ] then print '*** error #7 ***' fi cleanup mkdir $rep cat <$rep/nmap001 @dec ZZZ @def ZZZZ zzz.h EOF $test_CC $t8 2>/dev/null 1>&2 if [ $? -eq 0 ] then print '*** error #8 ***' fi print "$sep -ptr. $sep" cleanup $test_CC -ptr. $t8 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi print "$sep two +T $sep" cleanup $test_CC +Tx +Ty zzz.c 2>$t2 if [ $? -eq 0 ] then print '*** error #1 ***' fi grep 'warning: second' $t2 >/dev/null if [ $? -ne 0 ] then print '*** error #2 ***' fi print "$sep -ptt $sep" cleanup $test_CC -ptn $t37 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi $test_CC -ptn -ptt -ptv $t37 2>$t2 if [ $? -ne 0 ] then print '*** error #2 ***' fi grep 'compiled' $t2 >/dev/null if [ $? -eq 0 ] then print '*** error #3 ***' fi touch $t37 $test_CC -ptn -ptt -ptv $t37 2>$t2 if [ $? -ne 0 ] then print '*** error #4 ***' fi grep 'compiled' $t2 >/dev/null if [ $? -ne 0 ] then print '*** error #5 ***' fi rm -rf x1 mkdir x1 cp $rep/* x1 touch $rep/*.o touch $t37 sleep 1 touch x1/*.o $test_CC -ptn -ptt -ptv -ptr$rep -ptrx1 $t37 2>$t2 if [ $? -ne 0 ] then print '*** error #6 ***' fi grep 'compiled' $t2 >/dev/null if [ $? -eq 0 ] then print '*** error #7 ***' fi rm -rf x1 cleanup mkdir x1 mkdir $rep cat <x1/nmap001 @dec A $td/t8.h EOF $test_CC -ptr$rep -ptrx1 $t8 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #8 ***' fi touch $td/t8.h $test_CC -ptr$rep -ptrx1 -ptt -ptv $t8 2>$t2 if [ $? -ne 0 ] then print '*** error #9 ***' fi grep 'compiled' $t2 >/dev/null if [ $? -ne 0 ] then print '*** error #10 ***' fi rm -rf x1 print "$sep -lX $sep" cleanup $test_CC -ptn $t33 -lcomplex 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi print "$sep +T and -ptn $sep" print 'void foo() {}' >x.c cleanup $test_CC -c $t37 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi nm $NMFLAGS $t37o | egrep ' T [ ]*.*f2.*A__pt|.*f2.*A__pt.*text' >/dev/null if [ $? -eq 0 ] then print '*** error #2 ***' fi cleanup $test_CC $t37 x.c 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #3 ***' fi nm $NMFLAGS $t37o | egrep ' T [ ]*.*f2.*A__pt|.*f2.*A__pt.*text' >/dev/null if [ $? -eq 0 ] then print '*** error #4 ***' fi cleanup $test_CC -ptn $t37 x.c 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #5 ***' fi nm $NMFLAGS $t37o | egrep ' T [ ]*.*f2.*A__pt|.*f2.*A__pt.*text' >/dev/null if [ $? -eq 0 ] then print '*** error #6 ***' fi cleanup print '@none' >x $test_CC +Tx $t37 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #7 ***' fi nm $NMFLAGS $t37o | egrep ' T [ ]*.*f2.*A__pt|.*f2.*A__pt.*text' >/dev/null if [ $? -eq 0 ] then print '*** error #8 ***' fi print "$sep excessive iteration when unresolved $sep" cleanup $test_CC -ptv $t41 2>$t2 if [ $? -eq 0 ] then print '*** error #1 ***' fi x=`grep 'compiled' $t2 | wc -l` if [ $x -ne 1 ] then print '*** error #2 ***' fi print "$sep demangler on filenames $sep" cleanup $test_CC -ptn $t40 >$t2 2>&1 if [ $? -eq 0 ] then print '*** error #1 ***' fi egrep 'f\(int|long\)' $t2 >/dev/null if [ $? -eq 0 ] then print '*** error #2 ***' fi print "$sep ft laydown $sep" cleanup $test_CC -ptn $t39 >/dev/null 2>&1 if [ $? -ne 0 ] then print '*** error #1 ***' fi print "$sep nmapNNN wins $sep" cleanup $test_CC -c $t8 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi cat <$rep/nmap001 @dec A t8.$$ t8.h @dec f t8.$$ t8.h EOF cat <$repm @dec A t8.$$ t8xxx.h @dec f t8.$$ t8xxx.h EOF $test_CC $t8o 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #2 ***' fi cat <$rep/nmap001 @dec f t8.$$ t8.h EOF cat <$repm @dec A t8.$$ t8.h @dec f t8.$$ t8xxx.h EOF $test_CC $t8o 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #3 ***' fi print "$sep use of -I / -D / hard paths $sep" cleanup mkdir $rep cat <$rep/nmap001 @dec AA t12.$$ xxx/t12.h @dec ff t12.$$ xxx/t12.h EOF $test_CC -DN=23 $t12 -DZZZ 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi cleanup $test_CC -Ixxx -DN=23 -Iyyy -DXXX $t12 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #2 ***' fi print "$sep AFAIL $sep" cleanup $test_CC $t38 $t8 2>$t2 if [ $? -eq 0 ] then print '*** error #1 ***' fi grep 'ptlink' $t2 >/dev/null if [ $? -eq 0 ] then print '*** error #2 ***' fi print "$sep inlines $sep" cleanup $test_CC -ptn -I. $t32 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi nm $NMFLAGS $rep/*.o | egrep ' T [ ]*.*f__10A|.*f__10A.*text' >/dev/null if [ $? -ne 0 ] then print '*** error #2 ***' fi cleanup $test_CC -ptn -DINLINE $t32 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #3 ***' fi nm $NMFLAGS $rep/*.o 2>/dev/null | egrep ' T [ ]*.*f__10A|.*f__10A.*text' >/dev/null if [ $? -eq 0 ] then print '*** error #4 ***' fi print "$sep +T $sep" cleanup cat <xx.c #include "t8.h" #include "t8.c" typedef A _dummy; EOF print '@alltc' >instfile $test_CC +Tinstfile -c xx.c 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi nm $NMFLAGS xx.o | egrep ' T [ ]*[_]*f__10A__pt__2_dFv|f__10A__pt__2_dFv.*text' >/dev/null if [ $? -ne 0 ] then print '*** error #2 ***' fi print 'f' >instfile $test_CC +Tinstfile -c xx.c 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #3 ***' fi nm $NMFLAGS xx.o | egrep ' T [ ]*[_]*f__10A__pt__2_dFv|f__10A__pt__2_dFv.*text' >/dev/null if [ $? -ne 0 ] then print '*** error #4 ***' fi nm $NMFLAGS xx.o | egrep ' T [ ]*[_]*g__10A__pt__2_dFv|g__10A__pt__2_dFv.*text' >/dev/null if [ $? -eq 0 ] then print '*** error #4 ***' fi print "$sep objects in archive $sep" cleanup $test_CC -c $t8 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi rm -f xlib.a cp $t8o x.o ar cr xlib.a $t8o x.o if [ -x /bin/ranlib -o -x /usr/bin/ranlib ] then ranlib xlib.a >/dev/null 2>&1 fi $test_CC -ptv $t7 xlib.a 2>$t2 if [ $? -ne 0 ] then print '*** error #2 ***' fi grep 'compiled' $t2 >/dev/null if [ $? -eq 0 ] then print '*** error #3 ***' fi print 'static void f() {main();}' > xx.c cc -c xx.c $test_CC -ptv xx.o xlib.a 2>$t2 if [ $? -ne 0 ] then print '*** error #4 ***' fi grep 'compiled' $t2 >/dev/null if [ $? -ne 0 ] then print '*** error #5 ***' fi print "$sep repository permissions $sep" cleanup $test_CC -c $t8 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi ls -l $repm | egrep -v 'rw-r--r--' set `ls -ld .` x=$1 set `ls -ld $rep` y=$1 if [ "$x" != "$y" ] then print '*** error #2 ***' fi cleanup chmod 777 . $test_CC -c $t8 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #3 ***' fi ls -l $repm | egrep -v 'rw-rw-rw-' set `ls -ld .` x=$1 set `ls -ld $rep` y=$1 if [ "$x" != "$y" ] then print '*** error #4 ***' fi chmod 755 . $test_CC -c $t8 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #5 ***' fi ls -l $repm | egrep -v 'rw-rw-rw-' set `ls -ld .` x=$1 set `ls -ld $rep` y=$1 if [ "$x" = "$y" ] then print '*** error #6 ***' fi chmod 755 . cleanup $test_CC $t8 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #7 ***' fi ls -l $rep/* | egrep -v 'rw-r--r--' chmod 777 . cleanup $test_CC $t8 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #8 ***' fi ls -l $rep/* | egrep -v 'rw-rw-rw-' chmod 755 . $test_CC $t8 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #9 ***' fi ls -l $rep/* | egrep -v 'rw-rw-rw-' print "$sep order of inclusion of arguments $sep" cleanup $test_CC $t10 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi ln1=`grep -n t10.h < $rep/*.c | awk -F: '{print $1}'` ln2=`grep -n t10_2.h < $rep/*.c | awk -F: '{print $1}'` ln3=`grep -n t10_3.h < $rep/*.c | awk -F: '{print $1}'` if [ $ln1 -ge $ln2 ] then print '*** error #2 ***' fi if [ $ln2 -ge $ln3 ] then print '*** error #3 ***' fi print "$sep order of archives and objects $sep" cleanup $test_CC -c $t8 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi $test_CC $t8o 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #2 ***' fi rm -f xlib.a ar cr xlib.a $rep/*.o >/dev/null 2>&1 if [ -x /bin/ranlib -o -x /usr/bin/ranlib ] then ranlib xlib.a fi $test_CC -ptv $t8o xlib.a 2>$t2 if [ $? -ne 0 ] then print '*** error #3 ***' fi grep 'dependency' $t2 >/dev/null 2>&1 if [ $? -eq 0 ] then print '*** error #4 ***' fi cleanup mkdir $rep cat <$repm @dec ZZZ zzz.h EOF $test_CC xlib.a $t8o 2>/dev/null 1>&2 if [ $? -eq 0 ] then print '*** error #5 ***' fi print "$sep defined then undefined in objects $sep" cleanup $test_CC -c $t8 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi $test_CC $t8o 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #2 ***' fi $test_CC -ptv $rep/*.o $t8o 2>$t2 if [ $? -ne 0 ] then print '*** error #3 ***' fi grep 'dependency check' $t2 >/dev/null 2>&1 if [ $? -eq 0 ] then print '*** error #4 ***' fi print "$sep ptcomp fails $sep" cleanup mkdir $rep print '@dec' > $repm $test_CC $t7 2>/dev/null 1>&2 if [ $? -eq 0 ] then print '*** error #1 ***' fi print "$sep missing template.c $sep" cleanup $test_CC -ptn $t26 2>$t2 if [ $? -ne 0 ] then print '*** error #1 ***' fi grep 'warning: ##### template definition file' $t2 >/dev/null 2>&1 if [ $? -ne 0 ] then print '*** error #2 ***' fi print "$sep specialization of virtuals $sep" cleanup $test_CC -ptn $t37 1>/dev/null 2>/dev/null if [ $? -ne 0 ] then print '*** error #1 ***' fi print "$sep race condition on vtbls $sep" cleanup $test_CC -ptn $t36 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi $test_CC -ptn -ptv $t36 2>$t2 if [ $? -ne 0 ] then print '*** error #2 ***' fi grep 'compiled' $t2>/dev/null 1>&2 if [ $? -eq 0 ] then print '*** error #3 ***' fi print "$sep static data initializers $sep" cleanup $test_CC -ptn $t34 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi print "$sep duplicate -Is $sep" cleanup $test_CC -Ixxyyzz $t8 2>$t2 if [ $? -ne 0 ] then print '*** error #1 ***' fi grep 'xxyyzz.*xxyyzz' $t2 >/dev/null if [ $? -eq 0 ] then print '*** error #2 ***' fi print "$sep type lookup $sep" cleanup $test_CC -c $t8 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi cleanup mkdir $rep print '@dec ZZZ\nZZZ.H' >$repm cat <$rep/nmap001 @dec A t8.$$ t8.h @dec f t8.$$ t8.h EOF $test_CC $t8o 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #2 ***' fi cleanup mkdir $rep print '@dec ZZZ\nZZZ.H' >$repm cat <$rep/nmap001 @dec A t8.h @dec f t8.h EOF $test_CC $t8o 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #3 ***' fi cleanup mkdir $rep cat <$repm @dec A t8.$$ t8.h @dec f t8.$$ t8.h EOF $test_CC $t8o 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #4 ***' fi cleanup mkdir $rep print '@dec ZZZ\nZZZ.H' >$repm cat <$rep/nmap001 @dec A t8.h @dec f t8.h EOF $test_CC $t8o 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #5 ***' fi cleanup rm -rf xxxx mkdir $rep xxxx print '@dec ZZZ\nZZZ.H' >$repm cat <xxxx/nmap001 @def A t8.$$ t8.c @def f t8.$$ t8.c EOF $test_CC -ptr$rep -ptrxxxx $t8o 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #6 ***' fi cleanup rm -rf xxxx mkdir $rep xxxx print '@dec ZZZ\nZZZ.H' >$repm cat <xxxx/nmap001 @dec A t8.h @dec f t8.h EOF $test_CC -ptr$rep -ptrxxxx $t8o 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #7 ***' fi cleanup rm -rf xxxx mkdir $rep xxxx print '@dec ZZZ\nZZZ.H' >$repm cat <xxxx/nmap001 @dec A t8.$$ t8.h @dec f t8.$$ t8.h EOF $test_CC -ptr$rep -ptrxxxx $t8o 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #8 ***' fi cleanup rm -rf xxxx mkdir $rep xxxx print '@dec ZZZ\nZZZ.H' >$repm cat <xxxx/nmap001 @dec A t8.h @dec f t8.h EOF $test_CC -ptr$rep -ptrxxxx $t8o 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #9 ***' fi cleanup mkdir $rep print '@dec ZZZ\nZZZ.H' >$repm cat <$rep/nmap001 @def A t8.$$ t8.c @def f t8.$$ t8.c EOF cat <$rep/nmap2 @def A t8.$$ zzz.h @def f t8.$$ zzz.h EOF $test_CC $t8o 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #10 ***' fi cleanup mkdir $rep print '@dec ZZZ\nZZZ.H' >$repm cat <$rep/nmap001 @dec A zzz.h @dec f zzz.h EOF cat <$rep/nmap2 @dec A t8.$$ t8.h @dec f t8.$$ t8.h EOF $test_CC $t8o 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #11 ***' fi cleanup mkdir $rep print '@dec ZZZ\nZZZ.H' >$repm cat <$rep/nmap002 @dec A t8.$$ t8.h @dec f t8.$$ t8.h EOF cat <$rep/nmap001 @dec A zzz.h @dec f zzz.h EOF $test_CC $t8o 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #12 ***' fi cleanup mkdir $rep cat <$repm @dec A t8.$$ zzz.h @dec f t8.$$ zzz.h EOF cat <$rep/nmap001 @dec A t8.h @dec f t8.h EOF $test_CC $t8o 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #13 ***' fi cleanup mkdir $rep cat <$repm @def A zzz.h @def f zzz.h @def A t8.$$ t8.c @def f t8.$$ t8.c EOF $test_CC $t8o 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #14 ***' fi cleanup rm -rf xxxx mkdir $rep xxxx cat <$repm @dec A t8.$$ t8.h @dec f t8.$$ t8.h EOF cat <xxxx/nmap001 @dec A zzz.h @dec f zzz.h EOF $test_CC -ptr$rep -ptrxxxx $t8o 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #15 ***' fi cleanup rm -rf xxxx mkdir $rep xxxx cat <$repm @dec A t8.h @dec f t8.h EOF cat <xxxx/nmap001 @dec A t8.$$ zzz.h @dec f t8.$$ zzz.h EOF $test_CC -ptr$rep -ptrxxxx $t8o 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #16 ***' fi cleanup rm -rf xxxx mkdir $rep xxxx print '@dec ZZZ\nZZZ.H' >$repm cat <$rep/nmap002 @dec A t8.h @dec f t8.h EOF cat <xxxx/nmap001 @dec A t8.$$ zzz.h @dec f t8.$$ zzz.h EOF $test_CC -ptr$rep -ptrxxxx $t8o 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #17 ***' fi print "$sep defmap.old written $sep" cleanup $test_CC -c $t8 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi $test_CC -c $t8 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #2 ***' fi if [ ! -f ${repm}.old ] then print '*** error #3 ***' fi print "$sep flookup() fails $sep" cleanup mkdir $rep cat <$rep/nmap001 @dec A sfdjasdlkj zzz.h EOF $test_CC $t8 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi print "$sep map files wrongly formatted $sep" cleanup mkdir $rep print 'xxx' >$rep/nmap001 $test_CC $t8 2>$t2 if [ $? -eq 0 ] then print '*** error #1 ***' fi grep 'error.*incorrectly formatted' $t2 >/dev/null 2>&1 if [ $? -ne 0 ] then print '*** error #2 ***' fi cleanup mkdir $rep print '@xxx' >$rep/nmap001 $test_CC $t8 2>$t2 if [ $? -eq 0 ] then print '*** error #3 ***' fi grep 'error.*incorrectly formatted' $t2 >/dev/null 2>&1 if [ $? -ne 0 ] then print '*** error #4 ***' fi cleanup mkdir $rep print '@ xxx' >$rep/nmap001 $test_CC $t8 2>$t2 if [ $? -eq 0 ] then print '*** error #5 ***' fi grep 'error.*incorrectly formatted' $t2 >/dev/null 2>&1 if [ $? -ne 0 ] then print '*** error #6 ***' fi cleanup mkdir $rep print '@' >$rep/nmap001 $test_CC $t8 2>$t2 if [ $? -eq 0 ] then print '*** error #7 ***' fi grep 'error.*incorrectly formatted' $t2 >/dev/null 2>&1 if [ $? -ne 0 ] then print '*** error #8 ***' fi cleanup mkdir $rep print '@dec' >$rep/nmap001 $test_CC $t8 2>$t2 if [ $? -eq 0 ] then print '*** error #9 ***' fi grep 'error.*incorrectly formatted' $t2 >/dev/null 2>&1 if [ $? -ne 0 ] then print '*** error #10 ***' fi cleanup mkdir $rep print '@decxxx' >$rep/nmap001 $test_CC $t8 2>$t2 if [ $? -eq 0 ] then print '*** error #11 ***' fi grep 'error.*incorrectly formatted' $t2 >/dev/null 2>&1 if [ $? -ne 0 ] then print '*** error #12 ***' fi cleanup mkdir $rep print 'xxx.h' >$rep/nmap001 $test_CC $t8 2>$t2 if [ $? -eq 0 ] then print '*** error #13 ***' fi grep 'error.*incorrectly formatted' $t2 >/dev/null 2>&1 if [ $? -ne 0 ] then print '*** error #14 ***' fi print "$sep same file twice in a row $sep" cleanup $test_CC $t8 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi awk '{for (i = 1; i <= NF; i++) printf "%s\n", $i}' $repm | sort > $td/x99 $test_CC $t8 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #2 ***' fi awk '{for (i = 1; i <= NF; i++) printf "%s\n", $i}' $repm | sort | diff - $td/x99 print "$sep ft expansion $sep" cleanup $test_CC -ptv $t31 1>/dev/null 2>$t2 if [ $? -eq 0 ] then print '*** error #1 ***' fi grep 'wrote instantiation file' $t2 >/dev/null if [ $? -eq 0 ] then print '*** error #2 ***' fi print "$sep map file formatting $sep" cleanup mkdir $rep cat <$repm @dec T1 t.h @def T2 a1 a2 a3 a4 t2.h EOF $test_CC $t8 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi cleanup mkdir $rep cat <$repm @dec EOF $test_CC $t8 2>/dev/null 1>/dev/null if [ $? -eq 0 ] then print '*** error #2 ***' fi cleanup mkdir $rep cat <$repm @decx T1 t.h EOF $test_CC $t8 2>/dev/null 1>/dev/null if [ $? -eq 0 ] then print '*** error #3 ***' fi cleanup mkdir $rep cat <$repm @decx T1 t.h EOF $test_CC $t8 2>/dev/null 1>/dev/null if [ $? -eq 0 ] then print '*** error #4 ***' fi cleanup mkdir $rep cat <$repm @dec 37 t.h EOF $test_CC $t8 2>/dev/null 1>/dev/null if [ $? -eq 0 ] then print '*** error #5 ***' fi cleanup mkdir $rep cat <$repm @dec T1 EOF $test_CC $t8 2>/dev/null 1>/dev/null if [ $? -eq 0 ] then print '*** error #6 ***' fi cleanup mkdir $rep cat <$repm t.h EOF $test_CC $t8 2>/dev/null 1>/dev/null if [ $? -eq 0 ] then print '*** error #7 ***' fi cleanup mkdir $rep print '@dec T1' >$repm print -n 't1.h' >> $repm $test_CC $t8 2>/dev/null 1>/dev/null if [ $? -eq 0 ] then print '*** error #8 ***' fi print "$sep only data needed $sep" cleanup $test_CC -DINIT -DVAL=37 $t28 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi ./a.out if [ $? -ne 0 ] then print '*** error #2 ***' fi print "$sep global common $sep" cleanup $test_CC -DVAL=0 $t28 2>/dev/null 1>&2 if [ $? -eq 0 ] then print '*** error #1 ***' fi print "$sep support for +i $sep" cleanup $test_CC +i $t8 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi ls $rep/*..[ci] >$t2 if [ ! -s $t2 ] then print '*** error #2 ***' fi print "$sep static data $sep" cleanup $test_CC -DVAL=37 $t27 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi ./a.out if [ $? -ne 0 ] then print '*** error #2 ***' fi cleanup $test_CC -DVAL=47 -DOVER $t27 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #3 ***' fi ./a.out if [ $? -ne 0 ] then print '*** error #4 ***' fi print "$sep specializations $sep" cleanup $test_CC -c $t25s1 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi $test_CC -c $t25s2 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #2 ***' fi $test_CC -c $t25s3 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #3 ***' fi $test_CC -c $t25s4 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #4 ***' fi $test_CC $t25s1o $t25s2o $t25s3o $t25s4o 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #5 ***' fi ./a.out if [ $? -ne 0 ] then print '*** error #6 ***' fi print "$sep type defined twice in @def $sep" cleanup mkdir $rep cat <$rep/nmap001 @dec A t17 t17x.h @def A t17 t17xx.c @def A t17 t17xx.c EOF $test_CC $t17 2>/dev/null 1>&2 if [ $? -eq 0 ] then print '*** error #1 ***' fi print "$sep bad map file formatting $sep" cleanup mkdir $rep cat <$rep/nmap001 @dec 2A t17 t17x.h @def A t17 t17xx.c EOF $test_CC $t17 2>/dev/null 1>&2 if [ $? -eq 0 ] then print '*** error #1 ***' fi cleanup mkdir $rep cat <$rep/nmap001 @dec A t17 @def A t17 t17xx.c EOF $test_CC $t17 2>/dev/null 1>&2 if [ $? -eq 0 ] then print '*** error #2 ***' fi cleanup mkdir $rep cat <$rep/nmap001 @dec A t17 t17x.h @def A t17 EOF print -n 't17xx.c' >>$rep/nmap001 $test_CC $t17 2>/dev/null 1>&2 if [ $? -eq 0 ] then print '*** error #3 ***' fi print "$sep handling whitespace $sep" cleanup mkdir $rep cat <$rep/nmap001 @dec A t17 t17x.h @def A t17 t17xx.c EOF $test_CC $t17 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi print "$sep -E / -F $sep" cleanup $test_CC -ptv -E t8 >/dev/null 2>$t2 if [ $? -ne 0 ] then print '*** error #1 ***' fi egrep 'ptcomp|ptlink' $t2 >/dev/null if [ $? -eq 0 ] then print '*** error #2 ***' fi $test_CC -ptv -F t8 >/dev/null 2>$t2 if [ $? -ne 0 ] then print '*** error #3 ***' fi egrep 'ptcomp|ptlink' $t2 >/dev/null if [ $? -eq 0 ] then print '*** error #4 ***' fi if [ -d $rep ] then print '*** error #5 ***' fi print "$sep multiple repositories $sep" cleanup $test_CC -c $t8 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi mv $rep x1 $test_CC -Ixxx -Iyyy -DXXX -DN=23 $t12 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #2 ***' fi mv $rep x2 $test_CC -ptrx2 -ptrx1 $t8o 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #3 ***' fi if [ -d $rep ] then print '*** error #4 ***' fi rm -rf x1 x2 print "$sep replaying .c files $sep" cleanup $test_CC $t24 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi x=`ls $rep/*.o 2>/dev/null | wc -l` if [ $x -ne 0 ] then print '*** error #2 ***' fi print "$sep -ptn $sep" cleanup $test_CC -ptn $t24 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi x=`ls $rep/*.o 2>/dev/null | wc -l` if [ $x -eq 0 ] then print '*** error #2 ***' fi print "$sep multiple -I $sep" cleanup $test_CC -Ixxx -DN=23 -Iyyy -DXXX $t12 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi print "$sep -pts $sep" cleanup $test_CC -pts $t8 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi print "$sep -pts with -pta $sep" cleanup $test_CC -pta -pts $t8 2>$t2 if [ $? -eq 0 ] then print '*** error #1 ***' fi grep 'pta and -pts cannot both be specified' $t2 >/dev/null 2>&1 if [ $? -ne 0 ] then print '*** error #2 ***' fi print "$sep use of I/O library $sep" cleanup $test_CC $t23 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi ./a.out >/dev/null if [ $? -ne 0 ] then print '*** error #2 ***' fi print "$sep use of -o $sep" cleanup $test_CC $t8 -o xxxt8 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi ./xxxt8 if [ $? -ne 0 ] then print '*** error #2 ***' fi print "$sep use of -pta $sep" cleanup $test_CC -pta $t8 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi ./a.out if [ $? -ne 0 ] then print '*** error #2 ***' fi print "$sep passing options to instantiation $sep" cleanup $test_CC -ptv -g $t8 2>$t2 if [ $? -ne 0 ] then print '*** error #1 ***' fi grep ' -c *-g' $t2 >/dev/null 2>&1 if [ $? -ne 0 ] then print '*** error #2 ***' fi print "$sep bad/missing object files $sep" cleanup print 'asdflkjasdlfjkad' >$t20o $test_CC $t8 $t20o 1>/dev/null 2>$t2 if [ $? -eq 0 ] then print '*** error #1 ***' fi grep 'fatal' $t2 >/dev/null 2>&1 if [ $? -eq 0 ] then print '*** error #2 ***' fi cleanup $test_CC $t8 dflkadsjfasd.o 1>/dev/null 2>$t2 if [ $? -eq 0 ] then print '*** error #3 ***' fi grep 'fatal' $t2 >/dev/null 2>&1 if [ $? -eq 0 ] then print '*** error #4 ***' fi print "$sep long lists of object files $sep" cleanup for i in 1 2 3 4 5 6 7 8 9 10 do for j in 1 2 3 4 5 6 7 8 9 10 do print $t20o done done >$t2 rm -f $t20o cc -c $t20c $test_CC -ptv $t8 `<$t2` 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi print "$sep support for locking $sep" cleanup ($test_CC $t8 2>/dev/null 1>&2; print $? >$t2) & ($test_CC $t8 2>/dev/null 1>&2; print $? >$t2x) & wait read x <$t2 if [ "$x" -ne 0 ] then print '*** error #1 ***' fi read x <$t2x if [ "$x" -ne 0 ] then print '*** error #2 ***' fi print "$sep no symbols needed from archive $sep" cleanup $test_CC -c $t8 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi rm -f x.a ar cr x.a $t8o >/dev/null 2>&1 if [ -x /bin/ranlib -o -x /usr/bin/ranlib ] then ranlib x.a if [ $? -ne 0 ] then print '*** error #2 ***' fi fi cleanup $test_CC $t7 x.a 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #3 ***' fi print "$sep another iteration required $sep" cleanup $test_CC $t18 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi print "$sep empty object for nm $sep" cleanup print 'struct A {int x;};' > x.c cc -c x.c 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi $test_CC $t8 x.o 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #2 ***' fi print "$sep handling @def $sep" cleanup mkdir $rep cat <$rep/nmap001 @dec A t17 t17x.h @def A t17 t17xx.c EOF $test_CC $t17 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi print "$sep print list of unresolved $sep" cleanup $test_CC $t9 2>$t2 if [ $? -eq 0 ] then print '*** error #1 ***' fi grep "^ A::g(void)$" $t2 >/dev/null 2>&1 if [ $? -ne 0 ] then print '*** error #2 ***' fi print "$sep type defined twice $sep" cleanup $test_CC $t11 $t11_2 2>$t2 1>/dev/null if [ $? -eq 0 ] then print '*** error #1 ***' fi grep 'error.*type.*defined twice' $t2 >/dev/null 2>&1 if [ $? -ne 0 ] then print '*** error #2 ***' fi print "$sep merging fts $sep" cleanup $test_CC $t14 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi print "$sep mapping .c to .h $sep" cleanup mkdir $rep cat <$rep/nmap001 @def f t13.$$ t13.c @def A t13.$$ t13.c EOF $test_CC -c $t13 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi print '@dec ZZZ' >$repm print 'lurch.h' >>$repm $test_CC $t13o 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #2 ***' fi print "$sep multiple types used as template args $sep" cleanup $test_CC $t10 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi print "$sep type not found in map files $sep" cleanup $test_CC -c $t8 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi print '@dec ZZZ' > $repm print 'ZZZ.h' >> $repm $test_CC $t8o 2>$t2 if [ $? -eq 0 ] then print '*** error #2 ***' fi #grep 'warning: ##### assuming template type' $t2 >/dev/null 2>&1 #if [ $? -ne 0 ] #then # print '*** error #3 ***' #fi print "$sep named repositories at link time $sep" cleanup rm -rf xxxx $test_CC -ptrxxxx $t8 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi x=`ls xxxx/*.c xxxx/*.o xxxx/*.cs | wc -l` if [ $x -ne 12 ] then print '*** error #2 ***' fi rm -rf xxxx print "$sep loop detected in ptlink $sep" cleanup $test_CC $t9 2>$t2 if [ $? -eq 0 ] then print '*** error #1 ***' fi grep 'error.*resolved' $t2 >/dev/null 2>&1 if [ $? -ne 0 ] then print '*** error #2 ***' fi print "$sep non-PT case works optimally $sep" cleanup $test_CC -ptv $t7 2>$t2 if [ $? -ne 0 ] then print '*** error #1 ***' fi if [ -d $rep ] then print '*** error #2 ***' fi grep 'CC\[pt' $t2 >/dev/null 2>&1 if [ $? -eq 0 ] then print '*** error #3 ***' fi cleanup mkdir $rep $test_CC -ptv $t7 2>$t2 if [ $? -ne 0 ] then print '*** error #4 ***' fi grep 'CC\[ptlink' $t2 >/dev/null 2>&1 if [ $? -eq 0 ] then print '*** error #5 ***' fi print "$sep partitioning into files $sep" cleanup $test_CC $t8 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi x=`ls $rep/*.c $rep/*.o $rep/*.cs | wc -l` if [ $x -ne 12 ] then print '*** error #2 ***' fi print "$sep dependency management and checksums $sep" cleanup $test_CC -ptv $t8 2>$t2 if [ $? -ne 0 ] then print '*** error #1 ***' fi grep 'compiled' $t2 >/dev/null 2>&1 if [ $? -ne 0 ] then print '*** error #2 ***' fi $test_CC -ptv $t8 2>$t2 if [ $? -ne 0 ] then print '*** error #3 ***' fi grep 'compiled' $t2 >/dev/null 2>&1 if [ $? -eq 0 ] then print '*** error #4 ***' fi rm -f $rep/*.o $test_CC -ptv $t8 2>$t2 if [ $? -ne 0 ] then print '*** error #5 ***' fi grep 'compiled' $t2 >/dev/null 2>&1 if [ $? -ne 0 ] then print '*** error #6 ***' fi rm -f $rep/*.cs $test_CC -ptv $t8 2>$t2 if [ $? -ne 0 ] then print '*** error #7 ***' fi grep 'compiled' $t2 >/dev/null 2>&1 if [ $? -ne 0 ] then print '*** error #8 ***' fi $test_CC -ptv $t8 2>$t2 if [ $? -ne 0 ] then print '*** error #9 ***' fi grep 'compiled' $t2 >/dev/null 2>&1 if [ $? -eq 0 ] then print '*** error #10 ***' fi print ' ' >> $t8h $test_CC -ptv $t8 2>$t2 if [ $? -ne 0 ] then print '*** error #11 ***' fi grep 'compiled' $t2 >/dev/null 2>&1 if [ $? -ne 0 ] then print '*** error #12 ***' fi print ' ' >> $t8c $test_CC -ptv $t8 2>$t2 if [ $? -ne 0 ] then print '*** error #13 ***' fi grep 'compiled' $t2 >/dev/null 2>&1 if [ $? -ne 0 ] then print '*** error #14 ***' fi $test_CC -ptv $t8 2>$t2 if [ $? -ne 0 ] then print '*** error #15 ***' fi grep 'compiled' $t2 >/dev/null 2>&1 if [ $? -eq 0 ] then print '*** error #16 ***' fi print 'int zzz = 89;' >> $t8c $test_CC -ptv $t8 2>$t2 if [ $? -ne 0 ] then print '*** error #17 ***' fi grep 'compiled' $t2 >/dev/null 2>&1 if [ $? -ne 0 ] then print '*** error #18 ***' fi print "$sep duplicate information elided $sep" cleanup $test_CC -c $t6 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi printmap $repm | uniq -c | awk '$1 != 1{print}' print "$sep right information extracted $sep" cleanup $test_CC -c -I$td $t5 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi printmap $repm | diff - $t5x print "$sep named repositories work $sep" cleanup rm -rf x999 $test_CC -c -ptr./x999 $t1 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi if [ ! -s x999/$nmap ] then print '*** error #2 ***' fi rm -rf x999 print "$sep -ptr followed by nothing $sep" cleanup $test_CC -c -ptr $t1 2>$t2 if [ $? -ne 0 ] then print '*** error #1 ***' fi grep 'warning.*no repository' $t2 >/dev/null 2>&1 if [ $? -ne 0 ] then print '*** error #2 ***' fi print "$sep repository is a file $sep" cleanup > $rep $test_CC -c $t1 2>$t2 if [ $? -ne 0 ] then print '*** error #1 ***' fi grep 'warning: could not create' $t2 >/dev/null 2>&1 if [ $? -ne 0 ] then print '*** error #2 ***' fi print "$sep cannot create repository $sep" cleanup cd / $test_CC -c $t1 2>$t2 if [ $? -ne 0 ] then print '*** error #1 ***' fi cd $OLDPWD grep 'warning: could not create' $t2 >/dev/null 2>&1 if [ $? -ne 0 ] then print '*** error #2 ***' fi print "$sep repository not writeable $sep" cleanup mkdir $rep chmod 555 $rep $test_CC -c $t1 2>$t2 if [ $? -ne 0 ] then print '*** error #1 ***' fi grep 'warning: repository.*is not writable' $t2 >/dev/null 2>&1 if [ $? -ne 0 ] then print '*** error #2 ***' fi print "$sep rep not created if not needed $sep" cleanup $test_CC -c $t3 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #1 ***' fi if [ -d $rep ] then print '*** error #2 ***' fi print "$sep no update if compile fails $sep" cleanup $test_CC -c $t4 2>/dev/null 1>&2 if [ $? -eq 0 ] then print '*** error #1 ***' fi if [ -d $rep ] then print '*** error #2 ***' fi cleanup $test_CC -c $t1 2>/dev/null 1>&2 if [ $? -ne 0 ] then print '*** error #3 ***' fi rm -f $repm $test_CC -c $t4 2>/dev/null 1>&2 if [ $? -eq 0 ] then print '*** error #4 ***' fi if [ -d $repm ] then print '*** error #5 ***' fi cleanup