Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix gcc warnings when building with optimizations. (backport #672) #673

Merged
merged 1 commit into from
Apr 29, 2024

Conversation

mergify[bot]
Copy link

@mergify mergify bot commented Apr 29, 2024

When building the allocator_tutorial_pmr demo with -O2, gcc is throwing an error saying that new and delete are mismatched. This is something of a misnomer, however; the real problem is that the global new override we have in that demo is actually implemented incorrectly.

In particular, the documentation at
https://en.cppreference.com/w/cpp/memory/new/operator_new very clearly specifies that operator new either has to return a valid pointer, or throw an exception on error. Our version wasn't throwing the exception, so change it to throw std::bad_alloc if std::malloc fails.

While we are in here, also fix another small possible is where std::malloc could return nullptr on a zero-sized object, thus throwing an exception it shouldn't.


This is an automatic backport of pull request #672 done by Mergify.

* Fix gcc warnings when building with optimizations.

When building the allocator_tutorial_pmr demo with -O2,
gcc is throwing an error saying that new and delete are
mismatched.  This is something of a misnomer, however;
the real problem is that the global new override we
have in that demo is actually implemented incorrectly.

In particular, the documentation at
https://en.cppreference.com/w/cpp/memory/new/operator_new
very clearly specifies that operator new either has to
return a valid pointer, or throw an exception on error.
Our version wasn't throwing the exception, so change it
to throw std::bad_alloc if std::malloc fails.

While we are in here, also fix another small possible
is where std::malloc could return nullptr on a zero-sized
object, thus throwing an exception it shouldn't.

Signed-off-by: Chris Lalancette <clalancette@gmail.com>

* Always inline the new and delete operators.

That's because gcc 13 has a bug where it can sometimes
inline one or the other, and then it detects that they
mismatch.  For gcc and clang, just force them to always
be inline in this demo.

Signed-off-by: Chris Lalancette <clalancette@gmail.com>

* Switch to NOINLINE instead.

Both clang and MSVC don't like inlining these, so instead
ensure that they are *not* inlined.  This also works
because the problem is when new is inlined but not delete
(or vice-versa).  As long as they are both not inlined,
this should fix the warning.

Signed-off-by: Chris Lalancette <clalancette@gmail.com>
(cherry picked from commit 957ddbb)
@ahcorde
Copy link

ahcorde commented Apr 29, 2024

  • Linux Build Status
  • Linux-aarch64 Build Status
  • Windows Build Status

@ahcorde ahcorde merged commit ddb97de into jazzy Apr 29, 2024
3 checks passed
@delete-merged-branch delete-merged-branch bot deleted the mergify/bp/jazzy/pr-672 branch April 29, 2024 11:30
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.

None yet

2 participants