Open MPI logo

Open MPI Development Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Development mailing list

Subject: Re: [OMPI devel] VT build failure with Clang++
From: Dmitri Gribenko (gribozavr_at_[hidden])
Date: 2012-02-15 11:38:25


On Wed, Feb 15, 2012 at 10:56 AM, Paul Hargrove <phhargrove_at_[hidden]> wrote:
> I strongly suspect that this is a Clang++ bug.

I don't know if it is a Clang bug, but here's my understanding of the problem.

TokenFactoryScopeC<T>::create() boils down to this:

template <class T>
uint32_t
TokenFactoryScopeC<T>::create( const void * localDef, uint32_t globalToken )
{
   const T & local_def = *static_cast<const T*>(localDef);
   typename std::set<T>::const_iterator it = m_globDefs->find(
local_def ); // need operator< for T
   return 0;
}

When clang tries to instantiate
TokenFactoryScopeC<DefRec_BaseS>::getPackSize(), it tries to
instantiate create() too. It fails to do so because there is no
operator< defined for DefRec_BaseS.

Anyway, this looks like a bug in VT code, here's why. DefRec_* have
DefRec_*::SortS defined, but it is not used in
TokenFactoryScopeC<T>::m_globDefs. Probably it should be, something
like this:

std::set<T, typename T::SortS> * m_globDefs;

I'm not sure if this is a bug in Clang because I don't know if Clang
should have tried to instantiate create().

Dmitri

-- 
main(i,j){for(i=2;;i++){for(j=2;j<i;j++){if(!(i%j)){j=0;break;}}if
(j){printf("%d\n",i);}}} /*Dmitri Gribenko <gribozavr_at_[hidden]>*/