Bug 30916 - Wrong ‘float’ rather than ‘double’ due to prototype warning
Summary: Wrong ‘float’ rather than ‘double’ due to prototype warning
Status: RESOLVED DUPLICATE of bug 9072
Alias: None
Product: gcc
Classification: Unclassified
Component: c (show other bugs)
Version: unknown
: P3 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2007-02-21 16:26 UTC by Herman ten Brugge
Modified: 2007-02-23 16:09 UTC (History)
10 users (show)

See Also:
Host: x86_64-unknown-linux-gnu
Target: x86_64-unknown-linux-gnu
Build: x86_64-unknown-linux-gnu
Known to work:
Known to fail:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Herman ten Brugge 2007-02-21 16:26:29 UTC
The following code:

void func (float a);
void
func (float a)
{
}

int
main (void)
{
  func (3.0f);
  return 0;
}

Compiled with: gcc -Wconversion bug.c
produces:
bug.c: In function ‘main’:
bug.c:10: warning: passing argument 1 of ‘func’ as ‘float’ rather than ‘double’ due to prototype

I was not expecting this.

When looking at the code in c-typeck.c at line 2473.
I see:
                      /* Warn if any argument is passed as `float',
                         since without a prototype it would be `double'.  */
                      if (formal_prec == TYPE_PRECISION (float_type_node)
                          && type != dfloat32_type_node)

Should the dfloat32_type_node be changed into float_type_node?
When I change this no warning is produced anymore.
Comment 1 Manuel López-Ibáñez 2007-02-23 14:08:09 UTC
What is your version of GCC ?
Comment 2 Manuel López-Ibáñez 2007-02-23 14:21:23 UTC
I think the warning is correct. If there were no prototype, the value would be passed as double. Since there is a prototype, the value is passed as float.

That is what -Wconversion warns about up to GCC 4.2 (check the manual for the description of Wconversion). Since GCC 4.3, those warnings have been moved to Wtraditional-conversion and Wconversion has a new purpose.

More info: http://gcc.gnu.org/wiki/NewWconversion

(Please, notice that the project is not finished yet, so things may change before GCC 4.3 is released).

Please, let us know if this answers your question, so we can close this bug report.
Comment 3 Herman ten Brugge 2007-02-23 15:26:08 UTC
Subject: Re:  Wrong =?windows-1252?Q?=91float=92_rather_?=
 =?windows-1252?Q?than_=91double=92_due_to_prototype_warning?=

manu at gcc dot gnu dot org wrote:
> ------- Comment #2 from manu at gcc dot gnu dot org  2007-02-23 14:21 -------
> I think the warning is correct. If there were no prototype, the value would be
> passed as double. Since there is a prototype, the value is passed as float.
>
> That is what -Wconversion warns about up to GCC 4.2 (check the manual for the
> description of Wconversion). Since GCC 4.3, those warnings have been moved to
> Wtraditional-conversion and Wconversion has a new purpose.
>
> More info: http://gcc.gnu.org/wiki/NewWconversion
>
> (Please, notice that the project is not finished yet, so things may change
> before GCC 4.3 is released).
>
> Please, let us know if this answers your question, so we can close this bug
> report.
>   
Yes. This answers the question. Sorry about the noise. I was testing 
this with
gcc version 4.1.1 20070105 (Red Hat 4.1.1-51) on fedora core 6. When I use
gcc version 4.3.0 20070222 (experimental). The problem goes away.
So the problem report can be closed.

Comment 4 Manuel López-Ibáñez 2007-02-23 16:09:15 UTC
(In reply to comment #3)
> >   
> Yes. This answers the question. Sorry about the noise. I was testing 
> this with
> gcc version 4.1.1 20070105 (Red Hat 4.1.1-51) on fedora core 6. When I use
> gcc version 4.3.0 20070222 (experimental). The problem goes away.
> So the problem report can be closed.
> 

No problem. Thanks for taking the time to report the issue anyway. It is a frequent confusion. That is why we decided to rename and improve Wconversion.

*** This bug has been marked as a duplicate of 9072 ***