https://github.com/Sirraide updated https://github.com/llvm/llvm-project/pull/102206
>From 07db2e9c85dd15a948b969be3c3d32579f790d74 Mon Sep 17 00:00:00 2001 From: Sirraide <aeternalm...@gmail.com> Date: Tue, 6 Aug 2024 21:42:23 +0200 Subject: [PATCH 1/2] [Clang] Fix crash when transforming a DependentAddressSpaceType --- clang/docs/ReleaseNotes.rst | 1 + clang/lib/Sema/TreeTransform.h | 5 +++-- clang/test/SemaTemplate/address_space-dependent.cpp | 13 +++++++++++++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst index 6f50ab07f1fc0..3ad87c68e28d9 100644 --- a/clang/docs/ReleaseNotes.rst +++ b/clang/docs/ReleaseNotes.rst @@ -164,6 +164,7 @@ Bug Fixes in This Version - Fixed the definition of ``ATOMIC_FLAG_INIT`` in ``<stdatomic.h>`` so it can be used in C++. - Fixed a failed assertion when checking required literal types in C context. (#GH101304). +- Fixed a crash when trying to transform a dependent address space type. Fixes #GH101685. Bug Fixes to Compiler Builtins ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h index 540e1e0cb8df0..fd96ebd812343 100644 --- a/clang/lib/Sema/TreeTransform.h +++ b/clang/lib/Sema/TreeTransform.h @@ -5803,7 +5803,8 @@ QualType TreeTransform<Derived>::TransformDependentAddressSpaceType( TypeLocBuilder &TLB, DependentAddressSpaceTypeLoc TL) { const DependentAddressSpaceType *T = TL.getTypePtr(); - QualType pointeeType = getDerived().TransformType(T->getPointeeType()); + QualType pointeeType = + getDerived().TransformType(TLB, TL.getPointeeTypeLoc()); if (pointeeType.isNull()) return QualType(); @@ -5838,7 +5839,7 @@ QualType TreeTransform<Derived>::TransformDependentAddressSpaceType( } else { TypeSourceInfo *DI = getSema().Context.getTrivialTypeSourceInfo( Result, getDerived().getBaseLocation()); - TransformType(TLB, DI->getTypeLoc()); + TLB.TypeWasModifiedSafely(DI->getType()); } return Result; diff --git a/clang/test/SemaTemplate/address_space-dependent.cpp b/clang/test/SemaTemplate/address_space-dependent.cpp index c8cc67ef45211..2ca9b8007ab41 100644 --- a/clang/test/SemaTemplate/address_space-dependent.cpp +++ b/clang/test/SemaTemplate/address_space-dependent.cpp @@ -117,3 +117,16 @@ int main() { return 0; } + +namespace gh101685 { +template <int AS> +using ASPtrTy = void [[clang::address_space(AS)]] *; + +template <int AS> +struct EntryTy { + ASPtrTy<AS> Base; +}; + +ASPtrTy<1> x; +EntryTy<2> y; +} >From ed7bd413da79ce173dd4d081adce00293bddcd15 Mon Sep 17 00:00:00 2001 From: Sirraide <aeternalm...@gmail.com> Date: Tue, 6 Aug 2024 22:17:01 +0200 Subject: [PATCH 2/2] Remove call to getTrivialTypeSourceInfo --- clang/lib/Sema/TreeTransform.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h index fd96ebd812343..14333e515caaa 100644 --- a/clang/lib/Sema/TreeTransform.h +++ b/clang/lib/Sema/TreeTransform.h @@ -5837,9 +5837,7 @@ QualType TreeTransform<Derived>::TransformDependentAddressSpaceType( NewTL.setAttrNameLoc(TL.getAttrNameLoc()); } else { - TypeSourceInfo *DI = getSema().Context.getTrivialTypeSourceInfo( - Result, getDerived().getBaseLocation()); - TLB.TypeWasModifiedSafely(DI->getType()); + TLB.TypeWasModifiedSafely(Result); } return Result; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits