[cfe-dev] Weird clang++ slowness
Óscar Fuentes
ofv at wanadoo.es
Fri Oct 25 11:43:34 PDT 2013
Hello Ben,
Benjamin Kramer <benny.kra at gmail.com>
writes:
>> On 25.10.2013, at 13:13, "Óscar Fuentes" <ofv at wanadoo.es> wrote:
>>
>> I found certain source files which are taking a lot of time to compile.
>> Upon investigation I measured this times:
>>
>>
>> 9.8 seconds for command: clang++ -c -std=c++11 file.cpp
>>
>> 0.2 seconds for command: clang++ -E -std=c++11 file.cpp > f.CC
>> (creates a 2.9 MB file)
>>
>> 3.4 seconds for command: clang++ -c -std=c++11 f.CC
>>
>>
>> So explicitly preprocessing and then compiling takes less than half the
>> time of compiling the original file.
>>
>> I guess this is due to macro expansion tracking for diagnostic purposes.
>> The C++ file contains some errors (it belongs to a test suite) although
>> I see no references to macros on the output of the compiler.
>>
>> So how can I speed up the compilation? Can this be considered a bug?
>
> Could be a bug or just macro tracking with very deep instantiations.
> Impossible to say without a test case.
I think I hit a huge pessimization on Clang's diagnostic machinery. See
this test case:
#include "boost/asio.hpp"
double mainf();
int mainf() {
foo(sdafo_2, 0);
return 0;
}
Some timings:
Time (seconds) Command
6.8 clang -c -std=c++11 test.cpp
4.8 clang -c test.cpp
(after replacing `sdafo_2' with `x')
1.0 clang -c test.cpp
(after replacing `sdafo_2' with `o_2')
2.8 clang -c test.cpp
Also please note how Clang quickly reports the first error about the
ilegal overload of `mainf' and then there is a long lapse of time until
it reports the error concerning `sdafo_2'.
More information about the cfe-dev
mailing list