You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@stdcxx.apache.org by Farid Zaripov <Fa...@epam.com> on 2008/10/13 18:48:55 UTC

[HP aCC 3.xx on HP-UX/PA-RISC] 20.specialized test fails to compile

  The 20.specialized test fails to compile after change in http://svn.apache.org/viewvc?view=rev&revision=697885

--------
aCC -c  -D_RWSTDDEBUG   -mt -I$(TOPDIR)/include -I$(BUILDDIR)/include -I$(TOPDIR)/tests/include  -AA  -g +d  +DD64 +w +W392,655,684,818,819,849   $(TOPDIR)/tests/utilities/20.specialized.cpp
Error 746: "$(TOPDIR)/include/rw/_specialized.h", line 175 # Cannot use static_cast to convert struct FwdIter<Y> to volatile void *.
                    _RWSTD_STATIC_CAST (volatile void*, &*__res);
                    ^^^^^^^^^^^^^^^^^^
Error 556: "$(TOPDIR)/tests/utilities/20.specialized.cpp", line 140 # Unable to generate specialization "FwdIter<Y> std::uninitialized_copy<InputIter<int>,FwdIter<Y> >(InputIter<int>,InputIter<int>,FwdIter<Y>)" due to errors during generation.
                std::uninitialized_copy (first, last, result);
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Error 556: "$(TOPDIR)/tests/utilities/20.specialized.cpp", line 140 # Unable to generate specialization "FwdIter<Y> std::uninitialized_copy<InputIter<int>,FwdIter<Y> >(InputIter<int>,InputIter<int>,FwdIter<Y>)" due to errors during generation.
                std::uninitialized_copy (first, last, result);
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
gmake: *** [20.specialized.o] Error 2
--------

  On the other compilers/platforms this test compiled without errors.

  Can anyone to look into this issue?

Farid.

Re: [HP aCC 3.xx on HP-UX/PA-RISC] 20.specialized test fails to compile

Posted by Martin Sebor <ms...@gmail.com>.
Farid Zaripov wrote:
>   The 20.specialized test fails to compile after change in http://svn.apache.org/viewvc?view=rev&revision=697885
> 
> --------
> aCC -c  -D_RWSTDDEBUG   -mt -I$(TOPDIR)/include -I$(BUILDDIR)/include -I$(TOPDIR)/tests/include  -AA  -g +d  +DD64 +w +W392,655,684,818,819,849   $(TOPDIR)/tests/utilities/20.specialized.cpp
> Error 746: "$(TOPDIR)/include/rw/_specialized.h", line 175 # Cannot use static_cast to convert struct FwdIter<Y> to volatile void *.
>                     _RWSTD_STATIC_CAST (volatile void*, &*__res);
>                     ^^^^^^^^^^^^^^^^^^
> Error 556: "$(TOPDIR)/tests/utilities/20.specialized.cpp", line 140 # Unable to generate specialization "FwdIter<Y> std::uninitialized_copy<InputIter<int>,FwdIter<Y> >(InputIter<int>,InputIter<int>,FwdIter<Y>)" due to errors during generation.
>                 std::uninitialized_copy (first, last, result);
>                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> Error 556: "$(TOPDIR)/tests/utilities/20.specialized.cpp", line 140 # Unable to generate specialization "FwdIter<Y> std::uninitialized_copy<InputIter<int>,FwdIter<Y> >(InputIter<int>,InputIter<int>,FwdIter<Y>)" due to errors during generation.
>                 std::uninitialized_copy (first, last, result);
>                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> gmake: *** [20.specialized.o] Error 2
> --------
> 
>   On the other compilers/platforms this test compiled without errors.
> 
>   Can anyone to look into this issue?

It's the const qualifier on __ptr that's causing the trouble (see
the test case below). This patch fixes for me:

Index: include/rw/_specialized.h
===================================================================
--- include/rw/_specialized.h   (revision 704292)
+++ include/rw/_specialized.h   (working copy)
@@ -171,7 +171,8 @@

      _TRY {
          for (; __first != __last; ++__first, ++__res) {
-            volatile void* const __ptr =
+            // avoid const-qualifying ptr to prevent an HP aCC 3 bug
+            volatile void* /* const */ __ptr =
                  _RWSTD_STATIC_CAST (volatile void*, &*__res);
              ::new (_RWSTD_CONST_CAST (void*, __ptr)) _TypeT (*__first);
          }

I haven't tested it except with aCC but it seems safe enough
to commit if you're happy with it. What a pain this bug, huh?

Martin


$ cat z.cpp && aCC -V z.cpp
struct S {
     int *x;
     int& operator* () const { return *x; }
};

template <class T> void foo (T x) {
     volatile void* const p = static_cast<volatile void*>(&*x);
}

int main () {
     foo (S ());
}
aCC: HP ANSI C++ B3910B A.03.73
Error 746: "z.cpp", line 7 # Cannot use static_cast to convert struct S 
to volatile void *.
         volatile void* const p = static_cast<volatile void*>(&*x);
                                                              ^
Error 556: "z.cpp", line 11 # Unable to generate specialization "void 
foo<S>(S)" due to errors during generation.
         foo (S ());
         ^^^^^^^^^^
Error 556: "z.cpp", line 11 # Unable to generate specialization "void 
foo<S>(S)" due to errors during generation.
         foo (S ());
         ^^^^^^^^^^