My recent change to reject calling rvalue() with an argument of class type
crashes on this testcase, where we use rvalue() on what we expect to be an
argument of integer or vector type. Fixed by checking first.
gcc/cp/ChangeLog:
PR c++/100517
* typeck.c (build_reinterpret_cast_1): Check intype on
cast to vector.
gcc/testsuite/ChangeLog:
PR c++/100517
* g++.dg/ext/vector41.C: New test.
"pointer-to-object is conditionally-supported");
return build_nop_reinterpret (type, expr);
}
- else if (gnu_vector_type_p (type))
+ else if (gnu_vector_type_p (type) && scalarish_type_p (intype))
return convert_to_vector (type, rvalue (expr));
else if (gnu_vector_type_p (intype)
&& INTEGRAL_OR_ENUMERATION_TYPE_P (type))
--- /dev/null
+// PR c++/100517
+// { dg-options "" }
+
+typedef int __v2si __attribute__ ((__vector_size__ (8)));
+
+struct S { };
+
+void
+f (S s)
+{
+ (void) reinterpret_cast<__v2si> (s); // { dg-error "" }
+}