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

deps: cherry-pick 8ed65b97 from V8's upstream #8411

Closed
wants to merge 2 commits into from

Conversation

addaleax
Copy link
Member

@addaleax addaleax commented Sep 5, 2016

Checklist
  • make -j4 test (UNIX), or vcbuild test nosign (Windows) passes
  • tests and/or benchmarks are included
  • commit message follows commit guidelines
Affected core subsystem(s)

deps/v8

Description of change

Um, hope I’m doing this right by backporting v8/v8@8ed65b97 to v6.x – in master that should not be necessary as this will come with a regular V8 5.4 update before v7.x is cut?

The test needed a little fixup to work with V8 5.1.


Original commit message:

Make FieldType::None() non-nullptr value to avoid undefined behaviour

When FieldType::None() returns a cast Smi::FromInt(0), which translates
as nullptr, the FieldType::IsNone() check becomes equivalent to
`this == nullptr` which is not allowed by the standard and
therefore optimized away as a false constant by GCC 6.

This has lead to crashes when invoking methods on FieldType::None().

Using a different Smi constant for FieldType::None() makes the compiler
always include a comparison against that value. The choice of these
constants has no effect as they are effectively arbitrary.

BUG=https://github.com/nodejs/node/issues/8310

Review-Url: https://codereview.chromium.org/2292953002
Cr-Commit-Position: refs/heads/master@{#39023}

Fixes: #8310

CI:
https://ci.nodejs.org/job/node-test-commit/4923/
https://ci.nodejs.org/job/node-test-commit-v8-linux/305/

Original commit message:

    Make FieldType::None() non-nullptr value to avoid undefined behaviour

    When FieldType::None() returns a cast Smi::FromInt(0), which translates
    as nullptr, the FieldType::IsNone() check becomes equivalent to
    `this == nullptr` which is not allowed by the standard and
    therefore optimized away as a false constant by GCC 6.

    This has lead to crashes when invoking methods on FieldType::None().

    Using a different Smi constant for FieldType::None() makes the compiler
    always include a comparison against that value. The choice of these
    constants has no effect as they are effectively arbitrary.

    BUG=nodejs#8310

    Review-Url: https://codereview.chromium.org/2292953002
    Cr-Commit-Position: refs/heads/master@{nodejs#39023}

Fixes: nodejs#8310
@addaleax addaleax added v8 engine Issues and PRs related to the V8 dependency. v6.x labels Sep 5, 2016
@bnoordhuis
Copy link
Member

LGTM. Still UB though, strictly speaking.

@addaleax
Copy link
Member Author

addaleax commented Sep 5, 2016

Running CI again to make sure the test failures are unrelated: https://ci.nodejs.org/job/node-test-commit/4925/

@fhinkel
Copy link
Member

fhinkel commented Sep 6, 2016

UB?

Do the tests pass on both commits separately? (I can never tell in which order the commits are)

@bnoordhuis
Copy link
Member

Undefined behavior. If you mean 'what kind of UB', it's not legal to construct pointers that don't point to a legal object or to legal_object+1 (the 'one element after' rule.)

@fhinkel
Copy link
Member

fhinkel commented Sep 6, 2016

Thanks!

@addaleax
Copy link
Member Author

addaleax commented Sep 6, 2016

Do the tests pass on both commits separately? (I can never tell in which order the commits are)

@fhinkel If you mean, do the tests work after the first commit here?, the answer is “no” – the second commit is needed to make them function properly. They should be landed as a single commit, I just wanted to clarify the distinction between what is in V8 and what is not. :)

@addaleax
Copy link
Member Author

addaleax commented Sep 7, 2016

@Fishrock123 … this one should be good to go. Since you’re putting a release together right now, I’m not sure if it’s easier if I land this in v6.x-staging (which is still up to date with v6.x) or if I’ll leave that to you?

@fhinkel
Copy link
Member

fhinkel commented Sep 7, 2016

@addaleax Thanks for clarifying, that's what I meant.

@fhinkel
Copy link
Member

fhinkel commented Sep 7, 2016

LGTM

addaleax added a commit that referenced this pull request Sep 8, 2016
Original commit message:

    Make FieldType::None() non-nullptr value to avoid undefined behaviour

    When FieldType::None() returns a cast Smi::FromInt(0), which translates
    as nullptr, the FieldType::IsNone() check becomes equivalent to
    `this == nullptr` which is not allowed by the standard and
    therefore optimized away as a false constant by GCC 6.

    This has lead to crashes when invoking methods on FieldType::None().

    Using a different Smi constant for FieldType::None() makes the compiler
    always include a comparison against that value. The choice of these
    constants has no effect as they are effectively arbitrary.

    BUG=#8310

    Review-Url: https://codereview.chromium.org/2292953002
    Cr-Commit-Position: refs/heads/master@{#39023}

Fixes: #8310
PR-URL: #8411
Reviewed-By: Ben Noordhuis <[email protected]>
Reviewed-By: Franziska Hinkelmann <[email protected]>
@addaleax
Copy link
Member Author

addaleax commented Sep 8, 2016

Landed on v6.x-staging @ f829660

@addaleax addaleax closed this Sep 8, 2016
@addaleax addaleax deleted the v8-fieldtype-v6.x branch September 8, 2016 08:32
@MylesBorins
Copy link
Contributor

@addaleax should this be backported?

@addaleax
Copy link
Member Author

This shouldn’t apply to v4.x, no.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
v8 engine Issues and PRs related to the V8 dependency.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants