The problem seems to be that promote_decl_mode() is changing the value
returned from the pair constructor from HImode to BLKmode:

(gdb) p debug_tree(decl)
 <result_decl 0x2aaaab61ea80 D.2836
    type <record_type 0x2aaaab5d9930 pair no-force-blk type_5 type_6 BLK
        size <integer_cst 0x2aaaaaaf05f0 constant 16>
        unit size <integer_cst 0x2aaaaaaf0618 constant 2>
        align 8 symtab 0 alias set -1 canonical type 0x2aaaab5d9930
        fields <field_decl 0x2aaaab5f1d10 first type <boolean_type 
0x2aaaaab08888 bool>
            unsigned nonlocal decl_3 QI file PR48660.cpp line 6 col 7
            size <integer_cst 0x2aaaaaaf04b0 constant 8>
            unit size <integer_cst 0x2aaaaaaf04d8 constant 1>
            align 8 offset_align 64
            offset <integer_cst 0x2aaaaaaf0410 constant 0>
            bit offset <integer_cst 0x2aaaaaaf0e38 constant 0> context 
<record_type 0x2aaaab5d9930 pair> chain <field_decl 0x2aaaab5f1da8 second>> 
context <translation_unit_decl 0x2aaaaaafb508 D.1>
        full-name "struct pair<bool, bool>"
        X() X(constX&) this=(X&) n_parents=0 use_template=1 interface-unknown
        pointer_to_this <pointer_type 0x2aaaab603150> chain <type_decl 
0x2aaaab5ce958 pair>>
    used ignored regdecl BLK file PR48660.cpp line 31 col 1 size <integer_cst 
0x2aaaaaaf05f0 16> unit size <integer_cst 0x2aaaaaaf0618 2>
    align 8
    (reg:HI 140 [ <retval> ])>

This is in turn happening because DECL_MODE (decl) == BLKmode, while in
the caller, GET_MODE (decl_rtl) == HImode.  It's not clear to me whether
the rtx expression should have been in BLKmode in the first place, or
whether expand_expr_real_1() should tolerate the conversion.  The
context in expand_expr_real_1() suggests that the point of the call to
promote_decl_mode() was to get the signedness of the result, and the
only use of its return value is in the gcc_assert().  I will check
whether moving the gcc_assert() inside the results in
promote_function_mode() branch results in correct code; however, that
may just be papering over a real problem.

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/736661

Title:
  armel FTBFS due to compiler ICE

To manage notifications about this bug go to:
https://bugs.launchpad.net/gcc/+bug/736661/+subscriptions

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to