[patch] fix PR c++/18073
Andreas Jaeger
aj@suse.de
Fri Dec 10 06:15:00 GMT 2004
Volker Reichelt <reichelt@igpm.rwth-aachen.de> writes:
> The include file xmmintrin.h has been rejected on mainline
> by the C++ frontend since Mark's casting patch
> http://gcc.gnu.org/ml/gcc-cvs/2004-10/msg01166.html
> which flagged casting from/to vectors as invalid.
>
> Mark added the casting *to* vectors in
> http://gcc.gnu.org/ml/gcc-cvs/2004-10/msg01279.html
> but the casting *from* vectors still doesn't work.
> The following patch adds the missing bit.
>
> Bootstrapped and regtested on i686-pc-linux-gnu. Ok to commit?
The new test fails on x86-64 in 64-bit mode with:
Executing on host: /builds/gcc/misc/gcc/testsuite/../g++ -B/builds/gcc/misc/gcc/testsuite/../ /cvs/gcc/gcc/testsuite/g++.dg/other/mmintrin.C -nostdinc++ -I/builds/gcc/misc/x86_64-suse-linux-gnu/libstdc++-v3/include/x86_64-suse-linux-gnu -I/builds/gcc/misc/x86_64-suse-linux-gnu/libstdc++-v3/include -I/cvs/gcc/libstdc++-v3/libsupc++ -I/cvs/gcc/libstdc++-v3/include/backward -I/cvs/gcc/libstdc++-v3/testsuite -fmessage-length=0 -msse -S -o mmintrin.s (timeout = 300)
/builds/gcc/misc/gcc/testsuite/../include/emmintrin.h: In function 'void _mm_stream_si128(long long int __vector__*, long long int __vector__)':
/builds/gcc/misc/gcc/testsuite/../include/emmintrin.h:1426: error: invalid conversion from 'long long int __vector__*' to 'long int __vector__*'
/builds/gcc/misc/gcc/testsuite/../include/emmintrin.h:1426: error: initializing argument 1 of 'void __builtin_ia32_movntdq(long int __vector__*, long int __vector__)'
compiler exited with status 1
output is:
/builds/gcc/misc/gcc/testsuite/../include/emmintrin.h: In function 'void _mm_stream_si128(long long int __vector__*, long long int __vector__)':
/builds/gcc/misc/gcc/testsuite/../include/emmintrin.h:1426: error: invalid conversion from 'long long int __vector__*' to 'long int __vector__*'
/builds/gcc/misc/gcc/testsuite/../include/emmintrin.h:1426: error: initializing argument 1 of 'void __builtin_ia32_movntdq(long int __vector__*, long int __vector__)'
FAIL: g++.dg/other/mmintrin.C (test for excess errors)
Excess errors:
/builds/gcc/misc/gcc/testsuite/../include/emmintrin.h:1426: error: invalid conversion from 'long long int __vector__*' to 'long int __vector__*'
/builds/gcc/misc/gcc/testsuite/../include/emmintrin.h:1426: error: initializing argument 1 of 'void __builtin_ia32_movntdq(long int __vector__*, long int __vector__)'
I don't understand this - 'long long int __vector__*' and 'long int
__vector__*' should be basically the same type (both pointers to
64-bit).
Andreas
> Regards,
> Volker
>
>
> 2004-12-08 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
>
> * typeck.c (build_reinterpret_cast_1): Allow cast from vector.
>
>
> Index: gcc/gcc/cp/typeck.c
> ===================================================================
> RCS file: /home/reichelt/GCC/CVS/gcc-cvs/gcc/gcc/cp/typeck.c,v
> retrieving revision 1.600
> diff -u -p -r1.600 typeck.c
> --- gcc/gcc/cp/typeck.c 26 Nov 2004 15:45:47 -0000 1.600
> +++ gcc/gcc/cp/typeck.c 8 Dec 2004 12:09:24 -0000
> @@ -4972,6 +4972,8 @@ build_reinterpret_cast_1 (tree type, tre
> }
> else if (TREE_CODE (type) == VECTOR_TYPE)
> return fold_if_not_in_template (convert_to_vector (type, expr));
> + else if (TREE_CODE (intype) == VECTOR_TYPE)
> + return fold_if_not_in_template (convert_to_integer (type, expr));
> else
> {
> if (valid_p)
> ===================================================================
>
>
>
Andreas
--
Andreas Jaeger, aj@suse.de, http://www.suse.de/~aj
SUSE Linux Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
GPG fingerprint = 93A3 365E CE47 B889 DF7F FED1 389A 563C C272 A126
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 188 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20041210/a4bd9bd6/attachment.sig>
More information about the Gcc-patches
mailing list