git: bf13152d9e61 - stable/14 - Merge commit 5f4ee5a2dfa9 from llvm-project (by Shanzhi):

From: Dimitry Andric <dim_at_FreeBSD.org>
Date: Sat, 20 Apr 2024 10:32:29 UTC
The branch stable/14 has been updated by dim:

URL: https://cgit.FreeBSD.org/src/commit/?id=bf13152d9e61246e5a5f494e5cd02bd55cccea80

commit bf13152d9e61246e5a5f494e5cd02bd55cccea80
Author:     Dimitry Andric <dim@FreeBSD.org>
AuthorDate: 2024-02-05 09:16:17 +0000
Commit:     Dimitry Andric <dim@FreeBSD.org>
CommitDate: 2024-04-19 21:14:15 +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,
     return;
 
   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.