[cfe-dev] Should a "typeinfo" variable be "linkonce_odr constant" or just "constant"

Kostya Serebryany kcc at google.com
Tue Aug 5 07:06:25 PDT 2014


Hello Clang folks,

I have a question about typeinfo variables:

% cat a1.cc
struct AAA {
 public:
  virtual ~ AAA ();
};
AAA::~AAA() { }
void foo () { throw AAA (); }

% clang++ a1.cc -S -o - -emit-llvm    | grep '_ZTI3AAA.=.[^{]*' -o
_ZTI3AAA = constant

% clang++ a1.cc -S -o - -emit-llvm  -fno-rtti  | grep '_ZTI3AAA.=.[^{]*' -o
_ZTI3AAA = linkonce_odr constant

As you can see, depending on the compilation mode (-fno-rtti) the
definition of _ZTI3AAA
(typeinfo for AAA) is different.  Is that expected?

This difference causes problem for AddressSanitizer, if one part of the
code is built with
-fno-rtti and another part w/o -fno-rtti.
asan instruments global constants but can not instrument linkonce_odr
variables,
as a result we mix an instrumented and a non-instrumented global in the
same binary.
https://code.google.com/p/address-sanitizer/issues/detail?id=327

Thanks,

--kcc
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20140805/fdfa956e/attachment.html>


More information about the cfe-dev mailing list