diff options
Diffstat (limited to 'meta/recipes-core/glibc/glibc/0026-assert-Suppress-pedantic-warning-caused-by-statement.patch')
-rw-r--r-- | meta/recipes-core/glibc/glibc/0026-assert-Suppress-pedantic-warning-caused-by-statement.patch | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/meta/recipes-core/glibc/glibc/0026-assert-Suppress-pedantic-warning-caused-by-statement.patch b/meta/recipes-core/glibc/glibc/0026-assert-Suppress-pedantic-warning-caused-by-statement.patch new file mode 100644 index 0000000000..b2bb96b818 --- /dev/null +++ b/meta/recipes-core/glibc/glibc/0026-assert-Suppress-pedantic-warning-caused-by-statement.patch | |||
@@ -0,0 +1,90 @@ | |||
1 | From 037283cbc74739b72f36dfec827d120faa243406 Mon Sep 17 00:00:00 2001 | ||
2 | From: Florian Weimer <fweimer at redhat dot com> | ||
3 | Date: Thu, 6 Jul 2017 11:50:55 +0200 | ||
4 | Subject: [PATCH 26/26] assert: Suppress pedantic warning caused by statement | ||
5 | expression [BZ# 21242] | ||
6 | |||
7 | On 07/05/2017 10:15 PM, Zack Weinberg wrote: | ||
8 | > On Wed, Jul 5, 2017 at 11:51 AM, Florian Weimer <fweimer@redhat.com> wrote: | ||
9 | >> On 07/05/2017 05:46 PM, Zack Weinberg wrote: | ||
10 | >>> A problem occurs to me: expressions involving VLAs _are_ evaluated | ||
11 | >>> inside sizeof. | ||
12 | >> | ||
13 | >> The type of the sizeof argument would still be int (due to the | ||
14 | >> comparison against 0), so this doesn't actually occur. | ||
15 | > | ||
16 | > I rechecked what C99 says about sizeof and VLAs, and you're right - | ||
17 | > the operand of sizeof is only evaluated when sizeof is _directly_ | ||
18 | > applied to a VLA. So this is indeed safe, but I think this wrinkle | ||
19 | > should be mentioned in the comment. Perhaps | ||
20 | > | ||
21 | > /* The first occurrence of EXPR is not evaluated due to the sizeof, | ||
22 | > but will trigger any pedantic warnings masked by the __extension__ | ||
23 | > for the second occurrence. The explicit comparison against zero | ||
24 | > ensures that sizeof is not directly applied to a function pointer or | ||
25 | > bit-field (which would be ill-formed) or VLA (which would be evaluated). */ | ||
26 | > | ||
27 | > zw | ||
28 | |||
29 | What about the attached patch? | ||
30 | |||
31 | Siddhesh, is this okay during the freeze? I'd like to backport it to | ||
32 | 2.25 as well. | ||
33 | |||
34 | Thanks, | ||
35 | Florian | ||
36 | |||
37 | assert: Suppress pedantic warning caused by statement expression | ||
38 | |||
39 | 2017-07-06 Florian Weimer <fweimer@redhat.com> | ||
40 | |||
41 | [BZ #21242] | ||
42 | * assert/assert.h [__GNUC__ && !__STRICT_ANSI__] (assert): | ||
43 | Suppress pedantic warning resulting from statement expression. | ||
44 | (__ASSERT_FUNCTION): Add missing __extendsion__. | ||
45 | --- | ||
46 | |||
47 | Upstream-Status: Submitted | ||
48 | Signed-off-by: Khem Raj <raj.khem@gmail.com> | ||
49 | |||
50 | assert/assert.h | 12 +++++++++--- | ||
51 | 1 file changed, 9 insertions(+), 3 deletions(-) | ||
52 | |||
53 | diff --git a/assert/assert.h b/assert/assert.h | ||
54 | index 22f019537c..6801cfeb10 100644 | ||
55 | --- a/assert/assert.h | ||
56 | +++ b/assert/assert.h | ||
57 | @@ -91,13 +91,19 @@ __END_DECLS | ||
58 | ? __ASSERT_VOID_CAST (0) \ | ||
59 | : __assert_fail (#expr, __FILE__, __LINE__, __ASSERT_FUNCTION)) | ||
60 | # else | ||
61 | +/* The first occurrence of EXPR is not evaluated due to the sizeof, | ||
62 | + but will trigger any pedantic warnings masked by the __extension__ | ||
63 | + for the second occurrence. The explicit comparison against zero is | ||
64 | + required to support function pointers and bit fields in this | ||
65 | + context, and to suppress the evaluation of variable length | ||
66 | + arrays. */ | ||
67 | # define assert(expr) \ | ||
68 | - ({ \ | ||
69 | + ((void) sizeof ((expr) == 0), __extension__ ({ \ | ||
70 | if (expr) \ | ||
71 | ; /* empty */ \ | ||
72 | else \ | ||
73 | __assert_fail (#expr, __FILE__, __LINE__, __ASSERT_FUNCTION); \ | ||
74 | - }) | ||
75 | + })) | ||
76 | # endif | ||
77 | |||
78 | # ifdef __USE_GNU | ||
79 | @@ -113,7 +119,7 @@ __END_DECLS | ||
80 | C9x has a similar variable called __func__, but prefer the GCC one since | ||
81 | it demangles C++ function names. */ | ||
82 | # if defined __cplusplus ? __GNUC_PREREQ (2, 6) : __GNUC_PREREQ (2, 4) | ||
83 | -# define __ASSERT_FUNCTION __PRETTY_FUNCTION__ | ||
84 | +# define __ASSERT_FUNCTION __extension__ __PRETTY_FUNCTION__ | ||
85 | # else | ||
86 | # if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L | ||
87 | # define __ASSERT_FUNCTION __func__ | ||
88 | -- | ||
89 | 2.13.3 | ||
90 | |||