[clang] [compiler-rt] [UBSan] Fix incorrect alignment reported when global new returns an o… (PR #152532)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Oct 27 10:17:55 PDT 2025
================
@@ -1749,17 +1739,29 @@ llvm::Value *CodeGenFunction::EmitCXXNewExpr(const CXXNewExpr *E) {
allocator->isReservedGlobalPlacementOperator())
result = Builder.CreateLaunderInvariantGroup(result);
+ // Check what type of constructor call the sanitizer is checking
+ // Different UB can occour with custom overloads of operator new
+ TypeCheckKind checkKind = CodeGenFunction::TCK_ConstructorCall;
+ const TargetInfo &TI = getContext().getTargetInfo();
+ unsigned DefaultTargetAlignment = TI.getNewAlign() / TI.getCharWidth();
+ SourceManager &SM = getContext().getSourceManager();
+ SourceLocation Loc = E->getOperatorNew()->getLocation();
+ bool IsCustomOverload = !SM.isInSystemHeader(Loc);
----------------
gbMattN wrote:
Aha, I think I understand now. If you'd prefer than, I can remove this check, and use the new check whenever the alignment of the type is less than the system default alignment.
https://github.com/llvm/llvm-project/pull/152532
More information about the cfe-commits
mailing list