From 66b8b09f004267afd74e2317af2f09f7b81072e4 Mon Sep 17 00:00:00 2001 From: jamborm Date: Sat, 21 Nov 2009 23:05:13 +0000 Subject: 2009-11-22 Martin Jambor * tree-cfg.c (verify_types_in_gimple_reference): Error out on V_C_E of an SSA_NAME or an invariant if lvalue is required. (verify_gimple_call): Verify LHS also with with verify_types_in_gimple_reference. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@154414 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/tree-cfg.c | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) (limited to 'gcc/tree-cfg.c') diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index b3b71b9abba..13aa63f1d59 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -2889,12 +2889,24 @@ verify_types_in_gimple_reference (tree expr, bool require_lvalue) return true; } - /* For VIEW_CONVERT_EXPRs which are allowed here, too, there - is nothing to verify. Gross mismatches at most invoke - undefined behavior. */ - if (TREE_CODE (expr) == VIEW_CONVERT_EXPR - && !handled_component_p (op)) - return false; + if (TREE_CODE (expr) == VIEW_CONVERT_EXPR) + { + /* For VIEW_CONVERT_EXPRs which are allowed here too, we only check + that their operand is not an SSA name or an invariant when + requiring an lvalue (this usually means there is a SRA or IPA-SRA + bug). Otherwise there is nothing to verify, gross mismatches at + most invoke undefined behavior. */ + if (require_lvalue + && (TREE_CODE (op) == SSA_NAME + || is_gimple_min_invariant (op))) + { + error ("Conversion of an SSA_NAME on the left hand side."); + debug_generic_stmt (expr); + return true; + } + else if (!handled_component_p (op)) + return false; + } expr = op; } @@ -2951,7 +2963,8 @@ verify_gimple_call (gimple stmt) } if (gimple_call_lhs (stmt) - && !is_gimple_lvalue (gimple_call_lhs (stmt))) + && (!is_gimple_lvalue (gimple_call_lhs (stmt)) + || verify_types_in_gimple_reference (gimple_call_lhs (stmt), true))) { error ("invalid LHS in gimple call"); return true; -- cgit v1.2.1