2009-10-31 Jason Merrill <jason@redhat.com>
+ * rtti.c (tinfo_name): Fix lengths for private case.
+
+2009-10-31 Jason Merrill <jason@redhat.com>
+
PR c++/41754
* call.c (compare_ics): Avoid bad union use when
comparing two ck_lists.
if (mark_private)
{
/* Inject '*' at beginning of name to force pointer comparison. */
- char* buf = (char*) XALLOCAVEC (char, length + 1);
+ char* buf = (char*) XALLOCAVEC (char, length + 2);
buf[0] = '*';
- memcpy (buf + 1, name, length);
- name_string = build_string (length + 1, buf);
+ memcpy (buf + 1, name, length + 1);
+ name_string = build_string (length + 2, buf);
}
else
name_string = build_string (length + 1, name);
--- /dev/null
+// Test that the typeid name for a local class is properly null-terminated.
+// { dg-do run }
+
+#include <string.h>
+#include <typeinfo>
+#include <stdio.h>
+
+int f()
+{
+ struct A {}; struct B {};
+ const std::type_info &ti = typeid(A);
+ const std::type_info &ti2 = typeid(B);
+ puts (ti.name());
+ puts (ti2.name());
+ return strcmp (ti.name(), "Z1fvE1A") || strcmp (ti2.name(), "Z1fvE1B");
+}
+
+int main()
+{
+ return f();
+}