[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