Commit Graph

6966 Commits

Author SHA1 Message Date
Amanieu d'Antras
e1c3f5e017 Add clobber-only register classes for asm!
These are needed to properly express a function call ABI using a clobber
list, even though we don't support passing actual values into/out of
these registers.
2021-07-10 17:29:00 +02:00
Nixon Enraght-Moony
293fa8f39a Fix typo: satic -> static 2021-07-10 16:20:53 +01:00
Fabian Wolff
b0888614f1 Implement Mutation- and BorrowOfLayoutConstrainedField in thir-unsafeck 2021-07-10 16:33:00 +02:00
bors
3982eb35ca Auto merge of #81360 - Aaron1011:trait-caller-loc, r=nagisa
Support forwarding caller location through trait object method call

Since PR #69251, the `#[track_caller]` attribute has been supported on
traits. However, it only has an effect on direct (monomorphized) method
calls. Calling a `#[track_caller]` method on a trait object will *not*
propagate caller location information - instead, `Location::caller()` will
return the location of the method definition.

This PR forwards caller location information when `#[track_caller]` is
present on the method definition in the trait. This is possible because
`#[track_caller]` in this position is 'inherited' by any impls of that
trait, so all implementations will have the same ABI.

This PR does *not* change the behavior in the case where
`#[track_caller]` is present only on the impl of a trait.
While all implementations of the method might have an explicit
`#[track_caller]`, we cannot know this at codegen time, since other
crates may have impls of the trait. Therefore, we keep the current
behavior of not forwarding the caller location, ensuring that all
implementations of the trait will have the correct ABI.

See the modified test for examples of how this works
2021-07-10 14:11:39 +00:00
Deadbeef
7c9e214bc3 Update DepNode's size 2021-07-10 21:46:31 +08:00
Tomasz Miąsko
f612ba1f84 Use existing declaration of rust_eh_personality
If crate declares `rust_eh_personality`, re-use existing declaration
as otherwise attempts to set function attributes that follow the
declaration will fail (unless it happens to have exactly the same
type signature as the one predefined in the compiler).
2021-07-10 15:43:05 +02:00
Tomasz Miąsko
ae33a9714e Set personality with LLVMSetPersonalityFn 2021-07-10 15:43:05 +02:00
Deadbeef
88b29f5fb2 Test for misusing attribute 2021-07-10 20:54:50 +08:00
Deadbeef
a79e08ca2a Update tests 2021-07-10 20:54:50 +08:00
Deadbeef
5e695bbba1 Update CTFE to allow fns marked with the attr 2021-07-10 20:54:50 +08:00
Deadbeef
554fad7bda Permit calls to default const fns of impl const 2021-07-10 20:54:50 +08:00
Deadbeef
27e863b3df functions marked with attr are not const 2021-07-10 20:54:49 +08:00
Deadbeef
89d190f090 Add impl_constness query 2021-07-10 20:54:49 +08:00
Deadbeef
032cbe4cce Check if the attribute is applied correctly 2021-07-10 20:54:48 +08:00
Deadbeef
56d79adf3b Skip check for calling functions in same trait 2021-07-10 20:54:48 +08:00
Deadbeef
d8d4cc3b98 Treat trait fns marked with the attr as const 2021-07-10 20:54:48 +08:00
Deadbeef
3660a4e972 Applied suggestions 2021-07-10 20:54:47 +08:00
Deadbeef
2db927d8d8 Add #[default_method_body_is_const] 2021-07-10 20:54:44 +08:00
Ralf Jung
5f0dd6db94 remove const_raw_ptr_to_usize_cast feature 2021-07-10 12:08:58 +02:00
bors
a84d1b21ae Auto merge of #86987 - lcnr:const-default-eval-bound, r=oli-obk
only check cg defaults wf once instantiated

the previous fixmes here didn't make too much sense as I didn't yet fully understand the code further below.
That code only runs if the predicates using our generic param default are fully concrete after substituting our default, which never happens if our default is generic.

r? `@oli-obk` `@BoxyUwU`
2021-07-10 06:01:04 +00:00
bors
8eae2eb1d3 Auto merge of #86968 - inquisitivecrystal:missing-docs-v2, r=oli-obk
Remove `missing_docs` lint on private 2.0 macros

798baebde1/compiler/rustc_lint/src/builtin.rs (L573-L584)

This code is the source of #57569. The problem is subtle, so let me point it out. This code makes the mistake of assuming that all of the macros in `krate.exported_macros` are exported.

...Yeah. For some historical reason, all `macro` macros are marked as exported, regardless of whether they actually are, which is dreadfully confusing. It would be more accurate to say that `exported_macros` currently contains only macros that have paths.

This PR renames `exported_macros` to `importable_macros`, since these macros can be imported with `use` while others cannot. It also fixes the code above to no longer lint on private `macro` macros, since the `missing_docs` lint should only appear on exported items.

Fixes #57569.
2021-07-10 03:32:42 +00:00
bors
8d9d4c87d6 Auto merge of #86419 - ricobbe:raw-dylib-stdcall, r=petrochenkov
Add support for raw-dylib with stdcall, fastcall functions

Next stage of work for #58713: allow `extern "stdcall"` and `extern "fastcall"` with `#[link(kind = "raw-dylib")]`.

I've deliberately omitted support for vectorcall, as that doesn't currently work, and I wanted to get this out for review.  (I haven't really investigated the vectorcall failure much yet, but at first (very cursory) glance it appears that the problem is elsewhere.)
2021-07-09 23:24:21 +00:00
Fabian Wolff
6f0fe9b91b Fix the ICE described in #83693 2021-07-09 23:05:41 +02:00
bors
240ff4c4a0 Auto merge of #85263 - Smittyvb:thir-unsafeck-union-field, r=oli-obk
Check for union field accesses in THIR unsafeck

see also #85259, #83129, https://github.com/rust-lang/project-thir-unsafeck/issues/7

r? `@LeSeulArtichaut`
2021-07-09 20:56:07 +00:00
Nikita Popov
2ce1addeba Don't access pointer element type for nontemporal store
Simply shift the bitcast from the store to the load, so that
we can use the destination type. I'm not sure the bitcast is
really necessary, but keeping it for now.
2021-07-09 22:15:05 +02:00
Nikita Popov
208173f8e9 Fix project_deref() implementation
I'm not really sure what is wrong here, but I was getting load
type mismatches in the debuginfo code (which is the only place
using this function).

Replacing the project_deref() implementation with a generic
load_operand + deref did the trick.
2021-07-09 22:14:44 +02:00
Nikita Popov
4560efe46c Pass type when creating load
This makes load generation compatible with opaque pointers.

The generation of nontemporal copies still accesses the pointer
element type, as fixing this requires more movement.
2021-07-09 22:14:44 +02:00
Fabian Wolff
a7bfd35966 Enhance well-formedness checks for #[repr(...)] attributes 2021-07-09 22:03:48 +02:00
Nikita Popov
33e9a6b565 Pass type when creating atomic load
Instead of determining it from the pointer type, explicitly pass
the type to load.
2021-07-09 22:00:19 +02:00
Smitty
b86ed4a425 panic when trying to destructure union as enum 2021-07-09 15:22:12 -04:00
Aman Arora
5055569008 Apply suggestions from code review
Co-authored-by: Niko Matsakis <niko@alum.mit.edu>
2021-07-09 15:12:24 -04:00
Richard Cobbe
a867dd4c7e Add support for raw-dylib with stdcall, fastcall functions on i686-pc-windows-msvc. 2021-07-09 12:04:54 -07:00
Smitty
74d0d74dae Check for union field accesses in THIR unsafeck 2021-07-09 13:51:28 -04:00
Roxane
08c616741c Ensure deterministic ordering for diagnostics 2021-07-09 13:32:30 -04:00
Paul Trojahn
5cf954f932 Revert the revert of renaming traits::VTable to ImplSource
As #72114 and #73055 were merged so closely together I think this
accidentally happened while rebasing
2021-07-09 18:26:28 +02:00
bors
619c27a539 Auto merge of #87003 - m-ou-se:rollup-x7mhv3v, r=m-ou-se
Rollup of 5 pull requests

Successful merges:

 - #86855 (Fix comments about unique borrows)
 - #86881 (Inline implementation of lookup_line)
 - #86937 (Change linked tracking issue for more_qualified_paths)
 - #86994 (Update the comment on `lower_expr_try`)
 - #87000 (Use #[track_caller] in const panic diagnostics.)

Failed merges:

r? `@ghost`
`@rustbot` modify labels: rollup
2021-07-09 15:34:16 +00:00
Mara Bos
2152c145d3 Rollup merge of #87000 - m-ou-se:const-panic-track-caller, r=oli-obk
Use #[track_caller] in const panic diagnostics.

This change stops const panic diagnostics from reporting inside #[track_caller] functions by skipping over them.
2021-07-09 16:20:36 +02:00
Mara Bos
98f35589f7 Rollup merge of #86994 - scottmcm:fix_expr_try_comment, r=petrochenkov
Update the comment on `lower_expr_try`

I'd updated the ones inside the method, but not its doc comment.
2021-07-09 16:20:35 +02:00
Mara Bos
07b9dae6a2 Rollup merge of #86937 - rylev:tracking-more-qualified-paths, r=nagisa
Change linked tracking issue for more_qualified_paths

This updates the linked tracking issue for the `more_qualified_paths` feature from the implementation PR #80080 to an actual tracking issue #86935.
2021-07-09 16:20:33 +02:00
Mara Bos
ad10107600 Rollup merge of #86881 - tmiasko:lookup-line, r=nagisa
Inline implementation of lookup_line

to avoid unnecessary conversions from `Option<usize>` to `isize` and back.
2021-07-09 16:20:32 +02:00
Mara Bos
e920ef8785 Rollup merge of #86855 - LeSeulArtichaut:patch-1, r=davidtwco
Fix comments about unique borrows
2021-07-09 16:20:32 +02:00
Roxane
8cbeaf7382 Address comments 2021-07-09 10:18:55 -04:00
Cameron Steffen
d6b0d0bf97 Fix default_hash_types to use resolved path 2021-07-09 09:10:45 -05:00
Roxane
ca44372957 Handle multi diagnostics 2021-07-09 10:00:21 -04:00
Roxane
59f634bc2d Update comments 2021-07-09 10:00:21 -04:00
Roxane
81b062ae88 Fix wording 2021-07-09 10:00:21 -04:00
Roxane
36eb5442bd Add note clarifying why a closure no longer implements a trait 2021-07-09 10:00:21 -04:00
Roxane
2900c1a5e8 Add note pointing to where a closure and it's captured variables are dropped 2021-07-09 10:00:21 -04:00
Roxane
0e8e89daa6 Update error message 2021-07-09 10:00:20 -04:00
Roxane
0b7ff9660f Add note on why the variable is not fully captured 2021-07-09 10:00:20 -04:00