diff --git a/autopull.sh b/autopull.sh index d36290825..6cc7e5aaf 100755 --- a/autopull.sh +++ b/autopull.sh @@ -138,6 +138,7 @@ test -d gettext-tools/tree-sitter-typescript-$TREE_SITTER_TYPESCRIPT_VERSION || test -d gettext-tools/tree-sitter-d-$TREE_SITTER_D_VERSION || { func_git_clone_shallow tree-sitter-d https://github.com/gdamore/tree-sitter-d.git v$TREE_SITTER_D_VERSION (cd tree-sitter-d && patch -p1) < gettext-tools/build-aux/tree-sitter-d-portability.diff + (cd tree-sitter-d && patch -p1) < gettext-tools/build-aux/tree-sitter-d-optimization-bug.diff mkdir gettext-tools/tree-sitter-d-$TREE_SITTER_D_VERSION mv tree-sitter-d/LICENSE.txt gettext-tools/tree-sitter-d-$TREE_SITTER_D_VERSION/LICENSE mv tree-sitter-d/src gettext-tools/tree-sitter-d-$TREE_SITTER_D_VERSION/src diff --git a/gettext-tools/build-aux/tree-sitter-d-optimization-bug.diff b/gettext-tools/build-aux/tree-sitter-d-optimization-bug.diff new file mode 100644 index 000000000..03607ec68 --- /dev/null +++ b/gettext-tools/build-aux/tree-sitter-d-optimization-bug.diff @@ -0,0 +1,19 @@ +diff --git a/src/parser.c b/src/parser.c +index 7ce433c..eda3381 100644 +--- a/src/parser.c ++++ b/src/parser.c +@@ -1,3 +1,14 @@ ++/* GCC miscompiles this compilation unit on i386 at the -O2 optimization level ++ on ++ - gcc 4.5.2 (Slackware 13.37) ++ - gcc 4.6.2 (openSUSE 12.1) ++ - gcc 4.7.1 (Slackware 14) ++ - gcc 4.7.2 (Debian GNU/kFreeBSD 7.11) ++ This works around it by reducing the optimization level. */ ++#if __GNUC__ == 4 && __GNUC_MINOR__ >= 4 && __GNUC_MINOR__ < 8 && !defined __clang__ && defined __i386 ++#pragma GCC optimize ("O0") ++#endif ++ + #include "tree_sitter/parser.h" + + #if defined(__GNUC__) || defined(__clang__)