<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">