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; }