[PPL-devel] PPL on a Power6 running AIX
Enea Zaffanella
zaffanella at cs.unipr.it
Thu Sep 17 09:29:52 CEST 2009
Davide Del Vento wrote:
> Thanks for your message!
>
> xlc and xlC are the IBM's compilers for c and c++ respectively.
> They do support several standards:
> http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic=/com.ibm.xlcpp8l.doc/getstart/overview/gs_ovr.htm
>
> and sometimes are more nitpicking than gcc about the standards,
> as I believe it's happening here.
> Anyway, I was able to remove several of those errors with the enclosed
> patch. Can you please have a look at it just to be sure that I didn't
> change what ppl was supposed to do?
> Unfortunately, though, the problem is NOT solved, since there are other
> (possibly similar) problems that you can see in the make.log
> Do you have any clue about them?
All of the changes in your patch have to do with a single name lookup
issue. Namely, the IBM compiler seems unable to compile the following
/* ========================= */
namespace Namespace {
class Base {}; // Definition.
class Derived; // Forward declaration.
}
class Namespace::Derived // Definition.
: public Base {
typedef Base base_type;
}
/* ========================= */
If I have understood, it claims that there is no accessible declaration
for `Base'. This is really strange ... I really don't think that we are
using extensions of gcc, rather I suspect that the IBM compiler is just
wrong.
Looking to name lookup rules in the C++ standard (14882-1998),
one can see the following example in section 3.4.1(8) (unqualified name
lookup, pages 30-31):
===============================
[Example:
class B { };
namespace M {
namespace N {
class X : public B {
void f();
};
}
}
void M::N::X::f() {
i = 16;
}
// The following scopes are searched for a declaration of i:
// 1) outermost block scope of M::N::X::f, before the use of i
// 2) scope of class M::N::X
// 3) scope of M::N::X’s base class B
// 4) scope of namespace M::N
// 5) scope of namespace M
// 6) global scope, before the definition of M::N::X::f
—end example]
===============================
In points 4 and 5 it is said that the unqualified name (i) is also
searched in the scope of the enclosing namespaces (here M::N and M).
Hence, in our simpler example above, `Base' should also be searched
inside `Namespace'.
According to the make.log contents, it is not just a matter of the names
of base classes when using inheritance ... and we cannot reasonably
change *all* the uses of unqualified names in the PPL sources to become
qualified names (that is, add Parma_Polyhedra_Library:: everywhere even
if not needed).
Are you using the latest available version of the compiler? I am asking
because it seems there has been bug corrections regarding name lookup
issues last June:
http://www-01.ibm.com/support/docview.wss?uid=swg24023988
Cheers,
Enea Zaffanella.
> Compiling with gcc is possible, but there will be several
> linking problems with other libraries that I eventually
> need to link together (gcc binaries are not-linkable with
> xlC binaries).
>
> Thanks again
> Davide Del Vento, Consulting Services Software Engineer
> NCAR Computational & Information Services Laboratory
> http://www.cisl.ucar.edu/hss/csg/
> office: Mesa Lab, Room 42B
> phone: (303) 497-1233
> mobile: (720) 240-1704
> email: ddvento at ucar.edu
More information about the PPL-devel
mailing list