[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