mirror of
https://github.com/openembedded/meta-openembedded.git
synced 2026-08-25 17:32:06 +00:00
jsoncpp: fix GCC 16 (and Clang 22) build failure with u8 string literals
This issue is known upstream: https://github.com/open-source-parsers/jsoncpp/issues/1684 Backport the corresponding fix, which is available from v1.9.8. It reproduces with Clang 22.1.8 (from oe-core's master) as well, not only GCC 16. Signed-off-by: João Marcos Costa <joaomarcos.costa@bootlin.com> Signed-off-by: Anuj Mittal <anuj.mittal@oss.qualcomm.com>
This commit is contained in:
committed by
Anuj Mittal
parent
de62fb5522
commit
8d56e1231f
+73
@@ -0,0 +1,73 @@
|
||||
From 143dd23261bc41d929d3603d0d502b2415bebbe4 Mon Sep 17 00:00:00 2001
|
||||
From: Jordan Bayles <bayles.jordan@gmail.com>
|
||||
Date: Thu, 14 May 2026 15:57:53 -0700
|
||||
Subject: [PATCH] fix: GCC 16 / C++20 build failure with u8 string literals
|
||||
(#1685)
|
||||
|
||||
* fix: GCC 16 / C++20 build failure with u8 string literals (#1684)
|
||||
|
||||
In C++20, the `u8""` string literal prefix was changed to evaluate to `const char8_t[]` instead of `const char[]`. This caused compilation errors when these literals were implicitly converted to `std::string` or passed to functions expecting `const char*`.
|
||||
|
||||
This commit adds `reinterpret_cast<const char*>` around the `u8` string literals in the test suite to resolve the build errors while maintaining the intended UTF-8 semantics.
|
||||
|
||||
Additionally, this adds C++20 to the GitHub Actions CMake test matrix to ensure we don't regress on newer standards.
|
||||
|
||||
Fixes #1684
|
||||
|
||||
* style: run clang-format
|
||||
|
||||
Upstream-Status: Backport [https://github.com/open-source-parsers/jsoncpp/commit/71d46ca38e90dc902e8178ba484af4f27fa11947]
|
||||
---
|
||||
.github/workflows/cmake.yml | 1 +
|
||||
src/test_lib_json/main.cpp | 12 +++++++-----
|
||||
2 files changed, 8 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml
|
||||
index 91f387a..375fa90 100644
|
||||
--- a/.github/workflows/cmake.yml
|
||||
+++ b/.github/workflows/cmake.yml
|
||||
@@ -8,6 +8,7 @@ jobs:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os: [ubuntu-latest, windows-latest, macos-latest]
|
||||
+ cxx_standard: [11, 17, 20]
|
||||
|
||||
steps:
|
||||
- name: checkout project
|
||||
diff --git a/src/test_lib_json/main.cpp b/src/test_lib_json/main.cpp
|
||||
index d6938c1..1144409 100644
|
||||
--- a/src/test_lib_json/main.cpp
|
||||
+++ b/src/test_lib_json/main.cpp
|
||||
@@ -1993,7 +1993,8 @@ JSONTEST_FIXTURE_LOCAL(ValueTest, StaticString) {
|
||||
|
||||
JSONTEST_FIXTURE_LOCAL(ValueTest, WideString) {
|
||||
// https://github.com/open-source-parsers/jsoncpp/issues/756
|
||||
- const std::string uni = u8"\u5f0f\uff0c\u8fdb"; // "式,进"
|
||||
+ const std::string uni =
|
||||
+ reinterpret_cast<const char*>(u8"\u5f0f\uff0c\u8fdb"); // "式,进"
|
||||
std::string styled;
|
||||
{
|
||||
Json::Value v;
|
||||
@@ -3109,9 +3110,9 @@ JSONTEST_FIXTURE_LOCAL(ReaderTest, strictModeParseNumber) {
|
||||
}
|
||||
|
||||
JSONTEST_FIXTURE_LOCAL(ReaderTest, parseChineseWithOneError) {
|
||||
- checkParse(R"({ "pr)"
|
||||
- u8"\u4f50\u85e4" // 佐藤
|
||||
- R"(erty" :: "value" })",
|
||||
+ checkParse(reinterpret_cast<const char*>(R"({ "pr)"
|
||||
+ u8"\u4f50\u85e4" // 佐藤
|
||||
+ R"(erty" :: "value" })"),
|
||||
{{18, 19, "Syntax error: value, object or array expected."}},
|
||||
"* Line 1, Column 19\n Syntax error: value, object or array "
|
||||
"expected.\n");
|
||||
@@ -3223,7 +3224,8 @@ JSONTEST_FIXTURE_LOCAL(CharReaderTest, parseString) {
|
||||
bool ok = reader->parse(doc, doc + std::strlen(doc), &root, &errs);
|
||||
JSONTEST_ASSERT(ok);
|
||||
JSONTEST_ASSERT(errs.empty());
|
||||
- JSONTEST_ASSERT_EQUAL(u8"\u8A2a", root[0].asString()); // "訪"
|
||||
+ JSONTEST_ASSERT_EQUAL(reinterpret_cast<const char*>(u8"\u8A2a"),
|
||||
+ root[0].asString()); // "訪"
|
||||
}
|
||||
{
|
||||
char const doc[] = R"([ "\uD801" ])";
|
||||
@@ -17,6 +17,7 @@ SRCREV = "3455302847cf1e4671f1d8f5fa953fd46a7b1404"
|
||||
SRC_URI = "git://github.com/open-source-parsers/jsoncpp;branch=master;protocol=https;tag=${PV} \
|
||||
file://0001-Fix-C-11-ABI-breakage-when-compiled-with-C-17-1668-1.patch \
|
||||
file://run-ptest \
|
||||
file://0001-fix-GCC-16-C-20-build-failure-with-u8-string-literal.patch \
|
||||
"
|
||||
|
||||
inherit cmake ptest
|
||||
|
||||
Reference in New Issue
Block a user