aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Basic/Builtins.cpp
diff options
context:
space:
mode:
authoryronglin <yronglin777@gmail.com>2022-09-20 12:35:18 -0400
committerAaron Ballman <aaron@aaronballman.com>2022-09-20 12:35:18 -0400
commit8392f1cc78270c7039970b413dfd836bf4def602 (patch)
treeb3ecdeaaa106d4646d8408c777a0f01e19a8d743 /clang/lib/Basic/Builtins.cpp
parent00874c48ea4d291908517afaab50d1dcbfb016c3 (diff)
downloadllvm-8392f1cc78270c7039970b413dfd836bf4def602.zip
llvm-8392f1cc78270c7039970b413dfd836bf4def602.tar.gz
llvm-8392f1cc78270c7039970b413dfd836bf4def602.tar.bz2
Fix __builtin_assume_aligned incorrect type descriptor and C++ object polymorphic address
Fix __builtin_assume_aligned incorrect type descriptor example from @rsmith struct A { int n; }; struct B { int n; }; struct C : A, B {}; void *f(C *c) { // Incorrectly returns `c` rather than the address of the B base class. return __builtin_assume_aligned((B*)c, 8); } Differential Revision: https://reviews.llvm.org/D133583
Diffstat (limited to 'clang/lib/Basic/Builtins.cpp')
-rw-r--r--clang/lib/Basic/Builtins.cpp1
1 files changed, 1 insertions, 0 deletions
diff --git a/clang/lib/Basic/Builtins.cpp b/clang/lib/Basic/Builtins.cpp
index b42e8f4..0e05668 100644
--- a/clang/lib/Basic/Builtins.cpp
+++ b/clang/lib/Basic/Builtins.cpp
@@ -209,6 +209,7 @@ bool Builtin::Context::performsCallback(unsigned ID,
bool Builtin::Context::canBeRedeclared(unsigned ID) const {
return ID == Builtin::NotBuiltin || ID == Builtin::BI__va_start ||
+ ID == Builtin::BI__builtin_assume_aligned ||
(!hasReferenceArgsOrResult(ID) && !hasCustomTypechecking(ID)) ||
isInStdNamespace(ID);
}