]> granicus.if.org Git - clang/commit
[CodeGenCXX] annotate a GEP to a derived class with 'inbounds' (PR35909)
authorSanjay Patel <spatel@rotateright.com>
Fri, 19 Jan 2018 15:14:51 +0000 (15:14 +0000)
committerSanjay Patel <spatel@rotateright.com>
Fri, 19 Jan 2018 15:14:51 +0000 (15:14 +0000)
commit3e53723a4808739b8cc707cd0c60c7d0e7d67080
treef8e83f8af22e5ad14fc03085deb969203bb0bd45
parentd57b406bf4744b18d43b473a9a172116a57d8efd
[CodeGenCXX] annotate a GEP to a derived class with 'inbounds' (PR35909)

The standard says:
[expr.static.cast] p11: "If the prvalue of type “pointer to cv1 B” points to a B
that is actually a subobject of an object of type D, the resulting pointer points
to the enclosing object of type D. Otherwise, the behavior is undefined."

Therefore, the GEP must be inbounds.

This should solve the failure to optimize away a null check shown in PR35909:
https://bugs.llvm.org/show_bug.cgi?id=35909

Differential Revision: https://reviews.llvm.org/D42249

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@322950 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/CGClass.cpp
test/CodeGenCXX/catch-undef-behavior.cpp
test/CodeGenCXX/derived-cast.cpp [new file with mode: 0644]