git: 6c596be66539 - stable/13 - Merge commit 5f4ee5a2dfa9 from llvm-project (by Shanzhi):

From: Dimitry Andric <>
Date: Sat, 20 Apr 2024 10:34:35 UTC
The branch stable/13 has been updated by dim:


commit 6c596be66539299d553c77acf94db2bed63a6fc5
Author:     Dimitry Andric <>
AuthorDate: 2024-02-05 09:16:17 +0000
Commit:     Dimitry Andric <>
CommitDate: 2024-04-19 21:24:46 +0000

    Merge commit 5f4ee5a2dfa9 from llvm-project (by Shanzhi):
      [Clang][AST] Fix a crash on attaching doc comments (#78716)
      This crash is basically caused by calling
      `ASTContext::getRawCommentForDeclNoCacheImp` with its input arguments
      `RepresentativeLocForDecl` and `CommentsInTheFile` refering to different
      files. A reduced reproducer is provided in this patch.
      After the source locations for instantiations of funtion template are
      corrected in the commit 256a0b298c68b89688b80350b034daf2f7785b67, the
      variable `CommitsInThisFile` in the function
      `ASTContext::attachCommentsToJustParsedDecls` would refer to the source
      file rather than the header file for implicit function template
      instantiation. Therefore, in the first loop in
      `ASTContext::attachCommentsToJustParsedDecls`, `D` should also be
      adjusted for relevant scenarios like the second loop.
      Fixes #67979
      Fixes #68524
      Fixes #70550
    This should fix a segfault when compiling graphics/gdal.
    PR:             276104
    MFC after:      1 month
    (cherry picked from commit dc36515b628331e03ac8c23a6749f7f3eb1ebec8)
 contrib/llvm-project/clang/lib/AST/ASTContext.cpp | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/contrib/llvm-project/clang/lib/AST/ASTContext.cpp b/contrib/llvm-project/clang/lib/AST/ASTContext.cpp
index 5eb7aa366456..9a0ede201059 100644
--- a/contrib/llvm-project/clang/lib/AST/ASTContext.cpp
+++ b/contrib/llvm-project/clang/lib/AST/ASTContext.cpp
@@ -498,7 +498,11 @@ void ASTContext::attachCommentsToJustParsedDecls(ArrayRef<Decl *> Decls,
   FileID File;
-  for (Decl *D : Decls) {
+  for (const Decl *D : Decls) {
+    if (D->isInvalidDecl())
+      continue;
+    D = &adjustDeclToTemplate(*D);
     SourceLocation Loc = D->getLocation();
     if (Loc.isValid()) {
       // See if there are any new comments that are not attached to a decl.