URL:
  <https://savannah.gnu.org/bugs/?66416>

                 Summary: tests broken on c23
                   Group: GNU Screen
               Submitter: themusicgod1
               Submitted: Wed 06 Nov 2024 12:56:51 PM CST
                Category: None
                Severity: 3 - Normal
                Priority: 5 - Normal
                  Status: None
                 Privacy: Public
             Assigned to: None
             Open/Closed: Open
         Discussion Lock: Any
                 Release: 5.0.0
           Fixed Release: None
         Planned Release: None
           Work Required: None


    _______________________________________________________

Follow-up Comments:


-------------------------------------------------------
Date: Wed 06 Nov 2024 12:56:51 PM CST By: Jeffrey Cliff <themusicgod1>
gcc gcc (GCC) 15.0.0 20240509 (experimental)
with CFLAGS=""
screen 5.0

./configure arguments: 
--prefix=/usr                                    --infodir=/usr/share/info
                   --mandir=/usr/share/man
--disable-pam
--enable-socket-dir=/run/screen                  --with-pty-group=5
                   --with-system_screenrc=/etc/screenrc

gcc 15 seems to be more strict about casting, the attached patch makes the
tests at least compile to the point where the assertions fail

types of failures

1)

SIGNATURE_CHECK is checking an incorrect signature

tests/test-winmsgcond.c:29:17: error: initialization of ‘void (*)(WinMsgCond
*, char *)’ from incompatible pointer type ‘void (*)(WinMsgCond *, int)’
[-Wincompatible-pointer-types]
   29 | SIGNATURE_CHECK(wmc_init, void, (WinMsgCond *, char *));
      |                 ^~~~~~~~
tests/signature.h:46:71: note: in definition of macro ‘SIGNATURE_CHECK2’
   46 |   static ret (* __attribute__((unused)) signature_check ## id) args =
fn
      |
^~
tests/signature.h:39:3: note: in expansion of macro ‘SIGNATURE_CHECK1’
   39 |   SIGNATURE_CHECK1 (fn, ret, args, __LINE__)
      |   ^~~~~~~~~~~~~~~~
tests/test-winmsgcond.c:29:1: note: in expansion of macro
‘SIGNATURE_CHECK’
   29 | SIGNATURE_CHECK(wmc_init, void, (WinMsgCond *, char *));
      | ^~~~~~~~~~~~~~~
tests/test-winmsgcond.c:34:17: error: initialization of ‘char *
(*)(WinMsgCond *, char *, _Bool *)’ from incompatible pointer type ‘int
(*)(WinMsgCond *, int,  _Bool *)’ [-Wincompatible-pointer-types]
   34 | SIGNATURE_CHECK(wmc_else, char *, (WinMsgCond *, char *, bool *));
      |                 ^~~~~~~~
tests/signature.h:46:71: note: in definition of macro ‘SIGNATURE_CHECK2’
   46 |   static ret (* __attribute__((unused)) signature_check ## id) args =
fn
      |
^~
tests/signature.h:39:3: note: in expansion of macro ‘SIGNATURE_CHECK1’
   39 |   SIGNATURE_CHECK1 (fn, ret, args, __LINE__)
      |   ^~~~~~~~~~~~~~~~
tests/test-winmsgcond.c:34:1: note: in expansion of macro
‘SIGNATURE_CHECK’
   34 | SIGNATURE_CHECK(wmc_else, char *, (WinMsgCond *, char *, bool *));
      | ^~~~~~~~~~~~~~~


2)

casts from pointers without a cast are more strict in c23


tests/test-winmsgcond.c: In function ‘main’:
tests/test-winmsgcond.c:46:32: error: passing argument 2 of ‘wmc_init’
makes integer from pointer without a cast [-Wint-conversion]
   46 |                 wmc_init(&wmc, pos);
      |                                ^~~
      |                                |
      |                                char *

In file included from tests/test-winmsgcond.c:27:
tests/test-winmsgcond.c:53:42: error: passing argument 2 of ‘wmc_end’
makes integer from pointer without a cast [-Wint-conversion]
   53 |                 ASSERT(wmc_end(&wmc, pos + 1, &chg) == pos);
      |                                      ~~~~^~~
      |                                          |
      |                                          char *


the attached patch explicitly casts enough to get these errors to no longer be
errors.

3)
for some reason when "make check" is run _GNU_SOURCE is not defined

 this leads to mallocmock_reset not being defined at linking stage

/sources/gnu/screen-5.0.0/tests/test-winmsgbuf.c:62:(.text.startup+0x5a):
undefined reference to `mallocmock_reset'
/usr/bin/ld:
/sources/gnu/screen-5.0.0/tests/test-winmsgbuf.c:66:(.text.startup+0x8d):
undefined reference to `mallocmock_reset'
/usr/bin/ld:
/sources/gnu/screen-5.0.0/tests/test-winmsgbuf.c:67:(.text.startup+0xc7):
undefined reference to `mallocmock_reset'
/usr/bin/ld:
/sources/gnu/screen-5.0.0/tests/test-winmsgbuf.c:68:(.text.startup+0x100):
undefined reference to `mallocmock_reset'
collect2: error: ld returned 1 exit status

configure *does* adds it to config.h correctly

# grep -i '_GNU_SOURCE' config.h
#ifndef _GNU_SOURCE
# define _GNU_SOURCE 1

but when make check occurs 

gcc -iquote. -DSCREENENCODINGS='"/usr/share/screen/utf8encodings"'
-DBUILD_DATE='"2024-11-06 12:11:24"' -g -O2 -Wall -Wextra -std=c17
tests/test-winmsgbuf.c -o tests/test-winmsgbuf winmsgbuf.o tests/mallocmock.o
 
it fails.

one solution is just to remove the definition of mallocmock_reset from the
ifdef defining _GNU_SOURCE but this is probably not the correct way to solve
that.







    _______________________________________________________
File Attachments:


-------------------------------------------------------
Name: screen-test2.patch  Size: 6KiB
<https://file.savannah.gnu.org/file/screen-test2.patch?file_id=56603>

    AGPL NOTICE

These attachments are served by Savane. You can download the corresponding
source code of Savane at
https://savannah.gnu.org/source/savane-21bf471d45f95fa6e30d8e85c908b9fa986c6d9b.tar.gz

    _______________________________________________________

Reply to this item at:

  <https://savannah.gnu.org/bugs/?66416>

_______________________________________________
Message sent via Savannah
https://savannah.gnu.org/

Attachment: signature.asc
Description: PGP signature

Reply via email to