Skip to content

fix: add tests related to issue 2227#2229

Merged
lemire merged 5 commits intomasterfrom
adding_tests_for_rvalues
Aug 8, 2024
Merged

fix: add tests related to issue 2227#2229
lemire merged 5 commits intomasterfrom
adding_tests_for_rvalues

Conversation

@lemire
Copy link
Member

@lemire lemire commented Aug 7, 2024

The core idea is that you should never hold either an ondemand::array or ondemand::object without a corresponding ondemand::document being alive.

See issue #2227

@lemire
Copy link
Member Author

lemire commented Aug 7, 2024

@the-moisrex Please review.

@the-moisrex
Copy link
Member

GCC 14.2.1 gives this:

/simdjson/tests/ondemand/compilation_failure_tests/iterate_array.cpp: In function ‘int main()’:
/simdjson/tests/ondemand/compilation_failure_tests/iterate_array.cpp:32:11: error: ‘a’ may be used uninitialized [-Werror=maybe-uninitialized]
   32 |     printf("a = %d\n", (int)a);
      |     ~~~~~~^~~~~~~~~~~~~~~~~~~~
/simdjson/tests/ondemand/compilation_failure_tests/iterate_array.cpp:27:13: note: ‘a’ was declared here
   27 |     int64_t a;
      |             ^

@the-moisrex
Copy link
Member

Oh I see you fixed it!

@lemire
Copy link
Member Author

lemire commented Aug 7, 2024

Oh I see you fixed it!

Yeah. Well. It is a bogus warning. GCC is wrong. The value will be initialized but the compiler can't see it for some reason. Very annoying.

@the-moisrex
Copy link
Member

Honestly my opinion on this is to deprecate document::get() && fully because even supposedly if this code is okay:

    auto error = f(parser).get_double().get(dbl);

The problem is people WILL customize it to be used like this:

    struct Car {
        ondemand::array arr;
    };
    auto error = f(parser).get<Car>().get(car);

This introduces the same problem again.

@lemire
Copy link
Member Author

lemire commented Aug 7, 2024

@the-moisrex I agree that is a concern.

@lemire
Copy link
Member Author

lemire commented Aug 7, 2024

@the-moisrex Please see 72d6111

@the-moisrex
Copy link
Member

the-moisrex commented Aug 7, 2024

How about [[deprecated]] attribute? https://en.cppreference.com/w/cpp/language/attributes/deprecated

This library is C++17 right?

@lemire
Copy link
Member Author

lemire commented Aug 7, 2024

This library is C++17 right?

No. It is C++11.

@the-moisrex
Copy link
Member

For some reason I though this project was C++17! I hope I didn't mess something up with that in my mind!

@lemire
Copy link
Member Author

lemire commented Aug 7, 2024

For some reason I though this project was C++17! I hope I didn't mess something up with that in my mind!

The build target is C++11 (except for some runners where we go up to C++20). In any case, this new work won't go into our main branch and won't be released until it undergoes sufficient testing.

@lemire
Copy link
Member Author

lemire commented Aug 8, 2024

Let us merge this, it seems reasonable.

@lemire lemire merged commit d506af0 into master Aug 8, 2024
@lemire lemire deleted the adding_tests_for_rvalues branch August 8, 2024 00:15
lemire added a commit that referenced this pull request Sep 24, 2024
* fix: add tests related to issue 2227 (#2229)

* fix: add tests related to issue 2227

* avoiding name clash

* pedantic fix

* deprecate rvalue get on document

* selectively deprecating

* Fix ndjson spec link (#2234)

* fix ndjson spec link

The link in the readme of parse_many links to a casino spam site

* fix link

* [no-ci] Update README.md

* Make simdjson compile again

* Enable SIMDJSON_SINGLEHEADER=OFF in VS Code

With singleheader on, clangd can't find the right
include files.

* Add missing include directives to static build targets of simdjson. (#2240)

* adding a warning

* adding warning regarding SIMDJSON_BUILD_STATIC_LIB

* release candidate

* pedantic viable size

* Making tag_invoke a feeder instead of a producer

* adding missing undef silencer (#2253)

* Ignore pragma once when amalgamating source files (#2248)

With gcc it causes an error in `simdjson.cpp`:
```
simdjson.cpp:548:9: warning: #pragma once in main file
  548 | #pragma once
      |         ^~~~
```

It had previously been commented out in:
6ef555e

However, this was lost in an upgrade:
2a4ff73

* Update CI (#2254)

* adding missing undef silencer

* Updating CI

* more fixes

* fix

* big endian fix

* Moving to the new tag_invoke signature

* Fix nlohmann ambiguity on C++23-enabled clang

* Revert "Merge branch 'master' of https://github.com/simdjson/simdjson into builder_development_branch_extra"

This reverts commit 3eeecba, reversing
changes made to 6858b20.

---------

Co-authored-by: Daniel Lemire <daniel@lemire.me>
Co-authored-by: Sasha Lopoukhine <superlopuh@gmail.com>
Co-authored-by: John Keiser <john@johnkeiser.com>
Co-authored-by: Tan Li Boon <undisputed-seraphim@users.noreply.github.com>
Co-authored-by: tobil4sk <tobil4sk@outlook.com>
lemire added a commit that referenced this pull request Oct 19, 2024
* tag_invoke based custom types (#2219)

* tag_invoke based custom types

Now you can use tag_invoke to add a custom type or a group of custom types.

* Fixing macro usage + Fixing noexcept

* Fixing the usage of #include

We don't need <concepts> at all seems like it

* Fixing tag_invoke impl for MSVC

* Making `tag_invoke` to support `ondemand::document` as well + docs (#2228)

* Making `tag_invoke` to support `ondemand::document` as well + docs

* Fix typos and doc update by @lemire

Co-authored-by: Daniel Lemire <daniel@lemire.me>

* Better docs by @lemire

Co-authored-by: Daniel Lemire <daniel@lemire.me>

* Preserving the old, disallowing in the new

I'm disabling `document::get() &&` if the user has provided a `tag_invoke`d version; otherwise, we retain the compatibility.

---------

Co-authored-by: Daniel Lemire <daniel@lemire.me>

* fix: correct small issues with deserialize (#2232)

* Extending the deserialization code with more defaults + docs (#2233)

* Make custom types easier with some predefined cases + docs

* missing include

* adding Ubuntu 24 CXX 20

* using concepts all the way

* minor tweak

* tiny tweak

* tweaks

* more tweaking

* saving

---------

Co-authored-by: Daniel Lemire <dlemire@lemire.me>

* Making `tag_invoke` a "put" as opposed to a "get" (#2256)

* fix: add tests related to issue 2227 (#2229)

* fix: add tests related to issue 2227

* avoiding name clash

* pedantic fix

* deprecate rvalue get on document

* selectively deprecating

* Fix ndjson spec link (#2234)

* fix ndjson spec link

The link in the readme of parse_many links to a casino spam site

* fix link

* [no-ci] Update README.md

* Make simdjson compile again

* Enable SIMDJSON_SINGLEHEADER=OFF in VS Code

With singleheader on, clangd can't find the right
include files.

* Add missing include directives to static build targets of simdjson. (#2240)

* adding a warning

* adding warning regarding SIMDJSON_BUILD_STATIC_LIB

* release candidate

* pedantic viable size

* Making tag_invoke a feeder instead of a producer

* adding missing undef silencer (#2253)

* Ignore pragma once when amalgamating source files (#2248)

With gcc it causes an error in `simdjson.cpp`:
```
simdjson.cpp:548:9: warning: #pragma once in main file
  548 | #pragma once
      |         ^~~~
```

It had previously been commented out in:
6ef555e

However, this was lost in an upgrade:
2a4ff73

* Update CI (#2254)

* adding missing undef silencer

* Updating CI

* more fixes

* fix

* big endian fix

* Moving to the new tag_invoke signature

* Fix nlohmann ambiguity on C++23-enabled clang

* Revert "Merge branch 'master' of https://github.com/simdjson/simdjson into builder_development_branch_extra"

This reverts commit 3eeecba, reversing
changes made to 6858b20.

---------

Co-authored-by: Daniel Lemire <daniel@lemire.me>
Co-authored-by: Sasha Lopoukhine <superlopuh@gmail.com>
Co-authored-by: John Keiser <john@johnkeiser.com>
Co-authored-by: Tan Li Boon <undisputed-seraphim@users.noreply.github.com>
Co-authored-by: tobil4sk <tobil4sk@outlook.com>

* update CI on the builder_development_branch (no code change) (#2262)

* typo

* General madness simpler, no simpler!!! (#2267)

* Minimal tag_invokes for STL types

* simpler madness

* adding a comment

* missing file

* minor tweaks to style

* fixing incorrect max/min usage

* updating single

* simplify

* validating the idea

* putting back the concept

* moving the include

* guarding

* Cheap General Madness (#2268)

* Some General Concepts and their deserializations

* Resolving ambiguity

* Add missing #include

* C++20 custom deserializer: better documentation (#2269)

* mostly a documentation update.

* missing cpp

* [no-ci] fix comment

* various minor fixes

---------

Co-authored-by: Daniel Lemire <dlemire@lemire.me>

---------

Co-authored-by: M. Bahoosh <12122474+the-moisrex@users.noreply.github.com>
Co-authored-by: Daniel Lemire <dlemire@lemire.me>
Co-authored-by: M. Bahoosh <moisrex@gmail.com>

* minor update

* More documentation regarding builder (#2270)

* minor update

* more improvment to our documentation (builder branch)

* putting back missing functions

* merge candidate

---------

Co-authored-by: M. Bahoosh <moisrex@gmail.com>
Co-authored-by: Daniel Lemire <dlemire@lemire.me>
Co-authored-by: Sasha Lopoukhine <superlopuh@gmail.com>
Co-authored-by: John Keiser <john@johnkeiser.com>
Co-authored-by: Tan Li Boon <undisputed-seraphim@users.noreply.github.com>
Co-authored-by: tobil4sk <tobil4sk@outlook.com>
Co-authored-by: M. Bahoosh <12122474+the-moisrex@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants