aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Serialization/ASTWriter.cpp
diff options
context:
space:
mode:
authorYexuanXiao <bizwen@nykz.org>2025-07-18 09:45:57 +0800
committerGitHub <noreply@github.com>2025-07-17 22:45:57 -0300
commitc27e283cfbca2bd22f34592430e98ee76ed60ad8 (patch)
tree5f8e23eeadff53a72e3871720737c84771dcbc2c /clang/lib/Serialization/ASTWriter.cpp
parentbaa291bfb58e73a253669b86ac604cf8e6792b6c (diff)
downloadllvm-c27e283cfbca2bd22f34592430e98ee76ed60ad8.zip
llvm-c27e283cfbca2bd22f34592430e98ee76ed60ad8.tar.gz
llvm-c27e283cfbca2bd22f34592430e98ee76ed60ad8.tar.bz2
[Clang] Make the SizeType, SignedSizeType and PtrdiffType be named sugar types instead of built-in types (#143653)
Including the results of `sizeof`, `sizeof...`, `__datasizeof`, `__alignof`, `_Alignof`, `alignof`, `_Countof`, `size_t` literals, and signed `size_t` literals, the results of pointer-pointer subtraction and checks for standard library functions (and their calls). The goal is to enable clang and downstream tools such as clangd and clang-tidy to provide more portable hints and diagnostics. The previous discussion can be found at #136542. This PR implements this feature by introducing a new subtype of `Type` called `PredefinedSugarType`, which was considered appropriate in discussions. I tried to keep `PredefinedSugarType` simple enough yet not limited to `size_t` and `ptrdiff_t` so that it can be used for other purposes. `PredefinedSugarType` wraps a canonical `Type` and provides a name, conceptually similar to a compiler internal `TypedefType` but without depending on a `TypedefDecl` or a source file. Additionally, checks for the `z` and `t` format specifiers in format strings for `scanf` and `printf` were added. It will precisely match expressions using `typedef`s or built-in expressions. The affected tests indicates that it works very well. Several code require that `SizeType` is canonical, so I kept `SizeType` to its canonical form. The failed tests in CI are allowed to fail. See the [comment](https://github.com/llvm/llvm-project/pull/135386#issuecomment-3049426611) in another PR #135386.
Diffstat (limited to 'clang/lib/Serialization/ASTWriter.cpp')
-rw-r--r--clang/lib/Serialization/ASTWriter.cpp6
1 files changed, 5 insertions, 1 deletions
diff --git a/clang/lib/Serialization/ASTWriter.cpp b/clang/lib/Serialization/ASTWriter.cpp
index e868afe..a6957e5 100644
--- a/clang/lib/Serialization/ASTWriter.cpp
+++ b/clang/lib/Serialization/ASTWriter.cpp
@@ -692,7 +692,6 @@ void TypeLocWriter::VisitAtomicTypeLoc(AtomicTypeLoc TL) {
void TypeLocWriter::VisitPipeTypeLoc(PipeTypeLoc TL) {
addSourceLocation(TL.getKWLoc());
}
-
void TypeLocWriter::VisitBitIntTypeLoc(clang::BitIntTypeLoc TL) {
addSourceLocation(TL.getNameLoc());
}
@@ -701,6 +700,11 @@ void TypeLocWriter::VisitDependentBitIntTypeLoc(
addSourceLocation(TL.getNameLoc());
}
+void TypeLocWriter::VisitPredefinedSugarTypeLoc(
+ clang::PredefinedSugarTypeLoc TL) {
+ // Nothing to do.
+}
+
void ASTWriter::WriteTypeAbbrevs() {
using namespace llvm;