Subject: Re: boost-libs compilation takes *extremely* long
To: Jeroen Ruigrok/asmodai <asmodai@in-nomine.org>
From: Rhialto <rhialto@falu.nl>
List: tech-pkg
Date: 10/04/2005 18:19:27
On Tue 04 Oct 2005 at 07:33:45 +0200, Jeroen Ruigrok/asmodai wrote:
> Mmm, didn't some C++ ABI change between those versions?

Apparently. __GXX_ABI_VERSION is 1002 in 3.4 and 102 in 3.3.3.

I found another workaround: there is a #define to avoid the template
instantiation that causes the problem. So I used that and sent a pr
(pkg/31465).

Furthermore it seems to me that the template instantiation doesn't
really instantiate very much, if anything at all, since the template
argument given for the expansion is itself still a template. So unless
g++ can build libraries from incomplete templates (which afaik it can't
yet), there would be no code generated anyway. Therefore avoiding it
would not really lose anything.

Here is the code:

typedef boost::wave::cpplexer::lex_token<> token_type;

template struct boost::wave::grammars::intlit_grammar_gen<token_type>;
template struct boost::wave::grammars::chlit_grammar_gen<token_type>;

The typedef looks like it simply defines token_type<some_arg> to be
boost::wave::cpplexer::lex_token<some_arg> (if my C++ isn't too rusty).
See the header filei boost_1_33_0/boost/wave/cpplexer/cpp_lex_token.hpp:

namespace boost {
namespace wave {
namespace cpplexer {
...
template <typename PositionT>
class lex_token 
{
...

Maybe gcc 3.3.3 gets confused with this useless "instantiation" and
that's why it gets into an infinite loop.

-Olaf.
-- 
___ Olaf 'Rhialto' Seibert      -- You author it, and I'll reader it.
\X/ rhialto/at/xs4all.nl        -- Cetero censeo "authored" delendum esse.