Index: clang/docs/ReleaseNotes.rst =================================================================== --- clang/docs/ReleaseNotes.rst +++ clang/docs/ReleaseNotes.rst @@ -57,6 +57,9 @@ - Fix crash on invalid code when looking up a destructor in a templated class inside a namespace. This fixes `Issue 59446 `_. +- Fix crash when diagnosing incorrect usage of _Nullable involing alias + templates. This fixes + `Issue 60344 `_. Improvements to Clang's diagnostics ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Index: clang/lib/Sema/TreeTransform.h =================================================================== --- clang/lib/Sema/TreeTransform.h +++ clang/lib/Sema/TreeTransform.h @@ -6992,7 +6992,8 @@ // type sugar, and therefore cannot be diagnosed in any other way. if (auto nullability = oldType->getImmediateNullability()) { if (!modifiedType->canHaveNullability()) { - SemaRef.Diag(TL.getAttr()->getLocation(), + SemaRef.Diag((TL.getAttr() ? TL.getAttr()->getLocation() + : TL.getModifiedLoc().getBeginLoc()), diag::err_nullability_nonpointer) << DiagNullabilityKind(*nullability, false) << modifiedType; return QualType(); Index: clang/test/SemaCXX/nullability.cpp =================================================================== --- clang/test/SemaCXX/nullability.cpp +++ clang/test/SemaCXX/nullability.cpp @@ -136,3 +136,9 @@ void testNullabilityCompletenessWithTemplate() { Template tip; } + +namespace GH60344 { +class a; +template using c = b _Nullable; // expected-error {{'_Nullable' cannot be applied to non-pointer type 'GH60344::a'}} +c; // expected-note {{in instantiation of template type alias 'c' requested here}} +}