<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/59403>59403</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            Fix -Werror=nonnull in ExternalASTSource.h, patch included
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          mattpulver
      </td>
    </tr>
</table>

<pre>
    When compiling with warnings as errors on gcc 12:
```
In member function ‘T* clang::LazyOffsetPtr<T, OffsT, Get>::get(clang::ExternalASTSource*) const [with T = clang::CXXBas
eSpecifier; OffsT = long unsigned int; T* (clang::ExternalASTSource::* Get)(OffsT) = &clang::ExternalASTSource::GetExter
nalCXXBaseSpecifiers]’,
    inlined from ‘clang::CXXBaseSpecifier* clang::CXXRecordDecl::DefinitionData::getBases() const’ at /usr/include/clang
/AST/DeclCXX.h:339:25,
    inlined from ‘clang::CXXBaseSpecifier* clang::CXXRecordDecl::DefinitionData::getBases() const’ at /usr/include/clang
/AST/DeclCXX.h:337:23,                                      
    inlined from ‘clang::CXXBaseSpecifier* clang::CXXRecordDecl::bases_begin()’ at /usr/include/clang/AST/DeclCXX.h:595:
61,
    inlined from ‘clang::CXXBaseSpecifier* clang::CXXRecordDecl::bases_end()’ at /usr/include/clang/AST/DeclCXX.h:597:55
,
    inlined from ‘clang::CXXRecordDecl::base_class_range clang::CXXRecordDecl::bases()’ at /usr/include/clang/AST/DeclCX
X.h:589:12,
    inlined from ‘bool clang::RecursiveASTVisitor<Derived>::TraverseCXXRecordHelper(clang::CXXRecordDecl*) [with Derived
 = {anonymous}::FunctionDeclVisitor]’ at /usr/include/clang/AST/RecursiveASTVisitor.h:1895:34:
/usr/include/clang/AST/ExternalASTSource.h:378:54: error: ‘this’ pointer is null [-Werror=nonnull]
  378 |       Ptr = reinterpret_cast<uint64_t>((Source->*Get)(Ptr >> 1));
      |                                        ~~~~~~~~~~~~~~^~~~~~~~~~
```
Here is a patch to fix it:
```
diff --git a/clang/include/clang/AST/ExternalASTSource.h b/clang/include/clang/AST/ExternalASTSource.h
index b1851afcda37..701269452756 100644
--- a/clang/include/clang/AST/ExternalASTSource.h
+++ b/clang/include/clang/AST/ExternalASTSource.h
@@ -373,9 +373,12 @@ public:
   /// \returns a pointer to the AST node.
   T* get(ExternalASTSource *Source) const {
     if (isOffset()) {
-      assert(Source &&
-             "Cannot deserialize a lazy pointer without an AST source");
-      Ptr = reinterpret_cast<uint64_t>((Source->*Get)(Ptr >> 1));
+      if (Source) {
+        Ptr = reinterpret_cast<uint64_t>((Source->*Get)(Ptr >> 1));
+      } else {
+        assert(Source &&
+               "Cannot deserialize a lazy pointer without an AST source");
+      }
     }
     return reinterpret_cast<T*>(Ptr);
   }
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzcV1GPmzgQ_jXOyygRGAjwkAeSbNqTTrqqG133bWVgID45dmSb7W4f7refjAlhtenttr324SKkgBmPv29m_I1hxvBWIq5IsibJdsY6e1B6dWTWnjrxgHpWqvpp9emAEip1PHHBZQufuT3AZ6Yll60BZgC1VtqAktBWFYSURAUJtiQoyDIYrv7xNwlHPJaooelkZbmSQG4oyQKSZ3tCC6gEk62bHRW_sy9PfzSNQfvBahJt9oRuwA30N-_QkujGW7ZoCc0mU28eLWrJRHG7v1WdrpDQgtAcKiWNBZKsewJ7INF2uuLm7m7NjEeKtyeseMNRk2jtl-3NhZItdLKPWg1cWve6h_4ahH7YGTroNCc0G8jkvWNCl69Pf4e2f-MxSiY85AtYQ5LtOaI5oRtvCADApeAOcqPV8RL0F-wnvJ-nY3N39xErpestVsIPbbHhkrssbpllYy6cF0NoNkZ8BATMAqG7zmhCd1xWoquR0J1fxdcL3RW3e0J3bpXN3d3iQKIiinISFTT5__BJHZ_I1fGbfj-Vdeno3ZfYculJvo3eNWJJnow7fxn-7HR54CjrH4ft8pEk55R9I-xruO4rwYy510y2-BYa30_BYx2IZG6jhPQNFEqlxBTYR6w6bfgDFrf7P7nhVjnN3aLmD1iPSrvX7AG1wZHGexQnl6uvh8Qr71lzzw49ul730jWTSj4dVWdIuvUudkN3cB7OaCbC9qbwXGHUBynM-iqN4kuTes3VCzX22zjNXMydH98A3c0YYHvg5gL4pLi0qIEbkJ0QLh7zT8OkrVTSDTqGQ9aiNAOSntXhg9V9qDT2Tk4a7X3FjCXRpuPSLuP7vhe6Eso8vnn_XIydxnu4IdENhP1ITqL1pURgstirv7-f_Uhyc7m_1vLfo0ZHm8GJ2eoAVkHDH4Hbr50Rat40MJ-33AKbZOIbcgPl983z63NZ4yOUYZaErKlqFqWLRRqEdJnHCU2TJYRBsIxjbzyfz78X5bn21v76MdAkDkgcwDxKXVfJgdC1vw0pDO9OXSl4NUbdJZ3u_AUk2Wi0nZZ9noZatQrsAaG43YNUNS7Gef1xxx-6XgACQovzmWs8cKXTWuONOypx4892g_A5iThbzX2dMWNQ27Gk3QHJXVOTc3ukdMOkVBZqNKg5E_wLAgPBvjyNbJz8qM4Ckz0jM2Ck070w_wX7zaV6EodLrEb-o8WvQkLSLaAweBXCv6VhYvZfp2IKblI8z598zV6LjitRHxn38fBc7kYfo_DM6lVU51HOZrgKl2mQ0Gi5zGeH1TJPwiRlIQZlGDdVXMcpzQIMyzBlDUuCGV_RgNKQBlmY0TBYLqJ4WWVJFZU0YmnVpCQO8Mi4WAjxcFwo3c64MR2ukjwOoplgJQrTf3xRKvEz9C9dKJLtTK_cnHnZtYbEgeDGmosXy63A1Y4_wos-AlzCNaGgm0GCB3WpZ50Wq4O1J9N_mTglaLk9dOWiUkdCd26x4W9-0uovrKzTJgfRELrrKfwTAAD__wc5JVs">