Skip to content

Commit f141e6e

Browse files
committed
Fix new GCC-15 warnings
1 parent 78f32c4 commit f141e6e

File tree

23 files changed

+93
-41
lines changed

23 files changed

+93
-41
lines changed

kos/include/compiler/gcc.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -697,8 +697,10 @@
697697
#define __ATTR_EXTERNALLY_VISIBLE __attribute__((__externally_visible__))
698698
#define __ATTR_VISIBILITY(vis) __attribute__((__visibility__(vis)))
699699

700-
/* Suppress warnings about `-Wsuggest-attribute=const' or `-Wsuggest-attribute=pure' */
701-
#define __COMPILER_IMPURE() __asm__("")
700+
/* Suppress warnings about `-Wsuggest-attribute=const' or `-Wsuggest-attribute=pure'
701+
* Must add a single ";" because without it, GCC seems to have gotten smart enough
702+
* to understand that `__asm__("")' is not enough indicate something impure. */
703+
#define __COMPILER_IMPURE() __asm__(";")
702704

703705
#ifdef __INTELLISENSE_GCC__
704706
#define __pragma(...) _Pragma(#__VA_ARGS__)

kos/include/fenv.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* HASH CRC-32:0xff270ecf */
1+
/* HASH CRC-32:0x1da4298a */
22
/* Copyright (c) 2019-2025 Griefer@Work *
33
* *
44
* This software is provided 'as-is', without any express or implied *
@@ -339,7 +339,7 @@ __LOCAL __ATTR_PURE __ATTR_WUNUSED int __NOTHROW(__LIBCCALL fetestexcept)(int __
339339
* ... `FE_DOWNWARD': floor()
340340
* ... `FE_UPWARD': ceil()
341341
* ... `FE_TOWARDZERO': trunc() */
342-
__CEIDECLARE(__ATTR_PURE __ATTR_WUNUSED,int,__NOTHROW,fegetround,(void),{ return __arch_fegetround(); })
342+
__CEIDECLARE(__ATTR_PURE __ATTR_WUNUSED,int,__NOTHROW,fegetround,(void),{ __COMPILER_IMPURE(); return __arch_fegetround(); })
343343
#elif defined(__CRT_HAVE_fegetround)
344344
/* >> fegetround(3)
345345
* Get the current rounding direction
@@ -357,7 +357,7 @@ __CDECLARE(__ATTR_PURE __ATTR_WUNUSED,int,__NOTHROW,fegetround,(void),())
357357
* ... `FE_DOWNWARD': floor()
358358
* ... `FE_UPWARD': ceil()
359359
* ... `FE_TOWARDZERO': trunc() */
360-
__LOCAL __ATTR_PURE __ATTR_WUNUSED int __NOTHROW(__LIBCCALL fegetround)(void) { return __arch_fegetround(); }
360+
__LOCAL __ATTR_PURE __ATTR_WUNUSED int __NOTHROW(__LIBCCALL fegetround)(void) { __COMPILER_IMPURE(); return __arch_fegetround(); }
361361
#endif /* ... */
362362
#if defined(__CRT_HAVE_fesetround) && defined(__arch_fesetround)
363363
/* >> fesetround(3)
@@ -493,13 +493,13 @@ __LOCAL int __NOTHROW(__LIBCCALL fedisableexcept)(int __excepts) { return __arch
493493
#endif /* ... */
494494
#if defined(__CRT_HAVE_fegetexcept) && defined(__arch_fegetexcept)
495495
/* >> fegetexcept(3) */
496-
__CEIDECLARE(__ATTR_PURE __ATTR_WUNUSED,int,__NOTHROW,fegetexcept,(void),{ return __arch_fegetexcept(); })
496+
__CEIDECLARE(__ATTR_PURE __ATTR_WUNUSED,int,__NOTHROW,fegetexcept,(void),{ __COMPILER_IMPURE(); return __arch_fegetexcept(); })
497497
#elif defined(__CRT_HAVE_fegetexcept)
498498
/* >> fegetexcept(3) */
499499
__CDECLARE(__ATTR_PURE __ATTR_WUNUSED,int,__NOTHROW,fegetexcept,(void),())
500500
#elif defined(__arch_fegetexcept)
501501
/* >> fegetexcept(3) */
502-
__LOCAL __ATTR_PURE __ATTR_WUNUSED int __NOTHROW(__LIBCCALL fegetexcept)(void) { return __arch_fegetexcept(); }
502+
__LOCAL __ATTR_PURE __ATTR_WUNUSED int __NOTHROW(__LIBCCALL fegetexcept)(void) { __COMPILER_IMPURE(); return __arch_fegetexcept(); }
503503
#endif /* ... */
504504
#endif /* __USE_GNU */
505505

kos/include/libc/core/fenv.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* HASH CRC-32:0x6b843246 */
1+
/* HASH CRC-32:0xcd20e112 */
22
/* Copyright (c) 2019-2025 Griefer@Work *
33
* *
44
* This software is provided 'as-is', without any express or implied *
@@ -68,7 +68,7 @@ __LOCAL int (__LIBCCALL __libc_core_feraiseexcept)(int __excepts) __THROWS(...)
6868
* ... `FE_DOWNWARD': floor()
6969
* ... `FE_UPWARD': ceil()
7070
* ... `FE_TOWARDZERO': trunc() */
71-
__CEIREDIRECT(__ATTR_PURE __ATTR_WUNUSED,int,__NOTHROW,__libc_core_fegetround,(void),fegetround,{ return __arch_fegetround(); })
71+
__CEIREDIRECT(__ATTR_PURE __ATTR_WUNUSED,int,__NOTHROW,__libc_core_fegetround,(void),fegetround,{ __COMPILER_IMPURE(); return __arch_fegetround(); })
7272
#elif defined(__CRT_HAVE_fegetround)
7373
/* >> fegetround(3)
7474
* Get the current rounding direction
@@ -86,7 +86,7 @@ __CREDIRECT(__ATTR_PURE __ATTR_WUNUSED,int,__NOTHROW,__libc_core_fegetround,(voi
8686
* ... `FE_DOWNWARD': floor()
8787
* ... `FE_UPWARD': ceil()
8888
* ... `FE_TOWARDZERO': trunc() */
89-
__LOCAL __ATTR_PURE __ATTR_WUNUSED int __NOTHROW(__LIBCCALL __libc_core_fegetround)(void) { return __arch_fegetround(); }
89+
__LOCAL __ATTR_PURE __ATTR_WUNUSED int __NOTHROW(__LIBCCALL __libc_core_fegetround)(void) { __COMPILER_IMPURE(); return __arch_fegetround(); }
9090
#else /* ... */
9191
#undef ____libc_core_fegetround_defined
9292
#endif /* !... */

kos/include/libc/local/sys.mman/ffmapfile.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* HASH CRC-32:0x59a3b7aa */
1+
/* HASH CRC-32:0xfd529a3e */
22
/* Copyright (c) 2019-2025 Griefer@Work *
33
* *
44
* This software is provided 'as-is', without any express or implied *
@@ -319,7 +319,7 @@ __NAMESPACE_LOCAL_END
319319
#include <hybrid/__overflow.h>
320320
#include <asm/crt/malloc.h>
321321
__NAMESPACE_LOCAL_BEGIN
322-
__LOCAL_LIBC(ffmapfile) __ATTR_WUNUSED __ATTR_FDARG(2) __ATTR_OUT(1) int
322+
__LOCAL_LIBC(ffmapfile) __ATTR_WUNUSED __ATTR_INOUT(2) __ATTR_OUT(1) int
323323
__NOTHROW_NCX(__LIBCCALL __LIBC_LOCAL_NAME(ffmapfile))(struct mapfile *__restrict __mapping, __FILE *__stream, __pos64_t __offset, __SIZE_TYPE__ __min_bytes, __SIZE_TYPE__ __max_bytes, __SIZE_TYPE__ __num_trailing_nulbytes, unsigned int __flags) {
324324
__BYTE_TYPE__ *__buf;
325325
__SIZE_TYPE__ __bufsize;

kos/include/libm/fdlibm.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -332,7 +332,7 @@ typedef union {
332332
#ifdef __COMPILER_HAVE_GCC_ASM
333333
#define __libm_math_opt_barrier(x, result) do { (result) = (x); __asm__("" : "+m" (result)); } __WHILE0
334334
#define __libm_math_force_eval(x) do { __asm__ __volatile__("" : : "m" (x)); } __WHILE0
335-
#define __libm_math_force_eval_r(T, x) do { T __x = (x); __asm__ __volatile__("" : : "m" (__x)); } __WHILE0
335+
#define __libm_math_force_eval_r(T, x) do { T __lmmfe_x = (x); __asm__ __volatile__("" : : "m" (__lmmfe_x)); } __WHILE0
336336
#else /* __COMPILER_HAVE_GCC_ASM */
337337
#define __libm_math_opt_barrier(x, result) ((result) = (x))
338338
#define __libm_math_force_eval(x) (void)(x) /* XXX: May not get evaluated... */

kos/include/sys/mman.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* HASH CRC-32:0xfe94c493 */
1+
/* HASH CRC-32:0x4d1febb4 */
22
/* Copyright (c) 2019-2025 Griefer@Work *
33
* *
44
* This software is provided 'as-is', without any express or implied *
@@ -1016,7 +1016,7 @@ __NAMESPACE_LOCAL_USING_OR_IMPL(fmapfile, __FORCELOCAL __ATTR_ARTIFICIAL __ATTR_
10161016
* @return: -1: [errno=...] s.a. `fmapfile(3)'
10171017
* @return: -1: [errno=ENOTSUP] `FMAPFILE_ONLYMMAP' was given, and `fileno(stream)' didn't yield a valid file descriptor
10181018
* @return: -1: [errno=*] Read error */
1019-
__CDECLARE(__ATTR_WUNUSED __ATTR_FDARG(2) __ATTR_OUT(1),int,__NOTHROW_NCX,ffmapfile,(struct mapfile *__restrict __mapping, __FILE *__stream, __pos64_t __offset, size_t __min_bytes, size_t __max_bytes, size_t __num_trailing_nulbytes, unsigned int __flags),(__mapping,__stream,__offset,__min_bytes,__max_bytes,__num_trailing_nulbytes,__flags))
1019+
__CDECLARE(__ATTR_WUNUSED __ATTR_INOUT(2) __ATTR_OUT(1),int,__NOTHROW_NCX,ffmapfile,(struct mapfile *__restrict __mapping, __FILE *__stream, __pos64_t __offset, size_t __min_bytes, size_t __max_bytes, size_t __num_trailing_nulbytes, unsigned int __flags),(__mapping,__stream,__offset,__min_bytes,__max_bytes,__num_trailing_nulbytes,__flags))
10201020
#elif (defined(__CRT_HAVE_getc) || defined(__CRT_HAVE_fgetc) || defined(__CRT_HAVE__IO_getc) || defined(__CRT_HAVE_fgetc_unlocked) || defined(__CRT_HAVE_getc_unlocked) || defined(__CRT_HAVE__getc_nolock) || defined(__CRT_HAVE__fgetc_nolock) || (defined(__CRT_DOS) && (defined(__CRT_HAVE__filbuf) || defined(__CRT_HAVE___uflow) || defined(__CRT_HAVE___underflow) || defined(__CRT_HAVE___srget))) || defined(__CRT_HAVE_fread) || defined(__CRT_HAVE__IO_fread) || defined(__CRT_HAVE_fread_unlocked) || defined(__CRT_HAVE__fread_nolock)) && (defined(__CRT_HAVE_feof) || defined(__CRT_HAVE__IO_feof) || defined(__CRT_HAVE_feof_unlocked)) && (defined(__CRT_HAVE_fseeko64) || defined(__CRT_HAVE___fseeko64) || defined(__CRT_HAVE_fseek64) || defined(__CRT_HAVE__fseeki64) || defined(__CRT_HAVE_fseeko64_unlocked) || defined(__CRT_HAVE_fseek64_unlocked) || defined(__CRT_HAVE__fseeki64_nolock) || defined(__CRT_HAVE_fseeko) || defined(__CRT_HAVE_fseeko_unlocked) || defined(__CRT_HAVE_fseek) || defined(__CRT_HAVE_fseek_unlocked) || defined(__CRT_HAVE__fseek_nolock)) && (defined(__CRT_HAVE_realloc) || defined(__CRT_HAVE___libc_realloc))
10211021
#include <libc/local/sys.mman/ffmapfile.h>
10221022
/* >> ffmapfile(3)
@@ -1025,7 +1025,7 @@ __CDECLARE(__ATTR_WUNUSED __ATTR_FDARG(2) __ATTR_OUT(1),int,__NOTHROW_NCX,ffmapf
10251025
* @return: -1: [errno=...] s.a. `fmapfile(3)'
10261026
* @return: -1: [errno=ENOTSUP] `FMAPFILE_ONLYMMAP' was given, and `fileno(stream)' didn't yield a valid file descriptor
10271027
* @return: -1: [errno=*] Read error */
1028-
__NAMESPACE_LOCAL_USING_OR_IMPL(ffmapfile, __FORCELOCAL __ATTR_ARTIFICIAL __ATTR_WUNUSED __ATTR_FDARG(2) __ATTR_OUT(1) int __NOTHROW_NCX(__LIBCCALL ffmapfile)(struct mapfile *__restrict __mapping, __FILE *__stream, __pos64_t __offset, size_t __min_bytes, size_t __max_bytes, size_t __num_trailing_nulbytes, unsigned int __flags) { return (__NAMESPACE_LOCAL_SYM __LIBC_LOCAL_NAME(ffmapfile))(__mapping, __stream, __offset, __min_bytes, __max_bytes, __num_trailing_nulbytes, __flags); })
1028+
__NAMESPACE_LOCAL_USING_OR_IMPL(ffmapfile, __FORCELOCAL __ATTR_ARTIFICIAL __ATTR_WUNUSED __ATTR_INOUT(2) __ATTR_OUT(1) int __NOTHROW_NCX(__LIBCCALL ffmapfile)(struct mapfile *__restrict __mapping, __FILE *__stream, __pos64_t __offset, size_t __min_bytes, size_t __max_bytes, size_t __num_trailing_nulbytes, unsigned int __flags) { return (__NAMESPACE_LOCAL_SYM __LIBC_LOCAL_NAME(ffmapfile))(__mapping, __stream, __offset, __min_bytes, __max_bytes, __num_trailing_nulbytes, __flags); })
10291029
#endif /* ... */
10301030
#ifdef __CRT_HAVE_fmapfileat
10311031
/* >> fmapfileat(3)

kos/src/kernel/core/arch/i386/debugger/rt64-enter.S.inl

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -298,15 +298,23 @@ L(.Ldone_lapicid_lock):
298298
L(.Lalready_active):
299299

300300
/* Encode CFA as `x86_dbg_exitstate' */
301-
EXTERN(x86_dbg_exitstate_b0); EXTERN(x86_dbg_exitstate_b1)
302-
EXTERN(x86_dbg_exitstate_b2); EXTERN(x86_dbg_exitstate_b3)
303-
EXTERN(x86_dbg_exitstate_b4); EXTERN(x86_dbg_exitstate_b5)
304-
EXTERN(x86_dbg_exitstate_b6); EXTERN(x86_dbg_exitstate_b7)
305-
.cfi_escape DW_CFA_def_cfa_expression, 9
306-
.cfi_escape DW_OP_addr, x86_dbg_exitstate_b0, x86_dbg_exitstate_b1, \
307-
x86_dbg_exitstate_b2, x86_dbg_exitstate_b3, \
308-
x86_dbg_exitstate_b4, x86_dbg_exitstate_b5, \
309-
x86_dbg_exitstate_b6, x86_dbg_exitstate_b7
301+
EXTERN(x86_dbg_exitstate_b0)
302+
EXTERN(x86_dbg_exitstate_b1)
303+
EXTERN(x86_dbg_exitstate_b2)
304+
EXTERN(x86_dbg_exitstate_b3)
305+
EXTERN(x86_dbg_exitstate_b4)
306+
EXTERN(x86_dbg_exitstate_b5)
307+
EXTERN(x86_dbg_exitstate_b6)
308+
EXTERN(x86_dbg_exitstate_b7)
309+
.cfi_escape DW_OP_addr
310+
.cfi_escape (x86_dbg_exitstate_b0 + 0)
311+
.cfi_escape (x86_dbg_exitstate_b1 + 0)
312+
.cfi_escape (x86_dbg_exitstate_b2 + 0)
313+
.cfi_escape (x86_dbg_exitstate_b3 + 0)
314+
.cfi_escape (x86_dbg_exitstate_b4 + 0)
315+
.cfi_escape (x86_dbg_exitstate_b5 + 0)
316+
.cfi_escape (x86_dbg_exitstate_b6 + 0)
317+
.cfi_escape (x86_dbg_exitstate_b7 + 0)
310318
ASM_CFI_OFFSET_RESTORE_FCPUSTATE(0)
311319

312320
/* Fixup control registers. */

kos/src/kernel/core/arch/i386/debugger/rt64.S

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,15 @@
4545

4646
/* Encode CFA as `x86_dbg_exitstate' */
4747
.cfi_escape DW_CFA_def_cfa_expression, 9
48-
.cfi_escape DW_OP_addr, x86_dbg_exitstate_b0, x86_dbg_exitstate_b1, \
49-
x86_dbg_exitstate_b2, x86_dbg_exitstate_b3, \
50-
x86_dbg_exitstate_b4, x86_dbg_exitstate_b5, \
51-
x86_dbg_exitstate_b6, x86_dbg_exitstate_b7
48+
.cfi_escape DW_OP_addr
49+
.cfi_escape (x86_dbg_exitstate_b0 + 0)
50+
.cfi_escape (x86_dbg_exitstate_b1 + 0)
51+
.cfi_escape (x86_dbg_exitstate_b2 + 0)
52+
.cfi_escape (x86_dbg_exitstate_b3 + 0)
53+
.cfi_escape (x86_dbg_exitstate_b4 + 0)
54+
.cfi_escape (x86_dbg_exitstate_b5 + 0)
55+
.cfi_escape (x86_dbg_exitstate_b6 + 0)
56+
.cfi_escape (x86_dbg_exitstate_b7 + 0)
5257
ASM_CFI_REL_OFFSET_RESTORE_FCPUSTATE(0)
5358
nop /* For tracebacks. */
5459
PUBLIC_FUNCTION(dbg_exit)

kos/src/kernel/moddbx/ctype.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,9 @@ NOTHROW(FCALL ctype_ptr)(struct ctyperef const *__restrict self,
120120
}
121121

122122
/* Create a new sibling. */
123+
__pragma_GCC_diagnostic_push_ignored(Walloc_size)
123124
result = (REF struct ctype *)dbx_malloc(offsetafter(struct ctype, ct_pointer));
125+
__pragma_GCC_diagnostic_pop_ignored(Walloc_size)
124126
if unlikely(!result)
125127
return NULL;
126128
result->ct_refcnt = 1; /* Returned reference. */
@@ -152,7 +154,9 @@ NOTHROW(FCALL ctype_array)(struct ctyperef const *__restrict self,
152154
}
153155

154156
/* Create a new sibling. */
157+
__pragma_GCC_diagnostic_push_ignored(Walloc_size)
155158
result = (REF struct ctype *)dbx_malloc(offsetafter(struct ctype, ct_array));
159+
__pragma_GCC_diagnostic_pop_ignored(Walloc_size)
156160
if unlikely(!result)
157161
return NULL;
158162
result->ct_refcnt = 1; /* Returned reference. */
@@ -1105,7 +1109,9 @@ NOTHROW_NCX(FCALL ctype_fromdw)(struct cmodule *__restrict mod,
11051109
}
11061110
} else {
11071111
REF struct ctype *ct;
1112+
__pragma_GCC_diagnostic_push_ignored(Walloc_size)
11081113
ct = (REF struct ctype *)dbx_malloc(sizeof(struct _basic_ctype));
1114+
__pragma_GCC_diagnostic_pop_ignored(Walloc_size)
11091115
if unlikely(!ct)
11101116
goto err_nomem;
11111117
ct->ct_refcnt = 1;
@@ -1276,7 +1282,9 @@ NOTHROW_NCX(FCALL ctype_fromdw)(struct cmodule *__restrict mod,
12761282
REF struct ctype *result_type;
12771283
if (!typinfo.t_sizeof)
12781284
typinfo.t_sizeof = sizeof(int);
1285+
__pragma_GCC_diagnostic_push_ignored(Walloc_size)
12791286
result_type = (REF struct ctype *)dbx_malloc(offsetafter(struct ctype, ct_enum));
1287+
__pragma_GCC_diagnostic_pop_ignored(Walloc_size)
12801288
if unlikely(!result_type)
12811289
goto err_nomem;
12821290
result_type->ct_refcnt = 1;
@@ -1323,7 +1331,9 @@ NOTHROW_NCX(FCALL ctype_fromdw)(struct cmodule *__restrict mod,
13231331
case DW_TAG_union_type:
13241332
case DW_TAG_interface_type: {
13251333
REF struct ctype *struct_type;
1334+
__pragma_GCC_diagnostic_push_ignored(Walloc_size)
13261335
struct_type = (REF struct ctype *)dbx_malloc(offsetafter(struct ctype, ct_struct));
1336+
__pragma_GCC_diagnostic_pop_ignored(Walloc_size)
13271337
if unlikely(!struct_type)
13281338
goto err_nomem;
13291339
struct_type->ct_refcnt = 1;

kos/src/kernel/modsvga/gfxtty.c.inl

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,13 @@ DECL_BEGIN
6060
#error "Invalid configuration"
6161
#endif /* ... */
6262

63-
63+
/* GCC does a bunch of warnings:
64+
* >> assuming signed overflow does not occur when determining that expression is always non-negative
65+
* ... relating to unsigned math done with "uintptr_half_t". This is because that math
66+
* actually happens after integer promotion, at which point division and so on actually
67+
* becomes signed again. -- Maybe figure out a way to keep division unsigned, so gcc
68+
* won't even try to use signed math? */
69+
__pragma_GCC_diagnostic_push_ignored(Wstrict_overflow)
6470

6571
#ifdef BYTES_PER_PIXEL
6672

@@ -870,6 +876,8 @@ NOTHROW(FCALL svga_ttyaccess_v_redraw_cursor_gfx1)(struct svga_ttyaccess_gfx *__
870876

871877
#undef BYTES_PER_PIXEL
872878

879+
__pragma_GCC_diagnostic_pop_ignored(Wstrict_overflow)
880+
873881
DECL_END
874882

875883
#undef PLANAR

0 commit comments

Comments
 (0)