On Wed, 18 Sep 2024, LIU Hao wrote:

在 2024-09-18 21:02, Martin Storsjö 写道:
Hmm, can you give a godbolt example or similar, for where the compilers diverge about warnings here?

With Clang, I don't seem to be able to get any warnings for either casts via (void(*)(void)) or (void*), with either C or C++, with -Wall -Wextra -pedantic.


Given

  ```
  typedef int my_function(int, int);

  void*
  try_casting(my_function* fp)
  {
    return (void*) fp;
  }
  ```

GCC shows a warning if this is compiled as C:
(https://gcc.godbolt.org/z/5916TPrGc)

  ```
  <source>: In function 'try_casting':
<source>:6:10: warning: ISO C forbids conversion of function pointer to object pointer type [-Wpedantic]
      6 |   return (void*) fp;
        |          ^
  ```

And Clang shows a warning if this is compiled as C++:
(https://gcc.godbolt.org/z/WxrebaPse)

  ```
<source>:6:10: warning: cast between pointer-to-function and pointer-to-object is an extension [-Wpedantic]
    return (void*) fp;
           ^~~~~~~~~~
  1 warning generated.
  ```

Thanks, I see - in this case it was the -ansi flag that was the last straw needed to push it to warn about it.

// Martin

_______________________________________________
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to