[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Bogus gl_C_COMPOUND_LITERALS test
From: |
Bruno Haible |
Subject: |
Re: Bogus gl_C_COMPOUND_LITERALS test |
Date: |
Wed, 25 Jun 2008 01:02:57 +0200 |
User-agent: |
KMail/1.5.4 |
Andreas Schwab <address@hidden> wrote:
> > The gl_C_COMPOUND_LITERALS test can never succeed, since the test
> > program is invalid C. A compound literal is never a constant
> > expression, thus cannot be used to initialize a static variable.
Thanks for the patch. Since it's not obvious that the usability of
a compound literal as initializer for global variables depends on
gcc's -std option (c99, gnu99: no, c89, gnu89: yes), I added a comment,
and committed your fix.
2008-06-24 Andreas Schwab <address@hidden>
* m4/getdate.m4 (gl_C_COMPOUND_LITERALS): Don't test whether compound
literals can be used as initializers for global variables.
--- m4/getdate.m4.orig 2008-06-25 00:56:24.000000000 +0200
+++ m4/getdate.m4 2008-06-25 00:55:20.000000000 +0200
@@ -1,13 +1,19 @@
-# getdate.m4 serial 12
-dnl Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+# getdate.m4 serial 13
+dnl Copyright (C) 2002-2006, 2008 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
+dnl Define HAVE_COMPOUND_LITERALS if the C compiler supports compound literals
+dnl as in ISO C99.
+dnl Note that compound literals such as (struct s) { 3, 4 } can be used for
+dnl initialization of stack-allocated variables, but are not constant
+dnl expressions and therefore cannot be used as initializer for global or
+dnl static variables (even though gcc supports this in pre-C99 mode).
AC_DEFUN([gl_C_COMPOUND_LITERALS],
[
AC_CACHE_CHECK([for compound literals], gl_cv_compound_literals,
- [AC_TRY_COMPILE([struct s { int i, j; }; struct s s = (struct s) { 1, 2 };],
+ [AC_TRY_COMPILE([struct s { int i, j; };],
[struct s t = (struct s) { 3, 4 };
if (t.i != 0) return 0;],
gl_cv_compound_literals=yes,