Commit 53650abe by Andrew Pinski Committed by Andrew Pinski

re PR c/31499 (rejects vector int a[] = {1,1,1,1,1};)

2009-04-22  Andrew Pinski  <andrew_pinski@playstation.sony.com>

        PR C/31499
        * c-typeck.c (process_init_element): Treat VECTOR_TYPE like ARRAY_TYPE
        and RECORD_TYPE/UNION_TYPE.  When outputing the actual element and the
        value is a VECTOR_CST, the element type is the element type of the
        vector.

2009-04-22  Andrew Pinski  <andrew_pinski@playstation.sony.com>

        PR C/31499
        * gcc.dg/vector-init-1.c: New testcase.
        * gcc.dg/vector-init-2.c: New testcase.

From-SVN: r146628
parent 912bb795
2009-04-22 Andrew Pinski <andrew_pinski@playstation.sony.com>
PR C/31499
* c-typeck.c (process_init_element): Treat VECTOR_TYPE like ARRAY_TYPE
and RECORD_TYPE/UNION_TYPE. When outputing the actual element and the
value is a VECTOR_CST, the element type is the element type of the
vector.
2009-04-22 DJ Delorie <dj@redhat.com>
* config/m32c/m32c.h: Update GTY annotations to new syntax.
......
......@@ -7287,7 +7287,8 @@ process_init_element (struct c_expr value, bool implicit)
|| TREE_CODE (constructor_type) == UNION_TYPE)
&& constructor_fields == 0)
process_init_element (pop_init_level (1), true);
else if (TREE_CODE (constructor_type) == ARRAY_TYPE
else if ((TREE_CODE (constructor_type) == ARRAY_TYPE
|| TREE_CODE (constructor_type) == VECTOR_TYPE)
&& (constructor_max_index == 0
|| tree_int_cst_lt (constructor_max_index,
constructor_index)))
......@@ -7359,7 +7360,7 @@ process_init_element (struct c_expr value, bool implicit)
&& value.value != error_mark_node
&& TYPE_MAIN_VARIANT (TREE_TYPE (value.value)) != fieldtype
&& (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
|| fieldcode == UNION_TYPE))
|| fieldcode == UNION_TYPE || fieldcode == VECTOR_TYPE))
{
push_init_level (1);
continue;
......@@ -7450,7 +7451,7 @@ process_init_element (struct c_expr value, bool implicit)
&& value.value != error_mark_node
&& TYPE_MAIN_VARIANT (TREE_TYPE (value.value)) != fieldtype
&& (fieldcode == RECORD_TYPE || fieldcode == ARRAY_TYPE
|| fieldcode == UNION_TYPE))
|| fieldcode == UNION_TYPE || fieldcode == VECTOR_TYPE))
{
push_init_level (1);
continue;
......@@ -7491,7 +7492,7 @@ process_init_element (struct c_expr value, bool implicit)
&& value.value != error_mark_node
&& TYPE_MAIN_VARIANT (TREE_TYPE (value.value)) != elttype
&& (eltcode == RECORD_TYPE || eltcode == ARRAY_TYPE
|| eltcode == UNION_TYPE))
|| eltcode == UNION_TYPE || eltcode == VECTOR_TYPE))
{
push_init_level (1);
continue;
......@@ -7540,9 +7541,13 @@ process_init_element (struct c_expr value, bool implicit)
/* Now output the actual element. */
if (value.value)
output_init_element (value.value, value.original_type,
strict_string, elttype,
constructor_index, 1, implicit);
{
if (TREE_CODE (value.value) == VECTOR_CST)
elttype = TYPE_MAIN_VARIANT (constructor_type);
output_init_element (value.value, value.original_type,
strict_string, elttype,
constructor_index, 1, implicit);
}
constructor_index
= size_binop (PLUS_EXPR, constructor_index, bitsize_one_node);
......
2009-04-22 Andrew Pinski <andrew_pinski@playstation.sony.com>
PR C/31499
* gcc.dg/vector-init-1.c: New testcase.
* gcc.dg/vector-init-2.c: New testcase.
2009-04-22 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/enum2.adb: New test.
......
/* { dg-do compile } */
/* PR C/31499, test that the C front-end treats vectors like an array. */
#define vector __attribute__((__vector_size__(4*sizeof(int)) ))
vector signed int v1[]={0,1,2,3,4,5,6,7};
/* { dg-do run } */
/* PR C/31499, test that the C front-end treats vectors like an array
and that it works at runtime. */
#define vector __attribute__((__vector_size__(4*sizeof(int)) ))
vector signed int v1[]={0,1,2,3,4,5,6,7};
int main(void)
{
int i;
for (i = 0; i < sizeof(v1)/sizeof(v1[0]); i++)
{
vector int t = v1[i];
int *d = (int*)&t;
int j;
for (j = 0; j < 4; j++)
{
if (d[j] != i * 4 + j)
__builtin_abort ();
}
}
return 0;
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment