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

WithHelperKey breaks on clang with asserts on #26500

Merged
merged 1 commit into from
Nov 12, 2024

Conversation

cdesouza-chromium
Copy link
Collaborator

@cdesouza-chromium cdesouza-chromium commented Nov 12, 2024

WithHelperKey is a templated class that has an inline field that it uses to produce a memory address that is used as a data key. This PR is not concerned with the underlying causes for this unconventional design. Rather, this change aims to fix a clang crash that happens nearly daily whenever it is necessary building brave with a clang binary that has asserts on. In particular, it looks like some combination of the key address and the use std::addressof cause clang to assert and crash.

This change works around this crash by returning the address of the inline variable using &. For a repro of the crash, see:

https://godbolt.org/z/M6oq6b3sz

An issue has been created for this issue as well

llvm/llvm-project#111188

Resolves

Submitter Checklist:

  • I confirm that no security/privacy review is needed and no other type of reviews are needed, or that I have requested them
  • There is a ticket for my issue
  • Used Github auto-closing keywords in the PR description above
  • Wrote a good PR/commit description
  • Squashed any review feedback or "fixup" commits before merge, so that history is a record of what happened in the repo, not your PR
  • Added appropriate labels (QA/Yes or QA/No; release-notes/include or release-notes/exclude; OS/...) to the associated issue
  • Checked the PR locally:
    • npm run test -- brave_browser_tests, npm run test -- brave_unit_tests wiki
    • npm run presubmit wiki, npm run gn_check, npm run tslint
  • Ran git rebase master (if needed)

Reviewer Checklist:

  • A security review is not needed, or a link to one is included in the PR description
  • New files have MPL-2.0 license header
  • Adequate test coverage exists to prevent regressions
  • Major classes, functions and non-trivial code blocks are well-commented
  • Changes in component dependencies are properly reflected in gn
  • Code follows the style guide
  • Test plan is specified in PR before merging

After-merge Checklist:

Test Plan:

@cdesouza-chromium cdesouza-chromium requested a review from a team as a code owner November 12, 2024 06:26
@cdesouza-chromium cdesouza-chromium self-assigned this Nov 12, 2024
@cdesouza-chromium cdesouza-chromium changed the title Avoid clang ICE with around WithHelperKey Avoid clang ICE around WithHelperKey Nov 12, 2024
@cdesouza-chromium cdesouza-chromium force-pushed the fix-clang-ice-with-helper-key-template branch from 7bef328 to d48840f Compare November 12, 2024 06:34
@cdesouza-chromium cdesouza-chromium changed the title Avoid clang ICE around WithHelperKey WithHelperKey breaks on clang with asserts Nov 12, 2024
@cdesouza-chromium cdesouza-chromium changed the title WithHelperKey breaks on clang with asserts WithHelperKey breaks on clang with asserts on Nov 12, 2024
`WithHelperKey` is a template class that has an inline field that it
uses to produce a memory address that is used as a data key. This PR is
not concerned with the underlying causes for this unconventional design.
Rather, this change aims to fix a clang crash that happens whenever
nearly daily when building brave with a clang binary that has asserts on.
In particular, it looks like some combination of the key address and the
use `std::addressof` cause clang to assert and crash.

This change works around this crash by returning the address of the
inline variable using `&`. For a repro of the crash, see:

  https://godbolt.org/z/M6oq6b3sz

An issue has been created for this issue as well

  llvm/llvm-project#111188
@cdesouza-chromium cdesouza-chromium force-pushed the fix-clang-ice-with-helper-key-template branch from d48840f to 4c55506 Compare November 12, 2024 13:19
@cdesouza-chromium cdesouza-chromium merged commit babe3bb into master Nov 12, 2024
17 checks passed
@cdesouza-chromium cdesouza-chromium deleted the fix-clang-ice-with-helper-key-template branch November 12, 2024 15:59
@github-actions github-actions bot added this to the 1.75.x - Nightly milestone Nov 12, 2024
@brave-builds
Copy link
Collaborator

Released in v1.75.13

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.

6 participants