granite-rust/compiler
Peter Collingbourne 5873ebeef3 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.
2022-12-05 15:05:43 -08:00
..
rustc rustc: Use unix_sigpipe instead of rustc_driver::set_sigpipe_handler 2022-10-02 17:49:36 +02:00
rustc_abi Rollup merge of #105050 - WaffleLapkin:uselessrefign, r=jyn514 2022-12-03 17:37:42 +01:00
rustc_apfloat Add diagnostic translation lints to crates that don't emit them 2022-08-18 19:29:02 +01:00
rustc_arena rustc_arena: remove a couple of ref patterns 2022-11-22 18:49:29 +00:00
rustc_ast Rollup merge of #105142 - nbdd0121:inline_const, r=petrochenkov 2022-12-04 11:38:51 +01:00
rustc_ast_lowering Rollup merge of #104199 - SarthakSingh31:issue-97417-1, r=cjgillot 2022-12-03 17:37:41 +01:00
rustc_ast_passes Auto merge of #104861 - nnethercote:attr-cleanups, r=petrochenkov 2022-12-01 07:13:45 +00:00
rustc_ast_pretty Rollup merge of #105050 - WaffleLapkin:uselessrefign, r=jyn514 2022-12-03 17:37:42 +01:00
rustc_attr Rename NestedMetaItem::[Ll]iteral as NestedMetaItem::[Ll]it. 2022-11-28 15:18:53 +11:00
rustc_baked_icu_data Update crate documentation of rustc_baked_icu_data crate 2022-11-18 14:46:36 -08:00
rustc_borrowck Create format_args as late as possible 2022-12-01 08:49:51 +00:00
rustc_builtin_macros Rollup merge of #104614 - Nilstrieb:type-ascribe!, r=TaKO8Ki 2022-12-02 08:28:08 +01:00
rustc_codegen_cranelift Auto merge of #97485 - bjorn3:new_archive_writer, r=wesleywiser 2022-12-03 15:07:39 +00:00
rustc_codegen_gcc Move linkage type check to HIR analysis and fix semantics issues. 2022-12-05 15:05:43 -08:00
rustc_codegen_llvm Move linkage type check to HIR analysis and fix semantics issues. 2022-12-05 15:05:43 -08:00
rustc_codegen_ssa Auto merge of #104535 - mikebenfield:discr-fix, r=pnkfelix 2022-12-04 20:05:32 +00:00
rustc_const_eval Rollup merge of #105136 - RalfJung:deref-promotion-comment, r=oli-obk 2022-12-02 08:28:10 +01:00
rustc_data_structures Auto merge of #105218 - matthiaskrgr:rollup-8d3k08n, r=matthiaskrgr 2022-12-03 21:25:45 +00:00
rustc_driver Remove -Zno-interleave-lints. 2022-12-02 13:59:28 +11:00
rustc_error_codes Auto merge of #103491 - cjgillot:self-rpit, r=oli-obk 2022-11-21 12:17:03 +00:00
rustc_error_messages Move linkage type check to HIR analysis and fix semantics issues. 2022-12-05 15:05:43 -08:00
rustc_errors Rollup merge of #101975 - chenyukang:fix-101749, r=compiler-errors 2022-12-04 16:25:32 +01:00
rustc_expand Rollup merge of #104199 - SarthakSingh31:issue-97417-1, r=cjgillot 2022-12-03 17:37:41 +01:00
rustc_feature Stabilize native library modifier verbatim 2022-11-27 22:36:32 +03:00
rustc_fs_util Remove useless borrows and derefs 2022-12-01 17:34:43 +00:00
rustc_graphviz Remove useless borrows and derefs 2022-12-01 17:34:43 +00:00
rustc_hir Rollup merge of #105050 - WaffleLapkin:uselessrefign, r=jyn514 2022-12-03 17:37:42 +01:00
rustc_hir_analysis Move linkage type check to HIR analysis and fix semantics issues. 2022-12-05 15:05:43 -08:00
rustc_hir_pretty Rollup merge of #104199 - SarthakSingh31:issue-97417-1, r=cjgillot 2022-12-03 17:37:41 +01:00
rustc_hir_typeck Auto merge of #104920 - compiler-errors:avoid-infcx-build, r=jackh726 2022-12-05 02:51:06 +00:00
rustc_incremental Prefer doc comments over //-comments in compiler 2022-11-27 11:19:04 +00:00
rustc_index move things from rustc_target::abi to rustc_abi 2022-11-24 16:26:13 +03:30
rustc_infer Rollup merge of #105188 - compiler-errors:verbose-ty-err, r=TaKO8Ki 2022-12-03 12:51:30 +09:00
rustc_interface Remove -Zno-interleave-lints. 2022-12-02 13:59:28 +11:00
rustc_lexer update cpufeatures, swap difference to dissimilar 2022-11-29 19:59:37 +03:00
rustc_lint Auto merge of #104863 - nnethercote:reduce-lint-macros, r=cjgillot 2022-12-02 15:31:15 +00:00
rustc_lint_defs Make deref_into_dyn_supertrait lint the impl and not the usage 2022-11-23 15:40:27 +00:00
rustc_llvm Use LLVM for getting symbols from COFF bigobj files 2022-11-26 19:35:32 +00:00
rustc_log Use IsTerminal in rustc_log 2022-10-16 15:10:40 +01:00
rustc_macros Remove useless borrows and derefs 2022-12-01 17:34:43 +00:00
rustc_metadata Make inferred_outlives_crate return Clause 2022-11-29 12:01:58 -03:00
rustc_middle Move linkage type check to HIR analysis and fix semantics issues. 2022-12-05 15:05:43 -08:00
rustc_mir_build Auto merge of #105121 - oli-obk:simpler-cheaper-dump_mir, r=nnethercote 2022-12-04 05:47:10 +00:00
rustc_mir_dataflow Create format_args as late as possible 2022-12-01 08:49:51 +00:00
rustc_mir_transform Auto merge of #105121 - oli-obk:simpler-cheaper-dump_mir, r=nnethercote 2022-12-04 05:47:10 +00:00
rustc_monomorphize Prefer doc comments over //-comments in compiler 2022-11-27 11:19:04 +00:00
rustc_parse Rollup merge of #105141 - ohno418:fix-ice-on-invalid-var-decl-in-macro-call, r=compiler-errors 2022-12-04 16:25:32 +01:00
rustc_parse_format shift no characters when using raw string literals 2022-11-15 14:28:20 +09:00
rustc_passes rustc_hir: Change representation of import paths to support multiple resolutions 2022-12-01 18:51:05 +03:00
rustc_plugin_impl Migrate all diagnostics 2022-10-23 10:09:44 +02:00
rustc_privacy Auto merge of #99798 - JulianKnodt:ac1, r=BoxyUwU 2022-11-25 22:56:59 +00:00
rustc_query_impl Auto merge of #104940 - cjgillot:query-feed-simple, r=oli-obk 2022-11-30 17:20:14 +00:00
rustc_query_system Fill in def_span when creating def ids. 2022-12-01 10:33:28 +00:00
rustc_resolve Rollup merge of #101975 - chenyukang:fix-101749, r=compiler-errors 2022-12-04 16:25:32 +01:00
rustc_save_analysis rustc_hir: Change representation of import paths to support multiple resolutions 2022-12-01 18:51:05 +03:00
rustc_serialize rename {max=>largest}_max_leb128_len 2022-11-29 17:58:09 +00:00
rustc_session Rollup merge of #105050 - WaffleLapkin:uselessrefign, r=jyn514 2022-12-03 17:37:42 +01:00
rustc_smir Only keep one version of ImplicitSelfKind. 2022-09-13 19:18:23 +02:00
rustc_span Rollup merge of #105050 - WaffleLapkin:uselessrefign, r=jyn514 2022-12-03 17:37:42 +01:00
rustc_symbol_mangling Rollup merge of #104786 - WaffleLapkin:amp-mut-help, r=compiler-errors 2022-11-26 17:47:23 +01:00
rustc_target Rollup merge of #105123 - BlackHoleFox:fixing-the-macos-deployment, r=oli-obk 2022-12-04 11:38:51 +01:00
rustc_trait_selection Auto merge of #104920 - compiler-errors:avoid-infcx-build, r=jackh726 2022-12-05 02:51:06 +00:00
rustc_traits Make ObligationCtxt::normalize take cause by borrow 2022-11-28 17:35:40 +00:00
rustc_transmute Auto merge of #103831 - chenyukang:yukang/fix-103751-ice, r=nagisa 2022-11-05 13:48:30 +00:00
rustc_ty_utils Auto merge of #105012 - WaffleLapkin:into, r=oli-obk 2022-11-29 13:28:44 +00:00
rustc_type_ir Remove some unnecessary slicing 2022-11-21 20:38:55 +00:00