configure.ac: drop unnecessary gnu99 extension checks

Message ID 20210810125651.3075622-1-adrian.ratiu@collabora.com
State Superseded
Headers
Series configure.ac: drop unnecessary gnu99 extension checks |

Commit Message

Adrian Ratiu Aug. 10, 2021, 12:56 p.m. UTC
  It is true that Clang does not support all gnu99 extensions [1],
but not all of them are used in the codebase and over time there
have been code cleanup efforts to improve Clang support.

For example after commit 779c57ea ("readelf: Pull advance_pc()
in file scope") there are no more nested function declarations
and elfutils now builds fine with Clang.

So in the interest of enabling Clang builds we remove the only
remaining blocker: the configure checks for nested functions and
variable length arrays which are also unused.

[1] https://sourceware.org/bugzilla/show_bug.cgi?id=24964
Signed-off-by: Adrian Ratiu <adrian.ratiu@collabora.com>
---
 ChangeLog    |  4 ++++
 configure.ac | 11 -----------
 2 files changed, 4 insertions(+), 11 deletions(-)
  

Comments

Mark Wielaard Aug. 23, 2021, 8:21 p.m. UTC | #1
Hi Adrian,

On Tue, Aug 10, 2021 at 03:56:51PM +0300, Adrian Ratiu via Elfutils-devel wrote:
> So in the interest of enabling Clang builds we remove the only
> remaining blocker: the configure checks for nested functions and
> variable length arrays which are also unused.

Can we just remove the whole configure test? And change the AC_PROG_CC
to AC_PROG_CC_C99?

The patch doesn't update the comments about what is being tested, and
the only thing being tested now is Mixed Declarations and Code, which
is a standard part of C99.

Have you tried running make check with an alternative compiler? There
are a couple of "self tests" which run the code on the just produced
binaries and it would be interesting to know whether or not all tests
pass.

Thanks,

Mark
  
Adrian Ratiu Aug. 26, 2021, noon UTC | #2
Hi Mark,

On Mon, 23 Aug 2021, Mark Wielaard <mark@klomp.org> wrote:
> Hi Adrian, 
> 
> On Tue, Aug 10, 2021 at 03:56:51PM +0300, Adrian Ratiu via 
> Elfutils-devel wrote: 
>> So in the interest of enabling Clang builds we remove the only 
>> remaining blocker: the configure checks for nested functions 
>> and variable length arrays which are also unused. 
> 
> Can we just remove the whole configure test? And change the 
> AC_PROG_CC to AC_PROG_CC_C99?

Yes, I think we can do that.
 
> 
> The patch doesn't update the comments about what is being 
> tested, and the only thing being tested now is Mixed 
> Declarations and Code, which is a standard part of C99.

Good catch. I'll update and send a v2.
 
> 
> Have you tried running make check with an alternative compiler? 
> There are a couple of "self tests" which run the code on the 
> just produced binaries and it would be interesting to know 
> whether or not all tests pass.

I did comparative builds within the Gentoo/ChromeOS build 
environments with the GNU/GCC 10.2 and LLVM/Clang 13.0 toolchains.

With GCC:

# TOTAL: 224 PASS:  214 SKIP:  7 XFAIL: 0 FAIL:  3 XPASS: 0 ERROR: 
# 0 

With Clang:

# TOTAL: 224 PASS:  212 SKIP:  7 XFAIL: 0 FAIL:  5 XPASS: 0 ERROR: 
# 0 

The two tests which failed are run-strip-strmerge.sh and 
run-reverse-sections-self.sh because the `.gnu.version` is 
invalid.

Links are below for the gcc [1] vs clang [2] test-suite.logs.

[1] 
https://drive.google.com/file/d/1uQSHarIQwA07fIih0ZHHt8zfim_BWRYP/view?usp=sharing
[2] 
https://drive.google.com/file/d/1q7iGXjutyoLgM4iOm_rFMVxT11dnwpt5/view?usp=sharing

Thanks,
Adrian

>
> Thanks,
>
> Mark
  

Patch

diff --git a/ChangeLog b/ChangeLog
index 12b8f403..32f5b68d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@ 
+2021-08-10  Adrian Ratiu  <adrian.ratiu@collabora.com>
+
+	* configure.ac (AC_CACHE_CHECK): Drop unnecessary std=gnu99 checks
+
 2021-07-28  Mark Wielaard  <mark@klomp.org>
 
 	* configure.ac (AC_CHECK_DECLS): Add reallocarray check.
diff --git a/configure.ac b/configure.ac
index 7caff2c5..c14eb9f6 100644
--- a/configure.ac
+++ b/configure.ac
@@ -112,17 +112,6 @@  AC_COMPILE_IFELSE([AC_LANG_SOURCE([dnl
 int foo (int a)
 {
   for (int i = 0; i < a; ++i) if (i % 4) break; int s = a; return s;
-}
-
-double bar (double a, double b)
-{
-  double square (double z) { return z * z; }
-  return square (a) + square (b);
-}
-
-void baz (int n)
-{
-  struct S { int x[[n]]; };
 }])],
 		  ac_cv_c99=yes, ac_cv_c99=no)
 CFLAGS="$old_CFLAGS"])