<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/88405>88405</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[-Wunsafe-buffer-usage -fsafe-buffer-usage-suggestions] UPCAddressofArraySubscriptGadget::getClaimedVarUseSites does not skip parenthesized references
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
juanvazquez
</td>
</tr>
</table>
<pre>
`UPCAddressofArraySubscriptGadget::getClaimedVarUseSites` is not skipping parentheses when accessing the `DeclRefExpr`, which causes a crash with parenthesized references, like in the next test case:
```cpp
// RUN: %clang_cc1 -std=c++20 -Wunsafe-buffer-usage \
// RUN: -fsafe-buffer-usage-suggestions \
// RUN: %s -verify %s
char * unsafe_pointer; // expected-warning{{'unsafe_pointer' is an unsafe pointer used for buffer access}}
void test(char * param) {
}
void dre_parenthesized() {
test(&(unsafe_pointer)[1]); // crash here // expected-note{{used in buffer access here}}
}
```
Crash (edited for privacy):
```
$ bin/llvm-lit -v ../llvm-project/clang/test/SemaCXX/warn-unsafe-buffer-usage-suggestions-crashes.cpp
.
.
.
-- Testing: 1 tests, 1 workers --
FAIL: Clang :: SemaCXX/warn-unsafe-buffer-usage-suggestions-crashes.cpp (1 of 1)
******************** TEST 'Clang :: SemaCXX/warn-unsafe-buffer-usage-suggestions-crashes.cpp' FAILED ********************
Exit Code: 134
Command Output (stderr):
--
#0 0x00000000039ee28b llvm::sys::PrintStackTrace(llvm::raw_ostream&, int)
#1 0x00000000039eb43b llvm::sys::RunSignalHandlers()
#2 0x00000000039eb565 SignalHandler(int) Signals.cpp:0:0
...
...
#9 0x0000000006b49bbb (anonymous namespace)::UPCAddressofArraySubscriptGadget::getClaimedVarUseSites() const UnsafeBufferUsage.cpp:0:0
#10 0x0000000006b688ce clang::checkUnsafeBufferUsage(clang::Decl const*, clang::UnsafeBufferUsageHandler&, bool)
#11 0x00000000069e038c clang::RecursiveASTVisitor<CallableVisitor>::TraverseFunctionDecl(clang::FunctionDecl*)
#12 0x00000000069ca8aa clang::RecursiveASTVisitor<CallableVisitor>::TraverseDeclContextHelper(clang::DeclContext*)
#13 0x00000000069e0a97 clang::RecursiveASTVisitor<CallableVisitor>::TraverseTranslationUnitDecl(clang::TranslationUnitDecl*)
#14 0x00000000069e0c3b clang::sema::AnalysisBasedWarnings::IssueWarnings(clang::TranslationUnitDecl*)
#15 0x0000000005f25c73 clang::Sema::ActOnEndOfTranslationUnit()
#16 0x0000000005db6a38 clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&)
#17 0x0000000005da65fa clang::ParseAST(clang::Sema&, bool, bool)
#18 0x0000000004526059 clang::FrontendAction::Execute()
#19 0x00000000044b1c05 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&)
#20 0x00000000045fab8f clang::ExecuteCompilerInvocation(clang::CompilerInstance*)
#21 0x0000000000bcb133 cc1_main(llvm::ArrayRef<char const*>, char const*, void*)
#22 0x0000000000bc460f ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#23 0x0000000000bc6ddd clang_main(int, char**, llvm::ToolContext const&)
#24 0x0000000000a90933 main
#25 0x00007efc68a456ca __libc_start_call_main
#26 0x00007efc68a45785 call_init
#27 0x00007efc68a45785 __libc_start_main
#28 0x0000000000bc3cb1 _start
--
********************
********************
Failed Tests (1):
Clang :: SemaCXX/warn-unsafe-buffer-usage-suggestions-crashes.cpp
Testing Time: 0.18s
Total Discovered Tests: 1
Failed: 1 (100.00%)
```
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysWE1z6rgS_TVio4Ky5Q_MggWBMJOqee-mArkzO6ott0ETI3kkmST317-SzIcNTL2pyaUcYmTp9NHpbqllMEZsJeKUJA8kWQygsTulp382IA_w468GfwxyVXxOSRq8Ps9nRaHRGFXOtIbPVZMbrkVtf4Fii5ZEMxLNtmjnFYg9Ft9BvxpcCYuGpAEVhkplqXkTdS3kltagUdodGjT0fYeSAudojHtkd0hJGiyQVy9YPn7UmqQBYXP6vhN8Rzk0bhBQrsHs6Luwuwua-IEF1ViiRsnRuFGVeEMqpIeV-GGpRWMpB4OOcrAgwek7DdqL1_WxhS0JW9KX1_-SaEYJS3gFcrvhPKRDYwsSLThhD4Q9sIAOf2-kgRKHeVOWqIeNgS1SkszvQXU-w_Jm1NA02y0aK5Q0f4dAWGLo8IBalJ_-R3cmfAeaEjajLaVNrYS0qEn0QI8o-FEjt1gM30FLIbdk_OAuNr4awcbOcyCPSPTYThuDBS2Vpi3vo_fIeOGuDpODEoUXnLDszKoGDXvCJtSZbDvfGVVo3PT8SljWG0RPwISlhGXXzCckeQhJsnB3l4m3QbNDjTdSSGWx1cHPTsj-5Pyg3gzPN6fA6c5h7g0RlmEh7FGsWosD8E_P6H7onVwd01xIwpZVddgPK2Hp8EBHo1NDrdWfyC1hSx-QhC1bJZYr3MP8jz8IWzq_Du9EZDe2hl4MNKNzwI_u_RsO6dqNkFsXeKFX3WdWSN-VfkNt6HDYdl3Onn5zneaOFm2XBPrvSTn5QqpKGjrJjtL8-4uuH1drStj4J9Fz2eFm_LigX6HVTuzxQ1g6VwV6kaO4F0tqvwdZ0G-NrRvrVDG2QK27gXRywTE3CIsCGnwEp080QWRZTl38tBM3n6a9edZC2pUF_rbWwJGw7NJJw_tGGavRJWzqnC6k9Vl4NhNemcnj6K6Zl0auxFZC9SvIokJtTvl8RmLXSEma0N4YwrKj_ba5dUM0C_xfCzQajW7uCIsmXfA0jyd5njslQSr5uVeNoRL2aGqvwKSl_JU9r50cV9JY-upj6sGH1KuLqFvaTsigTzHNMo60zXBviO-Qv91guZX10sftmq1VH1zz7viboWdVvWdzpapOnkVhz7PpBIMo4128F-SNNuKAs9X6uzDCKk2i-RyqCvIKzy2Pbe-1hgNqg8tGcpdKjmmfe__JrMeF9blwyAC-zsVZmitp8cP-ilXtA-xKzOPjaz7RtTYwGX-dz1qDNBU4EV6lsLcS3e3QZxZfM-NR3mVmcA_t3UxC9WmEeQCDxe9tIXBM1idjGjw3_TMK9MIh6XJISpbwcdTlsLpw4PabfJTFt_IKt7c6OMy0h1nkKURZF_MZtHE1zvl-rerf8IDVrYrfavirwWfrXHLl7l-0auoXLJ1r2rS4S_s_qmgqfNrXSrul06Lv3PHCuM8W0qSEG7az1bpPzBvoZuM5KztCZF3oOGFpkEy60EvtQlYWM59MbdvjB_LGscx6LHuLYhznIQ-SLtRc7WtRoX6SxoLk2AM74vdTuG_bi3KhzoI-9RLyrOzaOyJfzB4Uh1srN7Su4o_1Vq4g53kYRZTzcLMHV1Z1Nji_rHt_z319el46nf_ntN_G5tSVpjfm2JW5OA1KeprLPFx7F3aMrvZQVd-RW6Wf9nV117YPgssQh3Fcik79vLaFFgfUd_cTFl3RSouiaNU-6eA303aWp3Lknxi9mOgtNgFMgkkUUQfe6XNaDMZY8jSDOEk50M2mEjnfGAvabjhU1eZqVHo9apwl1HcUUthOx_G9jj34K-TsSpaI5yFtu9J7tdTXa7uvIyxBVFj4Otz4qrhb-tGfVW_3Zu2_j4U_XYu9L0yDUZj1jpprZaGiC2G4OqA-UfQ17Ilcy709OzjqQTAKAsKSy0p09wx0-jkoplExiSYwwGk4DlmWsIBlg92UsZzHRR5McsRykpUAWVRG47jMgRVjXgzElAUsDuIwDNMwipNREoY5ACQsLiHMwozEAe5BVCMX8iOltwPh9r1plsVBMqggx8r4VyOMSXyn_iFhjCSLgZ76k1jebA2Jg0oYay4oVtjKv1O5_1Lg_xz5SbKgX6g8aaHw8rLlb1-NDBpdTXfW1n7H90fhrbC7Jh9xtT8eNG_Pm14CQ9jSS_S_AAAA__9XhWQU">