Comments (14)
Can you include the error logs as actual text, instead of an image?
from tomlplusplus.
sure
[ 75%] Building CXX object examples/CMakeFiles/toml_merger.dir/toml_merger.cpp.o
In file included from /tmp/tomlplusplus/include/toml++/toml.h:69:0,
from /tmp/tomlplusplus/examples/toml_merger.cpp:9:
/tmp/tomlplusplus/include/toml++/impl/parser.inl: In member function ‘bool toml::v3::impl::utf8_reader<T>::read_next_block()’:
/tmp/tomlplusplus/include/toml++/impl/parser.inl:264:50: warning: requested alignment 32 is larger than 16 [-Wattributes]
TOML_OVERALIGNED char raw_bytes[block_capacity];
^
/tmp/tomlplusplus/include/toml++/impl/parser.inl: In function ‘toml::v3::ex::parse_result toml::v3::impl::do_parse_file(std::string_view)’:
/tmp/tomlplusplus/include/toml++/impl/parser.inl:3785:58: warning: requested alignment 32 is larger than 16 [-Wattributes]
TOML_OVERALIGNED char file_buffer[sizeof(void*) * 1024u];
^
In file included from /tmp/tomlplusplus/include/toml++/toml.h:48:0,
from /tmp/tomlplusplus/examples/toml_merger.cpp:9:
/tmp/tomlplusplus/include/toml++/impl/table.h: In instantiation of ‘toml::v3::table::do_for_each(Func&&, Table&&)::<lambda(auto:4&&)> [with auto:4 = toml::v3::table&; Func = {anonymous}::merge_left(toml::v3::table&, toml::v3::table&&)::<lambda(const toml::v3::key&, auto:13&&)>; Table = toml::v3::table&]’:
/opt/toolchains/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/include/c++/7.5.0/type_traits:2428:26: required by substitution of ‘template<class _Fn, class ... _Args> static std::__result_of_success<decltype (declval<_Fn>()((declval<_Args>)()...)), std::__invoke_other> std::__result_of_other_impl::_S_test(int) [with _Fn = toml::v3::table::do_for_each(Func&&, Table&&) [with Func = {anonymous}::merge_left(toml::v3::table&, toml::v3::table&&)::<lambda(const toml::v3::key&, auto:13&&)>; Table = toml::v3::table&]::<lambda(auto:4&&)>&&; _Args = {toml::v3::table&}]’
/opt/toolchains/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/include/c++/7.5.0/type_traits:2439:55: required from ‘struct std::__result_of_impl<false, false, toml::v3::table::do_for_each(Func&&, Table&&) [with Func = {anonymous}::merge_left(toml::v3::table&, toml::v3::table&&)::<lambda(const toml::v3::key&, auto:13&&)>; Table = toml::v3::table&]::<lambda(auto:4&&)>&&, toml::v3::table&>’
/opt/toolchains/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/include/c++/7.5.0/type_traits:2444:12: required from ‘struct std::__invoke_result<toml::v3::table::do_for_each(Func&&, Table&&) [with Func = {anonymous}::merge_left(toml::v3::table&, toml::v3::table&&)::<lambda(const toml::v3::key&, auto:13&&)>; Table = toml::v3::table&]::<lambda(auto:4&&)>&&, toml::v3::table&>’
/opt/toolchains/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/include/c++/7.5.0/type_traits:2845:12: [ skipping 2 instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]
/tmp/tomlplusplus/include/toml++/impl/node.h:735:37: required from ‘constexpr const bool toml::v3::node::can_visit<toml::v3::table::do_for_each(Func&&, Table&&) [with Func = {anonymous}::merge_left(toml::v3::table&, toml::v3::table&&)::<lambda(const toml::v3::key&, auto:13&&)>; Table = toml::v3::table&]::<lambda(auto:4&&)>&&, toml::v3::node&, toml::v3::table>’
/tmp/tomlplusplus/include/toml++/impl/node.h:765:49: required from ‘constexpr const bool toml::v3::node::visit_is_nothrow_one<toml::v3::table::do_for_each(Func&&, Table&&) [with Func = {anonymous}::merge_left(toml::v3::table&, toml::v3::table&&)::<lambda(const toml::v3::key&, auto:13&&)>; Table = toml::v3::table&]::<lambda(auto:4&&)>&&, toml::v3::node&, toml::v3::table>’
/tmp/tomlplusplus/include/toml++/impl/node.h:768:44: required from ‘constexpr const bool toml::v3::node::visit_is_nothrow<toml::v3::table::do_for_each(Func&&, Table&&) [with Func = {anonymous}::merge_left(toml::v3::table&, toml::v3::table&&)::<lambda(const toml::v3::key&, auto:13&&)>; Table = toml::v3::table&]::<lambda(auto:4&&)>&&, toml::v3::node&>’
/tmp/tomlplusplus/include/toml++/impl/node.h:920:51: required from ‘decltype(auto) toml::v3::node::visit(Func&&) & [with Func = toml::v3::table::do_for_each(Func&&, Table&&) [with Func = {anonymous}::merge_left(toml::v3::table&, toml::v3::table&&)::<lambda(const toml::v3::key&, auto:13&&)>; Table = toml::v3::table&]::<lambda(auto:4&&)>]’
/tmp/tomlplusplus/include/toml++/impl/table.h:897:16: required from ‘static void toml::v3::table::do_for_each(Func&&, Table&&) [with Func = {anonymous}::merge_left(toml::v3::table&, toml::v3::table&&)::<lambda(const toml::v3::key&, auto:13&&)>; Table = toml::v3::table&]’
/tmp/tomlplusplus/include/toml++/impl/table.h:1042:15: required from ‘toml::v3::table& toml::v3::table::for_each(Func&&) & [with Func = {anonymous}::merge_left(toml::v3::table&, toml::v3::table&&)::<lambda(const toml::v3::key&, auto:13&&)>]’
/tmp/tomlplusplus/examples/toml_merger.cpp:78:5: required from here
/tmp/tomlplusplus/include/toml++/impl/table.h:912:44: internal compiler error: Segmentation fault
visitor)(static_cast<const key&>(kvp.first), static_cast<value_ref>(v)));
^~~
Please submit a full bug report,
with preprocessed source if appropriate.
See <https://gcc.gnu.org/bugs/> for instructions.
gmake[2]: *** [examples/CMakeFiles/toml_merger.dir/build.make:76: examples/CMakeFiles/toml_merger.dir/toml_merger.cpp.o] Error 1
gmake[1]: *** [CMakeFiles/Makefile2:354: examples/CMakeFiles/toml_merger.dir/all] Error 2
gmake: *** [Makefile:156: all] Error 2
from tomlplusplus.
Ah yup, I've had trouble with other older versions of GCC with over-alignment in the past, looks like more of the same. Should be easy to address, thanks for the report :)
from tomlplusplus.
Thank you for the quick response, currently I can't upgrade the compiler version that I use on that platform so a fix will be very helpful
from tomlplusplus.
@sagi-ottopia I've just realized that I mis-read the error log and this isn't actually to do with over-alignment at all, but the template machinery that makes table::for_each()
work. It might just be an ICE with that particular instantiation in the toml_merger
example, and not actually the library itself; can you tell me if the simple_parser
example compiles OK?
from tomlplusplus.
Yes, simple_parser
compiles OK.
but I started to compile the examples code because when I'm compiling my code which uses the library this particular compiler crashed as well.
from tomlplusplus.
Ah, OK, I see. Well I'll try to come up with a workaround but it might ultimately be the case that GCC 7 is a bit too broken - the lowest I'm able to easily test with these days is GCC 8.
from tomlplusplus.
Hi @marzer
Is there anything new with this issue?
from tomlplusplus.
@damirbarr are you also experiencing the same issue? If so, which specific version of GCC and target environment, the same one as @sagi-ottopia?
from tomlplusplus.
@marzer yes, the same one. I applied the following patch and was able to work around this issue. Now I'm compiling both with gcc-7 and gcc-10.
All my unit tests pass and I'm able to compile everything.
The issue is that I'll need to create my own Conan package with this workaround
from tomlplusplus.
I applied the following patch and was able to work around this issue.
Hmmn, interesting. A worrying factor - a bool
(or bool
-convertible) return result of false
from the for_each()
callback is supposed to stop the iteration; your workaround deletes the branches responsible for handling that and always returns true
, which effectively changes the API. Are you able to do some less destructive alterations, to find which specific construct in do_for_each
triggers the ICE? My guess is the using return_type = ...;
part, but I can't test at the moment.
If I can't modify for_each
to support the bool
propagation and have it still work on GCC 7 I will have to end support for GCC 7, unfortunately.
All my unit tests pass and I'm able to compile everything.
Looks like I am missing tests to ensure for_each()
iteration does what it's supposed to do when you return false
:P
from tomlplusplus.
@damirbarr In 2414d90 I have added some additional tests to check for the above
from tomlplusplus.
Ah, OK, I see. Well I'll try to come up with a workaround but it might ultimately be the case that GCC 7 is a bit too broken - the lowest I'm able to easily test with these days is GCC 8.
- I can assist with checking on a relevant compiler and a machine. I have a cloud machine installed with Ubuntu 18.04 ARM64
- You can download the compiler from https://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/
Sagi.
from tomlplusplus.
Alright folks, sorry it took me so long to get back to this. I wasn't able to come up a workaround that preserved the same API (returning false
to early exit the loop) since I think GCC 7 is just overtly broken in this area, so instead I've added an error message and some #define
escape hatches.
- By default, using a
for_each()
on GCC 7 will trigger a static assert #define TOML_RETURN_BOOL_FROM_FOR_EACH_BROKEN_ACKNOWLEDGED
indicates "yep, that's fine, I don't need to be able to early-exit fromfor_each()
" (essentially this enables @damirbarr's patch)#define TOML_RETURN_BOOL_FROM_FOR_EACH_BROKEN 0
overrides the default and indicates "no, actually, my compiler works fine, I want the normal API" (YMMV - if this works for you, please let me know)
from tomlplusplus.
Related Issues (20)
- Shared lib not being installed? HOT 6
- Cannot build with Intel MKL include dirs. HOT 9
- Make key::str() to return std::string instead of std::string_view? HOT 4
- Tomplusplus 3.3.0 build failed on android HOT 4
- File generated can't be parsed. HOT 1
- File that was written with toml++ can't be parsed HOT 6
- OSS-Fuzz Integration HOT 1
- vcpkg is now difficult to use. HOT 4
- How to convert toml::date_time to std::chrono::time_point? HOT 2
- Explicit / Non-lexicographical sorting when serializing? HOT 5
- Indendation customization? HOT 1
- Lambda function error using nvcc HOT 2
- Get toml/yaml/json string without using streams HOT 6
- Installation and use with Meson doesn't seem to work HOT 18
- Store single string value from node view array into string variable HOT 4
- Iterate over nested Tables (Array of Tables) HOT 4
- Undefined references linker error on nvc++ HOT 17
- What is the proper way to parse top level arrays? Seems not working HOT 4
- 16 digit Hexadecimals
- "escape sequence '\e' is not supported in TOML 1.0.0 and earlier" even with TOML_LANG_UNRELEASED defined HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from tomlplusplus.