public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c/46028] New: Regression from GCC 4.4: "storage size of 'test_array' isn't constant"
@ 2010-10-14 23:20 marti at juffo dot org
  2010-10-14 23:22 ` [Bug c/46028] " pinskia at gcc dot gnu.org
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: marti at juffo dot org @ 2010-10-14 23:20 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46028

           Summary: Regression from GCC 4.4: "storage size of 'test_array'
                    isn't constant"
           Product: gcc
           Version: 4.5.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: marti@juffo.org


Created attachment 22046
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=22046
_configtest.i

When building the Python NumPy library for Python 3.x, it does the following
test compilation test:

typedef struct {float __x; float __y;} npy_check_sizeof_type;
int main ()
{
    static int test_array [1 - 2 * !(((long) (sizeof (npy_check_sizeof_type)))
<= 16.0)];
    test_array [0] = 0
...

This code compiles fine with GCC 4.4.5 on Ubuntu, but fails with GCC 4.5.1 on
Arch Linux x86_64:

% gcc _configtest.c
_configtest.c: In function 'main':
_configtest.c:5:16: error: storage size of 'test_array' isn't constant

% gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-unknown-linux-gnu/4.5.1/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configured with: ../configure --prefix=/usr
--enable-languages=c,c++,fortran,objc,obj-c++,ada --enable-shared
--enable-threads=posix --enable-__cxa_atexit --enable-clocale=gnu
--enable-gnu-unique-object --enable-lto --enable-plugin --disable-multilib
--disable-libstdcxx-pch --with-system-zlib --with-ppl --with-cloog
--libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man
--infodir=/usr/share/info
Thread model: posix
gcc version 4.5.1 (GCC)


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug c/46028] Regression from GCC 4.4: "storage size of 'test_array' isn't constant"
  2010-10-14 23:20 [Bug c/46028] New: Regression from GCC 4.4: "storage size of 'test_array' isn't constant" marti at juffo dot org
@ 2010-10-14 23:22 ` pinskia at gcc dot gnu.org
  2010-10-14 23:23 ` pinskia at gcc dot gnu.org
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: pinskia at gcc dot gnu.org @ 2010-10-14 23:22 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46028

--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> 2010-10-14 23:21:53 UTC ---
16.0 is a floating point number which I think is causing the issue.


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug c/46028] Regression from GCC 4.4: "storage size of 'test_array' isn't constant"
  2010-10-14 23:20 [Bug c/46028] New: Regression from GCC 4.4: "storage size of 'test_array' isn't constant" marti at juffo dot org
  2010-10-14 23:22 ` [Bug c/46028] " pinskia at gcc dot gnu.org
@ 2010-10-14 23:23 ` pinskia at gcc dot gnu.org
  2010-10-15  1:01 ` joseph at codesourcery dot com
  2011-03-14 10:37 ` philipp at marek dot priv.at
  3 siblings, 0 replies; 5+ messages in thread
From: pinskia at gcc dot gnu.org @ 2010-10-14 23:23 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46028

--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> 2010-10-14 23:23:10 UTC ---
Comeau C/C++ gives the following error message for the above testcase:
"ComeauTest.c", line 5: error: expression must have integral type
  <= 16.0)];


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug c/46028] Regression from GCC 4.4: "storage size of 'test_array' isn't constant"
  2010-10-14 23:20 [Bug c/46028] New: Regression from GCC 4.4: "storage size of 'test_array' isn't constant" marti at juffo dot org
  2010-10-14 23:22 ` [Bug c/46028] " pinskia at gcc dot gnu.org
  2010-10-14 23:23 ` pinskia at gcc dot gnu.org
@ 2010-10-15  1:01 ` joseph at codesourcery dot com
  2011-03-14 10:37 ` philipp at marek dot priv.at
  3 siblings, 0 replies; 5+ messages in thread
From: joseph at codesourcery dot com @ 2010-10-15  1:01 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46028

--- Comment #3 from joseph at codesourcery dot com <joseph at codesourcery dot com> 2010-10-15 01:01:13 UTC ---
Note that you can't trivially extend the laxity in

                    /* Handle a size folded to an integer constant but
                       not an integer constant expression.  */
                    if (!size_int_const)
                      {
                        /* If this is a file scope declaration of an
                           ordinary identifier, this is invalid code;
                           diagnosing it here and not subsequently
                           treating the type as variable-length avoids
                           more confusing diagnostics later.  */
                        if ((decl_context == NORMAL || decl_context == FIELD)
                            && current_scope == file_scope)
                          pedwarn (input_location, 0,
                                   "variably modified %qE at file scope",
                                   name);
                        else
                          this_size_varies = size_varies = true;
                        warn_variable_length_array (name, size);
                      }

(that does a pedwarn rather than an error if this occurs at file scope) to 
the present case of a static array inside a function, because it's valid 
to have a block scope static *pointer* to VLA (which is however different 
from a pointer to non-VLA), so you'd need to be lax only if it's a static 
array rather than a pointer to such.


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [Bug c/46028] Regression from GCC 4.4: "storage size of 'test_array' isn't constant"
  2010-10-14 23:20 [Bug c/46028] New: Regression from GCC 4.4: "storage size of 'test_array' isn't constant" marti at juffo dot org
                   ` (2 preceding siblings ...)
  2010-10-15  1:01 ` joseph at codesourcery dot com
@ 2011-03-14 10:37 ` philipp at marek dot priv.at
  3 siblings, 0 replies; 5+ messages in thread
From: philipp at marek dot priv.at @ 2011-03-14 10:37 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46028

philipp at marek dot priv.at changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |philipp at marek dot
                   |                            |priv.at

--- Comment #4 from philipp at marek dot priv.at 2011-03-14 10:37:15 UTC ---
This fails, too: "error: storage size of ‘sv’ isn’t constant"

int main(void)
{
    const int len = 20;
    static char sv[len];
}



Similarly, gcc 4.4 accepted 

  #define CONST_STRING "aaa"
  static char x[strlen(CONST_STRING)];

but gcc-4.5 does not.
(Of course, I could overload "strlen" ... but whether that's enough reason to
reject that?)


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2011-03-14 10:37 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-10-14 23:20 [Bug c/46028] New: Regression from GCC 4.4: "storage size of 'test_array' isn't constant" marti at juffo dot org
2010-10-14 23:22 ` [Bug c/46028] " pinskia at gcc dot gnu.org
2010-10-14 23:23 ` pinskia at gcc dot gnu.org
2010-10-15  1:01 ` joseph at codesourcery dot com
2011-03-14 10:37 ` philipp at marek dot priv.at

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).