[C++ PATCH] Avoid decay_conversion on inline asm m inputs (PR c++/55619)

2012-12-11 Thread Jakub Jelinek
Hi! As the testcase shows, for m or similar constraints that don't accept registers, but do accept memory, we want to call *mark_addressable on the operand, but the call to decay_conversion can change something that was originally addressable into something non-addressable (be it replacement of a

Re: [C++ PATCH] Avoid decay_conversion on inline asm m inputs (PR c++/55619)

2012-12-11 Thread Jason Merrill
On 12/11/2012 03:16 AM, Jakub Jelinek wrote: + if (constraint_parsed !allows_reg allows_mem) + operand = mark_rvalue_use (TREE_VALUE (t)); This should be mark_lvalue_use, since we're using its address rather than its value. OK with that change. Jason

Re: [C++ PATCH] Avoid decay_conversion on inline asm m inputs (PR c++/55619)

2012-12-11 Thread Jakub Jelinek
On Tue, Dec 11, 2012 at 11:19:48AM -0500, Jason Merrill wrote: On 12/11/2012 03:16 AM, Jakub Jelinek wrote: + if (constraint_parsed !allows_reg allows_mem) +operand = mark_rvalue_use (TREE_VALUE (t)); This should be mark_lvalue_use, since we're using its address rather than

Re: [C++ PATCH] Avoid decay_conversion on inline asm m inputs (PR c++/55619)

2012-12-11 Thread Jason Merrill
On 12/11/2012 11:33 AM, Jakub Jelinek wrote: I guess it depends on how would make_lvalue_use differ from make_rvalue_use in the future. To some extent it is lvalue-ish use, but not completely, while it is taking its address, it is fine if the operand is e.g. const, which is wrong for lvalues.