]>
Commit | Line | Data |
---|---|---|
bfff8b1b | 1 | /* Copyright (C) 2005-2017 Free Software Foundation, Inc. |
1bcfb5a5 UD |
2 | This file is part of the GNU C Library. |
3 | Contributed by Ulrich Drepper <drepper@redhat.com>, 2005. | |
4 | ||
5 | The GNU C Library is free software; you can redistribute it and/or | |
6 | modify it under the terms of the GNU Lesser General Public | |
7 | License as published by the Free Software Foundation; either | |
8 | version 2.1 of the License, or (at your option) any later version. | |
9 | ||
10 | The GNU C Library is distributed in the hope that it will be useful, | |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
13 | Lesser General Public License for more details. | |
14 | ||
15 | You should have received a copy of the GNU Lesser General Public | |
59ba27a6 PE |
16 | License along with the GNU C Library; if not, see |
17 | <http://www.gnu.org/licenses/>. */ | |
1bcfb5a5 UD |
18 | |
19 | #include <stdio.h> | |
20 | #include <pthreadP.h> | |
21 | #include <semaphore.h> | |
22 | ||
4b2c85c0 UD |
23 | static const struct |
24 | { | |
25 | const char *name; | |
26 | size_t expected; | |
27 | size_t is; | |
28 | } types[] = | |
29 | { | |
30 | #define T(t, c) \ | |
31 | { #t, c, sizeof (t) } | |
32 | T (pthread_attr_t, __SIZEOF_PTHREAD_ATTR_T), | |
33 | T (pthread_mutex_t, __SIZEOF_PTHREAD_MUTEX_T), | |
34 | T (pthread_mutexattr_t, __SIZEOF_PTHREAD_MUTEXATTR_T), | |
35 | T (pthread_cond_t, __SIZEOF_PTHREAD_COND_T), | |
36 | T (pthread_condattr_t, __SIZEOF_PTHREAD_CONDATTR_T), | |
37 | T (pthread_rwlock_t, __SIZEOF_PTHREAD_RWLOCK_T), | |
38 | T (pthread_rwlockattr_t, __SIZEOF_PTHREAD_RWLOCKATTR_T), | |
39 | T (pthread_barrier_t, __SIZEOF_PTHREAD_BARRIER_T), | |
40 | T (pthread_barrierattr_t, __SIZEOF_PTHREAD_BARRIERATTR_T) | |
41 | }; | |
1bcfb5a5 UD |
42 | |
43 | static int | |
44 | do_test (void) | |
45 | { | |
46 | int result = 0; | |
47 | ||
48 | #define TEST_TYPE(name) \ | |
49 | printf ("%s: ", #name); \ | |
50 | if (sizeof (name) != sizeof (((name *) 0)->__size)) \ | |
51 | { \ | |
52 | printf ("expected %zu, is %zu\n", \ | |
53 | sizeof (((name *) 0)->__size), sizeof (name)); \ | |
54 | result = 1; \ | |
55 | } \ | |
56 | else \ | |
57 | puts ("OK") | |
58 | ||
59 | TEST_TYPE (pthread_mutex_t); | |
60 | TEST_TYPE (pthread_cond_t); | |
61 | TEST_TYPE (pthread_rwlock_t); | |
62 | ||
63 | #define TEST_TYPE2(name, internal) \ | |
64 | printf ("%s: ", #name); \ | |
65 | if (sizeof (((name *) 0)->__size) < sizeof (internal)) \ | |
66 | { \ | |
67 | printf ("expected %zu, is %zu\n", \ | |
68 | sizeof (((name *) 0)->__size), sizeof (internal)); \ | |
69 | result = 1; \ | |
70 | } \ | |
71 | else \ | |
72 | puts ("OK") | |
73 | ||
74 | TEST_TYPE2 (pthread_attr_t, struct pthread_attr); | |
75 | TEST_TYPE2 (pthread_mutexattr_t, struct pthread_mutexattr); | |
76 | TEST_TYPE2 (pthread_condattr_t, struct pthread_condattr); | |
77 | TEST_TYPE2 (pthread_rwlockattr_t, struct pthread_rwlockattr); | |
78 | TEST_TYPE2 (pthread_barrier_t, struct pthread_barrier); | |
79 | TEST_TYPE2 (pthread_barrierattr_t, struct pthread_barrierattr); | |
3d2dd6ca UD |
80 | TEST_TYPE2 (sem_t, struct new_sem); |
81 | TEST_TYPE2 (sem_t, struct old_sem); | |
1bcfb5a5 | 82 | |
4b2c85c0 UD |
83 | for (size_t i = 0; i < sizeof (types) / sizeof (types[0]); ++i) |
84 | if (types[i].expected != types[i].is) | |
85 | { | |
86 | printf ("%s: expected %zu, is %zu\n", | |
87 | types[i].name, types[i].expected, types[i].is); | |
88 | result = 1; | |
89 | } | |
90 | ||
1bcfb5a5 UD |
91 | return result; |
92 | } | |
93 | ||
94 | #define TEST_FUNCTION do_test () | |
95 | #include "../test-skeleton.c" |