[OE-core] [PATCH] gcc-4.x: fix wrong warning when using the universal zero initializer {0}
Khem Raj
raj.khem at gmail.com
Sat Oct 10 19:10:59 UTC 2015
On Sat, Oct 10, 2015 at 12:27 AM, <kai.kang at windriver.com> wrote:
> From: Kai Kang <kai.kang at windriver.com>
>
> When I upgrade efivar to 0.21, it fails to compile with error messages:
>
> | linux.c:850:9: error: missing braces around initializer
> [-Werror=missing-braces]
> | struct ifreq ifr = { 0, };
> | ^
>
> It is a known issue of gcc. Backport patch from
>
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53119
>
> to fix wrong warning when using the universal zero initializer {0}.
>
This is ok to install.
> Signed-off-by: Kai Kang <kai.kang at windriver.com>
> ---
> meta/recipes-devtools/gcc/gcc-4.8.inc | 1 +
> ...-gcc-483-universal-initializer-no-warning.patch | 107 +++++++++++++++++++++
> meta/recipes-devtools/gcc/gcc-4.9.inc | 1 +
> ...-gcc-483-universal-initializer-no-warning.patch | 107 +++++++++++++++++++++
> 4 files changed, 216 insertions(+)
> create mode 100644 meta/recipes-devtools/gcc/gcc-4.8/0051-gcc-483-universal-initializer-no-warning.patch
> create mode 100644 meta/recipes-devtools/gcc/gcc-4.9/0065-gcc-483-universal-initializer-no-warning.patch
>
> diff --git a/meta/recipes-devtools/gcc/gcc-4.8.inc b/meta/recipes-devtools/gcc/gcc-4.8.inc
> index 6a2454d..b3e1c33 100644
> --- a/meta/recipes-devtools/gcc/gcc-4.8.inc
> +++ b/meta/recipes-devtools/gcc/gcc-4.8.inc
> @@ -69,6 +69,7 @@ SRC_URI = "\
> file://0047-repomembug.patch \
> file://0049-Enable-SPE-AltiVec-generation-on-powepc-linux-target.patch \
> file://target-gcc-includedir.patch \
> + file://0051-gcc-483-universal-initializer-no-warning.patch \
> "
> SRC_URI[md5sum] = "5a84a30839b2aca22a2d723de2a626ec"
> SRC_URI[sha256sum] = "4a80aa23798b8e9b5793494b8c976b39b8d9aa2e53cd5ed5534aff662a7f8695"
> diff --git a/meta/recipes-devtools/gcc/gcc-4.8/0051-gcc-483-universal-initializer-no-warning.patch b/meta/recipes-devtools/gcc/gcc-4.8/0051-gcc-483-universal-initializer-no-warning.patch
> new file mode 100644
> index 0000000..fde227b
> --- /dev/null
> +++ b/meta/recipes-devtools/gcc/gcc-4.8/0051-gcc-483-universal-initializer-no-warning.patch
> @@ -0,0 +1,107 @@
> +Upstream-Status: Backport
> +
> +Signed-off-by: Kai Kang <kai.kang at windriver.com>
> +---
> +Fix for https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53119
> +wrong warning when using the universal zero initializer {0}
> +
> +Backported to GCC 4.8.3
> +
> +Subject: 2014-06-05 S. Gilles <sgilles at terpmail.umd.edu>
> +X-Git-Url: http://repo.or.cz/w/official-gcc.git/commitdiff_plain/95cdf3fdf2d440eb7775def8e35ab970651c33d9?hp=14a3093e9943937cbc63dfbf4d51ca60f8325b29
> +git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@211289 138bc75d-0d04-0410-961f-82ee72b054a4
> +
> +--- gcc-4.8.3.org/gcc/c/c-typeck.c 2014-08-03 20:52:09.257042137 +0200
> ++++ gcc-4.8.3/gcc/c/c-typeck.c 2014-08-03 20:57:10.645042614 +0200
> +@@ -62,9 +62,9 @@
> + if expr.original_code == SIZEOF_EXPR. */
> + tree c_last_sizeof_arg;
> +
> +-/* Nonzero if we've already printed a "missing braces around initializer"
> +- message within this initializer. */
> +-static int missing_braces_mentioned;
> ++/* Nonzero if we might need to print a "missing braces around
> ++ initializer" message within this initializer. */
> ++static int found_missing_braces;
> +
> + static int require_constant_value;
> + static int require_constant_elements;
> +@@ -6379,6 +6379,9 @@
> + /* 1 if this constructor is erroneous so far. */
> + static int constructor_erroneous;
> +
> ++/* 1 if this constructor is the universal zero initializer { 0 }. */
> ++static int constructor_zeroinit;
> ++
> + /* Structure for managing pending initializer elements, organized as an
> + AVL tree. */
> +
> +@@ -6540,7 +6543,7 @@
> + constructor_stack = 0;
> + constructor_range_stack = 0;
> +
> +- missing_braces_mentioned = 0;
> ++ found_missing_braces = 0;
> +
> + spelling_base = 0;
> + spelling_size = 0;
> +@@ -6635,6 +6638,7 @@
> + constructor_type = type;
> + constructor_incremental = 1;
> + constructor_designated = 0;
> ++ constructor_zeroinit = 1;
> + designator_depth = 0;
> + designator_erroneous = 0;
> +
> +@@ -6832,11 +6836,8 @@
> + set_nonincremental_init (braced_init_obstack);
> + }
> +
> +- if (implicit == 1 && warn_missing_braces && !missing_braces_mentioned)
> +- {
> +- missing_braces_mentioned = 1;
> +- warning_init (OPT_Wmissing_braces, "missing braces around initializer");
> +- }
> ++ if (implicit == 1)
> ++ found_missing_braces = 1;
> +
> + if (TREE_CODE (constructor_type) == RECORD_TYPE
> + || TREE_CODE (constructor_type) == UNION_TYPE)
> +@@ -6969,16 +6970,23 @@
> + }
> + }
> +
> ++ if (vec_safe_length (constructor_elements) != 1)
> ++ constructor_zeroinit = 0;
> ++
> ++ /* Warn when some structs are initialized with direct aggregation. */
> ++ if (!implicit && found_missing_braces && warn_missing_braces
> ++ && !constructor_zeroinit)
> ++ {
> ++ warning_init (OPT_Wmissing_braces,
> ++ "missing braces around initializer");
> ++ }
> ++
> + /* Warn when some struct elements are implicitly initialized to zero. */
> + if (warn_missing_field_initializers
> + && constructor_type
> + && TREE_CODE (constructor_type) == RECORD_TYPE
> + && constructor_unfilled_fields)
> + {
> +- bool constructor_zeroinit =
> +- (vec_safe_length (constructor_elements) == 1
> +- && integer_zerop ((*constructor_elements)[0].value));
> +-
> + /* Do not warn for flexible array members or zero-length arrays. */
> + while (constructor_unfilled_fields
> + && (!DECL_SIZE (constructor_unfilled_fields)
> +@@ -8093,6 +8101,9 @@
> + designator_depth = 0;
> + designator_erroneous = 0;
> +
> ++ if (!implicit && value.value && !integer_zerop (value.value))
> ++ constructor_zeroinit = 0;
> ++
> + /* Handle superfluous braces around string cst as in
> + char x[] = {"foo"}; */
> + if (string_flag
> diff --git a/meta/recipes-devtools/gcc/gcc-4.9.inc b/meta/recipes-devtools/gcc/gcc-4.9.inc
> index 691ba5f..95b553c 100644
> --- a/meta/recipes-devtools/gcc/gcc-4.9.inc
> +++ b/meta/recipes-devtools/gcc/gcc-4.9.inc
> @@ -80,6 +80,7 @@ SRC_URI = "\
> file://0062-Use-SYSTEMLIBS_DIR-replacement-instead-of-hardcoding.patch \
> file://0063-nativesdk-gcc-support.patch \
> file://0064-handle-target-sysroot-multilib.patch \
> + file://0065-gcc-483-universal-initializer-no-warning.patch \
> "
> SRC_URI[md5sum] = "6f831b4d251872736e8e9cc09746f327"
> SRC_URI[sha256sum] = "2332b2a5a321b57508b9031354a8503af6fdfb868b8c1748d33028d100a8b67e"
> diff --git a/meta/recipes-devtools/gcc/gcc-4.9/0065-gcc-483-universal-initializer-no-warning.patch b/meta/recipes-devtools/gcc/gcc-4.9/0065-gcc-483-universal-initializer-no-warning.patch
> new file mode 100644
> index 0000000..fde227b
> --- /dev/null
> +++ b/meta/recipes-devtools/gcc/gcc-4.9/0065-gcc-483-universal-initializer-no-warning.patch
> @@ -0,0 +1,107 @@
> +Upstream-Status: Backport
> +
> +Signed-off-by: Kai Kang <kai.kang at windriver.com>
> +---
> +Fix for https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53119
> +wrong warning when using the universal zero initializer {0}
> +
> +Backported to GCC 4.8.3
> +
> +Subject: 2014-06-05 S. Gilles <sgilles at terpmail.umd.edu>
> +X-Git-Url: http://repo.or.cz/w/official-gcc.git/commitdiff_plain/95cdf3fdf2d440eb7775def8e35ab970651c33d9?hp=14a3093e9943937cbc63dfbf4d51ca60f8325b29
> +git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@211289 138bc75d-0d04-0410-961f-82ee72b054a4
> +
> +--- gcc-4.8.3.org/gcc/c/c-typeck.c 2014-08-03 20:52:09.257042137 +0200
> ++++ gcc-4.8.3/gcc/c/c-typeck.c 2014-08-03 20:57:10.645042614 +0200
> +@@ -62,9 +62,9 @@
> + if expr.original_code == SIZEOF_EXPR. */
> + tree c_last_sizeof_arg;
> +
> +-/* Nonzero if we've already printed a "missing braces around initializer"
> +- message within this initializer. */
> +-static int missing_braces_mentioned;
> ++/* Nonzero if we might need to print a "missing braces around
> ++ initializer" message within this initializer. */
> ++static int found_missing_braces;
> +
> + static int require_constant_value;
> + static int require_constant_elements;
> +@@ -6379,6 +6379,9 @@
> + /* 1 if this constructor is erroneous so far. */
> + static int constructor_erroneous;
> +
> ++/* 1 if this constructor is the universal zero initializer { 0 }. */
> ++static int constructor_zeroinit;
> ++
> + /* Structure for managing pending initializer elements, organized as an
> + AVL tree. */
> +
> +@@ -6540,7 +6543,7 @@
> + constructor_stack = 0;
> + constructor_range_stack = 0;
> +
> +- missing_braces_mentioned = 0;
> ++ found_missing_braces = 0;
> +
> + spelling_base = 0;
> + spelling_size = 0;
> +@@ -6635,6 +6638,7 @@
> + constructor_type = type;
> + constructor_incremental = 1;
> + constructor_designated = 0;
> ++ constructor_zeroinit = 1;
> + designator_depth = 0;
> + designator_erroneous = 0;
> +
> +@@ -6832,11 +6836,8 @@
> + set_nonincremental_init (braced_init_obstack);
> + }
> +
> +- if (implicit == 1 && warn_missing_braces && !missing_braces_mentioned)
> +- {
> +- missing_braces_mentioned = 1;
> +- warning_init (OPT_Wmissing_braces, "missing braces around initializer");
> +- }
> ++ if (implicit == 1)
> ++ found_missing_braces = 1;
> +
> + if (TREE_CODE (constructor_type) == RECORD_TYPE
> + || TREE_CODE (constructor_type) == UNION_TYPE)
> +@@ -6969,16 +6970,23 @@
> + }
> + }
> +
> ++ if (vec_safe_length (constructor_elements) != 1)
> ++ constructor_zeroinit = 0;
> ++
> ++ /* Warn when some structs are initialized with direct aggregation. */
> ++ if (!implicit && found_missing_braces && warn_missing_braces
> ++ && !constructor_zeroinit)
> ++ {
> ++ warning_init (OPT_Wmissing_braces,
> ++ "missing braces around initializer");
> ++ }
> ++
> + /* Warn when some struct elements are implicitly initialized to zero. */
> + if (warn_missing_field_initializers
> + && constructor_type
> + && TREE_CODE (constructor_type) == RECORD_TYPE
> + && constructor_unfilled_fields)
> + {
> +- bool constructor_zeroinit =
> +- (vec_safe_length (constructor_elements) == 1
> +- && integer_zerop ((*constructor_elements)[0].value));
> +-
> + /* Do not warn for flexible array members or zero-length arrays. */
> + while (constructor_unfilled_fields
> + && (!DECL_SIZE (constructor_unfilled_fields)
> +@@ -8093,6 +8101,9 @@
> + designator_depth = 0;
> + designator_erroneous = 0;
> +
> ++ if (!implicit && value.value && !integer_zerop (value.value))
> ++ constructor_zeroinit = 0;
> ++
> + /* Handle superfluous braces around string cst as in
> + char x[] = {"foo"}; */
> + if (string_flag
> --
> 2.6.1
>
> --
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core at lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-core
More information about the Openembedded-core
mailing list