Suppress conflicting types for builtins warnings
authorHerbert Valerio Riedel <hvr@gnu.org>
Sat, 21 Nov 2015 14:48:49 +0000 (15:48 +0100)
committerBen Gamari <ben@smart-cactus.org>
Sat, 21 Nov 2015 14:48:49 +0000 (15:48 +0100)
GCC 4.0 and later warn about type-conflicting prototypes for built-in
functions such as `strlen`. This is a problem for the via-c backend as
it generates code such as

  typedef void *(*(*StgFunPtr)(void))(void);
  extern StgFunPtr strlen();

However, by using the `-fno-builtin` flag, GCC is told not to try to
auto-detect such built-in functions and instead treat them as ordinary
external functions.  This also suppresses this warning.

This address #7660

Test Plan: IIAM

Reviewers: bgamari, austin

Reviewed By: austin

Subscribers: thomie, erikd

Differential Revision: https://phabricator.haskell.org/D1506

GHC Trac Issues: #7660

aclocal.m4

index 0c8252c..e0cd330 100644 (file)
@@ -1436,6 +1436,9 @@ AC_CACHE_CHECK([for extra options to pass gcc when compiling via C], [fp_cv_gcc_
  FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-ge], [3.4],
   [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -fwrapv"],
   [])
+ FP_COMPARE_VERSIONS([$fp_cv_gcc_version], [-ge], [4.0],
+  [fp_cv_gcc_extra_opts="$fp_cv_gcc_extra_opts -fno-builtin"],
+  [])
 ])
 AC_SUBST([GccExtraViaCOpts],$fp_cv_gcc_extra_opts)
 ])