diff options
author | Mark Mitchell <mark@codesourcery.com> | 2001-02-16 08:03:23 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 2001-02-16 08:03:23 +0000 |
commit | 8853373c4e042132909d083602beb51fde2ab17a (patch) | |
tree | 015f3f8aa9dd20334fd261fe2ef8dac89f382b87 | |
parent | b60ecc04e87b9ca4aaa6c79f46800cc3cf49d3d7 (diff) | |
download | gcc-8853373c4e042132909d083602beb51fde2ab17a.zip gcc-8853373c4e042132909d083602beb51fde2ab17a.tar.gz gcc-8853373c4e042132909d083602beb51fde2ab17a.tar.bz2 |
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
-rw-r--r-- | gcc/cp/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/semantics.c | 17 | ||||
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.other/asm2.C | 12 |
3 files changed, 32 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index a4413a9..2a8d7a5 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -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 diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index c5bbe1b..9bd7ff7 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -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, diff --git a/gcc/testsuite/g++.old-deja/g++.other/asm2.C b/gcc/testsuite/g++.old-deja/g++.other/asm2.C new file mode 100644 index 0000000..6a96504 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.other/asm2.C @@ -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 +} |