Another interesting thing is that someone else reported what looks like the same segfault, but this time with MSYS2: https://github.com/google/protobuf/issues/2380
On Tue, Nov 15, 2016 at 3:54 PM, David Edge <[email protected]> wrote: > I will try and figure out where the segfault is happening and get back to > you. > > My compiler options included the following flag: -fsingle-precision- > constant > > Turning off this option got rid of all the precision errors. Every test > now passes prior to the segfault. However I still segfault at the infinity > test. > > Now I am wondering if it has to do with the fact that I am compiling for > softfp. Perhaps I need to try doing all floating point in software. > > Best, > David > > On Tuesday, November 15, 2016 at 4:18:05 PM UTC-6, Adam Cozzette wrote: >> >> Interestingly it kind of looks like your compiler is treating >> floating-point literals as single-precision floats instead of doubles. >> Judging from this snippet you posted for example: >> >> Expected: 1.234567890123456789 >> Which is: 1.2345678806304932 >> >> The first number is the original text from the source file, but the >> second number is the compiler's interpretation of it and seems to be >> downgraded to a 32-bit float. >> >> I'm not sure of the exact link between that and the segfault, but I >> suspect they're related because the failing test (InfinityInputTest) >> involves setting float and double fields to infinity. If you could figure >> out which line in that test triggers the segfault that would be useful to >> know, too. >> >> On Fri, Nov 11, 2016 at 2:53 PM, David Edge <[email protected]> wrote: >> >>> I have been trying to compile protobuf for soft float ARMv7. I am >>> compiling on board rather than cross compiling, and am failing some unit >>> tests when I run "make check". Most of the tests seem to be failing due to >>> rounding error, and the segmentation fault seems to have occurred during an >>> infinity input test, so I'm thinking I could fix these by using less >>> aggressive optimization flags and turning off fastmath. >>> >>> Any ideas? >>> >>> I can't seem to attach the whole logfile, as it is over 200MB. I >>> attached one of the longer failed unit tests and a few more interesting >>> pieces below. Here is my console output: >>> >>> ./test-driver: line 107: 2847 Segmentation fault "$@" > $log_file >>> 2>&1 >>> FAIL: protobuf-test >>> PASS: protobuf-lazy-descriptor-test >>> PASS: protobuf-lite-test >>> PASS: google/protobuf/compiler/zip_output_unittest.sh >>> PASS: google/protobuf/io/gzip_stream_unittest.sh >>> PASS: protobuf-lite-arena-test >>> PASS: no-warning-test >>> ============================================================ >>> ================ >>> Testsuite summary for Protocol Buffers 3.1.0 >>> ============================================================ >>> ================ >>> # TOTAL: 7 >>> # PASS: 6 >>> # SKIP: 0 >>> # XFAIL: 0 >>> # FAIL: 1 >>> # XPASS: 0 >>> # ERROR: 0 >>> ============================================================ >>> ================ >>> See src/test-suite.log >>> Please report to [email protected] >>> ============================================================ >>> ================ >>> Makefile:7407: recipe for target 'test-suite.log' failed >>> >>> And here are some of the failures from the log: >>> ================================================ >>> Protocol Buffers 3.1.0: src/test-suite.log >>> ================================================ >>> >>> # TOTAL: 7 >>> # PASS: 6 >>> # SKIP: 0 >>> # XFAIL: 0 >>> # FAIL: 1 >>> # XPASS: 0 >>> # ERROR: 0 >>> >>> .. contents:: :depth: 2 >>> >>> FAIL: protobuf-test >>> =================== >>> >>> google/protobuf/descriptor_unittest.cc:2312: Failure >>> Value of: message->field(5)->default_value_double() >>> Actual: 1e+101 >>> Expected: 10e100 >>> Which is: inf >>> [ FAILED ] MiscTest.DefaultValues (2 ms) >>> >>> google/protobuf/descriptor_unittest.cc:2786: Failure >>> Value of: options->GetExtension(protobuf_unittest::double_opt) >>> Actual: 1.2345678901234567 >>> Expected: 1.234567890123456789 >>> Which is: 1.2345678806304932 >>> [ FAILED ] CustomOptions.OptionTypes (0 ms) >>> >>> [ RUN ] TimeUtilTest.DurationOperators >>> google/protobuf/util/time_util_test.cc:276: Failure >>> Value of: TimeUtil::ToString(a * 0.5) >>> Actual: "0s" >>> Expected: "0.999999999s" >>> google/protobuf/util/time_util_test.cc:277: Failure >>> Value of: TimeUtil::ToString(b * 0.5) >>> Actual: "0s" >>> Expected: "-0.999999999s" >>> [ FAILED ] TimeUtilTest.DurationOperators (1 ms) >>> >>> [ RUN ] JsonStreamParserTest.ArrayComplexValues >>> [libprotobuf INFO google/protobuf/util/internal/ >>> json_stream_parser_test.cc:111] Testing split: ><[[22, -127, 45.3, >>> -1056.4, 11779497823553162765], {'key': true}] >>> unknown file: Failure >>> >>> Unexpected mock function call - returning default value. >>> Function call: RenderDouble({}, 45.3) >>> Returns: NULL >>> Google Mock tried the following 2 expectations, but none matched: >>> >>> ./google/protobuf/util/internal/expecting_objectwriter.h:178: tried >>> expectation #0: EXPECT_CALL(*mock_, RenderDouble(IsEmpty(), >>> NanSensitiveDoubleEq(value)))... >>> Expected arg #1: is approximately 45.299999237060547 >>> Actual: 45.3 >>> Expected: to be called once >>> Actual: never called - unsatisfied and active >>> ./google/protobuf/util/internal/expecting_objectwriter.h:178: tried >>> expectation #1: EXPECT_CALL(*mock_, RenderDouble(IsEmpty(), >>> NanSensitiveDoubleEq(value)))... >>> Expected arg #1: is approximately -1056.4000244140625 >>> Actual: 45.3 >>> Expected: to be called once >>> Actual: never called - unsatisfied and active >>> unknown file: Failure >>> >>> Unexpected mock function call - returning default value. >>> Function call: RenderDouble({}, -1056.4) >>> Returns: NULL >>> Google Mock tried the following 2 expectations, but none matched: >>> >>> ./google/protobuf/util/internal/expecting_objectwriter.h:178: tried >>> expectation #0: EXPECT_CALL(*mock_, RenderDouble(IsEmpty(), >>> NanSensitiveDoubleEq(value)))... >>> Expected arg #1: is approximately 45.299999237060547 >>> Actual: -1056.4 >>> Expected: to be called once >>> Actual: never called - unsatisfied and active >>> ./google/protobuf/util/internal/expecting_objectwriter.h:178: tried >>> expectation #1: EXPECT_CALL(*mock_, RenderDouble(IsEmpty(), >>> NanSensitiveDoubleEq(value)))... >>> Expected arg #1: is approximately -1056.4000244140625 >>> Actual: -1056.4 >>> Expected: to be called once >>> Actual: never called - unsatisfied and active >>> unknown file: Failure >>> >>> Unexpected mock function call - returning default value. >>> Function call: RenderUint64({}, 11779497823553162765) >>> Returns: NULL >>> Google Mock tried the following 2 expectations, but none matched: >>> >>> ./google/protobuf/util/internal/expecting_objectwriter.h:167: tried >>> expectation #0: EXPECT_CALL(*mock_, RenderUint64(IsEmpty(), >>> TypedEq<uint64>(value)))... >>> Expected: the expectation is active >>> Actual: it is retired >>> Expected: to be called once >>> Actual: called once - saturated and retired >>> ./google/protobuf/util/internal/expecting_objectwriter.h:167: tried >>> expectation #1: EXPECT_CALL(*mock_, RenderUint64(IsEmpty(), >>> TypedEq<uint64>(value)))... >>> Expected: all pre-requisites are satisfied >>> Actual: the following immediate pre-requisites are not >>> satisfied: >>> ./google/protobuf/util/internal/expecting_objectwriter.h:178: >>> pre-requisite #0 >>> (end of pre-requisites) >>> Expected: to be called once >>> Actual: never called - unsatisfied and active >>> unknown file: Failure >>> >>> === >>> Snipped thousands of similar lines here. >>> ==== >>> >>> ./google/protobuf/util/internal/expecting_objectwriter.h:95: Failure >>> Actual function call count doesn't match EXPECT_CALL(*mock_, >>> StartObject(IsEmpty()))... >>> Expected: to be called once >>> Actual: never called - unsatisfied and active >>> ./google/protobuf/util/internal/expecting_objectwriter.h:96: Failure >>> Actual function call count doesn't match EXPECT_CALL(*mock_, >>> StartObject(StrEq(name.ToString())))... >>> Expected: to be called once >>> Actual: never called - unsatisfied and active >>> [ FAILED ] JsonStreamParserTest.ObjectValues (88792 ms) >>> >>> [ RUN ] JsonStreamParserTest.RejectNonUtf8WhenNotCoerced >>> [libprotobuf INFO google/protobuf/util/internal/ >>> json_stream_parser_test.cc:111] Testing split: >>> ><{"address":ÿ"חרושת 23, ×¨×¢× × ×”, ×™×©×¨× ×œ"} >>> >>> GMOCK WARNING: >>> Uninteresting mock function call - returning default value. >>> Function call: StartObject({}) >>> Returns: NULL >>> Stack trace: >>> [libprotobuf INFO google/protobuf/util/internal/ >>> json_stream_parser_test.cc:111] Testing split: >>> {><"address":ÿ"חרושת 23, ×¨×¢× × ×”, ×™×©×¨× ×œ"} >>> >>> GMOCK WARNING: >>> Uninteresting mock function call - returning default value. >>> Function call: StartObject({}) >>> Returns: NULL >>> Stack trace: >>> [libprotobuf INFO google/protobuf/util/internal/ >>> json_stream_parser_test.cc:111] Testing split: >>> {"><address":ÿ"חרושת 23, ×¨×¢× × ×”, ×™×©×¨× ×œ"} >>> >>> GMOCK WARNING: >>> Uninteresting mock function call - returning default value. >>> Function call: StartObject({}) >>> Returns: NULL >>> Stack trace: >>> [libprotobuf INFO google/protobuf/util/internal/ >>> json_stream_parser_test.cc:111] Testing split: >>> {"a><ddress":ÿ"חרושת 23, ×¨×¢× × ×”, ×™×©×¨× ×œ"} >>> >>> GMOCK WARNING: >>> Uninteresting mock function call - returning default value. >>> Function call: StartObject({}) >>> Returns: NULL >>> Stack trace: >>> [libprotobuf INFO google/protobuf/util/internal/ >>> json_stream_parser_test.cc:111] Testing split: >>> {"ad><dress":ÿ"חרושת 23, ×¨×¢× × ×”, ×™×©×¨× ×œ"} >>> >>> ===== >>> snipped similar lines >>> ===== >>> >>> GMOCK WARNING: >>> Uninteresting mock function call - returning default value. >>> Function call: StartList({}) >>> Returns: NULL >>> Stack trace: >>> [libprotobuf INFO google/protobuf/util/internal/ >>> json_stream_parser_test.cc:111] Testing split: ["\ud83d\ud83d"><] >>> >>> GMOCK WARNING: >>> Uninteresting mock function call - returning default value. >>> Function call: StartList({}) >>> Returns: NULL >>> Stack trace: >>> [libprotobuf INFO >>> google/protobuf/util/internal/json_stream_parser_test.cc:97] >>> Testing split every char: ["\ud83d\ud83d"] >>> >>> GMOCK WARNING: >>> Uninteresting mock function call - returning default value. >>> Function call: StartList({}) >>> Returns: NULL >>> Stack trace: >>> [ OK ] JsonStreamParserTest.UnicodeEs >>> capingMissingLowSurrogateWhenNotCoerced (7 ms) >>> >>> This seems to be where the segfault occurs: >>> >>> [----------] 45 tests from DifferentTypeInfoSourceTest/Pr >>> otoStreamObjectWriterTest >>> [ RUN ] DifferentTypeInfoSourceTest/Pr >>> otoStreamObjectWriterTest.EmptyObject/0 >>> [ OK ] DifferentTypeInfoSourceTest/Pr >>> otoStreamObjectWriterTest.EmptyObject/0 (33 ms) >>> [ RUN ] DifferentTypeInfoSourceTest/Pr >>> otoStreamObjectWriterTest.SimpleObject/0 >>> [ OK ] DifferentTypeInfoSourceTest/Pr >>> otoStreamObjectWriterTest.SimpleObject/0 (1 ms) >>> [ RUN ] DifferentTypeInfoSourceTest/Pr >>> otoStreamObjectWriterTest.SimpleMessage/0 >>> [ OK ] DifferentTypeInfoSourceTest/Pr >>> otoStreamObjectWriterTest.SimpleMessage/0 (4 ms) >>> [ RUN ] DifferentTypeInfoSourceTest/Pr >>> otoStreamObjectWriterTest.CustomJsonName/0 >>> [ OK ] DifferentTypeInfoSourceTest/Pr >>> otoStreamObjectWriterTest.CustomJsonName/0 (0 ms) >>> [ RUN ] DifferentTypeInfoSourceTest/Pr >>> otoStreamObjectWriterTest.IntEnumValuesAreAccepted/0 >>> [ OK ] DifferentTypeInfoSourceTest/Pr >>> otoStreamObjectWriterTest.IntEnumValuesAreAccepted/0 (1 ms) >>> [ RUN ] DifferentTypeInfoSourceTest/Pr >>> otoStreamObjectWriterTest.EnumValuesWithoutUnderscoreAreAccepted/0 >>> [ OK ] DifferentTypeInfoSourceTest/Pr >>> otoStreamObjectWriterTest.EnumValuesWithoutUnderscoreAreAccepted/0 (1 >>> ms) >>> [ RUN ] DifferentTypeInfoSourceTest/Pr >>> otoStreamObjectWriterTest.EnumValuesInCamelCaseAreAccepted/0 >>> [ OK ] DifferentTypeInfoSourceTest/Pr >>> otoStreamObjectWriterTest.EnumValuesInCamelCaseAreAccepted/0 (0 ms) >>> [ RUN ] DifferentTypeInfoSourceTest/Pr >>> otoStreamObjectWriterTest.EnumValuesInCamelCaseWithNameNotUp >>> percaseAreAccepted/0 >>> [ OK ] DifferentTypeInfoSourceTest/Pr >>> otoStreamObjectWriterTest.EnumValuesInCamelCaseWithNameNotUppercaseAreAccepted/0 >>> (1 ms) >>> [ RUN ] DifferentTypeInfoSourceTest/Pr >>> otoStreamObjectWriterTest.PrimitiveFromStringConversion/0 >>> [ OK ] DifferentTypeInfoSourceTest/Pr >>> otoStreamObjectWriterTest.PrimitiveFromStringConversion/0 (1 ms) >>> [ RUN ] DifferentTypeInfoSourceTest/Pr >>> otoStreamObjectWriterTest.InfinityInputTest/0 >>> FAIL protobuf-test (exit status: 139) >>> >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Protocol Buffers" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to [email protected]. >>> To post to this group, send email to [email protected]. >>> Visit this group at https://groups.google.com/group/protobuf. >>> For more options, visit https://groups.google.com/d/optout. >>> >> >> -- > You received this message because you are subscribed to the Google Groups > "Protocol Buffers" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > Visit this group at https://groups.google.com/group/protobuf. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "Protocol Buffers" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/protobuf. For more options, visit https://groups.google.com/d/optout.
