diff options
-rw-r--r-- | .prev-version | 2 | ||||
-rw-r--r-- | .travis.yml | 96 | ||||
-rw-r--r-- | Makefile.am | 4 | ||||
-rw-r--r-- | NEWS | 12 | ||||
-rw-r--r-- | TODO | 19 | ||||
-rw-r--r-- | data/skeletons/c-like.m4 | 6 | ||||
-rw-r--r-- | tests/c++.at | 4 | ||||
-rw-r--r-- | tests/input.at | 19 | ||||
-rw-r--r-- | tests/local.mk | 1 | ||||
-rw-r--r-- | tests/m4.at | 46 | ||||
-rw-r--r-- | tests/regression.at | 23 | ||||
-rw-r--r-- | tests/testsuite.at | 2 |
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 $< @@ -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 @@ -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]) |