re PR c++/55619 (Chromium build fails with: error: memory input is not directly addressable)
PR c++/55619 * semantics.c (finish_asm_stmt): Don't call decay_conversion on input operands that can be only in memory. * g++.dg/ext/asm12.C: New test. From-SVN: r194404
This commit is contained in:
parent
cb56d8b09e
commit
0ab19cbc7a
|
@ -1,3 +1,9 @@
|
|||
2012-12-11 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c++/55619
|
||||
* semantics.c (finish_asm_stmt): Don't call decay_conversion
|
||||
on input operands that can be only in memory.
|
||||
|
||||
2012-12-10 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* Make-lang.in (cp/typeck.o): Add dependency on $(PARAMS_H).
|
||||
|
|
|
@ -1369,7 +1369,15 @@ finish_asm_stmt (int volatile_p, tree string, tree output_operands,
|
|||
for (i = 0, t = input_operands; t; ++i, t = TREE_CHAIN (t))
|
||||
{
|
||||
constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (t)));
|
||||
operand = decay_conversion (TREE_VALUE (t), tf_warning_or_error);
|
||||
bool constraint_parsed
|
||||
= parse_input_constraint (&constraint, i, ninputs, noutputs, 0,
|
||||
oconstraints, &allows_mem, &allows_reg);
|
||||
/* If the operand is going to end up in memory, don't call
|
||||
decay_conversion. */
|
||||
if (constraint_parsed && !allows_reg && allows_mem)
|
||||
operand = mark_lvalue_use (TREE_VALUE (t));
|
||||
else
|
||||
operand = decay_conversion (TREE_VALUE (t), tf_warning_or_error);
|
||||
|
||||
/* If the type of the operand hasn't been determined (e.g.,
|
||||
because it involves an overloaded function), then issue
|
||||
|
@ -1382,8 +1390,7 @@ finish_asm_stmt (int volatile_p, tree string, tree output_operands,
|
|||
operand = error_mark_node;
|
||||
}
|
||||
|
||||
if (parse_input_constraint (&constraint, i, ninputs, noutputs, 0,
|
||||
oconstraints, &allows_mem, &allows_reg))
|
||||
if (constraint_parsed)
|
||||
{
|
||||
/* If the operand is going to end up in memory,
|
||||
mark it addressable. */
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
2012-12-11 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c++/55619
|
||||
* g++.dg/ext/asm12.C: New test.
|
||||
|
||||
PR tree-optimization/54570
|
||||
* gcc.dg/builtin-object-size-8.c: Xfail.
|
||||
* gcc.dg/builtin-object-size-13.c: New test.
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
// PR c++/55619
|
||||
// { dg-do compile }
|
||||
|
||||
typedef int V __attribute__ ((vector_size (4 * sizeof (int))));
|
||||
|
||||
static const V C = { 0x201, 0, 0, 0 };
|
||||
static const int D = 0x201;
|
||||
|
||||
void
|
||||
f ()
|
||||
{
|
||||
__asm volatile ("" : : "m" (C));
|
||||
__asm volatile ("" : : "m" (D));
|
||||
}
|
Loading…
Reference in New Issue