Skip to content

Commit f5ee105

Browse files
[Clang] Optimize -Wunsafe-buffer-usage. (#125492)
The Clang disgnostic `-Wunsafe-buffer-usage` was adding up to +15% compilation time when used. Profiling showed that most of the overhead comes from the use of ASTMatchers. This change replaces the ASTMatcher infrastructure with simple matching functions and keeps the functionality unchanged. It reduces the overhead added by `-Wunsafe-buffer-usage` by 87.8%, leaving a negligible additional compilation time of 1.7% when the diagnostic is used. **Old version without -Wunsafe-buffer-usage:** ``` $ hyperfine -i -w 1 --runs 5 '/tmp/old_clang -c -std=c++20 /tmp/preprocessed.cc -ferror-limit=20' Benchmark 1: /tmp/old_clang -c -std=c++20 /tmp/preprocessed.cc -ferror-limit=20 Time (mean ± σ): 231.035 s ± 3.210 s [User: 229.134 s, System: 1.704 s] Range (min … max): 228.751 s … 236.682 s 5 runs ``` **Old version with -Wunsafe-buffer-usage:** ``` $ hyperfine -i -w 1 --runs 10 '/tmp/old_clang -c -std=c++20 /tmp/preprocessed.cc -ferror-limit=20 -Wunsafe-buffer-usage' Benchmark 1: /tmp/old_clang -c -std=c++20 /tmp/preprocessed.cc -ferror-limit=20 -Wunsafe-buffer-usage Time (mean ± σ): 263.840 s ± 0.854 s [User: 262.043 s, System: 1.575 s] Range (min … max): 262.442 s … 265.142 s 10 runs ``` **New version with -Wunsafe-buffer-usage:** ``` $ hyperfine -i -w 1 --runs 10 '/tmp/new_clang -c -std=c++20 /tmp/preprocessed.cc -ferror-limit=20 -Wunsafe-buffer-usage' Benchmark 1: /tmp/new_clang -c -std=c++20 /tmp/preprocessed.cc -ferror-limit=20 -Wunsafe-buffer-usage Time (mean ± σ): 235.169 s ± 1.408 s [User: 233.406 s, System: 1.561 s] Range (min … max): 232.221 s … 236.792 s 10 runs ```
1 parent 64555e3 commit f5ee105

File tree

1 file changed

+858
-519
lines changed

1 file changed

+858
-519
lines changed

0 commit comments

Comments
 (0)