On 24/05/19 10:57 +0200, Christophe Lyon wrote:
Hi Jonathan,

On Thu, 23 May 2019 at 16:13, Jonathan Wakely <jwak...@redhat.com> wrote:

It's possible for the function pointer comparison to fail even though
the type is correct, because the function could be defined multiple
times with different addresses when shared libraries are in use.

Retain the function pointer check for the common case where the check
succeeds, but compare typeinfo (if RTTI is enabled) if the first check
fails.

        * include/experimental/any (__any_caster): Use RTTI if comparing
        addresses fails, to support non-unique addresses in shared libraries.
        * include/std/any (__any_caster): Likewise.

Tested powerpc64le-linux, committed to trunk, backports to follow.



It seems OK on trunk, but on gcc-7/gcc-8 branches I see:
/libstdc++-v3/testsuite/experimental/any/misc/any_cast_neg.cc:20:
/aci-gcc-fsf/builds/gcc-fsf-gccsrc/obj-aarch64-none-linux-gnu/gcc3/aarch64-none-linux-gnu/libstdc++-v3/include/experimental/any:
In instantiation of '_ValueType
std::experimental::fundamentals_v1::any_cast(const
std::experimental::fundamentals_v1::any&) [with _ValueType = int&]':
/libstdc++-v3/testsuite/experimental/any/misc/any_cast_neg.cc:28:
required from here
/aci-gcc-fsf/builds/gcc-fsf-gccsrc/obj-aarch64-none-linux-gnu/gcc3/aarch64-none-linux-gnu/libstdc++-v3/include/experimental/any:358:
error: binding reference of type 'int&' to 'const int' discards
qualifiers
compiler exited with status 1
FAIL: experimental/any/misc/any_cast_neg.cc  (test for errors, line 357)
FAIL: experimental/any/misc/any_cast_neg.cc (test for excess errors)

on arm/aarch64

I don't see how you can have that error when the test was changed to
match on any line:

https://gcc.gnu.org/viewcvs/gcc/branches/gcc-7-branch/libstdc%2B%2B-v3/testsuite/experimental/any/misc/any_cast_neg.cc?r1=271566&r2=271565&pathrev=271566
https://gcc.gnu.org/viewcvs/gcc/branches/gcc-8-branch/libstdc%2B%2B-v3/testsuite/experimental/any/misc/any_cast_neg.cc?r1=271562&r2=271561&pathrev=271562

Reply via email to