<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/147331>147331</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Clang: diagnostic location does not mention main source file
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang:diagnostics
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
jayfoad
</td>
</tr>
</table>
<pre>
With the repro described below, clang reports an error with a location in `STLExtras.h` but does not relate it back to line 897 of the main source file `CodeGenRegisters.cpp` which I claim "caused" the error.
The repro is a slightly modified LLVM source repo at: https://github.com/jayfoad/llvm-project/tree/clang-diagnostic-repro
To provoke the error, use cmake and ninja to build the `llvm-tblgen` target.
```
FAILED: utils/TableGen/Common/CMakeFiles/obj.LLVMTableGenCommon.dir/CodeGenRegisters.cpp.o
/usr/lib/ccache/clang++ -DGTEST_HAS_RTTI=0 -DLLVM_BUILD_STATIC -D_DEBUG -D_GLIBCXX_ASSERTIONS -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/home/jayfoad2/llvm-release/utils/TableGen/Common -I/home/jayfoad2/git/llvm-project/llvm/utils/TableGen/Common -I/home/jayfoad2/llvm-release/include -I/home/jayfoad2/git/llvm-project/llvm/include -I/home/jayfoad2/git/llvm-project/llvm/utils/TableGen/Common/.. -I/home/jayfoad2/git/llvm-project/llvm/utils/TableGen/Basic/.. -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -Werror=unguarded-availability-new -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -pedantic -Wno-long-long -Wc++98-compat-extra-semi -Wimplicit-fallthrough -Wcovered-switch-default -Wno-noexcept-type -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wsuggest-override -Wstring-conversion -Wmisleading-indentation -Wctad-maybe-unsupported -fdiagnostics-color -ffunction-sections -fdata-sections -O3 -DNDEBUG -std=c++17 -fno-exceptions -funwind-tables -fno-rtti -UNDEBUG -MD -MT utils/TableGen/Common/CMakeFiles/obj.LLVMTableGenCommon.dir/CodeGenRegisters.cpp.o -MF utils/TableGen/Common/CMakeFiles/obj.LLVMTableGenCommon.dir/CodeGenRegisters.cpp.o.d -o utils/TableGen/Common/CMakeFiles/obj.LLVMTableGenCommon.dir/CodeGenRegisters.cpp.o -c /home/jayfoad2/git/llvm-project/llvm/utils/TableGen/Common/CodeGenRegisters.cpp
In file included from /home/jayfoad2/git/llvm-project/llvm/utils/TableGen/Common/CodeGenRegisters.cpp:14:
In file included from /home/jayfoad2/git/llvm-project/llvm/utils/TableGen/Common/CodeGenRegisters.h:17:
In file included from /home/jayfoad2/git/llvm-project/llvm/utils/TableGen/Common/CodeGenHwModes.h:14:
In file included from /home/jayfoad2/git/llvm-project/llvm/include/llvm/ADT/DenseMap.h:20:
/home/jayfoad2/git/llvm-project/llvm/include/llvm/ADT/STLExtras.h:2288:23: error: indirection requires pointer operand ('unsigned int' invalid)
2288 | return func(*lhs, *rhs);
| ^~~~
/usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/stl_algo.h:2243:37: note: in instantiation of function template specialization 'llvm::deref<std::less<void>>::operator()<const llvm::CodeGenRegister *const, const unsigned int>' requested here
2243 | return __i != __last && !bool(__comp(__val, *__i));
| ^
/home/jayfoad2/git/llvm-project/llvm/include/llvm/ADT/STLExtras.h:2007:15: note: in instantiation of function template specialization 'std::binary_search<__gnu_cxx::__normal_iterator<const unsigned int *, std::vector<unsigned int>>, const llvm::CodeGenRegister *, llvm::deref<std::less<void>>>' requested here
2007 | return std::binary_search(adl_begin(Range), adl_end(Range),
| ^
/home/jayfoad2/git/llvm-project/llvm/include/llvm/ADT/STLExtras.h:2288:17: error: indirection requires pointer operand ('unsigned int' invalid)
2288 | return func(*lhs, *rhs);
| ^~~~
/usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/predefined_ops.h:196:16: note: in instantiation of function template specialization 'llvm::deref<std::less<void>>::operator()<const unsigned int, const llvm::CodeGenRegister *const>' requested here
196 | { return bool(_M_comp(*__it, __val)); }
| ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/stl_algobase.h:1501:8: note: in instantiation of function template specialization '__gnu_cxx::__ops::_Iter_comp_val<llvm::deref<std::less<void>>>::operator()<__gnu_cxx::__normal_iterator<const unsigned int *, std::vector<unsigned int>>, const llvm::CodeGenRegister *const>' requested here
1501 | if (__comp(__middle, __val))
| ^
/usr/bin/../lib/gcc/x86_64-linux-gnu/14/../../../../include/c++/14/bits/stl_algo.h:2241:9: note: in instantiation of function template specialization 'std::__lower_bound<__gnu_cxx::__normal_iterator<const unsigned int *, std::vector<unsigned int>>, const llvm::CodeGenRegister *, __gnu_cxx::__ops::_Iter_comp_val<llvm::deref<std::less<void>>>>' requested here
2241 | = std::__lower_bound(__first, __last, __val,
| ^
/home/jayfoad2/git/llvm-project/llvm/include/llvm/ADT/STLExtras.h:2007:15: note: in instantiation of function template specialization 'std::binary_search<__gnu_cxx::__normal_iterator<const unsigned int *, std::vector<unsigned int>>, const llvm::CodeGenRegister *, llvm::deref<std::less<void>>>' requested here
2007 | return std::binary_search(adl_begin(Range), adl_end(Range),
| ^
2 errors generated.
ninja: build stopped: cannot make progress due to previous errors.
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzsWU1z2zgS_TXwBQUVBerzoAMtWRlV2cmWraznxgKJFoUEBDgAKNt7yG_fapCybCdO7cw6mRzG5ZIpEOhGv9d83QaF96oyAAsyPifj1Zlow966xSfxsLNCnhVWPixuVdjTsAfqoHGWSvClUwVIWoC2d4QvaamFqfC2dcFTYSg4Zx29w4WCaluKoKyhylAySW62lxf3wQk_2JNJQos2UGnBU2MDdaBFAKoCLUT5mQZLtTJAZ_Mptbu4h1ooQ71tXQl0pzSgxaWV8A7MNVTKB3B-UDYNmr7bq3JPN7g9VVPCeSlaD5JwHk3FTQ5IkpEk2z6GpzwV1GtV7YN-oLWVaqdA0svLf18d_WKgVASSZnQfQuNJmhG-JnxdqbBvi0Fpa8LXPYaEr7U-1Kxx9hOUgfB1cACEryNoTCpRGeuDKln032_H0sbZg_0Mp50i0K0HWtbiM1BhJDXKfBIIUtEqLeNMMkmit1DoCgyCEISrIPRhkknS_ybZOttcXqwwiDYo7Qlfb0WhEUjC10tb1zZeXInPsFYacIItPg0QiOPEbtZAKheXfM3CwFL0ytetxylaFRh4Kcr9IwKEnxN-Ttnq3fbiZpv_lt3k19vthqSrhLIVesvPP24uV_nNNttulpSt8tXF-cd3ePHucnO-_P33PLu5ubjebj68v4mj7z_mNx8-Xi8v8Ft-s10t8-WH9zfb7P02v8qW1x9uTjfWH66vsq-HLzdXm9PohvD13tZwYpUfaXWgQXi88yqKr62vVPg6OfDrXzH2YjPKlLqV8Fdc_x9Lv5dIg8EbWTwXXpW9wd2_MCN2xjIPtTD4FCkTwDXWqyg5bHdQXhVKq_DAlEE18WyvpARD2W33XKUrKQKwoGp4MtaaqhVOgmTiIJQWvQ0Dd5TdCq1xKsoYZbfGstagsrBGOFFDAEfZ7Z1TAZgPTpnKU3ZbCh_YH63AlbXyXpmK7RRoyZRRQQmt_gPOU9aAjJF0hrU1VfxAC92zMp-x0taNCCxuAENXlN2qutGqVIHthNZh72xb7XGRPYADyfydCuWeSdiJVofOuLFwX0ITWHhoIA4ZdlAutEIzGSxGIUFDAPaNO76tKvCBoX2nMGFuu2BZac0BnI_4Y6gahMRxZSSY0NUCdlsGIVktHgpgrfFtg8UDJGW7kyR6VlqNzna71pS4jnmIfz3OE0E8-f4hpWz1vtcGHyRJVz1gwyntkqSLtl_emjtlJAuYWb6770JQlH08GrlaUXa1_bHyyK7WP9TBQFJmf3AIJX1TpfhmOU-yjekKfq9Pku6crX-C5zQbjrDC_z072KP_6c_2_9vdlZXQe3_b6Pvlp4FstSV8vQLj4Uo00SVPOpdvZfxpy5lmnM9m-CfF3qeX-4wqI5XrxIQ6-KNVDjxtbCwn1DbgsOMifEb4tDWxaZZUmUD4lCpzEFpJwuckySiap2S6pA5C6wxF6YrrMr332MQRnjm8mpP0HBfEH1xAxhdfvnx52jAVqiudj71TVWLpu59N8smIaWXae1aZlvD1cHSc-OLjBEmvhsfJhQqYBT7oXOjK9tCMEJUUEw4bcuiQocr4gEWp0267o0c9pgHqJvbsvoEyFrFuDuHTSEGakTST4GBH0mVUZRzQ4D1JlwerJEkv4i8OR5gDtrqzCM-ytMYHejL04vFAKOOU-E9InPuMm_QC6UE2wWNt2YODjqJRGhHvfnqi8lxRwockXdE818IHSviE8AkOFtZqwmd5jpU3XhyE7snMc4W7_SafPy6JkwRJGo7fgqlHXgplhHvIPQhX7km6zPPKtHl5f9_dznNjXS10rkJP1JGip7AjJgjNo9UDlN3cl-QgP0fivksyTvtz6fQa80ky7ZnvWX8ldj4TUucFVPgEzq6FqSCSvKQ4DkY-H_15vHfiFUvCP-LVOJCwUwZkbpu-XM0n-Dn5pRTsOej_U8p3uvZaHtPhfPJEwZCC8yNnR626OopVp1HRca9bvVpRMl19O3N_evkphIeOv3EyJGk2ewv-vpIv2x3WpFm-CeAiPhGQdPln1eXbbP8qevn95EGInyUPpWpHn5e3Wkmp4WXKJNnfnCbHLgVTZP6mpS_Ptb0Dlxe2NfIXorKj4Mfl8est0vMcwbboFbAwX3bK-V5hsHV6kjg_sTb-0xP94j0R71oWTyswiBbIAUmyeI6NXHXn2D7YpgHcAS2FMTbQeOLdOFs58J7KFmiwtHFwULb1vcnB0-PtM7lI5TydizNYDKfj4TxJ02R8tl9MZkU5Hg2HE1GK-Ww0m8okGQGMRsMJwCwdn6kFT_g4mSbT4Xg04-PBvEyT6TSV5bhIUl5MySiBWig9QOwH1lVnyvsWFsPRNE2HZ1oUoH18ncJ5d8CdZk9OtAjnZLw6c4uY50VbeTJKtPLBnwwGFTQslv1ielp9epXy-MakBhMHXr4XOWudXnzn7UT_GL142mIoPmpvjOaw4P8NAAD__7sBadI">