Commit 929f647a by Paolo Carlini Committed by Paolo Carlini

re PR c++/51413 (Broken diagnostic with __builtin_offsetof)

/cp
2013-06-14  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/51413
	* semantics.c (finish_offsetof): Handle INDIRECT_REF as expr.

/testsuite
2013-06-14  Paolo Carlini  <paolo.carlini@oracle.com>

	PR c++/51413
	* g++.dg/ext/builtin-offsetof1.C: New.

From-SVN: r200110
parent d1aa4a76
2013-06-14 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/51413
* semantics.c (finish_offsetof): Handle INDIRECT_REF as expr.
2013-06-14 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/57599
* rtti.c (build_dynamic_cast_1): In case of cast to an unambiguous
accessible base simply forward to build_static_cast.
......
......@@ -3690,10 +3690,17 @@ finish_offsetof (tree expr)
|| TREE_CODE (TREE_TYPE (expr)) == METHOD_TYPE
|| TREE_TYPE (expr) == unknown_type_node)
{
if (TREE_CODE (expr) == COMPONENT_REF
|| TREE_CODE (expr) == COMPOUND_EXPR)
expr = TREE_OPERAND (expr, 1);
error ("cannot apply %<offsetof%> to member function %qD", expr);
if (TREE_CODE (expr) == INDIRECT_REF)
error ("second operand of %<offsetof%> is neither a single "
"identifier nor a sequence of member accesses and "
"array references");
else
{
if (TREE_CODE (expr) == COMPONENT_REF
|| TREE_CODE (expr) == COMPOUND_EXPR)
expr = TREE_OPERAND (expr, 1);
error ("cannot apply %<offsetof%> to member function %qD", expr);
}
return error_mark_node;
}
if (REFERENCE_REF_P (expr))
......
2013-06-14 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/51413
* g++.dg/ext/builtin-offsetof1.C: New.
2013-06-14 Vidya Praveen <vidyapraveen@arm.com>
* gcc.target/aarch64/vect_smlal_1.c: New file.
......
// PR c++/51413
// { dg-options "-w" }
struct A
{
static void foo();
};
int i = __builtin_offsetof(A, foo[1]); // { dg-error "neither a single identifier nor a sequence of member accesses and array references" }
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