Commit c86f25e8 by Jason Merrill Committed by Jason Merrill

* rtti.c (tinfo_name): Fix lengths for private case.

From-SVN: r153789
parent 691a1b27
2009-10-31 Jason Merrill <jason@redhat.com> 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 PR c++/41754
* call.c (compare_ics): Avoid bad union use when * call.c (compare_ics): Avoid bad union use when
comparing two ck_lists. comparing two ck_lists.
......
...@@ -364,10 +364,10 @@ tinfo_name (tree type, bool mark_private) ...@@ -364,10 +364,10 @@ tinfo_name (tree type, bool mark_private)
if (mark_private) if (mark_private)
{ {
/* Inject '*' at beginning of name to force pointer comparison. */ /* 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] = '*'; buf[0] = '*';
memcpy (buf + 1, name, length); memcpy (buf + 1, name, length + 1);
name_string = build_string (length + 1, buf); name_string = build_string (length + 2, buf);
} }
else else
name_string = build_string (length + 1, name); name_string = build_string (length + 1, name);
......
2009-10-31 Jason Merrill <jason@redhat.com> 2009-10-31 Jason Merrill <jason@redhat.com>
* g++.dg/rtti/typeid9.C: New.
PR c++/41754 PR c++/41754
* g++.dg/cpp0x/initlist25.C: New. * g++.dg/cpp0x/initlist25.C: New.
......
// 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();
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment