From 66b8b09f004267afd74e2317af2f09f7b81072e4 Mon Sep 17 00:00:00 2001 From: jamborm Date: Sat, 21 Nov 2009 23:05:13 +0000 Subject: [PATCH] 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/ChangeLog | 7 +++++++ gcc/tree-cfg.c | 27 ++++++++++++++++++++------- 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5f5a2e6..e14b895 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +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. + 2009-11-21 Martin Jambor PR middle-end/42025 diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index b3b71b9..13aa63f 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; -- 2.7.4