aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>2001-02-16 08:03:23 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>2001-02-16 08:03:23 +0000
commit8853373c4e042132909d083602beb51fde2ab17a (patch)
tree015f3f8aa9dd20334fd261fe2ef8dac89f382b87 /gcc
parentb60ecc04e87b9ca4aaa6c79f46800cc3cf49d3d7 (diff)
downloadgcc-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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/semantics.c17
-rw-r--r--gcc/testsuite/g++.old-deja/g++.other/asm2.C12
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
+}