llvm/llvm-project
View on GitHubperformance optimization: special-case deduction for variables of type `auto`
Open
#186274 opened on Mar 12, 2026
c++11clang:frontendenhancementgood first issuequality-of-implementationslow-compile
Description
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