[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [creduce-dev] unifdef
Thanks Yaron. If I understand correctly, the test oracle is that GCC is
happy with the program and Clang is not?
I just pushed a change adding your include-remover pass, thanks for
On 10/31/15 10:54 PM, Yaron Keren wrote:
Sure, here is an example that comes with Boost::graph 1.59. Clang
compiles this cleanly as provided but if you add one include at the
first line you'll get mysterious template errors starting with:
>clang++ -std=c++11 -fsyntax-only incremental_components.cpp
In file included from incremental_components.cpp:17:
In file included from boost/graph/incremental_components.hpp:20:
In file included from boost/pending/disjoint_sets.hpp:16:
boost/pending/detail/disjoint_sets.hpp:59:7: error: no matching function
for call to 'get'
if (get(rank, i) > get(rank, j))
Moving the include after all other includes compiles OK again.
OTOH, g++ 4.9.3 accepts this code with the include in *either* location.
If creduce can handle such code automatically it would be really great
as manually+creducing such examples is no fun.
I'd like to see the final result...
2015-10-31 22:17 GMT+02:00 John Regehr <firstname.lastname@example.org
Yaron, thanks for sharing! I think you are describing a more
difficult reduction than any I have attempted.
First, every interestingness test was slow to compile, about 10s.
Second, Boost-using code and Boost-headers usually include many more
includes than actually required for a specific example. We are
about very large preprocessed files. Preprocessing the Boost::log
example sinks_async.cpp results in 8.7MB file on my system. Once
preprocessed they are not quickly reduced and it's much more
to reduce one #include line rather than reducing the resulting huge
preprocessed code - which may not be needed at all.
Ok, this makes sense.
Finally, the Boost usage of templates, inheritance and macros (with
non-preprocessed code) is very (too?) complex to automatically
and required manual help anyhow. Helping the reduce process is
only while the source is still human-readable and small.
With the Boost::log example I used creduce mostly for deleting the
includes, most of them were *not* required at every include
manually copying the remaining include files text into the main
in part or in whole (judgement call). It took about a day work
Well that isn't very much fun. It would be nice for C-Reduce to be
able to automate more of this-- can you point me at some test
cases? I can probably make some time to work on this.