Hi,

I could reproduce the problem with GCC 12 on aarch64, but not with GCC
13 and 14.

Using the following test program:

  #include <stdio.h>
  
  float test(_Float16 x){
    return x;
  }
  
  int main() {
    printf("%f\n", test(1.0));
  }

This is the error message you get on aarch64 with g++-12:

  $ g++-12 x.c 
  x.c:3:12: error: '_Float16' was not declared in this scope; did you mean 
'_Float64'?
      3 | float test(_Float16 x){
        |            ^~~~~~~~
        |            _Float64
  x.c: In function 'int main()':
  x.c:8:22: error: 'test' cannot be used as a function
      8 |   printf("%f\n", test(1.0));
        |                  ~~~~^~~~~

The same program builds fine with g++-12 on x86_64.

Note that with GCC 13 and 14 the code compiles and works (ie: it prints
"1.000000") albeit with some warnings. This is the same behavior you get
on x86_64 as well, with GCC 13 and 14.

  $ g++-13 x.c 
  x.c: In function 'int main()':
  x.c:8:23: warning: converting to '_Float16' from 'double' with greater 
conversion rank
      8 |   printf("%f\n", test(1.0));
        |                       ^~~
  x.c:3:21: note:   initializing argument 1 of 'float test(_Float16)'
      3 | float test(_Float16 x){
        |            ~~~~~~~~~^

Reply via email to