aboutsummaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2025-11-17 07:50:27 +0100
committerDmitry Vyukov <dvyukov@google.com>2025-11-17 08:54:02 +0000
commitcbc18b106abc7ee5cbca73a11b24265328d29516 (patch)
treeca8b40d3bd1ca4129c0026d3abfaf2394eed891d /tools
parentdc0208ace3f6b22d70ffc54092feec2ea83c7e20 (diff)
tools/syz-declextract: update clangtool to the latest clang
Fix some minor API changes.
Diffstat (limited to 'tools')
-rw-r--r--tools/syz-declextract/README.md2
-rw-r--r--tools/syz-declextract/clangtool/declextract.cpp11
2 files changed, 6 insertions, 7 deletions
diff --git a/tools/syz-declextract/README.md b/tools/syz-declextract/README.md
index f68c358e0..cab9b5e8a 100644
--- a/tools/syz-declextract/README.md
+++ b/tools/syz-declextract/README.md
@@ -17,7 +17,7 @@ make CC=clang -j`nproc` # kernel has to be built at least once for the script to
LLVM=$PWD/llvm-project
git clone https://github.com/llvm/llvm-project.git $LLVM
cd $LLVM
-git checkout d28b4d89166fb705577a2d3a329006f0c0e0aacc # In case of any breaking changes, this commit works
+git checkout d9dfe7540f81663f75350bb5ceb66d2f94dac078 # In case of any breaking changes, this commit works
echo '
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-c++20-designator -Wno-missing-designated-field-initializers")
add_clang_executable(syz-declextract syz-declextract/declextract.cpp)
diff --git a/tools/syz-declextract/clangtool/declextract.cpp b/tools/syz-declextract/clangtool/declextract.cpp
index e026b3788..d7230a578 100644
--- a/tools/syz-declextract/clangtool/declextract.cpp
+++ b/tools/syz-declextract/clangtool/declextract.cpp
@@ -281,6 +281,8 @@ FieldType Extractor::extractRecord(QualType QT, const RecordType* Typ, const std
assert(!StructDedup[BackupName]);
Name = BackupName;
}
+ if (Name.find("struct ") == 0)
+ Name = Name.substr(strlen("struct "));
if (StructDedup[Name])
return Name;
StructDedup[Name] = true;
@@ -336,12 +338,9 @@ std::string Extractor::extractEnum(QualType QT, const EnumDecl* Decl) {
if (Name.empty()) {
// This is an unnamed enum declared with a typedef:
// typedef enum {...} enum_name;
- auto Elaborated = dyn_cast<ElaboratedType>(QT.getTypePtr());
- if (Elaborated) {
- auto Typedef = dyn_cast<TypedefType>(Elaborated->getNamedType().getTypePtr());
- if (Typedef)
- Name = Typedef->getDecl()->getNameAsString();
- }
+ auto Typedef = dyn_cast<TypedefType>(QT.getTypePtr());
+ if (Typedef)
+ Name = Typedef->getDecl()->getNameAsString();
if (Name.empty()) {
QT.dump();
llvm::report_fatal_error("enum with empty name");