http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43663
James Dennett <james.dennett at gmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |james.dennett at gmail dot | |com --- Comment #6 from James Dennett <james.dennett at gmail dot com> 2011-05-15 11:52:01 UTC --- Here's a quick hack that causes a temporary to be generated when binding a bit-field to a reference-to-const. $ svn diff Index: call.c =================================================================== --- call.c (revision 173769) +++ call.c (working copy) @@ -8594,7 +8594,7 @@ expr = error_mark_node; else { - if (!lvalue_or_rvalue_with_address_p (expr)) + if (is_bitfield_expr_with_lowered_type (expr) || !lvalue_or_rvalue_with_address_p (expr)) { tree init; var = set_up_extended_ref_temp (decl, expr, cleanup, &init); I'll try to make time to clean that up and add regression tests before running it by someone with stronger gcc-fu.