From b1b5ea5c54bfc54a576bf88dd74081f75f66609b Mon Sep 17 00:00:00 2001 From: Stefano Lattarini Date: Wed, 1 Jun 2011 17:43:44 +0200 Subject: [PATCH] lex tests: avoid possible hang; fix and extend * tests/lex3.test (foo.l:yywrap): Return 1, not 0, to avoid hangs. Bug introduced in commit 'v1.11-871-geb147a1'. (Makefile.am): Do not add `@LEXLIB@' to `$(LDADD)', as we define our own `yywrap' function. * tests/lex.test (tscan.l): In `yywrap', return 1, not 0, for consistency with the default flex implementation. * tests/lex-libobj.test (yywrap.c): Likewise. * tests/lex-subobj-nodep.test (s1.l): Likewise. * tests/lexvpath.test (foo.c): Likewise. * tests/silent-lex-gcc (foo.l): Likewise. * tests/silent-lex-generic (foo.l): Likewise. * tests/silent-many-gcc (foo5.l): Likewise. * tests/silent-many-generic (foo5.l): Likewise. * tests/lex-lib.test (mu.c): Likewise. Update heading comments, to refer to ... * tests/lex-lib-external.test: ... this new test, which checks that we can get use the `yywrap' function from a system-wide library, if that's available. --- ChangeLog | 22 +++++++++++++ tests/Makefile.am | 1 + tests/Makefile.in | 1 + tests/cond35.test | 2 +- tests/lex-lib-external.test | 75 ++++++++++++++++++++++++++++++++++++++++++ tests/lex-lib.test | 3 +- tests/lex-libobj.test | 4 +-- tests/lex-subobj-nodep.test | 2 +- tests/lex3.test | 7 ++-- tests/lexvpath.test | 2 +- tests/silent-lex-gcc.test | 2 +- tests/silent-lex-generic.test | 2 +- tests/silent-many-gcc.test | 2 +- tests/silent-many-generic.test | 2 +- 14 files changed, 113 insertions(+), 14 deletions(-) create mode 100755 tests/lex-lib-external.test diff --git a/ChangeLog b/ChangeLog index cc9dd2e..51567aa 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,27 @@ 2011-06-01 Stefano Lattarini + lex tests: avoid possible hang; fix and extend + * tests/lex3.test (foo.l:yywrap): Return 1, not 0, to avoid hangs. + Bug introduced in commit 'v1.11-871-geb147a1'. + (Makefile.am): Do not add `@LEXLIB@' to `$(LDADD)', as we define + our own `yywrap' function. + * tests/lex.test (tscan.l): In `yywrap', return 1, not 0, for + consistency with the default flex implementation. + * tests/lex-libobj.test (yywrap.c): Likewise. + * tests/lex-subobj-nodep.test (s1.l): Likewise. + * tests/lexvpath.test (foo.c): Likewise. + * tests/silent-lex-gcc (foo.l): Likewise. + * tests/silent-lex-generic (foo.l): Likewise. + * tests/silent-many-gcc (foo5.l): Likewise. + * tests/silent-many-generic (foo5.l): Likewise. + * tests/lex-lib.test (mu.c): Likewise. + Update heading comments, to refer to ... + * tests/lex-lib-external.test: ... this new test, which checks + that we can get use the `yywrap' function from a system-wide + library, if that's available. + +2011-06-01 Stefano Lattarini + tests: prefer `skip_' over `echo ...; Exit 77' * tests/self-check-cleanup.test: When the test must be skipped, use `skip_ REASON' instead of `echo REASON; Exit 77'. Also, diff --git a/tests/Makefile.am b/tests/Makefile.am index 0bb993a..02a99b6 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -558,6 +558,7 @@ lexcpp.test \ lexvpath.test \ lex-subobj-nodep.test \ lex-lib.test \ +lex-lib-external.test \ lex-libobj.test \ lex-noyywrap.test \ lflags.test \ diff --git a/tests/Makefile.in b/tests/Makefile.in index 875b06e..4e4d4a9 100644 --- a/tests/Makefile.in +++ b/tests/Makefile.in @@ -846,6 +846,7 @@ lexcpp.test \ lexvpath.test \ lex-subobj-nodep.test \ lex-lib.test \ +lex-lib-external.test \ lex-libobj.test \ lex-noyywrap.test \ lflags.test \ diff --git a/tests/cond35.test b/tests/cond35.test index 143c082..f2b0ded 100755 --- a/tests/cond35.test +++ b/tests/cond35.test @@ -64,7 +64,7 @@ cat > tscan.l << 'END' /* Avoid possible link errors. */ int yywrap (void) { - return 0; + return 1; } END diff --git a/tests/lex-lib-external.test b/tests/lex-lib-external.test new file mode 100755 index 0000000..5f04594 --- /dev/null +++ b/tests/lex-lib-external.test @@ -0,0 +1,75 @@ +#! /bin/sh +# Copyright (C) 2011 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, 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, see . + +# Check that we can get use the `yywrap' function from a system-wide +# library, if that's available. + +required='cc lex' +. ./defs || Exit 1 + +cat >> configure.in << 'END' +AC_PROG_CC +AC_PROG_RANLIB +AC_PROG_LEX +AC_OUTPUT +END + +cat > Makefile.am << 'END' +bin_PROGRAMS = lexer +lexer_SOURCES = foo.l +lexer_LDADD = $(LEXLIB) + +.PHONY: have-lexlib +have-lexlib: + test x'$(LEXLIB)' != x + echo 'int main (void) { return yywrap (); }' > x.c + $(CC) -c x.c + $(CC) x.$(OBJEXT) $(LEXLIB) + rm -f x.c *.$(OBJEXT) *.o *.out *.exe +END + +cat > foo.l <<'END' +%% +"GOOD" return EOF; +. +%% +int main (void) +{ + /* We don't use a 'while' loop here (like a real lexer would do) + to avoid possible hangs. */ + if (yylex () == EOF) + return 0; + else + return 1; +} +END + +$ACLOCAL +$AUTOCONF +$AUTOMAKE -a + +./configure +$MAKE have-lexlib || skip_ "no system-wide lex library found" + +# Program should build and run and distribute. +$MAKE all +if cross_compiling; then :; else + echo GOOD | ./lexer + echo BAD | ./lexer && Exit 1 +fi +$MAKE distcheck + +: diff --git a/tests/lex-lib.test b/tests/lex-lib.test index 07af3ff..e5fdc00 100755 --- a/tests/lex-lib.test +++ b/tests/lex-lib.test @@ -17,6 +17,7 @@ # Check that we can provide a personal `yywrap' function in a custom # library. +# See also test `lex-lib-external.test'. required='cc lex' . ./defs || Exit 1 @@ -41,7 +42,7 @@ END cat > mu.c << 'END' int yywrap (void) { - return 0; + return 1; } END diff --git a/tests/lex-libobj.test b/tests/lex-libobj.test index 1ca1d4c..449bd47 100755 --- a/tests/lex-libobj.test +++ b/tests/lex-libobj.test @@ -41,7 +41,7 @@ END cat > yywrap.c << 'END' int yywrap (void) { - return 0; + return 1; } END @@ -64,7 +64,7 @@ grep LIBOBJS Makefile # For debugging. $MAKE $MAKE distclean -# Force no "system lex library". +# Force "no system lex library". ./configure LEXLIB='-L /lib' grep LIBOBJS Makefile # For debugging. grep '^LIBOBJS *=.*yywrap.*\.o' Makefile # Sanity check. diff --git a/tests/lex-subobj-nodep.test b/tests/lex-subobj-nodep.test index 322ae96..5db7168 100755 --- a/tests/lex-subobj-nodep.test +++ b/tests/lex-subobj-nodep.test @@ -51,7 +51,7 @@ int main (void) int yywrap(void) { - return 0; + return 1; } END diff --git a/tests/lex3.test b/tests/lex3.test index 9c2f5b4..ae79796 100755 --- a/tests/lex3.test +++ b/tests/lex3.test @@ -29,9 +29,8 @@ AC_OUTPUT END cat > Makefile.am << 'END' -LDADD = @LEXLIB@ -noinst_PROGRAMS = foo -foo_SOURCES = foo.l +noinst_PROGRAMS = foo +foo_SOURCES = foo.l END cat > foo.l << 'END' @@ -53,7 +52,7 @@ int main (void) /* Avoid possible link errors. */ int yywrap (void) { - return 0; + return 1; } END diff --git a/tests/lexvpath.test b/tests/lexvpath.test index 93902b3..2f54256 100755 --- a/tests/lexvpath.test +++ b/tests/lexvpath.test @@ -59,7 +59,7 @@ int main (void) /* Avoid possible link errors. */ int yywrap (void) { - return 0; + return 1; } END diff --git a/tests/silent-lex-gcc.test b/tests/silent-lex-gcc.test index 2a691c3..e01fd72 100755 --- a/tests/silent-lex-gcc.test +++ b/tests/silent-lex-gcc.test @@ -58,7 +58,7 @@ cat > foo.l <<'EOF' /* Avoid possible link errors. */ int yywrap (void) { - return 0; + return 1; } int main (void) { diff --git a/tests/silent-lex-generic.test b/tests/silent-lex-generic.test index bc3ffff..7d2b197 100755 --- a/tests/silent-lex-generic.test +++ b/tests/silent-lex-generic.test @@ -58,7 +58,7 @@ cat > foo.l <<'EOF' /* Avoid possible link errors. */ int yywrap (void) { - return 0; + return 1; } int main (void) { diff --git a/tests/silent-many-gcc.test b/tests/silent-many-gcc.test index 8cdb35b..b2d4174 100755 --- a/tests/silent-many-gcc.test +++ b/tests/silent-many-gcc.test @@ -161,7 +161,7 @@ cat > foo5.l <<'EOF' /* Avoid possible link errors. */ int yywrap (void) { - return 0; + return 1; } EOF cat > foo6.y <<'EOF' diff --git a/tests/silent-many-generic.test b/tests/silent-many-generic.test index 7d615ac..17dea2c 100755 --- a/tests/silent-many-generic.test +++ b/tests/silent-many-generic.test @@ -162,7 +162,7 @@ cat > foo5.l <<'EOF' /* Avoid possible link errors. */ int yywrap (void) { - return 0; + return 1; } EOF cat > foo6.y <<'EOF' -- 2.7.4