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

Lint on combining #[no_mangle] and #[export_name] #131558

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

sassman
Copy link

@sassman sassman commented Oct 11, 2024

This is my very first contribution to the compiler, even though I read the chapter about lints I'm not very certain that this new lint is done right as a builtin lint PR is right. I appreciate any guidance on how to improve the code.

Old proposed new lint

The mixed_export_name_and_no_mangle lint detects usage of both #[export_name] and #[no_mangle] on the same item which results on #[no_mangle] being ignored.

warn-by-default

Example

#[no_mangle] // ignored
#[export_name = "foo"] // takes precedences
pub fn bar() {}

Explanation

The compiler will not respect the #[no_mangle] attribute when generating the symbol name for the function, as the #[export_name] attribute takes precedence. This can lead to confusion and is unnecessary.

Fixes #47446

@rustbot
Copy link
Collaborator

rustbot commented Oct 11, 2024

Thanks for the pull request, and welcome! The Rust team is excited to review your changes, and you should hear from @TaKO8Ki (or someone else) some time within the next two weeks.

Please see the contribution instructions for more information. Namely, in order to ensure the minimum review times lag, PR authors and assigned reviewers should ensure that the review label (S-waiting-on-review and S-waiting-on-author) stays updated, invoking these commands when appropriate:

  • @rustbot author: the review is finished, PR author should check the comments and take action accordingly
  • @rustbot review: the author is ready for a review, this PR will be queued again in the reviewer's queue

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Oct 11, 2024
@sassman sassman force-pushed the feat/warnin-for-no-mangle-together-with-export-name branch from f6d8242 to aa419ee Compare October 11, 2024 16:29
@rust-log-analyzer

This comment has been minimized.

@workingjubilee workingjubilee changed the title fix: rust-lang/rust#47446 Lint on combining #[no_mangle] and #[export_name] Oct 11, 2024
@workingjubilee
Copy link
Member

@Urgau Do you know why all these lints are prefixed by Builtin? Aren't all the lints in the compiler built-in by definition?

@Urgau
Copy link
Member

Urgau commented Oct 11, 2024

Do you know why all these lints are prefixed by Builtin? Aren't all the lints in the compiler built-in by definition?

It's probably a prefix for the lints defined inside compiler/rustc_lint/src/builtin.rs.

Lints outside of that file don't seems to have it at least.

@rust-log-analyzer

This comment has been minimized.

@workingjubilee
Copy link
Member

workingjubilee commented Oct 11, 2024

Ah, I see.

Mm, great, in tests/ui/asm/naked-functions.rs we find this gem:

#[export_name = "exported_function_name"]
#[link_section = ".custom_section"]
#[no_mangle]
#[naked]
pub unsafe extern "C" fn compatible_ffi_attributes_1() {
    naked_asm!("", options(raw));
}

@sassman Thank you for PRing this lint! It looks like you will have to fix a few cases of it in our test suite as well, and --bless. Feel free to apply either, as you prefer, to relevant cases like that "naked" function.

@sassman sassman force-pushed the feat/warnin-for-no-mangle-together-with-export-name branch from 8c2d9ca to a7989cb Compare October 13, 2024 12:24
@rust-log-analyzer

This comment has been minimized.

@sassman sassman force-pushed the feat/warnin-for-no-mangle-together-with-export-name branch from ff86482 to 1f849df Compare October 13, 2024 22:34
@rust-log-analyzer

This comment has been minimized.

@rust-log-analyzer

This comment has been minimized.

@sassman sassman marked this pull request as ready for review October 14, 2024 09:08
@sassman
Copy link
Author

sassman commented Oct 14, 2024

Now the tests run all green and I have cleaned up the other test that used both no_mangle and export_name and simply removed the no_mangle in tests/ui/asm/naked-functions.rs.

Please let me know if there is anything that I can do further.

@Urgau
Copy link
Member

Urgau commented Oct 14, 2024

I think this check is miss-placed, I think it should be with the others codegen attributes handling in the codegen_fn_attrs function in compiler/rustc_codegen_ssa/src/codegen_attrs.rs.

You can look at the check_link_name_xor_ordinal function for inspiration:

check_link_name_xor_ordinal(tcx, &codegen_fn_attrs, link_ordinal_span);

As well as TyCtxt::emit_node_span_lint for emitting the lint.
You will also need to move the lint definition into the rustc_lint_defs crate and import that crate in rustc_codegen_ssa.

@rustbot author

@Urgau Urgau assigned Urgau and unassigned TaKO8Ki Oct 14, 2024
@Urgau Urgau added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Oct 14, 2024
@sassman
Copy link
Author

sassman commented Oct 14, 2024

Thanks @Urgau for the guidance, I will refactor the code accordingly.
The provided example seems pretty helpful to figure things out.

@rust-log-analyzer

This comment has been minimized.

@sassman
Copy link
Author

sassman commented Oct 14, 2024

@Urgau I have refactored the code, but just to be sure I get things right, with this approach we won't have "named" lints that a user can allow or deny anymore or am I missing something?

In the previous commit the lint was tied to the LintDiagnostic struct, that is now not anymore present.

If I did got this right then I will adjust the introduced error output expectation to fix the build error:
https://github.com/rust-lang/rust/actions/runs/11332684748/job/31515339659?pr=131558#step:26:3779

compiler/rustc_lint_defs/src/builtin.rs Outdated Show resolved Hide resolved
tests/ui/attributes/mixed_export_name_and_no_mangle.rs Outdated Show resolved Hide resolved
compiler/rustc_codegen_ssa/src/codegen_attrs.rs Outdated Show resolved Hide resolved
compiler/rustc_codegen_ssa/src/codegen_attrs.rs Outdated Show resolved Hide resolved
tests/ui/attributes/mixed_export_name_and_no_mangle.rs Outdated Show resolved Hide resolved
tests/ui/attributes/mixed_export_name_and_no_mangle.rs Outdated Show resolved Hide resolved
compiler/rustc_lint_defs/src/builtin.rs Outdated Show resolved Hide resolved
compiler/rustc_codegen_ssa/messages.ftl Outdated Show resolved Hide resolved
compiler/rustc_lint_defs/src/builtin.rs Outdated Show resolved Hide resolved
compiler/rustc_codegen_ssa/src/codegen_attrs.rs Outdated Show resolved Hide resolved
compiler/rustc_codegen_ssa/src/codegen_attrs.rs Outdated Show resolved Hide resolved
compiler/rustc_codegen_ssa/src/codegen_attrs.rs Outdated Show resolved Hide resolved
@Urgau
Copy link
Member

Urgau commented Oct 15, 2024

Reminder, don't forget to use the rustbot review commands.

@rustbot rustbot added has-merge-commits PR has merge commits, merge with caution. S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Oct 29, 2024
@rustbot

This comment has been minimized.

@sassman sassman force-pushed the feat/warnin-for-no-mangle-together-with-export-name branch from 85ae010 to b996aac Compare October 29, 2024 13:35
@rustbot rustbot removed has-merge-commits PR has merge commits, merge with caution. S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. labels Oct 29, 2024
compiler/rustc_codegen_ssa/Cargo.toml Outdated Show resolved Hide resolved
compiler/rustc_codegen_ssa/Cargo.toml Outdated Show resolved Hide resolved
compiler/rustc_codegen_ssa/messages.ftl Outdated Show resolved Hide resolved
compiler/rustc_codegen_ssa/src/errors.rs Outdated Show resolved Hide resolved
@sassman sassman force-pushed the feat/warnin-for-no-mangle-together-with-export-name branch from b996aac to 1840a42 Compare October 29, 2024 19:35
@Urgau
Copy link
Member

Urgau commented Oct 29, 2024

@petrochenkov your concern about the unjustified new lint has been resolved by @sassman (the PR author) by issuing the unused_attributes lint instead as asked.

The concern can (I think) be marked as resolved.

As a procedural note, with the removal of the new lint, does the FCP still makes sense?
Feels a bit heavy, now that it's such a small addition.

@petrochenkov petrochenkov self-assigned this Oct 30, 2024
@petrochenkov petrochenkov added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Oct 30, 2024
@petrochenkov
Copy link
Contributor

@rfcbot resolve unjustified-new-lint

@petrochenkov petrochenkov removed their assignment Oct 30, 2024
@petrochenkov petrochenkov removed the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Oct 30, 2024
@sassman
Copy link
Author

sassman commented Nov 5, 2024

Is there any further thing I can do to support the process?

@bors
Copy link
Contributor

bors commented Nov 6, 2024

☔ The latest upstream changes (presumably #132664) made this pull request unmergeable. Please resolve the merge conflicts.

@bors bors added the S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. label Nov 6, 2024
@sassman sassman force-pushed the feat/warnin-for-no-mangle-together-with-export-name branch from 1840a42 to 3708c00 Compare November 15, 2024 14:23
- Add test for issue 47446
- Implement the new lint lint_builtin_mixed_export_name_and_no_mangle
- Add suggestion how to fix it
@sassman sassman force-pushed the feat/warnin-for-no-mangle-together-with-export-name branch from 3708c00 to 1696f53 Compare November 15, 2024 14:26
@jackh726
Copy link
Member

I agree this no longer needs an FCP. Maybe @davidtwco or another person on the FCP can weigh in to agree or dissent?

@sassman
Copy link
Author

sassman commented Nov 26, 2024

@Urgau is there anything that I can do to support on landing this PR?

@Urgau Urgau added the I-compiler-nominated Nominated for discussion during a compiler team meeting. label Nov 26, 2024
@estebank estebank added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author. S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Nov 26, 2024
@estebank
Copy link
Contributor

Checkboxes (hidden by Github UI) at #131558 (comment).

CC @Aaron1011, @jackh726, @oli-obk, @wesleywiser (consider checking your boxes if ok with the lint as is).

@rfcbot rfcbot added final-comment-period In the final comment period and will be merged soon unless new substantive objections are raised. and removed proposed-final-comment-period Proposed to merge/close by relevant subteam, see T-<team> label. Will enter FCP once signed off. labels Nov 27, 2024
@rfcbot
Copy link

rfcbot commented Nov 27, 2024

🔔 This is now entering its final comment period, as per the review above. 🔔

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
disposition-merge This issue / PR is in PFCP or FCP with a disposition to merge it. final-comment-period In the final comment period and will be merged soon unless new substantive objections are raised. I-compiler-nominated Nominated for discussion during a compiler team meeting. S-waiting-on-fcp Status: PR is in FCP and is awaiting for FCP to complete. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Using both no_mangle and export_name attributes should cause a warning