@@ -331,9 +331,6 @@ fn test_apple(target: &str) {
331331 return true ;
332332 }
333333 match ty {
334- // FIXME(union): actually a union
335- "sigval" => true ,
336-
337334 // FIXME(macos): The size is changed in recent macOSes.
338335 "malloc_zone_t" => true ,
339336 // it is a moving target, changing through versions
@@ -429,14 +426,6 @@ fn test_apple(target: &str) {
429426 }
430427 } ) ;
431428
432- cfg. skip_field_type ( move |struct_, field| {
433- match ( struct_, field) {
434- // FIXME(union): actually a union
435- ( "sigevent" , "sigev_value" ) => true ,
436- _ => false ,
437- }
438- } ) ;
439-
440429 cfg. volatile_item ( |i| {
441430 use ctest:: VolatileItemKind :: * ;
442431 match i {
@@ -576,23 +565,8 @@ fn test_openbsd(target: &str) {
576565 "sys/param.h" ,
577566 }
578567
579- cfg. skip_struct ( move |ty| {
580- if ty. starts_with ( "__c_anonymous_" ) {
581- return true ;
582- }
583- match ty {
584- // FIXME(union): actually a union
585- "sigval" => true ,
586-
587- _ => false ,
588- }
589- } ) ;
590-
591568 cfg. skip_const ( move |name| {
592569 match name {
593- // Removed in OpenBSD 7.7
594- "ATF_COM" | "ATF_PERM" | "ATF_PUBL" | "ATF_USETRAILERS" => true ,
595-
596570 // Removed in OpenBSD 7.8
597571 "CTL_FS" | "SO_NETPROC" => true ,
598572
@@ -720,9 +694,6 @@ fn test_cygwin(target: &str) {
720694
721695 t if t. ends_with ( "_t" ) => t. to_string ( ) ,
722696
723- // sigval is a struct in Rust, but a union in C:
724- "sigval" => "union sigval" . to_string ( ) ,
725-
726697 // put `struct` in front of all structs:.
727698 t if is_struct => format ! ( "struct {t}" ) ,
728699
@@ -1174,8 +1145,6 @@ fn test_solarish(target: &str) {
11741145 return true ;
11751146 }
11761147 match ty {
1177- // union, not a struct
1178- "sigval" => true ,
11791148 // a bunch of solaris-only fields
11801149 "utmpx" if is_illumos => true ,
11811150 _ => false ,
@@ -1195,8 +1164,6 @@ fn test_solarish(target: &str) {
11951164 "sigaction" if field == "sa_sigaction" => true ,
11961165 // Missing in illumos
11971166 "sigevent" if field == "ss_sp" => true ,
1198- // Avoid sigval union issues
1199- "sigevent" if field == "sigev_value" => true ,
12001167 // const issues
12011168 "sigevent" if field == "sigev_notify_attributes" => true ,
12021169
@@ -1423,8 +1390,6 @@ fn test_netbsd(target: &str) {
14231390
14241391 cfg. skip_struct ( move |ty| {
14251392 match ty {
1426- // This is actually a union, not a struct
1427- "sigval" => true ,
14281393 // These are tested as part of the linux_fcntl tests since there are
14291394 // header conflicts when including them with all the other structs.
14301395 "termios2" => true ,
@@ -1476,8 +1441,6 @@ fn test_netbsd(target: &str) {
14761441 ( struct_ == "ifaddrs" && field == "ifa_ifu" ) ||
14771442 // sighandler_t type is super weird
14781443 ( struct_ == "sigaction" && field == "sa_sigaction" ) ||
1479- // sigval is actually a union, but we pretend it's a struct
1480- ( struct_ == "sigevent" && field == "sigev_value" ) ||
14811444 // aio_buf is "volatile void*" and Rust doesn't understand volatile
14821445 ( struct_ == "aiocb" && field == "aio_buf" )
14831446 } ) ;
@@ -1606,9 +1569,6 @@ fn test_dragonflybsd(target: &str) {
16061569
16071570 t if t. ends_with ( "_t" ) => t. to_string ( ) ,
16081571
1609- // sigval is a struct in Rust, but a union in C:
1610- "sigval" => "union sigval" . to_string ( ) ,
1611-
16121572 // put `struct` in front of all structs:.
16131573 t if is_struct => format ! ( "struct {t}" ) ,
16141574
@@ -1701,8 +1661,6 @@ fn test_dragonflybsd(target: &str) {
17011661 ( struct_ == "ifaddrs" && field == "ifa_ifu" ) ||
17021662 // sighandler_t type is super weird
17031663 ( struct_ == "sigaction" && field == "sa_sigaction" ) ||
1704- // sigval is actually a union, but we pretend it's a struct
1705- ( struct_ == "sigevent" && field == "sigev_value" ) ||
17061664 // aio_buf is "volatile void*" and Rust doesn't understand volatile
17071665 ( struct_ == "aiocb" && field == "aio_buf" )
17081666 } ) ;
@@ -1993,9 +1951,6 @@ fn test_android(target: &str) {
19931951
19941952 t if t. ends_with ( "_t" ) => t. to_string ( ) ,
19951953
1996- // sigval is a struct in Rust, but a union in C:
1997- "sigval" => "union sigval" . to_string ( ) ,
1998-
19991954 "Ioctl" => "int" . to_string ( ) ,
20001955
20011956 // put `struct` in front of all structs:.
@@ -2300,8 +2255,6 @@ fn test_android(target: &str) {
23002255 cfg. skip_field_type ( move |struct_, field| {
23012256 // This is a weird union, don't check the type.
23022257 ( struct_ == "ifaddrs" && field == "ifa_ifu" ) ||
2303- // sigval is actually a union, but we pretend it's a struct
2304- ( struct_ == "sigevent" && field == "sigev_value" ) ||
23052258 // this one is an anonymous union
23062259 ( struct_ == "ff_effect" && field == "u" ) ||
23072260 // FIXME(android): `sa_sigaction` has type `sighandler_t` but that type is
@@ -2504,9 +2457,6 @@ fn test_freebsd(target: &str) {
25042457
25052458 t if t. ends_with ( "_t" ) => t. to_string ( ) ,
25062459
2507- // sigval is a struct in Rust, but a union in C:
2508- "sigval" => "union sigval" . to_string ( ) ,
2509-
25102460 // put `struct` in front of all structs:.
25112461 t if is_struct => format ! ( "struct {t}" ) ,
25122462
@@ -3141,7 +3091,8 @@ fn test_emscripten(target: &str) {
31413091 return true ;
31423092 }
31433093 match ty {
3144- // This is actually a union, not a struct
3094+ // FIXME(emscripten): Investigate why the test fails.
3095+ // Skip for now to unblock CI.
31453096 "sigval" => true ,
31463097
31473098 // FIXME(emscripten): Investigate why the test fails.
@@ -3222,9 +3173,7 @@ fn test_emscripten(target: &str) {
32223173 // This is a weird union, don't check the type.
32233174 ( struct_ == "ifaddrs" && field == "ifa_ifu" ) ||
32243175 // sighandler_t type is super weird
3225- ( struct_ == "sigaction" && field == "sa_sigaction" ) ||
3226- // sigval is actually a union, but we pretend it's a struct
3227- ( struct_ == "sigevent" && field == "sigev_value" )
3176+ ( struct_ == "sigaction" && field == "sa_sigaction" )
32283177 } ) ;
32293178
32303179 cfg. skip_field ( move |struct_, field| {
@@ -3437,9 +3386,6 @@ fn test_neutrino(target: &str) {
34373386 match ty {
34383387 "Elf64_Phdr" | "Elf32_Phdr" => true ,
34393388
3440- // FIXME(union): This is actually a union, not a struct
3441- "sigval" => true ,
3442-
34433389 // union
34443390 "_channel_connect_attr" => true ,
34453391
@@ -3494,8 +3440,6 @@ fn test_neutrino(target: &str) {
34943440 } ) ;
34953441
34963442 cfg. skip_field_type ( move |struct_, field| {
3497- // sigval is actually a union, but we pretend it's a struct
3498- struct_ == "sigevent" && field == "sigev_value" ||
34993443 // Anonymous structures
35003444 struct_ == "_idle_hook" && field == "time"
35013445 } ) ;
@@ -3506,8 +3450,6 @@ fn test_neutrino(target: &str) {
35063450 ( "__sched_param" , "reserved" )
35073451 | ( "sched_param" , "reserved" )
35083452 | ( "sigevent" , "__padding1" ) // ensure alignment
3509- | ( "sigevent" , "__padding2" ) // union
3510- | ( "sigevent" , "__sigev_un2" ) // union
35113453 | ( "sigaction" , "sa_sigaction" ) // sighandler_t type is super weird
35123454 | ( "syspage_entry" , "__reserved" ) // does not exist
35133455 )
@@ -3612,10 +3554,8 @@ fn test_vxworks(target: &str) {
36123554
36133555 // FIXME(vxworks)
36143556 cfg. skip_fn ( move |name| match name {
3615- // sigval
3616- "sigqueue" | "_sigqueue"
36173557 // sighandler_t
3618- | "signal"
3558+ "signal"
36193559 // not used in static linking by default
36203560 | "dlerror" => true ,
36213561 _ => false ,
@@ -4053,9 +3993,6 @@ fn test_linux(target: &str) {
40533993 // which is absent in glibc, has to be defined.
40543994 "__timeval" => true ,
40553995
4056- // FIXME(union): This is actually a union, not a struct
4057- "sigval" => true ,
4058-
40593996 // This type is tested in the `linux_termios.rs` file since there
40603997 // are header conflicts when including them with all the other
40613998 // structs.
@@ -4752,12 +4689,6 @@ fn test_linux(target: &str) {
47524689 // Needs musl 1.2.3 or later.
47534690 "pthread_getname_np" if old_musl => true ,
47544691
4755- // pthread_sigqueue uses sigval, which was initially declared
4756- // as a struct but should be defined as a union. However due
4757- // to the issues described here: https://github.com/rust-lang/libc/issues/2816
4758- // it can't be changed from struct.
4759- "pthread_sigqueue" => true ,
4760-
47614692 // There are two versions of basename(3) on Linux with glibc, see
47624693 //
47634694 // https://man7.org/linux/man-pages/man3/basename.3.html
@@ -4791,8 +4722,6 @@ fn test_linux(target: &str) {
47914722 ( struct_ == "sigaction" && field == "sa_sigaction" ) ||
47924723 // __timeval type is a patch which doesn't exist in glibc
47934724 ( struct_ == "utmpx" && field == "ut_tv" ) ||
4794- // sigval is actually a union, but we pretend it's a struct
4795- ( struct_ == "sigevent" && field == "sigev_value" ) ||
47964725 // this one is an anonymous union
47974726 ( struct_ == "ff_effect" && field == "u" ) ||
47984727 // `__exit_status` type is a patch which is absent in musl
@@ -5273,8 +5202,6 @@ fn test_haiku(target: &str) {
52735202 return true ;
52745203 }
52755204 match ty {
5276- // FIXME(union): actually a union
5277- "sigval" => true ,
52785205 // FIXME(haiku): locale_t does not exist on Haiku
52795206 "locale_t" => true ,
52805207 // FIXME(haiku): rusage has a different layout on Haiku
@@ -5381,10 +5308,8 @@ fn test_haiku(target: &str) {
53815308 ( "stat" , "st_crtime_nsec" ) => true ,
53825309
53835310 // these are actually unions, but we cannot represent it well
5384- ( "siginfo_t" , "sigval" ) => true ,
53855311 ( "sem_t" , "named_sem_id" ) => true ,
53865312 ( "sigaction" , "sa_sigaction" ) => true ,
5387- ( "sigevent" , "sigev_value" ) => true ,
53885313 ( "fpu_state" , "_fpreg" ) => true ,
53895314 ( "cpu_topology_node_info" , "data" ) => true ,
53905315 // these fields have a simplified data definition in libc
@@ -5435,8 +5360,6 @@ fn test_haiku(target: &str) {
54355360 ty. to_string ( )
54365361 }
54375362
5438- // is actually a union
5439- "sigval" => "union sigval" . to_string ( ) ,
54405363 t if is_union => format ! ( "union {t}" ) ,
54415364 t if t. ends_with ( "_t" ) => t. to_string ( ) ,
54425365 t if is_struct => format ! ( "struct {t}" ) ,
@@ -5575,9 +5498,6 @@ fn test_aix(target: &str) {
55755498 "FILE" => ty. to_string ( ) ,
55765499 "ACTION" => ty. to_string ( ) ,
55775500
5578- // 'sigval' is a struct in Rust, but a union in C.
5579- "sigval" => format ! ( "union sigval" ) ,
5580-
55815501 t if t. ends_with ( "_t" ) => t. to_string ( ) ,
55825502 t if is_struct => format ! ( "struct {}" , t) ,
55835503 t if is_union => format ! ( "union {}" , t) ,
@@ -5614,9 +5534,6 @@ fn test_aix(target: &str) {
56145534
56155535 cfg. skip_struct ( move |ty| {
56165536 match ty {
5617- // FIXME(union): actually a union.
5618- "sigval" => true ,
5619-
56205537 // '__poll_ctl_ext_u' and '__pollfd_ext_u' are for unnamed unions.
56215538 "__poll_ctl_ext_u" => true ,
56225539 "__pollfd_ext_u" => true ,
0 commit comments