Commit graph

45588 commits

Author SHA1 Message Date
Matthias Krüger
e6eaa2fe69
Rollup merge of #103930 - fee1-dead-contrib:mv-from-root, r=jyn514
Move some tests from `src/test/ui` to more reasonable places
2022-11-04 06:40:33 +01:00
Matthias Krüger
6e582cadc3
Rollup merge of #103892 - compiler-errors:afit-rustdoc, r=GuillaumeGomez
Properly render asyncness for trait fns without default body

We weren't properly desugaring async fns in traits unless they had default bodies (in which case rustdoc treats them much like they came from an impl).

cc ```@yoshuawuyts``` should help with https://rust-lang.zulipchat.com/#narrow/stream/330606-wg-async.2Fasync-fn-in-trait-impl/topic/type.20inside.20.60async.20fn.60.20body.20must.20be.20known.20in.20this.20context/near/306894869
2022-11-04 06:40:31 +01:00
Nicholas Nethercote
7dbf2c0ed8 Make non-ASCII errors more consistent.
There are three kinds of "byte" literals: byte literals, byte string
literals, and raw byte string literals. None are allowed to have
non-ASCII chars in them.

Two `EscapeError` variants exist for when that constraint is violated.
- `NonAsciiCharInByte`: used for byte literals and byte string literals.
- `NonAsciiCharInByteString`: used for raw byte string literals.

As a result, the messages for raw byte string literals use different
wording, without good reason. Also, byte string literals are incorrectly
described as "byte constants" in some error messages.

This commit eliminates `NonAsciiCharInByteString` so the three cases are
handled similarly, and described correctly. The `mode` is enough to
distinguish them.

Note: Some existing error messages mention "byte constants" and some
mention "byte literals". I went with the latter here, because it's a
more correct name, as used by the Reference.
2022-11-04 14:23:40 +11:00
Gary Guo
1013ee8df5 Fix ICE when negative impl is collected during eager mono 2022-11-04 03:08:28 +00:00
yukang
1e25882944 fix #102806, suggest use .. to fill in the rest of the fields of Struct 2022-11-04 10:35:36 +08:00
Michael Howell
f097940da8 rustdoc: clean up hardcoded CSS border color on search results
Hardcoded colors in rustdoc.css should usually be avoided.
2022-11-03 12:29:17 -07:00
Deadbeef
35b16d01ce Move some tests from src/test/ui to more reasonable places 2022-11-03 16:26:43 +00:00
Michael Goulet
caa701e3c1 Elaborate supertrait obligations when deducing closure signature 2022-11-03 15:52:38 +00:00
Wesley Wiser
296489c892 Fix Access Violation when using lld & ThinLTO on windows-msvc
Users report an AV at runtime of the compiled binary when using lld and
ThinLTO on windows-msvc. The AV occurs when accessing a static value
which is defined in one crate but used in another. Based on the
disassembly of the cross-crate use, it appears that the use is not
correctly linked with the definition and is instead assigned a garbage
pointer value.

If we look at the symbol tables for each crates' obj file, we can see
what is happening:

*lib.obj*:

```
COFF SYMBOL TABLE
...
00E 00000000 SECT2  notype       External     | _ZN10reproducer7memrchr2FN17h612b61ca0e168901E
...
```

*bin.obj*:

```
COFF SYMBOL TABLE
...
010 00000000 UNDEF  notype       External     | __imp__ZN10reproducer7memrchr2FN17h612b61ca0e168901E
...
```

The use of the symbol has the "import" style symbol name but the
declaration doesn't generate any symbol with the same name. As a result,
linking the files generates a warning from lld:

> rust-lld: warning: bin.obj: locally defined symbol imported: reproducer::memrchr::FN::h612b61ca0e168901 (defined in lib.obj) [LNK4217]

and the symbol reference remains undefined at runtime leading to the AV.

To fix this, we just need to detect that we are performing ThinLTO (and
thus, static linking) and omit the `dllimport` attribute on the extern
item in LLVM IR.
2022-11-03 11:17:42 -04:00
Wesley Wiser
cf6efe8137 Add test case 2022-11-03 11:17:42 -04:00
Deadbeef
3aef6c6a54 roll another resolution logic in rustdoc 2022-11-03 15:09:02 +00:00
Deadbeef
30b6fe37a6 Correctly resolve Inherent Associated Types 2022-11-03 15:09:02 +00:00
Pietro Albini
5ed753cb0d
move compiletest's own ui tests into a subdirectory 2022-11-03 11:49:33 +01:00
Pietro Albini
1adf83b128
check for pattern in compiletest-compile-flags-last 2022-11-03 11:47:05 +01:00
bors
160b194295 Auto merge of #103904 - JakobDegen:mir-opt-dash, r=oli-obk
Ban dashes in miropt test file names

Dashes in miropt test file names are annoying - specifically, they cause the test files to not be sorted next to their outputs, which makes it very difficult to tell what goes with what. This PR changes all files to use underscores and adds a blessable tidy check that enforces this.

r? `@jyn514`

This PR is obviously going to bitrot very quickly. Because of this, I'm going to wait at least 48 hours and until review comes back to allow people from `@rust-lang/wg-mir-opt` or elsewhere to lodge complaints if there are any. If not, I'll rebase the branch on Friday afternoon PST and ask that it be `r+`'d with `p=1` at that time.
2022-11-03 09:24:28 +00:00
Amanieu d'Antras
f5e0b760d0 Stabilize default_alloc_error_handler
Closes #66741
2022-11-03 07:12:58 +00:00
Jakob Degen
0bd4f76944 Ban dashes in miropt test file names 2022-11-02 15:54:46 -07:00
Matthias Krüger
88f9f49b47
Rollup merge of #103886 - GuillaumeGomez:local-reexport-doc, r=notriddle
rustdoc: Fix merge of attributes for reexports of local items

Fixes https://github.com/rust-lang/rust/issues/84619.

The problem was that we didn't merge attributes between the the reexport and the item.

r? `@notriddle`
2022-11-02 22:06:28 +01:00
Matthias Krüger
5784a038fb
Rollup merge of #103870 - TaKO8Ki:fix-103790, r=fee1-dead
Fix `inferred_kind` ICE

Fixes #103790
2022-11-02 22:06:27 +01:00
Matthias Krüger
214d6b6836
Rollup merge of #99801 - Neo-Zhixing:fix/generic_const_exprs_parent_opaque_predicates, r=oli-obk
fix(generic_const_exprs): Fix predicate inheritance for children of opaque types

Fixes #99705

We currently have a special case to perform predicate inheritance when the const item is in the generics. I think we're also going to need this for opaque return types. When evaluating the predicates applied to the associated item, it'll inherit from its parent, the opaque type, which will never have predicates applied. This PR bypass the opaque typed parent and inherit predicates directly from the function itself.
2022-11-02 22:06:26 +01:00
Amanieu d'Antras
03e4c76dcf asm: Work around LLVM bug on AArch64
Upstream issue: https://github.com/llvm/llvm-project/issues/58384

LLVM gets confused if we assign a 32-bit value to a 64-bit register, so
pass the 32-bit register name to LLVM in that case.
2022-11-02 19:52:49 +00:00
Michael Goulet
59be515128 Properly render asyncness for traits without default body 2022-11-02 17:33:25 +00:00
Dylan DPC
bbd3a10663
Rollup merge of #103774 - compiler-errors:dyn-trait-in-type-name, r=eholk
Format `dyn Trait` better in `type_name` intrinsic

Noticed this in #103764 (though not related to that PR at all!)

```rust
trait Foo {
    type Bar;
}

fn main() {
    println!(
        "`dyn Fn(i32, i32) -> i32` => `{}`",
        std::any::type_name::<dyn Fn(i32, i32) -> i32>()
    );
    println!(
        "`dyn Foo<Bar = i32> + Send + Sync` => `{}`",
        std::any::type_name::<dyn Foo<Bar = i32> + Send + Sync>()
    );
}
```

```
`dyn Fn(i32, i32) -> i32` => `dyn core::ops::function::Fn<(i32, i32)>+Output = i32`
`dyn Foo<Bar = i32> + Send + Sync` => `dyn playground::Foo+Bar = i32+core::marker::Sync+core::marker::Send`
```

Just reuse `pretty_print_dyn_existential` which already makes an attempt to make its output stable.
2022-11-02 22:32:03 +05:30
Michael Goulet
74fec9b95a Remove has_errors from FnCtxt 2022-11-02 16:52:07 +00:00
Guillaume Gomez
c983bb162c Add regression test for doc of reexport of local items 2022-11-02 17:36:35 +01:00
bors
822f8c22f5 Auto merge of #103649 - petrochenkov:docnotrait, r=GuillaumeGomez
rustdoc: Do not add external traits to the crate in `register_res`

It's not clear why it was done, and apparently it's no longer necessary now.
Such additions are unpredictable for early doc link resolution and would force us to collect all doc links from all external traits.

Fixes https://github.com/rust-lang/rust/issues/103463
2022-11-02 07:47:10 +00:00
Takayuki Maeda
b96ad1c096 return const_error when ty has errors 2022-11-02 14:47:48 +09:00
Manish Goregaokar
c2affd5049
Rollup merge of #103839 - Nilstrieb:print-list, r=compiler-errors
Print valid `--print` requests if request is invalid

When someone makes a typo, it can be useful to see the valid options. This is also useful if someone wants to find out about all the options.
2022-11-01 20:00:40 -04:00
Manish Goregaokar
617f246e21
Rollup merge of #103837 - GuillaumeGomez:migrate-sidebar-links-color-gui-test, r=notriddle
Migrate sidebar-links-color GUI test to functions

r? `@notriddle`
2022-11-01 20:00:40 -04:00
Manish Goregaokar
e2a6d283be
Rollup merge of #103781 - JakobDegen:mir-opt-tidy, r=jyn514
Detect unused files in `src/test/mir-opt` and error on them in tidy.

Closes #97564 .

Determining which files are generated by a given mir opt test is somewhat difficult. Because of this, we extract the logic for doing it out into a common crate that both compiletest and tidy can depend on. This avoids making compiletest a dependency of tidy which would negatively impact compile times for tidy.

Testing for this is that it catches 5 files that violated this lint (and removes them).
2022-11-01 20:00:39 -04:00
Manish Goregaokar
69e705564d
Rollup merge of #103575 - Xiretza:suggestions-style-attr, r=davidtwco
Change #[suggestion_*] attributes to use style="..."

As discussed [on Zulip](https://rust-lang.zulipchat.com/#narrow/stream/336883-i18n/topic/.23100717.20tool_only_span_suggestion), this changes `#[(multipart_)suggestion_{short,verbose,hidden}(...)]` attributes to plain `#[(multipart_)suggestion(...)]` attributes with a `style = "{short,verbose,hidden}"` parameter.

It also adds a new style, `tool-only`, that corresponds to `tool_only_span_suggestion`/`tool_only_multipart_suggestion` and causes the suggestion to not be shown in human-readable output at all.

Best reviewed commit-by-commit, there's a bit of noise in there.

cc #100717 `@compiler-errors`
r? `@davidtwco`
2022-11-01 20:00:38 -04:00
Michael Goulet
72fbb54c5d Don't remap early-bound RPITIT regions that originate from impl 2022-11-01 23:25:24 +00:00
Zhixing Zhang
744fa610eb fix(generic_const_exprs): Fix predicate inheritance for children of opaque types 2022-11-01 15:41:16 -07:00
bors
11ebe6512b Auto merge of #103217 - mejrs:track, r=eholk
Track where diagnostics were created.

This implements the `-Ztrack-diagnostics` flag, which uses `#[track_caller]` to track where diagnostics are created. It is meant as a debugging tool much like `-Ztreat-err-as-bug`.

For example, the following code...

```rust
struct A;
struct B;

fn main(){
    let _: A = B;
}
```
...now emits the following error message:

```
error[E0308]: mismatched types
 --> src\main.rs:5:16
  |
5 |     let _: A = B;
  |            -   ^ expected struct `A`, found struct `B`
  |            |
  |            expected due to this
-Ztrack-diagnostics: created at compiler\rustc_infer\src\infer\error_reporting\mod.rs:2275:31
```
2022-11-01 21:09:45 +00:00
Michael Goulet
e24df2778f Format dyn Trait better in type_name intrinsic 2022-11-01 20:41:47 +00:00
Guillaume Gomez
a1dfefaded Remove unneeded "rustdoc-preferred-dark-theme" setting 2022-11-01 19:47:12 +01:00
Guillaume Gomez
2024f70379 Migrate sidebar-links-color GUI test to functions 2022-11-01 19:46:42 +01:00
Dylan DPC
2b0ead3126
Rollup merge of #103817 - notriddle:notriddle/attribute-css, r=GuillaumeGomez
rustdoc: rename syntax highlighting CSS class `attribute` to `attr`

Link classes use the abbreviation `attr` ...

2afca78a0b/src/librustdoc/html/static/css/rustdoc.css (L255-L259)

... so why does syntax highlighting use the full word?

2afca78a0b/src/librustdoc/html/static/css/rustdoc.css (L1095-L1097)
2022-11-01 22:01:37 +05:30
Dylan DPC
68afa32985
Rollup merge of #103760 - petrochenkov:macimp, r=cjgillot
resolve: Turn the binding from `#[macro_export]` into a proper `Import`

Continuation of https://github.com/rust-lang/rust/pull/91795.

```rust
#[macro_export]
macro_rules! m { /*...*/ }
```
is desugared to something like
```rust
macro_rules! m { /*...*/ } // Non-modularized macro_rules item

pub use m; // It's modularized reexport
```

This PR adjusts the internal representation to better match this model.
2022-11-01 22:01:36 +05:30
Dylan DPC
9f603feaee
Rollup merge of #84022 - Aaron1011:remove-derive-res-fallback, r=petrochenkov
Make PROC_MACRO_DERIVE_RESOLUTION_FALLBACK a hard error

r? `@ghost`
2022-11-01 22:01:35 +05:30
nils
b20d969516
Print valid --print requests if request is invalid
When someone makes a typo, it can be useful to see the valid options.
This is also useful if someone wants to find out about all the options.
2022-11-01 16:24:01 +01:00
Loïc BRANSTETT
66847ff56b Test that target feature mix up with homogeneous floats is sound
This is basically is ripoff of src/test/ui/simd/target-feature-mixup.rs
but for floats and without #[repr(simd)]
2022-11-01 14:22:13 +01:00
Dylan DPC
09f4f7c8f0
Rollup merge of #103759 - cjgillot:adt-collect, r=davidtwco
Use `adt_def` during type collection.

This removes a wrapper which is close to what `adt_def` does.
2022-11-01 14:12:27 +05:30
Dylan DPC
7dc3ace6a9
Rollup merge of #103706 - zbyrn:issue-101637-fix, r=estebank
Fix E0433 No Typo Suggestions

Fixes #48676
Fixes #87791
Fixes #96625
Fixes #95462
Fixes #101637
Follows up PR #72923

Several open issues refer to the problem that E0433 does not suggest typos like other errors normally do. This fix augments the implementation of PR #72923.

**Background**
When the path of a function call, e.g. `Struct::foo()`, involves names that cannot be resolved, there are two errors that could be emitted by the compiler:
 - If `Struct` is not found, it is ``E0433: failed to resolve: use of undeclared type `Struct` ``.
 - If `foo` is not found in `Struct`, it is ``E0599: no function or associated item named `foo` found for struct `Struct` in the current scope``

When a name is used as a type, `e.g. fn foo() -> Struct`, and the name cannot be resolved, it is ``E0412: cannot find type `Struct` in this scope``.

Before #72923, `E0433` does not implement any suggestions, and the PR introduces suggestions for missing `use`s. When a resolution error occurs in the path of a function call, it tries to smart resolve just the type part of the path, e.g. `module::Struct` of a call to `module::Struct::foo()`. However, along with the suggestions, the smart-resolve function will report `E0412` since it only knows that it is a type that we cannot resolve instead of being a part of the path. So, the original implementation swap out `E0412` errors returned by the smart-resolve function with the real `E0433` error, but keeps the "missing `use`" suggestions to be reported to the programmer.

**Issue**
The current implementation only reports if there are "missing `use`" suggestions returned by the smart-resolve function; otherwise, it would fall back the normal reporting, which does not emit suggestions. But the smart-resolve function could also produce typo suggestions, which are omitted currently.

Also, it seems like that not all info has been swapped out when there are missing suggestions. The error message underlining the name in the snippet still says ``not found in this scope``, which is a `E0412` messages, if there are `use` suggestions, but says the normal `use of undeclared type` otherwise.

**Fixes**
This fix swaps out all fields in `Diagnostic` returned by the smart-resolve function except for `suggestions` with the current error, and merges the `suggestions` of the returned error and that of the current error together. If there are `use` suggestions, the error is saved to `use_injection` to be reported at the end; otherwise, the error is emitted immediately as `Resolver::report_error` does.

Some tests are updated to use the correct underlining error messages, and one additional test for typo suggestion is added to the test suite.

r? rust-lang/diagnostics
2022-11-01 14:12:26 +05:30
Dylan DPC
94241e7eaf
Rollup merge of #103584 - ouz-a:issue-102303, r=oli-obk
Remove bounds check when array is indexed by enum

As the title says, this reverts the behavior introduced with 1.64.

Fixes #102303

r? `@oli-obk`
2022-11-01 14:12:25 +05:30
Dylan DPC
43634675f6
Rollup merge of #103061 - Amanieu:rewrite_alloc_error_handler, r=bjorn3
Rewrite implementation of `#[alloc_error_handler]`

The new implementation doesn't use weak lang items and instead changes `#[alloc_error_handler]` to an attribute macro just like `#[global_allocator]`.

The attribute will generate the `__rg_oom` function which is called by the compiler-generated `__rust_alloc_error_handler`. If no `__rg_oom` function is defined in any crate then the compiler shim will call `__rdl_oom` in the alloc crate which will simply panic.

This also fixes link errors with `-C link-dead-code` with `default_alloc_error_handler`: `__rg_oom` was previously defined in the alloc crate and would attempt to reference the `oom` lang item, even if it didn't exist. This worked as long as `__rg_oom` was excluded from linking since it was not called.

This is a prerequisite for the stabilization of `default_alloc_error_handler` (#102318).
2022-11-01 14:12:25 +05:30
yukang
749afe57c3 fix #103751: Fix capacity overflow issue during transmutability check 2022-11-01 15:46:58 +08:00
Jakob Degen
17395b45b1 Detect unused files in src/test/mir-opt and error on them in tidy. 2022-10-31 21:45:41 -07:00
Yuki Okushi
fca9093ea3
Rollup merge of #103799 - GuillaumeGomez:search-index-tuple-struct-field, r=notriddle
Remove generation of tuple struct fields in the search index

This comes from [this discussion](https://github.com/rust-lang/rust/pull/103710) as they're not very useful.

r? `@notriddle`
2022-11-01 12:03:44 +09:00
Yuki Okushi
2c7f1374ec
Rollup merge of #103793 - notriddle:notriddle/rustdoc-toggle-in-impl-items, r=GuillaumeGomez
rustdoc: add margins to all impl-item toggles, not just methods

Fixes #103782

## Before

![image](https://user-images.githubusercontent.com/1593513/198943087-8cab8b25-2092-49d6-89b4-caa2989dedf0.png)

## After

![image](https://user-images.githubusercontent.com/1593513/198943111-bc08c2d6-f058-4362-b999-0caf09eb93bf.png)
2022-11-01 12:03:43 +09:00