This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

"gcc" complains about a constant being non constant...(sorry for dup)


(Sorry if this is a dup, somehow my from address got mangled with the from
addr having this message being sent from my system's MAILER DAEMON!  Weird.)

I have a "proglet", included below (twice, in fact! :-), first with line numbering for referring to the error messages, and a 2nd time without line numbers to allow for easy cut & pasting to try it in your local environment.

The error output appears to indicate a problem with compile-time constant
folding.

gcc --version shows:
gcc (SUSE Linux) 4.3.2 [gcc-4_3-branch revision 141291]

Compile time output:
ct.c:10: error: initializer element is not constant
ct.c:11: error: initializer element is not constant

Here's the proglet w/line numbering for reference:
------
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <strings.h>
4  5 typedef const char * String;
6  7 static const String days [] ={"Sun", "Mon", "Tue", "Wed", "Thu" , "Fri", "Sat"};
8 static const int sizeof_days            = sizeof(days);
9 static const int sizeof_String          = sizeof(String);
10 static const int numdays                = sizeof_days / sizeof_String;
11 static const int last_index=numdays-1;
12 13 int main (){
14         printf("numdays=%d, lastidx=%d\n",numdays,last_index);
15 }
--------

if, in line 8, sizeof(days) is a constant,  AND in line 9, sizeof(String) is
a constant, then how can their division (in line 10) NOT be a constant?
Similarly, how would a "constant value" minus one, (as in line 11) also
not be a constant?

This seems too obvious for it not to have been caught before.  Is this a
designed feature deficit, or did I really stumble upon a bug in such
mature code that it wouldn't have been reported and fixed years ago?
:-)


I've also included same program, below, without line numbers (for easy cut & paste to a test file).

Am I missing something about constant folding, or is it this some unlikely
fluke?


Thanks, Linda


--------------------- #include <stdio.h> #include <stdlib.h> #include <strings.h>

typedef const char * String;

static const String days [] ={"Sun", "Mon", "Tue", "Wed", "Thu" , "Fri", "Sat"};
static const int sizeof_days            = sizeof(days);
static const int sizeof_String          = sizeof(String);
static const int numdays                = sizeof_days / sizeof_String;
static const int last_index=numdays-1;

int main (){
      printf("numdays=%d, lastidx=%d\n",numdays,last_index);
}
-----------------------------


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]