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



--- Comment #11 from vincenzo Innocente <vincenzo.innocente at cern dot ch> 
2012-12-03 21:58:05 UTC ---

thanks Marc,

adding your proposed change above Jason's one make my full test works (but when

subscripting is involved..)

this is my current svn diff

Hope that c++ maintainers came make, out of all this, an optimal patch for the

trunk. 

I'm not expert enough on the details to judge what best (besides that I did not

run regression!)



Index: gcc/cp/tree.c

===================================================================

--- gcc/cp/tree.c    (revision 194084)

+++ gcc/cp/tree.c    (working copy)

@@ -2468,7 +2468,8 @@

     case COMPLEX_CST:

       return cp_tree_equal (TREE_REALPART (t1), TREE_REALPART (t2))

     && cp_tree_equal (TREE_IMAGPART (t1), TREE_IMAGPART (t2));

-

+    case VECTOR_CST:

+          return operand_equal_p (t1, t2, OEP_ONLY_CONST);    

     case CONSTRUCTOR:

       /* We need to do this when determining whether or not two

      non-type pointer to member function template arguments

Index: gcc/cp/semantics.c

===================================================================

--- gcc/cp/semantics.c    (revision 194084)

+++ gcc/cp/semantics.c    (working copy)

@@ -6451,6 +6451,14 @@

   /* Avoid wrapping an aggregate value in a NOP_EXPR.  */

   if (TREE_CODE (temp) == CONSTRUCTOR)

     return build_constructor (type, CONSTRUCTOR_ELTS (temp));

+  if (TREE_CODE (temp) == VECTOR_CST)

+    {

+      int i, count = TYPE_VECTOR_SUBPARTS (type);

+      tree *vec = XALLOCAVEC (tree, count);

+      for (i = 0; i < count; i++)

+    vec[i] = cp_fold_convert (TREE_TYPE (type), VECTOR_CST_ELT (temp, i));

+      return build_vector (type, vec);

+    }

   gcc_assert (SCALAR_TYPE_P (type));

   return cp_fold_convert (type, temp);

 }

@@ -7134,7 +7142,10 @@

       vec_free (n);

       return t;

     }

+

   t = build_constructor (TREE_TYPE (t), n);

+  if (TREE_CODE (TREE_TYPE (t)) == VECTOR_TYPE)

+    t = fold (t);

   TREE_CONSTANT (t) = true;

   return t;

 }

Reply via email to