re PR middle-end/33631 (auto structure not initialized correctly)

2008-02-04  Richard Guenther  <rguenther@suse.de>

	PR middle-end/33631
	* expr.c (count_type_elements): Give for unions instead of
	guessing.

	* gcc.c-torture/execute/pr33631.c: New testcase.

From-SVN: r132096
This commit is contained in:
Richard Guenther 2008-02-04 21:18:32 +00:00 committed by Richard Biener
parent 70c7fe74f4
commit 22199fd25d
4 changed files with 26 additions and 8 deletions

View File

@ -1,3 +1,9 @@
2008-02-04 Richard Guenther <rguenther@suse.de>
PR middle-end/33631
* expr.c (count_type_elements): Give for unions instead of
guessing.
2008-02-04 Richard Guenther <rguenther@suse.de>
PR middle-end/35043

View File

@ -4975,14 +4975,7 @@ count_type_elements (const_tree type, bool allow_flexarr)
case UNION_TYPE:
case QUAL_UNION_TYPE:
{
/* Ho hum. How in the world do we guess here? Clearly it isn't
right to count the fields. Guess based on the number of words. */
HOST_WIDE_INT n = int_size_in_bytes (type);
if (n < 0)
return -1;
return n / UNITS_PER_WORD;
}
return -1;
case COMPLEX_TYPE:
return 2;

View File

@ -1,3 +1,8 @@
2008-02-04 Richard Guenther <rguenther@suse.de>
PR middle-end/33631
* gcc.c-torture/execute/pr33631.c: New testcase.
2008-02-04 Richard Guenther <rguenther@suse.de>
PR middle-end/35043

View File

@ -0,0 +1,14 @@
typedef union
{
int __lock;
} pthread_mutex_t;
extern void abort (void);
int main()
{
struct { int c; pthread_mutex_t m; } r = { .m = 0 };
if (r.c != 0)
abort ();
return 0;
}