Compare commits

...
14 Commits
Author SHA1 Message Date
Akim Demaille c4e686a1ab version 3.0.4
* NEWS: Record release date.
2015-01-23 13:53:53 +01:00
Akim Demaille 2646fd012d gnulib: update 2015-01-23 11:27:10 +01:00
Akim Demaille a2c525b34c build: re-enable compiler warnings, and fix them
There are warnings (-Wextra) in generated C++ code:

  ltlparse.cc: In member function 'ltlyy::parser::symbol_number_type
  ltlyy::parser::by_state::type_get() const':
  ltlparse.cc:452:33: warning: enumeral and non-enumeral type in
  conditional expression
      return state == empty_state ? empty_symbol : yystos_[state];

Reported by Alexandre Duret-Lutz.

It turns out that -Wall and -Wextra were disabled because of a stupid
typo.

* configure.ac: Fix the stupid typo.
* data/lalr1.cc, src/AnnotationList.c, src/InadequacyList.c,
* src/ielr.c, src/print.c, src/scan-code.l, src/symlist.c,
* src/symlist.h, src/symtab.c, src/tables.c, tests/actions.at,
* tests/calc.at, tests/cxx-type.at, tests/glr-regression.at,
* tests/named-refs.at, tests/torture.at:
Fix warnings, mostly issues about variables used only with assertions,
which are disabled with -DNDEBUG.
2015-01-23 07:52:50 +01:00
Akim Demaille 658b189348 tests: c++: fix a C++03 conformance issue
This fixes test 241 on xLC:

"input.y", line 42.11: 1540-0274 (S) The name lookup for "report" did not find a declaration.
"input.y", line 42.11: 1540-1292 (I) Static declarations are not considered for a function call if the function is not qualified.

where report is:

  static void
  report (std::ostream& yyo, int ival, float fval)
  {
    yyo << "ival: " << ival << ", fval: " <<  fval;
  }

and line 42 is:

  %printer { report (yyo, $$,       $<fval>$); } <ival>;

It turns out that indeed this function must not be declared static,
<http://stackoverflow.com/a/17662745/1353549>.  Let's put it into an
anonymous namespace.

Reported by Thomas Jahns.
http://lists.gnu.org/archive/html/bug-bison/2015-01/msg00059.html

* tests/actions.at (Qualified $$ in actions): Don't use "static",
prefer anonymous namespace.
2015-01-22 08:45:44 +01:00
Akim Demaille a06344172a tests: fix a title
* tests/conflicts.at: De-overquote.
2015-01-20 20:47:02 +01:00
Akim Demaille 573654ca9e c++: reserve 200 slots in the parser's stack
This is consistent with what is done with yacc.c and glr.c.  Because
it also avoids that the stack needs to be resized very soon, it should
help keeping tests about destructors more reliable.

Indeed, if the stack is created too small, very soon the C++ library
needs to enlarge it, which means creating a new one, copying the
elements from the initial one onto it, and then destroy the elements
of the initial stack: that would be a spurious call to a destructor.

Reported by Thomas Jahns.
http://lists.gnu.org/archive/html/bug-bison/2015-01/msg00059.html

* data/stack.hh (stack::stack): Reserve 200 slots.
* tests/c++.at: Remove traces of stack expansions.
2015-01-20 20:45:48 +01:00
Akim Demaille 0b0370ff42 tests: be more robust to unrecognized synclines, and try to recognize xlc
Reported by Thomas Jahns.
http://lists.gnu.org/archive/html/bug-bison/2015-01/msg00059.html

* tests/synclines.at (AT_SYNCLINES_COMPILE): Rename as...
(_AT_SYNCLINES_COMPILE): this.
Try to recognize xlc locations.
(AT_SYNCLINES_COMPILE): New.  Skips the test if we can't read the
synclines.
2015-01-20 18:16:09 +01:00
Akim Demaille eaa476a7e9 tests: fix C++ conformance
Reported by Thomas Jahns.
http://lists.gnu.org/archive/html/bug-bison/2015-01/msg00059.html

* tests/c++.at (Exception safety): Add missing include.
Don't use const_iterator for erase.
2015-01-20 18:04:24 +01:00
Akim Demaille 16832bf546 build: fix some warnings
Reported by John Horigan.
http://lists.gnu.org/archive/html/bug-bison/2015-01/msg00034.html

* src/graphviz.c, src/symtab.h: Address compiler warnings.
2015-01-18 15:41:15 +01:00
Akim Demaille 0ab29b7c20 build: avoid infinite recursions on include_next
On MacOS X 10.5 PPC with Apple's GCC 4.0.1:

  % uname -a
  Darwin aria.cielonegro.org 9.8.0 Darwin Kernel Version 9.8.0: Wed Jul 15 16:57:0
  1 PDT 2009; root:xnu-1228.15.4~1/RELEASE_PPC Power Macintosh
  % gcc --version
  powerpc-apple-darwin9-gcc-4.0.1 (GCC) 4.0.1 (Apple Inc. build 5493)
  Copyright (C) 2005 Free Software Foundation, Inc.
  This is free software; see the source for copying conditions.  There is NO
  warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

building in place enters into an infinite recursion on "#include_next":

  % gmake V=1
  [snip]
  depbase=`echo lib/math.o | sed 's|[^/]*$|.deps/&|;s|\.o$||'`;\
  gcc -std=gnu99    -I. -Ilib -I. -I./lib   -g -O2 -MT lib/math.o -MD -MP -MF $depbase.Tpo -c -o lib/math.o lib/math.c &&\
  mv -f $depbase.Tpo $depbase.Po
  In file included from lib/math.h:27,
                   from lib/math.h:27,
                   from lib/math.h:27,
                   from lib/math.h:27,
  [snip]
                   from lib/math.h:27,
                   from lib/math.h:27,
                   from lib/math.c:3:
  lib/math.h:27:23: error: #include nested too deeply
  Makefile:3414: recipe for target 'lib/math.o' failed
  gmake[2]: *** [lib/math.o] Error 1

Using -I./lib instead of -Ilib fixes the problem.

Reported by Pho.
<https://lists.gnu.org/archive/html/bison-patches/2014-01/msg00000.html>

* Makefile.am (AM_CPPFLAGS): Use -I./lib instead of -Ilib.
2015-01-16 10:52:17 +01:00
Akim Demaille 559b30881d doc: minor fixes
* doc/bison.texi: Fix warnings about colon in reference names.
* data/bison.m4, src/files.h: Fix comments.
* doc/Doxyfile.in: update.
2015-01-16 10:52:17 +01:00
Akim Demaille 88ffc4b907 gnulib: strtoul is considered obsolete and now useless
* bootstrap.conf: here.
2015-01-15 17:26:32 +01:00
Akim Demaille 3e82dfaa0d c++: avoid warnings when destructors don't use $$
* data/c++.m4: here.
2015-01-15 14:29:22 +01:00
Akim Demaille 11d820174f maint: post-release administrivia
* NEWS: Add header line for next release.
* .prev-version: Record previous version.
* cfg.mk (old_NEWS_hash): Auto-update.
2015-01-15 10:24:34 +01:00
36 changed files with 1516 additions and 1022 deletions
+1 -1
View File
@@ -1 +1 @@
3.0.2
3.0.3
+3 -2
View File
@@ -39,8 +39,9 @@ AM_YFLAGS = -d -v -Werror -Wall -Wno-yacc --report=all
# Initialization before completion by local.mk's.
AM_CFLAGS = $(WARN_CFLAGS)
# Find builddir/src/scan-code.c etc.
AM_CPPFLAGS = -I. -Ilib -I$(top_srcdir) -I$(top_srcdir)/lib
# Find builddir/src/scan-code.c etc. For some reason "-I./lib"
# instead of "-Ilib" avoids infinite recursions on #include_next.
AM_CPPFLAGS = -I. -I./lib -I$(top_srcdir) -I$(top_srcdir)/lib
BUILT_SOURCES =
CLEANFILES =
DISTCLEANFILES =
+12
View File
@@ -1,5 +1,17 @@
GNU Bison NEWS
* Noteworthy changes in release 3.0.4 (2015-01-23) [stable]
** Bug fixes
*** C++ with Variants (lalr1.cc)
Fix a compiler warning when no %destructor use $$.
*** Test suites
Several portability issues in tests were fixed.
* Noteworthy changes in release 3.0.3 (2015-01-15) [stable]
** Bug fixes
+2
View File
@@ -66,6 +66,7 @@ Jim Kent [email protected]
Jim Meyering [email protected]
Joel E. Denny [email protected]
Johan van Selst [email protected]
John Horigan [email protected]
Jonathan Fabrizio [email protected]
Jonathan Nieder [email protected]
Juan Manuel Guerrero [email protected]
@@ -113,6 +114,7 @@ Peter Fales [email protected]
Peter Hamorsky [email protected]
Peter Simons [email protected]
Petr Machata [email protected]
Pho [email protected]
Piotr Gackiewicz [email protected]
Quentin Hocquet [email protected]
Quoc Peyrot [email protected]
+1 -1
View File
@@ -33,7 +33,7 @@ gnulib_modules='
quote quotearg
readme-release
realloc-posix
spawn-pipe stdbool stpcpy strdup-posix strerror strtoul strverscmp
spawn-pipe stdbool stpcpy strdup-posix strerror strverscmp
unistd unistd-safer unlink unlocked-io
update-copyright unsetenv verify
warnings
+1 -1
View File
@@ -81,7 +81,7 @@ AC_ARG_ENABLE([gcc-warnings],
[enable_gcc_warnings=no])
AM_CONDITIONAL([ENABLE_GCC_WARNINGS], [test "$enable_gcc_warnings" = yes])
if test "$enable_gcc_warnings" = yes; then
warn_common='-Wall-Wextra -Wno-sign-compare -Wcast-align -Wdocumentation
warn_common='-Wall -Wextra -Wno-sign-compare -Wcast-align -Wdocumentation
-Wformat -Wpointer-arith -Wwrite-strings'
warn_c='-Wbad-function-cast -Wshadow -Wstrict-prototypes'
warn_cxx='-Wnoexcept'
-1
View File
@@ -437,7 +437,6 @@ m4_define([b4_symbol_action_location],
# b4_symbol_action(SYMBOL-NUM, KIND)
# ----------------------------------
# Run the action KIND (destructor or printer) for SYMBOL-NUM.
# Same as in C, but using references instead of pointers.
m4_define([b4_symbol_action],
[b4_symbol_if([$1], [has_$2],
[b4_dollar_pushdef([(*yyvaluep)],
+1
View File
@@ -347,6 +347,7 @@ m4_define([b4_public_types_define],
// User destructor.
symbol_number_type yytype = this->type_get ();
basic_symbol<Base>& yysym = *this;
(void) yysym;
switch (yytype)
{
]b4_symbol_foreach([b4_symbol_destructor])dnl
+11 -3
View File
@@ -149,10 +149,11 @@ b4_variant_if([m4_include(b4_pkgdatadir/[variant.hh])])
m4_define([b4_shared_declarations],
[b4_percent_code_get([[requires]])[
]b4_parse_assert_if([# include <cassert>])[
# include <vector>
# include <cstdlib> // std::abort
# include <iostream>
# include <stdexcept>
# include <string>]b4_defines_if([[
# include <string>
# include <vector>]b4_defines_if([[
# include "stack.hh"
]b4_bison_locations_if([[# include "location.hh"]])])[
]b4_variant_if([b4_variant_includes])[
@@ -569,7 +570,10 @@ m4_if(b4_prefix, [yy], [],
]b4_parser_class_name[::symbol_number_type
]b4_parser_class_name[::by_state::type_get () const
{
return state == empty_state ? empty_symbol : yystos_[state];
if (state == empty_state)
return empty_symbol;
else
return yystos_[state];
}
inline
@@ -622,6 +626,10 @@ m4_if(b4_prefix, [yy], [],
std::ostream& yyoutput = yyo;
YYUSE (yyoutput);
symbol_number_type yytype = yysym.type_get ();
// Avoid a (spurious) G++ 4.8 warning about "array subscript is
// below array bounds".
if (yysym.empty ())
std::abort ();
yyo << (yytype < yyntokens_ ? "token" : "nterm")
<< ' ' << yytname_[yytype] << " ("]b4_locations_if([
<< yysym.location << ": "])[;
+3 -4
View File
@@ -32,12 +32,12 @@ m4_define([b4_stack_define],
stack ()
: seq_ ()
{
seq_.reserve (200);
}
stack (unsigned int n)
: seq_ (n)
{
}
{}
inline
T&
@@ -114,8 +114,7 @@ m4_define([b4_stack_define],
slice (const S& stack, unsigned int range)
: stack_ (stack)
, range_ (range)
{
}
{}
inline
const T&
+1405 -960
View File
File diff suppressed because it is too large Load Diff
+4 -4
View File
@@ -7550,7 +7550,7 @@ in an associativity related conflict, which can be specified as follows.
The unary-minus is another typical example where associativity is
usually over-specified, see @ref{Infix Calc, , Infix Notation
Calculator: @code{calc}}. The @code{%left} directive is traditionally
Calculator - @code{calc}}. The @code{%left} directive is traditionally
used to declare the precedence of @code{NEG}, which is more than needed
since it also defines its associativity. While this is harmless in the
traditional example, who knows how @code{NEG} might be used in future
@@ -10748,8 +10748,8 @@ it must be copyable;
in order to compute the (default) value of @code{@@$} in a reduction, the
parser basically runs
@example
@@$.begin = @@$1.begin;
@@$.end = @@$@var{N}.end; // The location of last right-hand side symbol.
@@$.begin = @@1.begin;
@@$.end = @@@var{N}.end; // The location of last right-hand side symbol.
@end example
@noindent
so there must be copyable @code{begin} and @code{end} members;
@@ -11337,7 +11337,7 @@ regular destructors. All the values are printed using their
@noindent
The grammar itself is straightforward (@pxref{Location Tracking Calc, ,
Location Tracking Calculator: @code{ltcalc}}).
Location Tracking Calculator - @code{ltcalc}}).
@comment file: calc++-parser.yy
@example
+1 -1
Submodule gnulib updated: 7585eb3f16...ea6cb044ca
-2
View File
@@ -211,8 +211,6 @@
/stripslash.c
/strndup.c
/strnlen.c
/strtol.c
/strtoul.c
/strverscmp.c
/sys
/sys_ioctl.h
-2
View File
@@ -144,8 +144,6 @@
/string_h.m4
/strndup.m4
/strnlen.m4
/strtol.m4
/strtoul.m4
/strverscmp.m4
/sys_ioctl_h.m4
/sys_socket_h.m4
+1 -1
View File
@@ -546,7 +546,7 @@ AnnotationList__compute_from_inadequacies (
AnnotationList__insertInto (annotation_node,
&annotation_lists[s->number],
s->nitems);
aver (b);
aver (b); (void) b;
}
/* This aver makes sure the
AnnotationList__computeDominantContribution check above
+1 -1
View File
@@ -66,7 +66,7 @@ symbol *
InadequacyList__getContributionToken (InadequacyList const *self,
ContributionIndex i)
{
aver (0 <= i && i < self->contributionCount);
aver (0 <= i && i < self->contributionCount); (void) i;
return self->inadequacy.conflict.token;
}
+3 -1
View File
@@ -64,7 +64,9 @@ extern char *all_but_ext;
void compute_output_file_names (void);
void output_file_names_free (void);
/** Record that we generate file \a file_name.
/** Record that we generate a file.
*
* \param file_name the name of file being generated.
* \param source whether this is a source file (*c, *.java...)
* as opposed to a report (*.output, *.dot...).
*/
+2 -2
View File
@@ -113,8 +113,8 @@ conclude_red (struct obstack *out, int source, rule_number ruleno,
with n the source state and m the rule number. This is because we
don't want all the reductions bearing a same rule number to point to
the same state, since that is not the desired format. */
fprintf (fout, " %1$d -> \"%1$dR%2$d%3$s\" [",
source, ruleno, ed);
fprintf (fout, " %d -> \"%dR%d%s\" [",
source, source, ruleno, ed);
/* (The lookahead tokens have been added to the beginning of the
obstack, in the caller function.) */
+4 -1
View File
@@ -1102,7 +1102,10 @@ ielr (void)
else if (STREQ (type, "canonical-lr"))
lr_type = LR_TYPE__CANONICAL_LR;
else
aver (false);
{
aver (false);
abort ();
}
free (type);
}
+1
View File
@@ -343,6 +343,7 @@ print_reductions (FILE *out, state *s)
|| (STREQ (default_reductions, "consistent")
&& default_reduction_only)
|| (reds->num == 1 && reds->rules[0]->number == 0));
(void) default_reduction_only;
free (default_reductions);
}
}
+2 -3
View File
@@ -664,7 +664,7 @@ handle_action_dollar (symbol_list *rule, char *text, location dollar_loc)
case LHS_REF:
if (!type_name)
type_name = symbol_list_n_type_name_get (rule, dollar_loc, 0);
type_name = symbol_list_n_type_name_get (rule, 0);
if (!type_name)
{
@@ -695,8 +695,7 @@ handle_action_dollar (symbol_list *rule, char *text, location dollar_loc)
if (max_left_semantic_context < 1 - n)
max_left_semantic_context = 1 - n;
if (!type_name && 0 < n)
type_name =
symbol_list_n_type_name_get (effective_rule, dollar_loc, n);
type_name = symbol_list_n_type_name_get (effective_rule, n);
if (!type_name)
{
if (union_seen | tag_seen)
+1 -1
View File
@@ -190,7 +190,7 @@ symbol_list_n_get (symbol_list *l, int n)
`--------------------------------------------------------------*/
uniqstr
symbol_list_n_type_name_get (symbol_list *l, location loc, int n)
symbol_list_n_type_name_get (symbol_list *l, int n)
{
return symbol_list_n_get (l, n)->content.sym->type_name;
}
+1 -1
View File
@@ -124,7 +124,7 @@ symbol_list *symbol_list_n_get (symbol_list *l, int n);
/* Get the data type (alternative in the union) of the value for
symbol N in rule RULE. */
uniqstr symbol_list_n_type_name_get (symbol_list *l, location loc, int n);
uniqstr symbol_list_n_type_name_get (symbol_list *l, int n);
/* Check whether the node is a border element of a rule. */
bool symbol_list_null (symbol_list *node);
+1 -1
View File
@@ -145,7 +145,7 @@ code_props_type_string (code_props_type kind)
case printer:
return "%printer";
}
assert (0);
abort ();
}
/*----------------------------------------.
+1 -1
View File
@@ -73,12 +73,12 @@ typedef enum
declared,
} status;
typedef enum code_props_type code_props_type;
enum code_props_type
{
destructor = 0,
printer = 1,
};
typedef enum code_props_type code_props_type;
enum { CODE_PROPS_SIZE = 2 };
+1 -1
View File
@@ -698,7 +698,7 @@ pack_vector (vector_number vector)
if (ok)
{
int loc;
int loc PACIFY_CC (= -1);
int k;
for (k = 0; k < t; k++)
{
+7 -4
View File
@@ -633,7 +633,7 @@ main (int argc, const char *argv[])
{
int status;
yydebug = !!getenv ("YYDEBUG");
assert (argc == 2);
assert (argc == 2); (void) argc;
source = argv[1];
status = yyparse ();
switch (status)
@@ -1530,10 +1530,13 @@ AT_DATA_GRAMMAR([[input.y]],
]AT_SKEL_CC_IF([[
# include <iostream>
static void
report (std::ostream& yyo, int ival, float fval)
namespace
{
yyo << "ival: " << ival << ", fval: " << fval;
void
report (std::ostream& yyo, int ival, float fval)
{
yyo << "ival: " << ival << ", fval: " << fval;
}
}
]], [[
# include <stdio.h>
+2 -2
View File
@@ -342,7 +342,6 @@ AT_PARSER_CHECK([./list], 0,
]],
[[Destroy: ""
Destroy: "0"
Destroy: (0)
Destroy: 1
Destroy: "1"
Destroy: ()
@@ -719,6 +718,7 @@ $1
#include <cstdlib> // size_t and getenv.
#include <iostream>
#include <set>
#include <string>
bool debug = false;
@@ -751,7 +751,7 @@ $1
~Object ()
{
log (this, "Object::~Object");
objects::const_iterator i = instances.find (this);
objects::iterator i = instances.find (this);
// Make sure this object is alive.
assert (i != instances.end ());
Object::instances.erase (i);
+2 -2
View File
@@ -94,8 +94,8 @@ main (int argc, const char **argv)
status = ]AT_NAME_PREFIX[parse (]AT_PARAM_IF([[&result, &count]])[);
if (fclose (input))
perror ("fclose");
assert (global_result == result);
assert (global_count == count);
assert (global_result == result); (void) result;
assert (global_count == count); (void) count;
return status;
}
]])
+1 -1
View File
@@ -395,7 +395,7 @@ AT_CLEANUP
m4_pushdef([AT_CONSISTENT_ERRORS_CHECK], [
AT_SETUP([[parse.error=verbose and consistent errors: $1]])
AT_SETUP([[parse.error=verbose and consistent errors: ]$1])
AT_BISON_OPTION_PUSHDEFS([$1])
+1 -1
View File
@@ -127,7 +127,7 @@ declarator : ID
int
main (int argc, char **argv)
{
assert (argc == 2);
assert (argc == 2); (void) argc;
if (!freopen (argv[1], "r", stdin))
return 3;
return yyparse ();
+1 -1
View File
@@ -72,7 +72,7 @@ const char *input = YY_NULLPTR;
int
main (int argc, const char* argv[])
{
assert (argc == 2);
assert (argc == 2); (void) argc;
input = argv[1];
return yyparse ();
}
+2 -2
View File
@@ -162,8 +162,8 @@ int main (int argc, const char **argv)
}
status = yyparse ();
fclose (input);
assert (global_result == result);
assert (global_count == count);
assert (global_result == result); (void) global_result; (void) result;
assert (global_count == count); (void) global_count; (void) count;
return status;
}
]])
+35 -12
View File
@@ -19,13 +19,13 @@
AT_BANNER([[User Actions.]])
# AT_SYNCLINES_COMPILE(FILE)
# --------------------------
# _AT_SYNCLINES_COMPILE(FILE)
# ---------------------------
# Compile FILE expecting an error, and save in the file stdout the
# normalized output. Ignore the exit status, since some compilers
# (e.g. c89 on IRIX 6.5) trigger warnings on '#error', instead of
# errors.
m4_define([AT_SYNCLINES_COMPILE],
m4_define([_AT_SYNCLINES_COMPILE],
[AT_CHECK([$CC $CFLAGS $CPPFLAGS -c $1], [ignore], [], [stderr])
# Transform stderr into something like this:
@@ -75,6 +75,12 @@ m4_define([AT_SYNCLINES_COMPILE],
# When c++ is used to compiler C, we might have more messages (Clang 3.2):
#
# clang: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated
#
#
# xlc reports things like:
#
# "input.yy", line 80.21: 1540-0218 (S) The call does not match any parameter list for "operator<<".
# "/usr/vacpp/include/iosfwd", line 32.6: 1506-205 (S) #error This file to be used only with IBM VisualAge C++ v4 and later compilers
AT_CHECK([[$PERL -p -0777 - stderr <<\EOF
# 1. Remove useless lines.
@@ -92,6 +98,8 @@ AT_CHECK([[$PERL -p -0777 - stderr <<\EOF
# 2. Normalize the lines we kept.
# xlc messages. Remove also error identifier (e.g., "1540-0218 (S)").
s/^"(.*?)", line ([\w.]*): \d+-\d+ \(.\) /$][1:$][2: /gm;
# Remove column.
s/^([^:]+:\d+)[.:][^:]+:(.+)$/$][1:$][2/gm;
# Map all combinations of "error: " and "#error: " to "#error ".
@@ -101,13 +109,14 @@ EOF
0, [stdout])
])
# AT_TEST(TITLE, INPUT, ERROR-MSG)
# --------------------------------
# Check that compiling the parser produced from INPUT cause GCC
# to issue ERROR-MSG.
m4_pushdef([AT_TEST],
[AT_SETUP([$1])
AT_BISON_OPTION_PUSHDEFS
# AT_SYNCLINES_COMPILE(FILE)
# --------------------------
# Compile FILE expecting an error, and save in the file stdout the
# normalized output. If we can't get a trustable location
# from the compiler, just skip the test.
#
# It seems impossible to find a generic scheme to check the location
# of an error. Even requiring GCC is not sufficient, since for instance
# the version modified by Apple:
@@ -124,15 +133,29 @@ AT_BISON_OPTION_PUSHDEFS
#
# | input.y:2: "2"
# | cpp-precomp: warning: errors during smart preprocessing, retrying in basic mode
m4_define([AT_SYNCLINES_COMPILE],
[# Check if we can trust location translation.
AT_DATA([syncline.c],
[[#error "1"
int i; /* avoids -pedantic warning about an empty translation unit. */
]])
AT_SYNCLINES_COMPILE([syncline.c])
_AT_SYNCLINES_COMPILE([syncline.c])
AT_CHECK([[test "`cat stdout`" = 'syncline.c:1: @%:@error "1"' || exit 77]])
# Then work for real.
_AT_SYNCLINES_COMPILE([$1])
])
# AT_TEST(TITLE, INPUT, ERROR-MSG)
# --------------------------------
# Check that compiling the parser produced from INPUT cause GCC
# to issue ERROR-MSG.
m4_pushdef([AT_TEST],
[AT_SETUP([$1])
AT_BISON_OPTION_PUSHDEFS
AT_DATA([[input.y]], [$2])
AT_BISON_CHECK([-o input.c input.y])
AT_SYNCLINES_COMPILE([input.c])
+1 -1
View File
@@ -403,7 +403,7 @@ get_args (int argc, const char **argv)
{
int res;
char *endp;
assert (argc == 2);
assert (argc == 2); (void) argc;
res = strtol (argv[1], &endp, 10);
assert (argv[1] != endp);
assert (0 <= res);