[AST] Initialized data after TypeSourceInfo

There is no initialization of the data between allocation
and first getBeginLoc call.

allocation: llvm-project/clang/lib/AST/ASTContext.cpp:3022
use: llvm-project/clang/lib/AST/TypeLoc.cpp:222

Msan report https://reviews.llvm.org/P8306

Reviewed By: thurston

Differential Revision: https://reviews.llvm.org/D150499
This commit is contained in:
Vitaly Buka
2023-05-12 17:06:27 -07:00
parent 9ceb0a7bc0
commit 4498663f3d
3 changed files with 7 additions and 2 deletions

View File

@@ -6640,7 +6640,7 @@ class alignas(8) TypeSourceInfo {
QualType Ty;
TypeSourceInfo(QualType ty) : Ty(ty) {}
TypeSourceInfo(QualType ty, size_t DataSize); // implemented in TypeLoc.h
public:
/// Return the type wrapped by this type source info.

View File

@@ -240,6 +240,11 @@ private:
static SourceRange getLocalSourceRangeImpl(TypeLoc TL);
};
inline TypeSourceInfo::TypeSourceInfo(QualType ty, size_t DataSize) : Ty(ty) {
// Init data attached to the object. See getTypeLoc.
memset(this + 1, 0, DataSize);
}
/// Return the TypeLoc for a type source info.
inline TypeLoc TypeSourceInfo::getTypeLoc() const {
// TODO: is this alignment already sufficient?

View File

@@ -3018,7 +3018,7 @@ TypeSourceInfo *ASTContext::CreateTypeSourceInfo(QualType T,
auto *TInfo =
(TypeSourceInfo*)BumpAlloc.Allocate(sizeof(TypeSourceInfo) + DataSize, 8);
new (TInfo) TypeSourceInfo(T);
new (TInfo) TypeSourceInfo(T, DataSize);
return TInfo;
}