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 ());
^^^^^^^^^^