performance optimization: special-case deduction for variables of type `auto`
#186,274 建立於 2026年3月12日
倉庫指標
- Star
- (26,378 star)
- PR 合併指標
- (平均合併 1天 2小時) (30 天內合併 1,000 個 PR)
描述
General-purpose auto deduction involves some heavy machinery: we synthesize a template, perform a substitution on the type, perform deduction against the substituted type, perform another substitution, and so on. All of that adds up to a significant fraction of the total compile time if auto is used heavily.
But in places where auto is used heavily, the complete type is very frequently simply auto (or const auto), in which case we don't actually need any of that heavy machinery. Clang should detect the special case where the type is just auto (Context.AutoDeductTy) and the initializer is not an InitListExpr, and compute the decayed type of the initializer and directly build the deduced type.
$ for i in $(seq 1000000); do echo "auto v$i = 0;"; done >! ~/auto.cpp
$ for i in $(seq 1000000); do echo "int v$i = 0;"; done >! ~/int.cpp
$ time clang++ ~/auto.cpp -fsyntax-only
clang++ ~/auto.cpp -fsyntax-only 6.57s user 0.36s system 99% cpu 6.935 total
$ time clang++ ~/int.cpp -fsyntax-only
clang++ ~/int.cpp -fsyntax-only 4.40s user 0.22s system 99% cpu 4.629 total