changeset 4584:a0e30199373f

build-flex: add patch for new gcc version issues (Bug #52708) * src/build-flex-1-fixes.patch: new file * dist-files.mk: add ref to build-flex-1-fixes.patch
author John D
date Thu, 21 Dec 2017 09:58:43 -0500
parents 50ce0842665c
children b4f4fbbfdadd
files dist-files.mk src/build-flex-1-fixes.patch
diffstat 2 files changed, 51 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/dist-files.mk	Tue Dec 19 13:13:25 2017 -0500
+++ b/dist-files.mk	Thu Dec 21 09:58:43 2017 -0500
@@ -25,6 +25,7 @@
   build-binutils.mk \
   build-bison.mk \
   build-cmake.mk \
+  build-flex-1-fixes.patch \
   build-flex.mk \
   build-gawk.mk \
   build-gcc.mk \
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/build-flex-1-fixes.patch	Thu Dec 21 09:58:43 2017 -0500
@@ -0,0 +1,50 @@
+From 4b5111d9772b5c160340ca96f08d30d7f6db5cda Mon Sep 17 00:00:00 2001
+From: Explorer09 <explorer09@gmail.com>
+Date: Mon, 4 Sep 2017 08:28:53 +0800
+Subject: [PATCH] scanner: Include flexdef.h at %top block of scan.l
+
+config.h may define macros that alter the API of the standard library
+funtions, and so it should be included before any other standard
+header, even before the skeleton's standard header inclusion.
+
+For example: config.h may #define _GNU_SOURCE that would expose the
+reallocarray() prototype from <stdlib.h> on glibc 2.26+ systems. If we
+include <stdlib.h> before config.h, reallocarray() would not be
+available for use in lex file since the second include doesn't help
+due to header guard.
+
+For now our config.h might `#define malloc rpl_malloc` -- this
+substitution must work before including stdlib.h, or else the compiler
+will complain about missing prototypes, and may result in incorrect
+code in scan.l (gcc warning: return makes pointer from integer without
+a cast [-Wint-conversion]).
+
+Fixes #247.
+---
+ src/scan.l | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/src/scan.l b/src/scan.l
+index 3995bcf1..4f497acd 100644
+--- a/src/scan.l
++++ b/src/scan.l
+@@ -1,5 +1,11 @@
+ /* scan.l - scanner for flex input -*-C-*- */
+ 
++%top{
++/* flexdef.h includes config.h, which may contain macros that alter the API */
++/* of libc functions. Must include first before any libc header. */
++#include "flexdef.h"
++}
++
+ %{
+ /*  Copyright (c) 1990 The Regents of the University of California. */
+ /*  All rights reserved. */
+@@ -32,7 +38,6 @@
+ /*  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */
+ /*  PURPOSE. */
+ 
+-#include "flexdef.h"
+ #include "parse.h"
+ extern bool tablesverify, tablesext;
+ extern int trlcontxt; /* Set in  parse.y for each rule. */