Commit graph

16 commits

Author SHA1 Message Date
Peter Collingbourne
43f868b1c3 Move linkage type check to HIR analysis and fix semantics issues.
This ensures that the error is printed even for unused variables,
as well as unifying the handling between the LLVM and GCC backends.

This also fixes unusual behavior around exported Rust-defined variables
with linkage attributes. With the previous behavior, it appears to be
impossible to define such a variable such that it can actually be imported
and used by another crate. This is because on the importing side, the
variable is required to be a pointer, but on the exporting side, the
type checker rejects static variables of pointer type because they do
not implement `Sync`. Even if it were possible to import such a type, it
appears that code generation on the importing side would add an unexpected
additional level of pointer indirection, which would break type safety.

This highlighted that the semantics of linkage on Rust-defined variables
is different to linkage on foreign items. As such, we now model the
difference with two different codegen attributes: linkage for Rust-defined
variables, and import_linkage for foreign items.

This change gives semantics to the test
src/test/ui/linkage-attr/auxiliary/def_illtyped_external.rs which was
previously expected to fail to compile. Therefore, convert it into a
test that is expected to successfully compile.

The update to the GCC backend is speculative and untested.
2023-02-28 21:51:36 -05:00
bjorn3
d1eb38f5b5 Rewrite LLVM's archive writer in Rust
This allows it to be used by other codegen backends
2023-02-28 19:24:11 -05:00
Nilstrieb
dbe3df3d84 Migrate all diagnostics 2023-02-28 19:18:41 -05:00
Ellis Hoag
5c30c25f07 print <signal> when ranlib failed without an exit code 2023-02-28 19:13:19 -05:00
Ellis Hoag
9c67dcfe42 lint and remove unused diagnostic 2023-02-28 19:13:19 -05:00
Ellis Hoag
925b11ece0 fix lifetime error 2023-02-28 19:13:19 -05:00
Ellis Hoag
9bbb49150a rebase and update trait names 2023-02-28 19:13:19 -05:00
Ellis Hoag
ef3aaa1f21 Add monomorphization errors 2023-02-28 19:13:18 -05:00
Ellis Hoag
f21041d7c3 lint type 2023-02-28 19:07:24 -05:00
Ellis Hoag
4718beead6 Add wrapper type for ExitCode for use in RanlibFailure 2023-02-28 19:07:24 -05:00
Ellis Hoag
c4149da9fd remove IntoDiagnosticArg impl for Option 2023-02-28 19:07:24 -05:00
Ellis Hoag
1b5dd4bf5e Add LayoutSizeOverflow 2023-02-28 19:07:24 -05:00
Ellis Hoag
4a861c140a Add LTONotSupported 2023-02-28 19:07:24 -05:00
Ellis Hoag
2592befa7c Add UnwindingInlineAsm 2023-02-28 19:07:24 -05:00
Ellis Hoag
5a9ec83a17 Add LinkageConstOrMutType 2023-02-28 19:07:24 -05:00
Ellis Hoag
c503d978dc Add RanlibFailure 2023-02-28 19:07:24 -05:00