Hi,

earlier this week I asked on IRC whether we could have non-top-level
BIT_FIELD_REFs and Richi said that we could.  However, when I later
looked at SRA code, quite apparently it is not designed to handle
non-top-level BIT_FIELD_REFs, IMAGPART_EXPRs or REALPART_EXPRs.  So in
order to test whether that assumption is OK, I added the following
into the gimple verifier and ran bootstrap and testsuite of all
languages including Ada and ObjC++ on x86_64.  It survived, which
makes me wondering whether we do not want it in trunk.

What do you think?

Martin


2013-05-22  Martin Jambor  <mjam...@suse.cz>

        * tree-cfg.c (verify_types_in_gimple_reference): Do not allow
        non-top-level BIT_FIELD_REFs, IMAGPART_EXPRs or REALPART_EXPRs.

Index: src/gcc/tree-cfg.c
===================================================================
--- src.orig/gcc/tree-cfg.c
+++ src/gcc/tree-cfg.c
@@ -2858,6 +2858,8 @@ verify_types_in_gimple_min_lval (tree ex
 static bool
 verify_types_in_gimple_reference (tree expr, bool require_lvalue)
 {
+  bool top_level = true;
+
   while (handled_component_p (expr))
     {
       tree op = TREE_OPERAND (expr, 0);
@@ -2944,6 +2946,17 @@ verify_types_in_gimple_reference (tree e
            return false;
        }
 
+      if (!top_level
+         && (TREE_CODE (expr) == BIT_FIELD_REF
+             || TREE_CODE (expr) == IMAGPART_EXPR
+             || TREE_CODE (expr) == REALPART_EXPR))
+       {
+         error ("non-top-level BIT_FIELD_REF, IMAGPART_EXPR or REALPART_EXPR");
+         debug_generic_stmt (expr);
+         return true;
+       }
+
+      top_level = false;
       expr = op;
     }
 

Reply via email to