summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.prev-version2
-rw-r--r--.travis.yml96
-rw-r--r--Makefile.am4
-rw-r--r--NEWS12
-rw-r--r--TODO19
-rw-r--r--data/skeletons/c-like.m46
-rw-r--r--tests/c++.at4
-rw-r--r--tests/input.at19
-rw-r--r--tests/local.mk1
-rw-r--r--tests/m4.at46
-rw-r--r--tests/regression.at23
-rw-r--r--tests/testsuite.at2
12 files changed, 184 insertions, 50 deletions
diff --git a/.prev-version b/.prev-version
index 9575d51b..b7276283 100644
--- a/.prev-version
+++ b/.prev-version
@@ -1 +1 @@
-3.6.1
+3.6.2
diff --git a/.travis.yml b/.travis.yml
index 162b9487..86a40b3c 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -69,53 +69,53 @@ jobs:
# Start with three completely different environments, to get errors asap.
- - name: "GCC 9 -O3"
+ - name: "GCC 10 -O3"
stage: check
os: linux
dist: bionic
- addons: &gcc9
+ addons: &gcc10
apt:
sources:
# See https://github.com/travis-ci/apt-source-safelist/issues/410.
- sourceline: 'ppa:ubuntu-toolchain-r/test'
- packages: g++-9
+ packages: g++-10
env:
- - CC=gcc-9
- - CXX=g++-9
+ - CC=gcc-10
+ - CXX=g++-10
- CONFIGUREFLAGS='CPPFLAGS=-DNDEBUG CFLAGS=-O3 CXXFLAGS=-O3'
# ASAN is time consuming, and we timeout the 50min granted by
# Travis if we run all the tests in one go. Run in two parts.
- - name: "Clang 9 libc++ and ASAN part 1"
+ - name: "Clang 10 libc++ and ASAN part 1"
stage: check
os: linux
dist: bionic
- addons: &clang9
+ addons: &clang10
apt:
sources:
# See https://github.com/travis-ci/apt-source-safelist/issues/410.
- sourceline: 'ppa:ubuntu-toolchain-r/test'
- - sourceline: 'deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-9 main'
+ - sourceline: 'deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-10 main'
key_url: 'https://apt.llvm.org/llvm-snapshot.gpg.key'
packages:
- - clang-9
- - libc++-9-dev
- - libc++abi-9-dev
+ - clang-10
+ - libc++-10-dev
+ - libc++abi-10-dev
env:
# Do not use ASAN with ubuntu's libc++: https://bugs.llvm.org/show_bug.cgi?id=17379
- - CC='clang-9 -fsanitize=address'
- - CXX='clang++-9 -fsanitize=address -stdlib=libc++'
+ - CC='clang-10 -fsanitize=address'
+ - CXX='clang++-10 -fsanitize=address -stdlib=libc++'
- PART=1
- - name: "Clang 9 libc++ and ASAN part 2"
+ - name: "Clang 10 libc++ and ASAN part 2"
stage: check
os: linux
dist: bionic
- addons: *clang9
+ addons: *clang10
env:
# Do not use ASAN with ubuntu's libc++: https://bugs.llvm.org/show_bug.cgi?id=17379
- - CC='clang-9 -fsanitize=address'
- - CXX='clang++-9 -fsanitize=address -stdlib=libc++'
+ - CC='clang-10 -fsanitize=address'
+ - CXX='clang++-10 -fsanitize=address -stdlib=libc++'
- PART=2
- name: "ICC"
@@ -135,46 +135,41 @@ jobs:
packages:
- intel-oneapi-icc
- ## ------- ##
- ## First. ##
- ## ------- ##
-
- # Start with three completely different environments, to get
- # errors asap.
-
- - name: "ARM64: GCC 9 -O3 part 1"
+ - name: "ARM64: GCC 10 -O3 part 1"
stage: check
os: linux
arch: arm64
dist: bionic
- addons: *gcc9
+ addons: *gcc10
env:
- - CC=gcc-9
- - CXX=g++-9
+ - CC=gcc-10
+ - CXX=g++-10
- CONFIGUREFLAGS='CPPFLAGS=-DNDEBUG CFLAGS=-O3 CXXFLAGS=-O3'
- PART=1
+ # GCC10 on PPC seems to be buggy.
+ # E.g., https://travis-ci.org/github/akimd/bison/jobs/687812428.
- name: "PPC64le: GCC 9 part 1"
stage: check
os: linux
arch: ppc64le
dist: bionic
- addons: *gcc9
+ addons: *gcc10
env:
- CC=gcc-9
- CXX=g++-9
- CONFIGUREFLAGS='CFLAGS=-O3 CXXFLAGS=-O3'
- PART=1
- - name: "s390x: GCC 9 part 1"
+ - name: "s390x: GCC 10 part 1"
stage: check
os: linux
arch: s390x
dist: bionic
- addons: *gcc9
+ addons: *gcc10
env:
- - CC=gcc-9
- - CXX=g++-9
+ - CC=gcc-10
+ - CXX=g++-10
- CONFIGUREFLAGS='CFLAGS=-O3 CXXFLAGS=-O3'
- PART=1
@@ -182,15 +177,19 @@ jobs:
## GCC. ##
## ----- ##
- - name: "GCC 8 with sanitizers part 1"
+ - name: "GCC 9 with sanitizers part 1"
+ stage: check
os: linux
dist: bionic
addons:
apt:
- packages: g++-8
+ sources:
+ # See https://github.com/travis-ci/apt-source-safelist/issues/410.
+ - sourceline: 'ppa:ubuntu-toolchain-r/test'
+ packages: g++-9
env:
- - CC='gcc-8 -fsanitize=undefined,address -fno-omit-frame-pointer'
- - CXX='g++-8 -fsanitize=undefined,address -fno-omit-frame-pointer'
+ - CC='gcc-9 -fsanitize=undefined,address -fno-omit-frame-pointer'
+ - CXX='g++-9 -fsanitize=undefined,address -fno-omit-frame-pointer'
- CONFIGUREFLAGS='CFLAGS=-O1 CXXFLAGS=-O1'
- PART=1
@@ -292,7 +291,27 @@ jobs:
## Clang. ##
## ------- ##
- - name: "Clang 8 -O3"
+ - name: "Clang 9 -O3"
+ stage: check
+ os: linux
+ dist: bionic
+ addons:
+ apt:
+ sources:
+ # See https://github.com/travis-ci/apt-source-safelist/issues/410.
+ - sourceline: 'ppa:ubuntu-toolchain-r/test'
+ - sourceline: 'deb http://apt.llvm.org/bionic/ llvm-toolchain-bionic-9 main'
+ key_url: 'https://apt.llvm.org/llvm-snapshot.gpg.key'
+ packages:
+ - clang-9
+ - libc++-9-dev
+ - libc++abi-9-dev
+ env:
+ - CC='clang-9'
+ - CXX='clang++-9 -stdlib=libc++'
+ - CONFIGUREFLAGS='CPPFLAGS=-DNDEBUG CFLAGS=-O3 CXXFLAGS=-O3'
+
+ - name: "Clang 8"
stage: check
os: linux
dist: bionic
@@ -305,7 +324,6 @@ jobs:
env:
- CC=clang-8
- CXX='clang++-8 -stdlib=libc++'
- - CONFIGUREFLAGS='CPPFLAGS=-DNDEBUG CFLAGS=-O3 CXXFLAGS=-O3'
- name: "Clang 7"
stage: check
diff --git a/Makefile.am b/Makefile.am
index 677f9b01..58650e09 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -127,3 +127,7 @@ gen-ChangeLog:
--since=$(gen_start_date) > $$cl.tmp && \
mv -f $$cl.tmp $$cl; \
fi
+
+# Useful to debug.
+.c.i:
+ $(CC) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -o $@ -E $<
diff --git a/NEWS b/NEWS
index 6420a763..f5eb8032 100644
--- a/NEWS
+++ b/NEWS
@@ -3,6 +3,18 @@ GNU Bison NEWS
* Noteworthy changes in release ?.? (????-??-??) [?]
+* Noteworthy changes in release 3.6.2 (2020-05-17) [stable]
+
+** Bug fixes
+
+ Some tests were fixed.
+
+ When token aliases contain comment delimiters:
+
+ %token FOO "/* foo */"
+
+ bison used to emit "nested" comments, which is invalid C.
+
* Noteworthy changes in release 3.6.1 (2020-05-10) [stable]
** Bug fixes
diff --git a/TODO b/TODO
index d8f175f8..7cdd17d5 100644
--- a/TODO
+++ b/TODO
@@ -130,6 +130,25 @@ Rici:
> At a minimum, the fact that yyclearin does not invoke the %destructor
> should be highlighted in the documentation, since it is not at all obvious.
+** Issues in i18n
+
+Les catégories d'avertissements incluent :
+ conflicts-sr conflits S/R (activé par défaut)
+ conflicts-rr conflits R/R (activé par défaut)
+ dangling-alias l'alias chaîne n'est pas attaché à un symbole
+ deprecated construction obsolète
+ empty-rule règle vide sans %empty
+ midrule-values valeurs de règle intermédiaire non définies ou inutilisées
+ precedence priorité et associativité inutiles
+ yacc incompatibilités avec POSIX Yacc
+ other tous les autres avertissements (activé par défaut)
+ all tous les avertissements sauf « dangling-alias » et « yacc »
+ no-CATEGORY désactiver les avertissements dans CATEGORIE
+ none désactiver tous les avertissements
+ error[=CATEGORY] traiter les avertissements comme des erreurs
+
+Line -1 and -3 should mention CATEGORIE, not CATEGORY.
+
* Bison 3.8
** Unit rules / Injection rules (Akim Demaille)
Maybe we could expand unit rules (or "injections", see
diff --git a/data/skeletons/c-like.m4 b/data/skeletons/c-like.m4
index e0460d48..fb0dc53b 100644
--- a/data/skeletons/c-like.m4
+++ b/data/skeletons/c-like.m4
@@ -22,10 +22,14 @@
# Put TEXT in comment. Avoid trailing spaces: don't indent empty lines.
# Avoid adding indentation to the first line, as the indentation comes
# from OPEN. That's why we don't patsubst([$1], [^\(.\)], [ \1]).
+# Turn "*/" in TEXT into "* /" so that we don't unexpectedly close
+# the comments before its end.
#
# Prefix all the output lines with PREFIX.
m4_define([_b4_comment],
-[$2[]m4_bpatsubst(m4_expand([[$1]]), [
+[$2[]m4_bpatsubsts(m4_expand([$1]),
+ [[*]/], [*\\/],
+ [/[*]], [/\\*], [
\(.\)], [
$3\1])$4])
diff --git a/tests/c++.at b/tests/c++.at
index 5789c8b0..e3a13224 100644
--- a/tests/c++.at
+++ b/tests/c++.at
@@ -161,8 +161,8 @@ int main()
{
parser::symbol_type s = parser::make_INT (12);
assert_eq (s.kind (), parser::symbol_kind::S_INT);
- assert_eq (parser::symbol_name (s.kind ()), "\"int\"");
- assert_eq (s.name (), "\"int\"");
+ assert_eq (parser::symbol_name (s.kind ()), std::string ("\"int\""));
+ assert_eq (s.name (), std::string ("\"int\""));
assert_eq (s.value.as<int> (), 12);
}
diff --git a/tests/input.at b/tests/input.at
index 77fa3e59..e8d67796 100644
--- a/tests/input.at
+++ b/tests/input.at
@@ -1352,8 +1352,20 @@ AT_BISON_CHECK([-fcaret input.y], [1], [],
]])
+# Clang chokes on some of our comments, because it tries to "parse"
+# some documentation directives in the comments:
+#
+# input.c:166:50: error: '\a' command does not have a valid word argument [-Werror,-Wdocumentation]
+# FAKE = 258 /* "fake [] \a\b\f\n\r\t\v\"'?\\[\\ ??!??'??(??)??-??/??<??=??> \001\001" */
+# ~~^
AT_DATA_GRAMMAR([input.y],
-[[%{
+[[%code requires {
+#if defined __clang__ && 10 <= __clang_major__
+# pragma clang diagnostic ignored "-Wdocumentation"
+#endif
+}
+
+%{
/* This is seen in GCC: a %{ and %} in middle of a comment. */
const char *foo = "So %{ and %} can be here too.";
@@ -1424,6 +1436,11 @@ char quote[] = "@:>@@:>@,";
/* Exercise quotes in strings. */
%token FAKE "fake @<:@@:>@ \a\b\f\n\r\t\v\"\'\?\\\u005B\U0000005c ??!??'??(??)??-??/??<??=??> \x1\1"
+/* Beware of the generated comments that embed string aliases that
+ might close the comment. */
+%token COMMENT_CLOSE "*/"
+%token COMMENT "/* comment */"
+
%%
/* Exercise M4 quoting: '@:>@@:>@', @<:@, 1. */
exp: '@<:@' '\1' two '$' '@' '{' oline output.or.oline.opt
diff --git a/tests/local.mk b/tests/local.mk
index fac8426f..a62fe267 100644
--- a/tests/local.mk
+++ b/tests/local.mk
@@ -56,6 +56,7 @@ TESTSUITE_AT = \
%D%/java.at \
%D%/javapush.at \
%D%/local.at \
+ %D%/m4.at \
%D%/named-refs.at \
%D%/output.at \
%D%/package.m4 \
diff --git a/tests/m4.at b/tests/m4.at
new file mode 100644
index 00000000..440e975a
--- /dev/null
+++ b/tests/m4.at
@@ -0,0 +1,46 @@
+# Basic m4 macros. -*- Autotest -*-
+
+# Copyright (C) 2020 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 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+AT_BANNER([[M4 Macros.]])
+
+
+AT_SETUP([Generating Comments])
+
+AT_DATA([input.y],
+[%%
+exp:
+])
+
+AT_DATA([input.m4],
+[[m4@&t@_include(b4_skeletonsdir/[c.m4])
+
+b4_output_begin([output.txt])
+b4_comment([["/* () */"]])
+b4_comment([["/* ( */"]])
+b4_comment([["/* ) */"]])
+b4_output_end([output.txt])
+]])
+
+AT_BISON_CHECK([-S ./input.m4 input.y])
+
+AT_CHECK([cat output.txt], [],
+[/* "/\* () *\/" */
+/* "/\* ( *\/" */
+/* "/\* ) *\/" */
+])
+
+AT_CLEANUP
diff --git a/tests/regression.at b/tests/regression.at
index 833b4f0b..7c67d1aa 100644
--- a/tests/regression.at
+++ b/tests/regression.at
@@ -372,8 +372,19 @@ m4_pushdef([AT_TEST],
AT_BISON_OPTION_PUSHDEFS([$1])
+
+# Clang chokes on some of our comments, because it tries to "parse"
+# some documentation directives in the comments:
+#
+# input.c:131:48: error: '\a' command does not have a valid word argument [-Werror,-Wdocumentation]
+# SPECIAL = 261 /* "\\'?\"\a\b\f\n\r\t\v\001\201\001\201??!" */
+# ~~^
AT_DATA_GRAMMAR([input.y],
[%{
+#if defined __clang__ && 10 <= __clang_major__
+# pragma clang diagnostic ignored "-Wdocumentation"
+#endif
+
]AT_YYERROR_DECLARE[
]AT_YYLEX_DECLARE[
%}
@@ -398,14 +409,14 @@ exp: ]AT_ERROR_VERBOSE_IF(["\\\'\?\"\a\b\f\n\r\t\v\001\201\x001\x000081??!"], ["
# C-string literal. Also notice that unnecessary escaping, such as "\?", from
# the user specification is eliminated.
AT_BISON_CHECK([-fcaret -o input.c input.y], [[0]], [[]],
-[[input.y:22.8-14: warning: symbol SPECIAL redeclared [-Wother]
- 22 | %token SPECIAL "\\\'\?\"\a\b\f\n\r\t\v\001\201\x001\x000081??!"
+[[input.y:26.8-14: warning: symbol SPECIAL redeclared [-Wother]
+ 26 | %token SPECIAL "\\\'\?\"\a\b\f\n\r\t\v\001\201\x001\x000081??!"
| ^~~~~~~
-input.y:21.8-14: note: previous declaration
- 21 | %token SPECIAL "\\\'\?\"\a\b\f\n\r\t\v\001\201\x001\x000081??!"
+input.y:25.8-14: note: previous declaration
+ 25 | %token SPECIAL "\\\'\?\"\a\b\f\n\r\t\v\001\201\x001\x000081??!"
| ^~~~~~~
-input.y:22.16-63: warning: symbol "\\'?\"\a\b\f\n\r\t\v\001\201\001\201??!" used more than once as a literal string [-Wother]
- 22 | %token SPECIAL "\\\'\?\"\a\b\f\n\r\t\v\001\201\x001\x000081??!"
+input.y:26.16-63: warning: symbol "\\'?\"\a\b\f\n\r\t\v\001\201\001\201??!" used more than once as a literal string [-Wother]
+ 26 | %token SPECIAL "\\\'\?\"\a\b\f\n\r\t\v\001\201\x001\x000081??!"
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
]])
diff --git a/tests/testsuite.at b/tests/testsuite.at
index e2b72b84..44393db5 100644
--- a/tests/testsuite.at
+++ b/tests/testsuite.at
@@ -16,6 +16,8 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
+# Basic M4 macros.
+m4_include([m4.at])
# Resistance to user bugs.
m4_include([input.at])