Skip to content

XDR compile warnings cause test failures on mac #4387

Description

@GiudGiud

With the upgrade of the compiler stack, the custom casting between functions done for xdr is flagged as 'incompatible'

I imagine this is a false positive otherwise we would have been bitten already by this

../src/utils/xdr_cxx.C:565:12: error: cast from 'int (*)(XDR *, int *)' (aka 'int (*)(__rpc_xdr *, int *)') to 'xdrproc_t' (aka 'int (*)(__rpc_xdr *, void *, unsigned int)') converts to incompatible function type [-Werror,-Wcast-function-type-mismatch]
  565 |     return (xdrproc_t)(xdr_int);
      |            ^~~~~~~~~~~~~~~~~~~~
../src/utils/xdr_cxx.C:567:12: error: cast from 'int (*)(XDR *, quad_t *)' (aka 'int (*)(__rpc_xdr *, long long *)') to 'xdrproc_t' (aka 'int (*)(__rpc_xdr *, void *, unsigned int)') converts to incompatible function type [-Werror,-Wcast-function-type-mismatch]
  567 |     return (xdrproc_t)(xdr_longlong_t);
      |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~
../src/utils/xdr_cxx.C:569:12: error: cast from 'int (*)(XDR *, int *)' (aka 'int (*)(__rpc_xdr *, int *)') to 'xdrproc_t' (aka 'int (*)(__rpc_xdr *, void *, unsigned int)') converts to incompatible function type [-Werror,-Wcast-function-type-mismatch]
  569 |     return (xdrproc_t)(xdr_long);
      |            ^~~~~~~~~~~~~~~~~~~~~
../src/utils/xdr_cxx.C:580:12: error: cast from 'int (*)(XDR *, unsigned int *)' (aka 'int (*)(__rpc_xdr *, unsigned int *)') to 'xdrproc_t' (aka 'int (*)(__rpc_xdr *, void *, unsigned int)') converts to incompatible function type [-Werror,-Wcast-function-type-mismatch]
  580 |     return (xdrproc_t)(xdr_u_int);
      |            ^~~~~~~~~~~~~~~~~~~~~~
../src/utils/xdr_cxx.C:582:12: error: cast from 'int (*)(XDR *, unsigned int *)' (aka 'int (*)(__rpc_xdr *, unsigned int *)') to 'xdrproc_t' (aka 'int (*)(__rpc_xdr *, void *, unsigned int)') converts to incompatible function type [-Werror,-Wcast-function-type-mismatch]
  582 |     return (xdrproc_t)(xdr_u_long);
      |            ^~~~~~~~~~~~~~~~~~~~~~~
../src/utils/xdr_cxx.C:584:12: error: cast from 'int (*)(XDR *, u_quad_t *)' (aka 'int (*)(__rpc_xdr *, unsigned long long *)') to 'xdrproc_t' (aka 'int (*)(__rpc_xdr *, void *, unsigned int)') converts to incompatible function type [-Werror,-Wcast-function-type-mismatch]
  584 |     return (xdrproc_t)(xdr_u_longlong_t);
      |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../src/utils/xdr_cxx.C:595:12: error: cast from 'int (*)(XDR *, int *)' (aka 'int (*)(__rpc_xdr *, int *)') to 'xdrproc_t' (aka 'int (*)(__rpc_xdr *, void *, unsigned int)') converts to incompatible function type [-Werror,-Wcast-function-type-mismatch]
  595 |     return (xdrproc_t)(xdr_long);
      |            ^~~~~~~~~~~~~~~~~~~~~
../src/utils/xdr_cxx.C:597:12: error: cast from 'int (*)(XDR *, quad_t *)' (aka 'int (*)(__rpc_xdr *, long long *)') to 'xdrproc_t' (aka 'int (*)(__rpc_xdr *, void *, unsigned int)') converts to incompatible function type [-Werror,-Wcast-function-type-mismatch]
  597 |     return (xdrproc_t)(xdr_longlong_t);
      |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~
../src/utils/xdr_cxx.C:608:12: error: cast from 'int (*)(XDR *, unsigned int *)' (aka 'int (*)(__rpc_xdr *, unsigned int *)') to 'xdrproc_t' (aka 'int (*)(__rpc_xdr *, void *, unsigned int)') converts to incompatible function type [-Werror,-Wcast-function-type-mismatch]
  608 |     return (xdrproc_t)(xdr_u_long);
      |            ^~~~~~~~~~~~~~~~~~~~~~~
../src/utils/xdr_cxx.C:610:12: error: cast from 'int (*)(XDR *, u_quad_t *)' (aka 'int (*)(__rpc_xdr *, unsigned long long *)') to 'xdrproc_t' (aka 'int (*)(__rpc_xdr *, void *, unsigned int)') converts to incompatible function type [-Werror,-Wcast-function-type-mismatch]
  610 |     return (xdrproc_t)(xdr_u_longlong_t);
      |            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../src/utils/xdr_cxx.C:624:48: error: cast from 'int (*)(XDR *, quad_t *)' (aka 'int (*)(__rpc_xdr *, long long *)') to 'xdrproc_t' (aka 'int (*)(__rpc_xdr *, void *, unsigned int)') converts to incompatible function type [-Werror,-Wcast-function-type-mismatch]
  624 | xdrproc_t xdr_translator<long long>() { return (xdrproc_t)(xdr_longlong_t); }
      |                                                ^~~~~~~~~~~~~~~~~~~~~~~~~~~
../src/utils/xdr_cxx.C:627:57: error: cast from 'int (*)(XDR *, u_quad_t *)' (aka 'int (*)(__rpc_xdr *, unsigned long long *)') to 'xdrproc_t' (aka 'int (*)(__rpc_xdr *, void *, unsigned int)') converts to incompatible function type [-Werror,-Wcast-function-type-mismatch]
  627 | xdrproc_t xdr_translator<unsigned long long>() { return (xdrproc_t)(xdr_u_longlong_t); }
      |                                                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../src/utils/xdr_cxx.C:630:48: error: cast from 'int (*)(XDR *, short *)' (aka 'int (*)(__rpc_xdr *, short *)') to 'xdrproc_t' (aka 'int (*)(__rpc_xdr *, void *, unsigned int)') converts to incompatible function type [-Werror,-Wcast-function-type-mismatch]
  630 | xdrproc_t xdr_translator<short int>() { return (xdrproc_t)(xdr_short); }
      |                                                ^~~~~~~~~~~~~~~~~~~~~~
../src/utils/xdr_cxx.C:633:57: error: cast from 'int (*)(XDR *, unsigned short *)' (aka 'int (*)(__rpc_xdr *, unsigned short *)') to 'xdrproc_t' (aka 'int (*)(__rpc_xdr *, void *, unsigned int)') converts to incompatible function type [-Werror,-Wcast-function-type-mismatch]
  633 | xdrproc_t xdr_translator<unsigned short int>() { return (xdrproc_t)(xdr_u_short); }
      |                                                         ^~~~~~~~~~~~~~~~~~~~~~~~
../src/utils/xdr_cxx.C:636:43: error: cast from 'int (*)(XDR *, char *)' (aka 'int (*)(__rpc_xdr *, char *)') to 'xdrproc_t' (aka 'int (*)(__rpc_xdr *, void *, unsigned int)') converts to incompatible function type [-Werror,-Wcast-function-type-mismatch]
  636 | xdrproc_t xdr_translator<char>() { return (xdrproc_t)(xdr_char); }
      |                                           ^~~~~~~~~~~~~~~~~~~~~
../src/utils/xdr_cxx.C:639:50: error: cast from 'int (*)(XDR *, char *)' (aka 'int (*)(__rpc_xdr *, char *)') to 'xdrproc_t' (aka 'int (*)(__rpc_xdr *, void *, unsigned int)') converts to incompatible function type [-Werror,-Wcast-function-type-mismatch]
  639 | xdrproc_t xdr_translator<signed char>() { return (xdrproc_t)(xdr_char); }
      |                                                  ^~~~~~~~~~~~~~~~~~~~~
../src/utils/xdr_cxx.C:642:52: error: cast from 'int (*)(XDR *, unsigned char *)' (aka 'int (*)(__rpc_xdr *, unsigned char *)') to 'xdrproc_t' (aka 'int (*)(__rpc_xdr *, void *, unsigned int)') converts to incompatible function type [-Werror,-Wcast-function-type-mismatch]
  642 | xdrproc_t xdr_translator<unsigned char>() { return (xdrproc_t)(xdr_u_char); }
      |                                                    ^~~~~~~~~~~~~~~~~~~~~~~
../src/utils/xdr_cxx.C:645:44: error: cast from 'int (*)(XDR *, float *)' (aka 'int (*)(__rpc_xdr *, float *)') to 'xdrproc_t' (aka 'int (*)(__rpc_xdr *, void *, unsigned int)') converts to incompatible function type [-Werror,-Wcast-function-type-mismatch]
  645 | xdrproc_t xdr_translator<float>() { return (xdrproc_t)(xdr_float); }
      |                                            ^~~~~~~~~~~~~~~~~~~~~~
../src/utils/g:648:45: error: cast from 'int (*)(XDR *, double *)' (aka 'int (*)(__rpc_xdr *, double *)') to 'xdrproc_t' (aka 'int (*)(__rpc_xdr *, void *, unsigned int)') converts to incompatible function type [-Werror,-Wcast-function-type-mismatch]
  648 | xdrproc_t xdr_translator<double>() { return (xdrproc_t)(xdr_double); }
      |                                             ^~~~~~~~~~~~~~~~~~~~~~~
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.
make[1]: *** [Makefile:31057: src/utils/libmesh_opt_la-xdr_cxx.lo] Error 1
make[1]: *** Waiting for unfinished jobs....
mv -f src/utils/.deps/libmesh_opt_la-utility.Tpo src/utils/.deps/libmesh_opt_la-utility.Plo
mv -f src/utils/.deps/libmesh_opt_la-topology_map.Tpo src/utils/.deps/libmesh_opt_la-topology_map.Plo
mv -f src/utils/.deps/libmesh_opt_la-tree.Tpo src/utils/.deps/libmesh_opt_la-tree.Plo
mv -f src/utils/.deps/libmesh_opt_la-tree_node.Tpo src/utils/.deps/libmesh_opt_la-tree_node.Plo
mv -f src/utils/.deps/libmesh_opt_la-string_to_enum.Tpo src/utils/.deps/libmesh_opt_la-string_to_enum.Plo
mv -f src/systems/.deps/libmesh_opt_la-system_projection.Tpo src/systems/.deps/libmesh_opt_la-system_projection.Plo
make[1]: Leaving directory '/opt/civet0/build_0/libmesh/build'
make: *** [Makefile:35333: all-recursive] Error 1
[15:41:52] ERROR: Exiting with code 2

Activity

  1. added a commit that references this issue on Feb 5, 2026
  2. roystgnr commented on Feb 5, 2026

    @roystgnr
    Member

    I can actually replicate this on my Macbook, no specific conda environment needed. Trying out some fix ideas now.

  3. added a commit that references this issue on Feb 5, 2026
  4. roystgnr commented on Feb 5, 2026

    @roystgnr
    Member

    On my Mac, /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/rpc/xdr.h defines
    extern bool_t xdr_long(XDR *, int *);, reserving extern bool_t xdr_long(XDR *, long *); for the ifndef __LP64__ branch. int and long are different sizes, so on my system these definitions are incompatible. xdr_long should OBVIOUSLY always be using long, that being the ENTIRE REASON WHY THAT FUNCTION EXISTS.

    Is there any way to do git blame on the OSX SDK?

  5. added a commit that references this issue on Feb 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions