[llvm-dev] LLVM | Clang - get cast type during compile time
Paul via llvm-dev
llvm-dev at lists.llvm.org
Tue Dec 13 08:51:19 PST 2016
I want to detect bad casts in C++ code by using the Clang compiler. The
approach is similar to what Caver and TypeSan do but without using the
compiler-rt.
Caver and TypeSan:
https://www.usenix.org/system/files/conference/usenixsecurity15/sec15-paper-lee.pdfhttps://nebelwelt.net/publications/files/16CCS2.pdf
For example if I have the following C++ code snippet where I want to
cast object |b| into object |D|.
|D*obj =static_cast<D*>(b);|
from where (inside Clang, LTO, thinLTO, etc.) can I get the base class
of |D| and the base class of |b|. Is this available in the Clang
compiler or LTO?
Also, if b is an object of a virtual Class (class with inherited or its
own virtual functions) can I get its virtual pointer at compile time by
using the LTO?
I found out that in |CodeGen/CGExpr.cpp| the explicit case
"BaseToDerived" is handled and you can retrieve |TypeSourceInfo| using
the function |getTypeInfoAsWritten()|. It seems that this information is
enough to get the exact type of this cast at compile-time and should
also work for Template programming, as my, understanding is that Clang
should have abstracted the code into, specific types at this point.
Am I wrong here?
Is there any case where the type of the objects used inside the cast not
known at compile time? Can the, 'real' type be hidden behind a pointer?
see also:
http://stackoverflow.com/questions/41104659/llvm-clang-get-cast-type-during-compile-time?sem=2
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20161213/8097614a/attachment.html>
More information about the llvm-dev
mailing list