rsmith added a comment.
This is causing ASan's ODR violation detector to fire. I think the problematic
case looks like this:
TU 1:
struct X;
/*...*/ typeid(X*); /*...*/
TU 2:
struct X { virtual void f(); };
void X::f() {}
Now, TU 1 will emit a `linkonce_odr` definition of the `_ZTS` symbol, and TU 2
will emit a strong definition of it. ASan doesn't like that.
There's no way we can know that there will be a strong definition of the
typeinfo name at the point where we emit the tentative copy for the pointer
`type_info`. It seems to me there are two things we could do about this:
1. decide this is not a bug and suppress the ASan ODR checker report, or
2. decide this is a bug, and only emit `linkonce_odr` typeinfo names for
pointers to incomplete classes, not for incomplete classes themselves (this
would mean that `operator==` etc would do the wrong thing for users who use the
<cxxabi.h> to inspect the pointee type of a pointer type info; in particular,
we'd need to check that ubsan's vptr sanitizer can cope with this -- right now
it assumes that it can compare the type name address except on iOS64, just like
libc++'s `<type_info>` does).
Repository:
rC Clang
https://reviews.llvm.org/D46665
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits