pt.c (push_template_decl_real): Don't remangle the name of a class template.
* pt.c (push_template_decl_real): Don't remangle the name of a class template. From-SVN: r39753
This commit is contained in:
parent
b60ecc04e8
commit
8853373c4e
3 changed files with 32 additions and 1 deletions
|
@ -1,3 +1,7 @@
|
|||
2001-02-16 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
* semantics.c (finish_asm_stmt): Robustify.
|
||||
|
||||
2001-02-15 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
* pt.c (push_template_decl_real): Don't remangle the name of a
|
||||
|
|
|
@ -912,7 +912,22 @@ finish_asm_stmt (cv_qualifier, string, output_operands,
|
|||
|
||||
if (!processing_template_decl)
|
||||
for (t = input_operands; t; t = TREE_CHAIN (t))
|
||||
TREE_VALUE (t) = decay_conversion (TREE_VALUE (t));
|
||||
{
|
||||
tree converted_operand
|
||||
= decay_conversion (TREE_VALUE (t));
|
||||
|
||||
/* If the type of the operand hasn't been determined (e.g.,
|
||||
because it involves an overloaded function), then issue an
|
||||
error message. There's no context available to resolve the
|
||||
overloading. */
|
||||
if (TREE_TYPE (converted_operand) == unknown_type_node)
|
||||
{
|
||||
cp_error ("type of asm operand `%E' could not be determined",
|
||||
TREE_VALUE (t));
|
||||
converted_operand = error_mark_node;
|
||||
}
|
||||
TREE_VALUE (t) = converted_operand;
|
||||
}
|
||||
|
||||
r = build_stmt (ASM_STMT, cv_qualifier, string,
|
||||
output_operands, input_operands,
|
||||
|
|
12
gcc/testsuite/g++.old-deja/g++.other/asm2.C
Normal file
12
gcc/testsuite/g++.old-deja/g++.other/asm2.C
Normal file
|
@ -0,0 +1,12 @@
|
|||
// Build don't link:
|
||||
// Origin: Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
struct C
|
||||
{
|
||||
void f ();
|
||||
};
|
||||
|
||||
void C::f ()
|
||||
{
|
||||
asm ("" : : "m" (f)); // ERROR - type could not be determined
|
||||
}
|
Loading…
Add table
Reference in a new issue