diff --git a/glib/gnulib/gl_cv_func_frexpl_works/meson.build b/glib/gnulib/gl_cv_func_frexpl_works/meson.build index 68af20295..bff9cadaa 100644 --- a/glib/gnulib/gl_cv_func_frexpl_works/meson.build +++ b/glib/gnulib/gl_cv_func_frexpl_works/meson.build @@ -86,6 +86,7 @@ int main() long double y = frexpl (x, &exp); /* On machines with IEEE854 arithmetic: x = 1.68105e-4932, exp = -16382, y = 0.5. On Mac OS X 10.5: exp = -16384, y = 0.5. */ + (void) y; if (exp != LDBL_MIN_EXP - 1) result |= 8; } diff --git a/glib/gnulib/gl_cv_func_printf_directive_a/meson.build b/glib/gnulib/gl_cv_func_printf_directive_a/meson.build index 3283c98d2..6cb296443 100644 --- a/glib/gnulib/gl_cv_func_printf_directive_a/meson.build +++ b/glib/gnulib/gl_cv_func_printf_directive_a/meson.build @@ -16,27 +16,27 @@ static double zero = 0.0; int main () { int result = 0; - if (sprintf (buf, "%a %d", 3.1416015625, 33, 44, 55) < 0 + if (sprintf (buf, "%a %d", 3.1416015625, 33) < 0 || (strcmp (buf, "0x1.922p+1 33") != 0 && strcmp (buf, "0x3.244p+0 33") != 0 && strcmp (buf, "0x6.488p-1 33") != 0 && strcmp (buf, "0xc.91p-2 33") != 0)) result |= 1; - if (sprintf (buf, "%A %d", -3.1416015625, 33, 44, 55) < 0 + if (sprintf (buf, "%A %d", -3.1416015625, 33) < 0 || (strcmp (buf, "-0X1.922P+1 33") != 0 && strcmp (buf, "-0X3.244P+0 33") != 0 && strcmp (buf, "-0X6.488P-1 33") != 0 && strcmp (buf, "-0XC.91P-2 33") != 0)) result |= 2; /* This catches a FreeBSD 6.1 bug: it doesn't round. */ - if (sprintf (buf, "%.2a %d", 1.51, 33, 44, 55) < 0 + if (sprintf (buf, "%.2a %d", 1.51, 33) < 0 || (strcmp (buf, "0x1.83p+0 33") != 0 && strcmp (buf, "0x3.05p-1 33") != 0 && strcmp (buf, "0x6.0ap-2 33") != 0 && strcmp (buf, "0xc.14p-3 33") != 0)) result |= 4; /* This catches a Mac OS X 10.12.4 (Darwin 16.5) bug: it doesn't round. */ - if (sprintf (buf, "%.0a %d", 1.51, 33, 44, 55) < 0 + if (sprintf (buf, "%.0a %d", 1.51, 33) < 0 || (strcmp (buf, "0x2p+0 33") != 0 && strcmp (buf, "0x3p-1 33") != 0 && strcmp (buf, "0x6p-2 33") != 0 @@ -44,7 +44,7 @@ int main () result |= 4; /* This catches a FreeBSD 6.1 bug. See */ - if (sprintf (buf, "%010a %d", 1.0 / zero, 33, 44, 55) < 0 + if (sprintf (buf, "%010a %d", 1.0 / zero, 33) < 0 || buf[0] == '0') result |= 8; /* This catches a Mac OS X 10.3.9 (Darwin 7.9) bug. */ diff --git a/glib/gnulib/gl_cv_func_printf_precision/meson.build b/glib/gnulib/gl_cv_func_printf_precision/meson.build index 35290c52f..bd390942e 100644 --- a/glib/gnulib/gl_cv_func_printf_precision/meson.build +++ b/glib/gnulib/gl_cv_func_printf_precision/meson.build @@ -23,14 +23,14 @@ int main () /* On BeOS, this would crash and show a dialog box. Avoid the crash. */ return 1; #endif - if (sprintf (buf, "%.4000d %d", 1, 33, 44) < 4000 + 3) + if (sprintf (buf, "%.4000d %d", 1, 33) < 4000 + 3) result |= 1; - if (sprintf (buf, "%.4000f %d", 1.0, 33, 44) < 4000 + 5) + if (sprintf (buf, "%.4000f %d", 1.0, 33) < 4000 + 5) result |= 2; - if (sprintf (buf, "%.511f %d", 1.0, 33, 44) < 511 + 5 + if (sprintf (buf, "%.511f %d", 1.0, 33) < 511 + 5 || buf[0] != '1') result |= 4; - if (sprintf (buf, "%.999f %d", 1.0, 33, 44) < 999 + 5 + if (sprintf (buf, "%.999f %d", 1.0, 33) < 999 + 5 || buf[0] != '1') result |= 4; return result; diff --git a/meson.build b/meson.build index ddd44579f..f54331854 100644 --- a/meson.build +++ b/meson.build @@ -519,7 +519,16 @@ foreach m : struct_members else header_check_prefix = header_check_prefix + '#include ' endif - if cc.has_member('struct ' + m[0], m[1], prefix : header_check_prefix) + # Reimplement cc.has_member() to workaround compiler warning + # FIXME: https://github.com/mesonbuild/meson/pull/12818 + code = header_check_prefix + ''' + void bar(void) { + struct ''' + m[0] + ''' foo; + (void) ( foo.''' + m[1] + ''' ); + (void) foo; + } + ''' + if cc.compiles(code, name : 'type "struct ' + m[0] + '" has member "' + m[1] + '"') define = 'HAVE_STRUCT_@0@_@1@'.format(m[0].to_upper(), m[1].underscorify().to_upper()) glib_conf.set(define, 1) glib_conf_prefix = glib_conf_prefix + '#define @0@ 1\n'.format(define) @@ -1554,6 +1563,7 @@ if long_long_size == long_size int main () { int64_t i1 = 1; long *i2 = &i1; + (void) i2; return 1; }''', name : 'int64_t is long') int64_t_typedef = 'long' @@ -1566,9 +1576,12 @@ if long_long_size == long_size int main () { int64_t i1 = 1; long long *i2 = &i1; + (void) i2; return 1; }''', name : 'int64_t is long long') int64_t_typedef = 'long long' + else + error('Cannot detect int64_t typedef') endif endif