<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/121087>121087</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[C++] [Clang-tidy] bugprone-reserved-identifier mistakenly changed JNI API
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang-tidy
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
forunix
</td>
</tr>
</table>
<pre>
Please help to fix the problem for bugprone-reserved-identifier of clang-tidy.
When bugprone-reserved-identifier option of clang-tidy is enabled, it will change double underscores to one underscore. It will result runtime exception of 'java.lang.UnsatisfiedLinkError: No implementation found for xxx'.
As an example it will change Java_cn_huolala_nav_kit_HLLNVBusinessJNI_nativeSwitchParallelRoad__I to Java_cn_huolala_nav_kit_HLLNVBusinessJNI_nativeSwitchParallelRoad_I.
The build info is as follows.
`C/C++: /Users/wudizhiwang/Repos/hll-nav-demo/hll-nav-business/main/src/android/HLLNVBusinessJNI.cpp:1740:24: warning: declaration uses identifier 'Java_cn_huolala_nav_kit_HLLNVBusinessJNI_nativeSwitchParallelRoad__I', which is a reserved identifier [bugprone-reserved-identifier,cert-dcl37-c,cert-dcl51-cpp]
C/C++: /Users/wudizhiwang/Repos/hll-nav-demo/hll-nav-business/main/src/android/HLLNVBusinessJNI.cpp:1740:24: note: FIX-IT applied suggested code changes`
The code of bugprone-reserved-identifier is located at clang-tools-extra/clang-tidy/bugprone/ReservedIdentifierCheck.cpp.
`static std::string collapseConsecutive(StringRef Str, char C) {
std::string Result;
std::unique_copy(Str.begin(), Str.end(), std::back_inserter(Result),
[C](char A, char B) { return A == C && B == C; });
return Result;
}
static bool hasReservedDoubleUnderscore(StringRef Name,
const LangOptions &LangOpts) {
if (LangOpts.CPlusPlus)
return Name.contains("__");
return Name.starts_with("__");
}
static std::optional<std::string>
getDoubleUnderscoreFixup(StringRef Name, const LangOptions &LangOpts) {
if (hasReservedDoubleUnderscore(Name, LangOpts))
return collapseConsecutive(Name, '_');
return std::nullopt;
}`
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzMVl9v4rgX_TSXFwsUnIaEBx4CTPRjVPVXdWZ29y1y7JvEU2NnbQfofvqV00AZOupqtfuwVVGIff-dc48vZs7JRiOuIFlDsp2w3rfGrmpjey1Pk8qIl9WjQuaQtKg64g2p5Yn4FklnTaVwT2pjSdU3nTUapxYd2gOKqRSovawlWmJqwhXTzdRL8TKDKIco_7VF_RdenZdG_-hMpCOoWaVQAN0Q6clRKkV4y3SDRJi-Ukh6LdA6biy6UK7R10szshudLLpeeWJ77eUeCZ44XjICTb-zA5uFxLNv2jEvXS1R3Ev9_MlaYyHOyYMhct8p3KP2bPCsTa_FwMfpdAKajlhzR5gmeGLB-rboz-zASq7LtjeKKVZqdiifpS__d3__8Mu6d1Kjc58fdqVmXh7wy1F63j4yy5RC9WSYKMtdgPnP4-zGcr-2SKpeKkGkrk2gnDlSG6XM0Q0mi2gDtNgAXYf_OCdAi28OrQNaHHsh_2jlkekGaPGEnQmrrVJTzQ5TgXtz9VqNZQEt9kxqoIWzHGjBtLBGCqDFbfUz3nUQ5_P0LoI4p3ch-5FZLXUTvgrkitnXZvQOHbnSE9D03-AaaBqkd2wlbwduyFm8PyRL1h-JG-iGo_VTwVWcTvnVazKfBojJFqL8P8WyNh7Ds9j9Nt19JazrlERBXN806DwKwo3AUdQOFtGrlkY5DXum_vjAS0eU4SzEYv586I1RboonbxnQ4m0QAC3OsQYCXqPtLsE2LfLnAGMUrAsnlBPnBcQ5xLnzVuqGcKMU6xxujHbI-9B0oNmXYfMJa_LFh1YFVJZsgC4JpGuIcvIu0NMwTCC-2e21_L3Hkpvu5TXurMImtCADugyRwxJq8bZwca0Yfy6ldmh90Es2ZhishiTv_iBZb4JwaDbUm18qX4-VE4u-t5rkBOItxFuyIUAXQBdkfVmBeE0g3YY8I5jR6RphMBh6O9JaGaNIy9y5D9thEH-7DN0fOH1gexwxcKOdJ_dMN_8fRq8L9Yyv7ppuGUZydt6ZbR5V78InlPnKxVhlCD7jRnsmtRtYpWUJlL7HM1g6z6x35VH69mfGtzgvzXn9bWIK4s2NEiD-BFHeoL_loJCnvvsZEX-XhY95Pge98n9H0s9Vf_YEmpbDkLtl7IJU90qZ7koLi2giVrFYxks2wdU8jZN5lN4ts0m7Sud3NVYZYhUjVjwRmRBZzeKFWCYxZulErmhE7-aUJtFins2zWULjaFkxWrGMiSWmcBfhnkk1U-qwnxnbTKRzPa7mdB5l6USxCpUbri-UXg8IGq4zdhW8plXfOLiLlHTevcXx0qvh4nMessl2OERvQZLtxyNrL51nz6jVyzj5BPn8sCP5427SW7Vqve9c4IwWQItG-ravZtzsgRahiPEx7az5jtwDLQZkYVCP4A4r-mcAAAD__957LFA">