1. 03 Apr, 2020 2 commits
  2. 02 Apr, 2020 3 commits
    • Mat Hostetter's avatar
      Work around spurious -Werror=array-bounds error in gcc-9.3. · a5909bd1
      Mat Hostetter authored
      Summary:
      gcc-9.3 complains about folly::Format:
      
      ```
      array subscript -1 is outside array bounds of ‘char [69]’
      ```
      
      But the warning is incorrect; my guess is that it is confused because
      it doesn't realize that higher-level logic guarantees that integer
      formatting will run out of digits before it runs out of buffer.
      
      Changing some code from `array + x` to `&array[x]` works around it.
      
      Reviewed By: pixelb
      
      Differential Revision: D20694399
      
      fbshipit-source-id: 1176858054cdec9e415de4829371647958955103
      a5909bd1
    • Alexander Mols's avatar
      Fix bug in optimizing module loader for coverage collection · cc9056ea
      Alexander Mols authored
      Summary:
      In coverage collection mode a special module loader is prepended to
      `sys.meta_path`. In very specific conditions this module loader can end up
      returning a loader pointing to a _completely wrong module_. When importing
      symbols from the wrong module errors occur.
      
      The conditions to trigger the bug are:
      
      - running in coverage collection mode, enabling the custom loader
      - the test binary is a zip (e.g. par_style=fastzip)
      - having a module name where the end part matches the name of a builtin Python
        module
      
      When these conditions were met, the special loader would return the builtin
      Python module instead of the expected module. E.g. when loading a module like
      `myapp.somemod.platform` in a zip style binary.
      
      The custom loader first calls `imp.find_module()` to find the module it wants
      to return a wrapped loader for. This fails for modules included in the test
      binary, because the builtin `imp` module can not load from zips. This was the
      trigger leading to the call to the buggy code.
      
      When the initial call to `imp.find_module()` failed, the custom loader would
      try a second call, asking the internal loader to this time try any path on
      `sys.path`. For most module names this call would also fail, making the custom
      loader return `None`, after which Python tries other loaders on `sys.path`.
      However, when the final part of the module that was asked to load matches the
      name of a Python builtin module, then the second call to the `imp` module would
      succeed, returning a loader for the builtin module. E.g. `platform` when asking
      for `myapp.somemod.platform`.
      
      This diff fixes the issue by removing the broken second call to the internal
      loader. This will never have worked, we just have not triggered or noticed
      triggering the wrong loading before.
      
      Differential Revision: D20798119
      
      fbshipit-source-id: dffb54e308106a81af21b63c5ee64c6ca2041920
      cc9056ea
    • Luca Niccolini's avatar
      upgrade openssl to 1.1.1f · b960056c
      Luca Niccolini authored
      Summary:
      https://www.openssl.org/source/openssl-1.1.1b.tar.gz is gone
      
      changelog:
      https://www.openssl.org/news/openssl-1.1.1-notes.html
      
      Reviewed By: udippant
      
      Differential Revision: D20810020
      
      fbshipit-source-id: 0ed385f49b2187ec149defd79feb86e2c8b492d2
      b960056c
  3. 01 Apr, 2020 9 commits
    • Lee Howes's avatar
      Replace default executor argument in FutureDAG · 5a67fac7
      Lee Howes authored
      Summary:
      Change to SemiFuture returning collect, which checks for nullptr passed to via, breaks this test which produced a default nullptr.
      
      Instead remove default and force passing of a valid executor.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D20795552
      
      fbshipit-source-id: 5411fea910d9f85eb5a4ba825a1cfd48a72b8a44
      5a67fac7
    • Dan Melnic's avatar
      Add support for specifying which fatal signals to handle · c1beec58
      Dan Melnic authored
      Summary: Add support for specifying which fatal signals to handle
      
      Reviewed By: simpkins
      
      Differential Revision: D20672281
      
      fbshipit-source-id: 16696abcf551efcd932f5b56b336d6c5bc0d7a55
      c1beec58
    • Dan Melnic's avatar
      io_uring backend error handling · 91a0da83
      Dan Melnic authored
      Summary: io_uring backend error handling
      
      Reviewed By: kevin-vigor
      
      Differential Revision: D20737416
      
      fbshipit-source-id: 23eebc98326bcd07ee308e8f71f972c7374f6108
      91a0da83
    • Wez Furlong's avatar
      getdeps: hash over the visual studio path · 67e4a2af
      Wez Furlong authored
      Summary:
      I was testing vs2019 vs vs2017 and realized that
      we weren't reconfiguring when the toolchain was changed;
      this resolves that.
      
      Reviewed By: genevievehelsel
      
      Differential Revision: D20795118
      
      fbshipit-source-id: db80f090367cacfcc6b53887b77cf949f9cef0e6
      67e4a2af
    • Wez Furlong's avatar
      folly: windows: inline debug info into .obj rather than use .pdb · 95efa1a8
      Wez Furlong authored
      Summary:
      We see flakey builds to conflicting writes to .pdb files; the error
      message suggests enabling `/FS` which is already enabled.  Some serious
      internet research reveals that we can put the debug info into `.obj` files
      instead of having everyone contend with the same `.pdb` file.
      
      ```
      C:\PROGRA~2\MIB055~1\2017\BUILDT~1\VC\Tools\MSVC\1416~1.270\bin\Hostx64\x64\cl.exe  /nologo /TP -DBOOST_CONFIG_SUPPRESS_OUTDATED_MESSAGE -DGFLAGS_IS_A_DLL=1 -DWIN32_LEAN_AND_MEAN -D_CRT_NONSTDC_NO_WARNINGS -D_CRT_SECURE_NO_WARNINGS -D_ENABLE_EXTENDED_ALIGNED_STORAGE -D_SCL_SECURE_NO_WARNINGS -D_STL_EXTRA_DISABLED_WARNINGS="4774 4987" -IZ:\shipit\folly -I. -IZ:\installed\boost-6XBjAEHS6zoZVAY7uQHhSxYamF-vUNWngO1YaEIiiko\include\boost-1_69 -IZ:\installed\double-conversion-8uX8TcZDEz7gXyY70bMXqPUF2uLqH2OTWBffkLfU7FU\include -IZ:\installed\gflags-Md0yNU5drHUQ6MCdsB6iC0WS5YX-RFZk_eTHNKjkcPs\include -IZ:\installed\glog-_3NtzkcZDkkSFkgC70vwofqrnao05-mPxEa0E546a9g\include -IZ:\installed\libevent-TIUwVyvnVZZVHDsesjdIidM_iH4er-_6pEE0X4dzuL4\include -IZ:\installed\openssl-0G_glZ7y5BplM752sREIHKuam0GcoPqw7m6yjEGefyE\include -IZ:\installed\zlib-lxujVMVR4hhdh4-S0SCxkb55DAWh5ISCLWbfL7m7hwg\include -IZ:\installed\zstd-M8csiME1A2X7ZGECWeSGmWbqM1glHd6xoskhyPHgpaw\include -IZ:\installed\snappy-Z3WzzGXxgX1-6zSn4NdRg8Z3coQaz7Gob3gGoomN95E\include -IZ:\installed\fmt-W9-akKzyOlf4GoHcFsw1_rCxt3y0ghyjO3gb5Xve1Gc\include /DWIN32 /D_WINDOWS /W3 /GR  /MD /Zi /O2 /Ob1 /DNDEBUG   /EHs /GF /Zc:referenceBinding /Zc:rvalueCast /Zc:implicitNoexcept /Zc:strictStrings /Zc:threadSafeInit /Zc:throwingNew /permissive- /std:c++latest /bigobj /favor:blend /Zc:inline /Wall /MP /Gw /Gy /Qpar /Oi /Ot /wd4191 /wd4291 /wd4309 /wd4310 /wd4366 /wd4587 /wd4592 /wd4628 /wd4723 /wd4724 /wd4868 /wd4996 /wd4068 /wd4091 /wd4146 /wd4800 /wd4018 /wd4365 /wd4388 /wd4389 /wd4100 /wd4459 /wd4505 /wd4701 /wd4702 /wd4061 /wd4127 /wd4200 /wd4201 /wd4296 /wd4316 /wd4324 /wd4355 /wd4371 /wd4435 /wd4514 /wd4548 /wd4571 /wd4574 /wd4582 /wd4583 /wd4619 /wd4623 /wd4625 /wd4626 /wd4643 /wd4647 /wd4668 /wd4706 /wd4710 /wd4711 /wd4714 /wd4820 /wd5026 /wd5027 /wd5031 /wd5045 /we4099 /we4129 /we4566 /showIncludes /FoCMakeFiles\folly_base.dir\folly\Format.cpp.obj /FdCMakeFiles\folly_base.dir\ /FS -c Z:\shipit\folly\folly\Format.cpp
      
      Z:\shipit\folly\folly\Format.cpp: fatal error C1041: cannot open program database 'Z:\build\folly\CMakeFiles\folly_base.dir\vc140.pdb'; if multiple CL.EXE write to the same .PDB file, please use /FS
      
      ninja: build stopped: subcommand failed.
      ```
      
      Reviewed By: yfeldblum
      
      Differential Revision: D20752325
      
      fbshipit-source-id: 4f20871d54cc0973b3d025734dd0886c202c839b
      95efa1a8
    • Nathan Bronson's avatar
      increase AccessSpreader internal width · cd8bd8a1
      Nathan Bronson authored
      Summary:
      This diff exposes the maximum number of internal stripes
      supported by the AccessSpreader, increases that value from 128 to 256
      for server platforms, and uses bulk string operations to speed up the
      internal initialization. This change only affects the spreading results
      on machines with more than 128 hardware threads.
      
      (Note: this ignores all push blocking failures!)
      
      Reviewed By: yfeldblum
      
      Differential Revision: D20772443
      
      fbshipit-source-id: 5c7142efb2bb9ba07cc423195074fc33aeea6dcb
      cd8bd8a1
    • Andrii Grynenko's avatar
      Use folly::atomic_compare_exchange_strong_explicit in futures · 3d8f5dcd
      Andrii Grynenko authored
      Summary: This helps avoid TSAN false positives.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D20787056
      
      fbshipit-source-id: e62537235e3ad876e3ec5266f9c449d0d8340330
      3d8f5dcd
    • Lee Howes's avatar
      Add explicit future detach operations · cdcefc75
      Lee Howes authored
      Summary: Detach by destruction is common, and for SemiFutures drops the continuation. We can instead make detach an explicit operation, parameterised optionally by an executor, and phase out implicit detach on destruction of SemiFuture.
      
      Reviewed By: yfeldblum, andriigrynenko
      
      Differential Revision: D20683652
      
      fbshipit-source-id: 909d2ffcadbe71501edcddbf0847a9cb12aa3cce
      cdcefc75
    • Lee Howes's avatar
      Make collect* return SemiFuture · d0df6d1f
      Lee Howes authored
      Summary:
      Migration from Future-returning executor-erasing collectX forms to SemiFuture-returning forms, that are less risky in particular with coroutines.
      
      Earlier changes added collectXSemiFuture and collectXUnsafe as a migration path. This diff changes the behaviour of collectX to return SemiFuture.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D20260537
      
      fbshipit-source-id: 9e01536e4d9af68ff429f9fcd10aea4881d62041
      d0df6d1f
  4. 31 Mar, 2020 4 commits
    • Denis Glazachev's avatar
      Extend resizeWithoutInitialization() to support any std::basic_string<T> (#1339) · 63724d67
      Denis Glazachev authored
      Summary:
      Currently `folly/memory/UninitializedMemoryHacks.h`'s `resizeWithoutInitialization()` is able to do its job for `std::vector<T>` and `std::string` only. This PR extends it to support `std::basic_string<T>`.
      
      Effectively, replicated the machinery pattern used to achieve the same for any `std::vector<T>`.
      
      Added test cases too, however the test executable is not being built by the `CMakeLists.txt` (had to enable it locally for testing.)
      
      Is there any particular reason why these tests for `folly/memory/UninitializedMemoryHacks.h` are not built/run by default?
      `folly/memory/test/UninitializedMemoryHacksODR.cpp`
      `folly/memory/test/UninitializedMemoryHacksTest.cpp`
      Pull Request resolved: https://github.com/facebook/folly/pull/1339
      
      Reviewed By: Mizuchi
      
      Differential Revision: D20603510
      
      Pulled By: yfeldblum
      
      fbshipit-source-id: dc92ca71cab6a76e2d93c2bbcb4a325bcd70468c
      63724d67
    • Adam Simpkins's avatar
      emit a script to use for running commands from the build directory · a7a1f712
      Adam Simpkins authored
      Summary:
      On Windows the build artifacts cannot be easily run directly from the build
      output directory without installing them.  The `$PATH` environment variable
      needs to be set correctly so that the runtime library dependencies can be
      found.
      
      This updates the builder code to emit a `run.ps1` wrapper script in the build
      output directory that sets `$PATH` to support running build artifacts directly
      from the build directory.
      
      Additionally, this updates the CMake-specific builder to set properly when
      running the tests with `ctest`.
      
      Reviewed By: wez
      
      Differential Revision: D20688290
      
      fbshipit-source-id: 5d0f4d685692bca7e37370bd88309cf7634d87f0
      a7a1f712
    • Wez Furlong's avatar
      watchman: teach watchman to talk to EdenFS on Windows · 49ddfab1
      Wez Furlong authored
      Summary:
      This still requires support from EdenFS in order to do much
      of use, but it takes us a step closer:
      
      * Pull in cpptoml when building with Eden support
      * On Windows, when we locate the `.eden` directory, load and parse
        the config file in order to determine the socket path
      * If the EdenView constructor throws, treat it as a terminal error
        so that we don't fallback to the regular filesystem watcher.
        This is important because current EdenFS builds don't implement
        the journal thrift API endpoint yet.
      
      Reviewed By: pkaush
      
      Differential Revision: D20504752
      
      fbshipit-source-id: 48bbad49f1641698aa7d7b85674e3ddf4d4e617d
      49ddfab1
    • Wez Furlong's avatar
      getdeps: allow setting per-project install prefix for DESTDIR installs · 849da725
      Wez Furlong authored
      Summary:
      We have a global `--install-prefix` argument that can be used to set
      the prefix for all projects, but that is only suitable if you are running with
      sufficient privileges to install each of the deps to that location during the
      build.  Cmake dependency resolution won't work from the build directory in that
      situation; it can only see the final installed location and it will error out
      if those files are not present, or link against the currently installed version
      instead of the version we just built; not great!
      
      This commit adds a project specific `--project-install-prefix` that can be used
      on just the leaf project in a set of deps.  That sidesteps the dependency
      concern because only the last stage is built in that mode.  This option
      can technically be applied to an arbitrary set of projects, but in light
      of the above, in practice it only makes sense to use it for the final
      cmake project.  Only the CMakeBuilder respects this option.
      
      In the watchman repo, this commit adjusts the autogen.sh script to allow
      specifying the installation prefix; it defaults to `/usr/local` as you
      might expect.
      
      refs: https://github.com/facebook/watchman/issues/760
      
      Reviewed By: yfeldblum
      
      Differential Revision: D20674439
      
      fbshipit-source-id: 52799dbd47f3c295e2d6469ee2b74cedeaa20138
      849da725
  5. 30 Mar, 2020 3 commits
    • Mat Hostetter's avatar
      Fix harmless math errors in folly::Format stack buffer manipulation. · c234aa77
      Mat Hostetter authored
      Summary:
      The math that figures out the biggest possible formatted
      number, for a stack buffer size, computed 65 bytes for "binary" format:
      
      ```
          // #b: 0b prefix + 64 bytes = 65 bytes
      ```
      
      But with that 2-byte "0b" prefix this of course sums to 66 bytes.
      
      This turns out to be harmless, rather than causing a buffer overrun,
      because the buffer size additionally reserves two more bytes for
      "prefix shenanigans", which are redundant with the two prefix bytes
      explicitly reserved for "0b" (but in this case were covering up the
      off-by-one error).
      
      I cleaned up a few things while I was there:
      
      - I fixed the size computation for binary buffers, including
        making it use kMaxBinaryLength, which is based on `sizeof(uintmax_t)`,
        rather than hardcoding `64`.
      - I removed the redundant prefix shenanigans reservation.
      - I fixed the places that were reserving two bytes for a prefix
        (like "0x") right after asserting that no prefix is allowed,
        e.g. for chars and decimal numbers.
      - I stopped reserving a byte for NUL, because these days this code
        uses folly::StringPiece and never NUL-terminates.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D20694395
      
      fbshipit-source-id: 6658675d9993d2fe223675db55c8040ddee143a8
      c234aa77
    • Wez Furlong's avatar
      getdeps: fix boost download URL · 6276e84e
      Wez Furlong authored
      Summary:
      Not sure if this is a transient issue, but the URL we've been using to obtain boost has started to return 403 errors.
      Switch to a sourceforge download link instead.
      
      Refs: https://github.com/facebook/watchman/pull/797
      
      Reviewed By: chadaustin
      
      Differential Revision: D20739351
      
      fbshipit-source-id: 47483c675d59201a410c9d2a8f6db0f63ea5da69
      6276e84e
    • Wez Furlong's avatar
      getdeps: fixup python3 usage on GitHub Actions CI · 5631c7b2
      Wez Furlong authored
      Summary:
      My recent change to ensure that we were using python3 to launch everything failed on windows: the GH actions environment has `python.exe` in the path and it is python version 3.  There is no such thing as `python3` in that environment, although there is a `python2`.
      
      Refs: https://github.com/facebook/watchman/pull/797
      
      Reviewed By: chadaustin
      
      Differential Revision: D20740411
      
      fbshipit-source-id: 0e40590ccedc18e327ebb84901e2509588fdd0ff
      5631c7b2
  6. 28 Mar, 2020 2 commits
    • Nathan Bronson's avatar
      better fix for MSVC compilation issue · 278c88d5
      Nathan Bronson authored
      Summary:
      This diff is a more complete fix for the problem addressed
      by D19561643, in which private inheritance caused an incorrect
      inaccessibility error for a type that was derived via an alternate
      construction from a template param.
      
      Reviewed By: lnicco
      
      Differential Revision: D20718329
      
      fbshipit-source-id: 778d246d07030f6abb9e08e127a98d48c736a7d7
      278c88d5
    • Eric Niebler's avatar
      tell the range-v3 library that folly::Range satisfies the view concept · d9fd5f23
      Eric Niebler authored
      Summary: Upstream range-v3 has changed in accordance with C++20's standard ranges such that view types now need to explicitly opt-in to the `view` concept. This diff adds the hook needed so that the latest version of the range library will recognize `folly::Range` as a view.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D20569727
      
      fbshipit-source-id: 2f8bca017b2f8036b02568997a0b7c76d9c41646
      d9fd5f23
  7. 27 Mar, 2020 5 commits
    • Dan Melnic's avatar
      Fix broken oss build · 9d715f1f
      Dan Melnic authored
      Summary: Fix broken oss build
      
      Reviewed By: simpkins
      
      Differential Revision: D20689035
      
      fbshipit-source-id: 1d287f59fb35cf88482a471dfdf63e89d579e6fc
      9d715f1f
    • Andrew Gallagher's avatar
      Fix demangle bug · 5d446248
      Andrew Gallagher authored
      Summary:
      Avoid a forward declaration mismatch between `libiberty.h` and
      `libgen.h` that dirs in modular builds (likely related to T35368090).
      This defines `HAVE_DECL_BASENAME`, which is normally defined
      in the `config.h` generated during the binutils build, to prevent this
      conflicting declaration.
      
      Reviewed By: igorsugak
      
      Differential Revision: D20600924
      
      fbshipit-source-id: 0fb6287719abb3cf52d7eda457efbe567985d1d4
      5d446248
    • Lee Howes's avatar
      Fix SemiFuture::delayed to not insert an inline executor · 6d97401b
      Lee Howes authored
      Summary: SemiFuture::delayed should pass the SemiFuture all the way through.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D20684503
      
      fbshipit-source-id: e7d1299a177d347cb5b92e9e700c607fc9f7c4c3
      6d97401b
    • Lukas Piatkowski's avatar
      mononoke: make metaconfig OSS buildable · 38c7c898
      Lukas Piatkowski authored
      Summary: This diff makes it possible to relay on the thrift structures from configerator in OSS.
      
      Reviewed By: ahornby
      
      Differential Revision: D20279457
      
      fbshipit-source-id: 39df1c7a6f78b10a0a5bdeeebe476249ab674cc8
      38c7c898
    • Shai Szulanski's avatar
      Remove yarpl from thrift cmake lists · ea2ad0ad
      Shai Szulanski authored
      Reviewed By: vitaut
      
      Differential Revision: D20650610
      
      fbshipit-source-id: add9ff42c7c35696767c0c4d004235885fcd1565
      ea2ad0ad
  8. 26 Mar, 2020 11 commits
    • Adam Retter's avatar
      Fix cache line sizing on s390x (#1340) · 75ddbbfa
      Adam Retter authored
      Summary:
      We are using Folly inside RocksDB, and we noticed a build failure due to cache line sizing on s390x. I fixed it in our copy of Folly, and am sending you the changes upstream.
      
      CC pdillinger
      Pull Request resolved: https://github.com/facebook/folly/pull/1340
      
      Reviewed By: WillerZ
      
      Differential Revision: D20628323
      
      Pulled By: Orvid
      
      fbshipit-source-id: 03ea68b023fa1fdf7fae2e283687530ab5b6ead3
      75ddbbfa
    • Dan Melnic's avatar
      Add signal handling support for the PollIoBackend derived backends · 4ab53568
      Dan Melnic authored
      Summary: Add signal handling support for the PollIoBackend derived backends
      
      Reviewed By: kevin-vigor
      
      Differential Revision: D20612200
      
      fbshipit-source-id: 5a92e2b46a9fa102bfc02958058679bac6c22269
      4ab53568
    • Wez Furlong's avatar
      getdeps: use half as many jobs by default on windows · cf7ecf62
      Wez Furlong authored
      Summary:
      This takes some pressure off both cpu and memory
      on a laptop.
      
      Reviewed By: pkaush
      
      Differential Revision: D20562474
      
      fbshipit-source-id: a058c71c47f25c3a2b3c1e34a0d0caf83e642021
      cf7ecf62
    • Wez Furlong's avatar
      getdeps: fixup the dyndeps fixed up by fixup dyndeps · 2f2a55e3
      Wez Furlong authored
      Summary:
      On linux we didn't account for the `--final-install-prefix` argument
      which meant that the binaries would always be rewritten to be relative to
      the destdir.
      
      This commit fixes that.
      
      Refs: https://github.com/facebook/watchman/issues/760
      
      (this doesn't deal with the compiled in statedir being in the scratch path though)
      
      Reviewed By: simpkins
      
      Differential Revision: D20659749
      
      fbshipit-source-id: 1e8e198a58361882249c33a67f54a7d97b849257
      2f2a55e3
    • Wez Furlong's avatar
      getdeps: fix git configuration on windows · 9067e9e0
      Wez Furlong authored
      Summary:
      The GH actions defaults for git prevent it from being able
      to checkout the fbthrift repo due the length of the java related
      files in the fbthrift repo.
      
      This commit tells git to use long filenames and allows the checkout
      to succeed.
      
      Reviewed By: fanzeyi
      
      Differential Revision: D20659750
      
      fbshipit-source-id: 060b36d312d52a0769cf2f2dd9af60f7446f94a8
      9067e9e0
    • Wez Furlong's avatar
      getdeps: embrace python3 a bit more · 409dd8a1
      Wez Furlong authored
      Summary:
      Ensure that we are referencing python3 in the paths
      that we generate for the github actions workflows, and remove
      some shebangs that influence how our internal linters process
      the python code.
      
      Reviewed By: fanzeyi
      
      Differential Revision: D20659747
      
      fbshipit-source-id: 6f300f8e91edf7701bb27babc7b1418958cf0a10
      409dd8a1
    • Dan Melnic's avatar
      Remove unused files · ac78d14c
      Dan Melnic authored
      Summary: Remove unused files
      
      Reviewed By: yfeldblum
      
      Differential Revision: D20658959
      
      fbshipit-source-id: b387aa4a58ee6a610d71567f5dcd6932e49f7411
      ac78d14c
    • Andy Wei's avatar
      Fix F14Table type conversion warning · ad0c9159
      Andy Wei authored
      Summary: The `|` operation causes the  `int to uint8` conversion warning that be treated as an error on some targets and prevent them use F14Map.
      
      Reviewed By: yfeldblum
      
      Differential Revision: D20654932
      
      fbshipit-source-id: 6c909b7b58f4be263b0e30b1aa3acd82b5b9479d
      ad0c9159
    • Nick Terrell's avatar
      Require is_nothrow_destructible in F14Node tables · ef186943
      Nick Terrell authored
      Summary: We will `std::terminate` if a destructor throws, so it would be better to complain about throwing destructors in the first place.
      
      Reviewed By: nbronson
      
      Differential Revision: D20604722
      
      fbshipit-source-id: d36c771f36d0d0a26f356720698606de628ca747
      ef186943
    • Nick Terrell's avatar
      Explicitly require is_nothrow_destructible in Vector and Value tables · 6123dc9f
      Nick Terrell authored
      Summary:
      The current implementation of `std::is_nothrow_move_constructible` in libstdc++ implies `std::is_nothrow_destructible`. However, this doesn't seem to be required by the standard, see the notes section of https://en.cppreference.com/w/cpp/types/is_constructible.
      
      Since we know that all Vector and Value sets/maps already satisfy this requirement, let's codify it explicitly.
      
      Reviewed By: nbronson
      
      Differential Revision: D20604544
      
      fbshipit-source-id: bae1e8442585cedb062308b6332bd018cccca2f4
      6123dc9f
    • Nick Terrell's avatar
      Mark destroyItem() as noexcept · 8fcf46ad
      Nick Terrell authored
      Summary:
      F14Node{Map,Set} doesn't require `is_nothrow_destructible<value_type>`.  `clear()` and the destructor are both marked `noexcept`, so they will both terminate if the destructor throws. But `erase()` is not marked `noexcept`, so when the destructor throws during `erase()` the value is left in the map. This could be problematic if the value is half destroyed, or if `eraseInto()` is used.
      
      This diff fixes the problem by marking `destroyItem()` as `noexcept`, so `std::terminate` is called whenever the value destructor throws.
      
      Reviewed By: nbronson
      
      Differential Revision: D20604276
      
      fbshipit-source-id: c52c932d78d6ed61368985a749adf77c27a5a0de
      8fcf46ad
  9. 25 Mar, 2020 1 commit