Skip to content

Conflict with SDL.h when compiled under Cygwin #482

@Yankes

Description

@Yankes

When compiling with SDL1 I get error here:

#elif defined(FASTFLOAT_32BIT) || (defined(_WIN64) && !defined(__clang__))
  answer.low = _umul128(a, b, &answer.high); // _umul128 not available on ARM64
#elif defined(FASTFLOAT_64BIT) && defined(__SIZEOF_INT128__)

Exact error:

libs/rapidyaml/c4/ext/fast_float_all.h: In function 'fast_float::value128 fast_float::full_multiplication(uint64_t, uint64_t)':
libs/rapidyaml/c4/ext/fast_float_all.h:420:31: error: invalid conversion from 'uint64_t*' {aka 'long unsigned int*'} to 'long long unsigned int*' [-fpermissive]
  420 |   answer.low = _umul128(a, b, &answer.high); // _umul128 not available on ARM64
      |                               ^~~~~~~~~~~~
      |                               |
      |                               uint64_t* {aka long unsigned int*}
In file included from /usr/include/w32api/intrin.h:41,
                 from libs/rapidyaml/c4/ext/fast_float_all.h:175:
/usr/include/w32api/psdk_inc/intrin-impl.h:1027:85: note:   initializing argument 3 of 'long long unsigned int _umul128(long long unsigned int, long long unsigned int, long long unsigned int*)'
 1027 | unsigned __int64 _umul128(unsigned __int64 a, unsigned __int64 b, unsigned __int64 *hi)
      |                                                                   ~~~~~~~~~~~~~~~~~~^~

overall this can be easy reproduced by:

#include <SDL_opengl.h>
#include "rapidyaml/ryml.hpp"

if I swap order then this magically work.

Overall this could be problem with SDL_opengl, but _umul128 is called by rapidyaml and probably should use types definition form same place where _umul128 is defined. Or at least add exception for cygwin same as was done for clang.
Adding #define __clang__ 1 aside form spam from warnings allow code to compile.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions