This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [patch] fix PR c++/18073


Gabriel Dos Reis wrote:
Volker Reichelt <reichelt@igpm.rwth-aachen.de> writes:

[...]

| Now to the error message:
| With i686-pc-linux-gnu the signature of __builtin_ia32_movntd is:
| void __builtin_ia32_movntdq(long long int __vector__*, long long int __vector__)
| This explains why I didn't see the failure there.
| | In i386/i386.c we have:
| def_builtin (MASK_SSE2, "__builtin_ia32_movntdq", void_ftype_pv2di_v2di, IX86_BUILTIN_MOVNTDQ);
| | To me this looks like an incompatibility between the header, which tells us
| that __v2di is a long long int and the implementation on x86_64 that seems to
| make it a long int.
| | Since Mark's patch the C++ frontend just rejects such conversions.
| | The question is what to do now?
| * Fix the incompatibility somehow.
| * Loosen the C++ conversion rules for pointers to vectors.


I vote for either fixing the headers or fixing the intrinsic type used
by the compiler for the built-ins.

I agree. I see no reason that we should allow implicit conversions from "vector long long *" to "vector long*" when we (correctly) disallow conversions from "long long *" to "long *".


--
Mark Mitchell
CodeSourcery, LLC
mark@codesourcery.com
(916) 791-8304


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]