diff options
author | yronglin <yronglin777@gmail.com> | 2022-09-20 12:35:18 -0400 |
---|---|---|
committer | Aaron Ballman <aaron@aaronballman.com> | 2022-09-20 12:35:18 -0400 |
commit | 8392f1cc78270c7039970b413dfd836bf4def602 (patch) | |
tree | b3ecdeaaa106d4646d8408c777a0f01e19a8d743 /clang/lib/Basic/Builtins.cpp | |
parent | 00874c48ea4d291908517afaab50d1dcbfb016c3 (diff) | |
download | llvm-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.cpp | 1 |
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); } |