[Bug c/90219] Wrong source location for "cannot convert to a pointer type" warning
redi at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Wed Apr 24 07:59:00 GMT 2019
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90219
--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> ---
(In reply to Timm Bäder from comment #0)
> Using gcc 8.3.1 and the following sample code:
>
> static int use_float(float *f) {
> return (int)*f;
> }
>
> // Type your code here, or load an example.
> int square(int num) {
> float f = 1.0f;
> return use_float((float*)f);
> }
>
> it prints the following error:
>
> <source>: In function 'square':
> <source>:8:5: error: cannot convert to a pointer type
> return use_float((float*)f);
> ^~~~~~
>
> which is highlighting the wrong part of that line. The error message itself
> could be improved as well (I forgot to take the address of f of course!)
Well if you took the address you wouldn't need to cast it to (float*) so I
don't think the diagnostic should try to infer that you wanted to say &f here.
It certainly looks like the code is attempting to do an invalid type
conversion, so the message seems reasonable. The highlighted location is
definitely poor though.
> but
> I think the cast should be highlighted.
>
> If use_float() is instead called stand-alone and not as part of the return
> statment:
>
> int square(int num) {
> float f = 1.0f;
> use_float((float*)f);
> return 1;
> }
>
> The source location is slightly better:
>
> <source>: In function 'square':
> <source>:8:5: error: cannot convert to a pointer type
> use_float((float*)f);
> ^~~~~~~~~
Well it's still just the start of the statement, which is not really any
better.
More information about the Gcc-bugs
mailing list