Author: Arseny Date: 2023-10-21T10:40:58+05:30 New Revision: 826c93f96efd8e34781c12cfcc6e7284691f6e8c
URL: https://github.com/llvm/llvm-project/commit/826c93f96efd8e34781c12cfcc6e7284691f6e8c DIFF: https://github.com/llvm/llvm-project/commit/826c93f96efd8e34781c12cfcc6e7284691f6e8c.diff LOG: [AST] Use explicit type erasure in TypeSourceInfo constructor (#68435) When this file is included in a project compiled with GCC 13 `-Werror`, compilation fails with the following diagnostic: <pre> /usr/lib/llvm-17.0/include/clang/AST/TypeLoc.h: In constructor 'clang::TypeSourceInfo::TypeSourceInfo(clang::QualType, size_t)': /usr/lib/llvm-17.0/include/clang/AST/TypeLoc.h:245:9: error: 'void* memset(void*, int, size_t)' clearing an object of non-trivial type 'class clang::TypeSourceInfo'; use assignment instead [-Werror=class-memaccess] 245 | memset(this + 1, 0, DataSize); | ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~ </pre> To avoid this, we add an explicit type cast. The cast to `void*` makes sense, since other member functions of `TypeSourceInfo` also treat the buffer `(this + 1)` of length `DataSize` as opaque memory, and was likely left out by mistake. Fixes: 4498663f3de0 ("[AST] Initialized data after TypeSourceInfo") I also suggest to apply this to release/17.x if possible. Added: Modified: clang/include/clang/AST/TypeLoc.h Removed: ################################################################################ diff --git a/clang/include/clang/AST/TypeLoc.h b/clang/include/clang/AST/TypeLoc.h index 98427a8dcbfe660..5bb487f1a7f4455 100644 --- a/clang/include/clang/AST/TypeLoc.h +++ b/clang/include/clang/AST/TypeLoc.h @@ -243,7 +243,7 @@ class TypeLoc { inline TypeSourceInfo::TypeSourceInfo(QualType ty, size_t DataSize) : Ty(ty) { // Init data attached to the object. See getTypeLoc. - memset(this + 1, 0, DataSize); + memset(static_cast<void *>(this + 1), 0, DataSize); } /// Return the TypeLoc for a type source info. _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits