From 3e7374243ff53125f3a55c2d0b1927e89261b1f9 Mon Sep 17 00:00:00 2001 From: Myung Bae Date: Wed, 17 Apr 2024 14:33:03 -0500 Subject: Initialize schemas array with explicit size Currently `update_schemas.py` generates a schema list definition like redfish-core/include/schemas.hpp: ``` constexpr std::array schemas { "AccountService", "ActionInfo", ... "OpenBMCAccountService", }; ``` However, if the number of schemas is more than the clang's default max size, CI may fail. The default is `-fbracket-depth=256`. ``` In file included from /usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/functional:65: [1m/usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/array:288:52: [0m [0;1;31mfatal error: instantiating fold expression with 276 arguments exceeded expression nesting limit of 256 288 | -> array && ...), _Tp>, [0m | [0;1;32m ~~~~~~~~~~~~~~~~~~~~~~~~^~~~ [0m [1m../redfish-core/include/schemas.hpp:17:26: [0m [0;1;30mnote: while substituting deduced template arguments into function template '' [with _Tp = const char *, _Up = ] [0m 17 | constexpr std::array schemas { [0m | [0;1;32m ^ [0m1 error generated. ``` To avoid the failure, we can set the size explicitly like ``` constexpr std::array schemas { "AccountService", ... ``` Tested: 1) Remove `include_list` so that all possible schemas are to be used 2) Run with the fixed `scripts/update_schemas.py` 3) Compiles successfully Change-Id: Ib68db9fd3be1b6dbe0c4b5cc0e9a4324966d759e Signed-off-by: Myung Bae --- scripts/update_schemas.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'scripts') diff --git a/scripts/update_schemas.py b/scripts/update_schemas.py index bf395799e3..2e8487ded2 100755 --- a/scripts/update_schemas.py +++ b/scripts/update_schemas.py @@ -356,10 +356,14 @@ with open(os.path.join(cpp_path, "schemas.hpp"), "w") as hpp_file: "{WARNING}\n" "// clang-format off\n" "#include \n" + "#include \n" "\n" "namespace redfish\n" "{{\n" - " constexpr std::array schemas {{\n".format(WARNING=WARNING) + " constexpr std::array schemas {{\n".format( + WARNING=WARNING, + SIZE=len(json_schema_files) + len(oem_schema_names), + ) ) for schema_file in json_schema_files: hpp_file.write(' "{}",\n'.format(schema_file)) -- cgit v1.2.3