------- Additional Comments From mark at codesourcery dot com 2005-03-04 01:36 ------- Subject: Re: [PR c++/20280] hoist indirect_ref out of addressable cond_exprs
Alexandre Oliva wrote: \ > I went ahead and verified that I didn't break bit-field lvalues in > conditional expressions (my first attempt did), but I was surprised to > find out that the calls to h() pass. I understand why they do (we > create a temporary and bind to that), but I'm not sure this is correct > behavior. Opinions? > + // Hmm... I don't think these should be accepted. The conditional > + // expressions are lvalues for sure, and 8.5.3/5 exempts lvalues > + // that are bit-fields, but not lvalues that are conditional > + // expressions involving bit-fields. > + h (b ? x.i : x.j); > + h (b ? x.i : x.k); > + h (b ? x.j : x.k); That's legal because "h" takes a "const &", which permits the compiler to create a temporary. If it takes a non-const reference, you should get an error. And, I think these kinds of transformations (if necessary) should be done in a langhook during gimplification, not at COND_EXPR-creation time. We really want the C++ front-end's data structures to be an accurate mirror of the input program for as long as possible. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20280