Re: [OE-core] [PATCH 2/6] glib-2.0: Switch to using C11 std

2023-01-16 Thread Khem Raj
upstream glib-2,0 has not accepted these patches so lets hold on to
them for now.

On Sun, Jan 15, 2023 at 10:51 AM Khem Raj  wrote:
>
> Signed-off-by: Khem Raj 
> ---
>  ...0001-Switch-from-C99-to-C11-standard.patch | 40 +
>  ...efine-check_alignof-for-std-c11-and-.patch | 44 +++
>  meta/recipes-core/glib-2.0/glib-2.0_2.74.4.bb |  2 +
>  3 files changed, 86 insertions(+)
>  create mode 100644 
> meta/recipes-core/glib-2.0/glib-2.0/0001-Switch-from-C99-to-C11-standard.patch
>  create mode 100644 
> meta/recipes-core/glib-2.0/glib-2.0/0001-tests-macros.c-Define-check_alignof-for-std-c11-and-.patch
>
> diff --git 
> a/meta/recipes-core/glib-2.0/glib-2.0/0001-Switch-from-C99-to-C11-standard.patch
>  
> b/meta/recipes-core/glib-2.0/glib-2.0/0001-Switch-from-C99-to-C11-standard.patch
> new file mode 100644
> index 00..4ddf49a9df
> --- /dev/null
> +++ 
> b/meta/recipes-core/glib-2.0/glib-2.0/0001-Switch-from-C99-to-C11-standard.patch
> @@ -0,0 +1,40 @@
> +From 59f4bdaedccb14802810e2f28646cc039a92f3d3 Mon Sep 17 00:00:00 2001
> +From: Khem Raj 
> +Date: Sat, 14 Jan 2023 12:15:29 -0800
> +Subject: [PATCH] Switch from C99 to C11 standard
> +
> +We need to start using _Alignof consistently as the fallback
> +implementation which uses types within offsetof is UB as per WG14 N2350
> +[1], moreover newer compilers like clang 16+ have started to error on
> +such use.
> +
> +Fixes errors like below with clang 16+
> +
> +| ../glib-2.74.4/glib/ghash.c:299:18: error: 'struct (unnamed at 
> ../glib-2.74.4/glib/ghash.c:299:1)' cannot be defined in '__builtin_offsetof'
> +| G_STATIC_ASSERT (G_ALIGNOF (GHashTableIter) >= G_ALIGNOF (RealIter));
> +
> +[1] https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2350.htm
> +[2] https://reviews.llvm.org/D133574
> +
> +Upstream-Status: Submitted 
> [https://gitlab.gnome.org/GNOME/glib/-/merge_requests/3202]
> +Signed-off-by: Khem Raj 
> +---
> + meson.build | 2 +-
> + 1 file changed, 1 insertion(+), 1 deletion(-)
> +
> +diff --git a/meson.build b/meson.build
> +index 8d3500ad7..87662fa47 100644
> +--- a/meson.build
>  b/meson.build
> +@@ -5,7 +5,7 @@ project('glib', 'c',
> +   default_options : [
> + 'buildtype=debugoptimized',
> + 'warning_level=3',
> +-'c_std=gnu99'
> ++'c_std=gnu11'
> +   ]
> + )
> +
> +--
> +2.39.0
> +
> diff --git 
> a/meta/recipes-core/glib-2.0/glib-2.0/0001-tests-macros.c-Define-check_alignof-for-std-c11-and-.patch
>  
> b/meta/recipes-core/glib-2.0/glib-2.0/0001-tests-macros.c-Define-check_alignof-for-std-c11-and-.patch
> new file mode 100644
> index 00..c6f2ee1948
> --- /dev/null
> +++ 
> b/meta/recipes-core/glib-2.0/glib-2.0/0001-tests-macros.c-Define-check_alignof-for-std-c11-and-.patch
> @@ -0,0 +1,44 @@
> +From 3a86bfadd67983267e5d89b1a7e3a637041e599b Mon Sep 17 00:00:00 2001
> +From: Khem Raj 
> +Date: Sat, 14 Jan 2023 10:54:28 -0800
> +Subject: [PATCH] tests/macros.c: Define check_alignof for std=c11 and newer
> +
> +WG14 N2350 made very clear that it is an UB having type definitions
> +within "offsetof" [1]. This patch changes the implementation of macro
> +check_alignof to builtin "_Alignof" to avoid undefined behavior.
> +
> +clang 16+ has started to diagnose this [2]
> +
> +Fixes build when using -std >= gnu11 and using clang16+
> +
> +[1] https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2350.htm
> +[2] https://reviews.llvm.org/D133574
> +
> +Upstream-Status: Submitted 
> [https://gitlab.gnome.org/GNOME/glib/-/merge_requests/3201]
> +Signed-off-by: Khem Raj 
> +---
> + glib/tests/macros.c | 6 +-
> + 1 file changed, 5 insertions(+), 1 deletion(-)
> +
> +diff --git a/glib/tests/macros.c b/glib/tests/macros.c
> +index efe632b..17b1646 100644
> +--- a/glib/tests/macros.c
>  b/glib/tests/macros.c
> +@@ -42,9 +42,13 @@ test_assert_static (void)
> + static void
> + test_alignof_fallback (void)
> + {
> ++#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L && 
> !defined(__cplusplus)
> ++#define check_alignof(type) \
> ++  g_assert_cmpint (G_ALIGNOF (type), ==, _Alignof (type))
> ++#else
> + #define check_alignof(type) \
> +   g_assert_cmpint (G_ALIGNOF (type), ==, G_STRUCT_OFFSET (struct { char a; 
> type b; }, b))
> +-
> ++#endif
> +   check_alignof (char);
> +   check_alignof (int);
> +   check_alignof (float);
> +--
> +2.39.0
> +
> diff --git a/meta/recipes-core/glib-2.0/glib-2.0_2.74.4.bb 
> b/meta/recipes-core/glib-2.0/glib-2.0_2.74.4.bb
> index e5279e946c..de3f55e865 100644
> --- a/meta/recipes-core/glib-2.0/glib-2.0_2.74.4.bb
> +++ b/meta/recipes-core/glib-2.0/glib-2.0_2.74.4.bb
> @@ -19,6 +19,8 @@ SRC_URI = 
> "${GNOME_MIRROR}/glib/${SHRT_VER}/glib-${PV}.tar.xz \
> file://cpp-null.patch \
> file://cpp-null2.patch \
> file://fix-errno.patch \
> +   
> file://0001-tests-macros.c-Define-check_alignof-for-std-c11-and-.patch \
> +   file://0001-Switch-from-C99-to-C11-standard.patch \
> "
>  

[OE-core] [PATCH 2/6] glib-2.0: Switch to using C11 std

2023-01-15 Thread Khem Raj
Signed-off-by: Khem Raj 
---
 ...0001-Switch-from-C99-to-C11-standard.patch | 40 +
 ...efine-check_alignof-for-std-c11-and-.patch | 44 +++
 meta/recipes-core/glib-2.0/glib-2.0_2.74.4.bb |  2 +
 3 files changed, 86 insertions(+)
 create mode 100644 
meta/recipes-core/glib-2.0/glib-2.0/0001-Switch-from-C99-to-C11-standard.patch
 create mode 100644 
meta/recipes-core/glib-2.0/glib-2.0/0001-tests-macros.c-Define-check_alignof-for-std-c11-and-.patch

diff --git 
a/meta/recipes-core/glib-2.0/glib-2.0/0001-Switch-from-C99-to-C11-standard.patch
 
b/meta/recipes-core/glib-2.0/glib-2.0/0001-Switch-from-C99-to-C11-standard.patch
new file mode 100644
index 00..4ddf49a9df
--- /dev/null
+++ 
b/meta/recipes-core/glib-2.0/glib-2.0/0001-Switch-from-C99-to-C11-standard.patch
@@ -0,0 +1,40 @@
+From 59f4bdaedccb14802810e2f28646cc039a92f3d3 Mon Sep 17 00:00:00 2001
+From: Khem Raj 
+Date: Sat, 14 Jan 2023 12:15:29 -0800
+Subject: [PATCH] Switch from C99 to C11 standard
+
+We need to start using _Alignof consistently as the fallback
+implementation which uses types within offsetof is UB as per WG14 N2350
+[1], moreover newer compilers like clang 16+ have started to error on
+such use.
+
+Fixes errors like below with clang 16+
+
+| ../glib-2.74.4/glib/ghash.c:299:18: error: 'struct (unnamed at 
../glib-2.74.4/glib/ghash.c:299:1)' cannot be defined in '__builtin_offsetof'
+| G_STATIC_ASSERT (G_ALIGNOF (GHashTableIter) >= G_ALIGNOF (RealIter));
+
+[1] https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2350.htm
+[2] https://reviews.llvm.org/D133574
+
+Upstream-Status: Submitted 
[https://gitlab.gnome.org/GNOME/glib/-/merge_requests/3202]
+Signed-off-by: Khem Raj 
+---
+ meson.build | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/meson.build b/meson.build
+index 8d3500ad7..87662fa47 100644
+--- a/meson.build
 b/meson.build
+@@ -5,7 +5,7 @@ project('glib', 'c',
+   default_options : [
+ 'buildtype=debugoptimized',
+ 'warning_level=3',
+-'c_std=gnu99'
++'c_std=gnu11'
+   ]
+ )
+ 
+-- 
+2.39.0
+
diff --git 
a/meta/recipes-core/glib-2.0/glib-2.0/0001-tests-macros.c-Define-check_alignof-for-std-c11-and-.patch
 
b/meta/recipes-core/glib-2.0/glib-2.0/0001-tests-macros.c-Define-check_alignof-for-std-c11-and-.patch
new file mode 100644
index 00..c6f2ee1948
--- /dev/null
+++ 
b/meta/recipes-core/glib-2.0/glib-2.0/0001-tests-macros.c-Define-check_alignof-for-std-c11-and-.patch
@@ -0,0 +1,44 @@
+From 3a86bfadd67983267e5d89b1a7e3a637041e599b Mon Sep 17 00:00:00 2001
+From: Khem Raj 
+Date: Sat, 14 Jan 2023 10:54:28 -0800
+Subject: [PATCH] tests/macros.c: Define check_alignof for std=c11 and newer
+
+WG14 N2350 made very clear that it is an UB having type definitions
+within "offsetof" [1]. This patch changes the implementation of macro
+check_alignof to builtin "_Alignof" to avoid undefined behavior.
+
+clang 16+ has started to diagnose this [2]
+
+Fixes build when using -std >= gnu11 and using clang16+
+
+[1] https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2350.htm
+[2] https://reviews.llvm.org/D133574
+
+Upstream-Status: Submitted 
[https://gitlab.gnome.org/GNOME/glib/-/merge_requests/3201]
+Signed-off-by: Khem Raj 
+---
+ glib/tests/macros.c | 6 +-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+diff --git a/glib/tests/macros.c b/glib/tests/macros.c
+index efe632b..17b1646 100644
+--- a/glib/tests/macros.c
 b/glib/tests/macros.c
+@@ -42,9 +42,13 @@ test_assert_static (void)
+ static void
+ test_alignof_fallback (void)
+ {
++#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L && 
!defined(__cplusplus)
++#define check_alignof(type) \
++  g_assert_cmpint (G_ALIGNOF (type), ==, _Alignof (type))
++#else
+ #define check_alignof(type) \
+   g_assert_cmpint (G_ALIGNOF (type), ==, G_STRUCT_OFFSET (struct { char a; 
type b; }, b))
+-
++#endif
+   check_alignof (char);
+   check_alignof (int);
+   check_alignof (float);
+-- 
+2.39.0
+
diff --git a/meta/recipes-core/glib-2.0/glib-2.0_2.74.4.bb 
b/meta/recipes-core/glib-2.0/glib-2.0_2.74.4.bb
index e5279e946c..de3f55e865 100644
--- a/meta/recipes-core/glib-2.0/glib-2.0_2.74.4.bb
+++ b/meta/recipes-core/glib-2.0/glib-2.0_2.74.4.bb
@@ -19,6 +19,8 @@ SRC_URI = "${GNOME_MIRROR}/glib/${SHRT_VER}/glib-${PV}.tar.xz 
\
file://cpp-null.patch \
file://cpp-null2.patch \
file://fix-errno.patch \
+   
file://0001-tests-macros.c-Define-check_alignof-for-std-c11-and-.patch \
+   file://0001-Switch-from-C99-to-C11-standard.patch \
"
 SRC_URI:append:class-native = " file://relocate-modules.patch"
 
-- 
2.39.0


-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#175951): 
https://lists.openembedded.org/g/openembedded-core/message/175951
Mute This Topic: https://lists.openembedded.org/mt/96291460/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: