Commit graph

7961 commits

Author SHA1 Message Date
Bastian Kauschke
88584d5800 change error for LayoutErr::SizeOverflow 2020-11-18 11:38:30 +01:00
Vishnunarayan K I
5029a19313 check mir exists before validation; fix tests 2020-11-12 21:08:18 +05:30
Andreas Molzer
ea206f2c5a Add compile fail test for issue 27675 2020-10-08 08:18:59 +02:00
Dylan MacKenzie
bed7b29510 Update compile-fail test 2020-09-29 19:45:06 -07:00
Dylan MacKenzie
9be3d106c3 Bless compile-fail 2020-09-22 10:05:58 -07:00
Oliver Scherer
ef04e68462 Update compile-fail tests 2020-09-19 10:36:37 +02:00
Dan Aloni
07e7823c01 pretty: trim paths of unique symbols
If a symbol name can only be imported from one place for a type, and
as long as it was not glob-imported anywhere in the current crate, we
can trim its printed path and print only the name.

This has wide implications on error messages with types, for example,
shortening `std::vec::Vec` to just `Vec`, as long as there is no other
`Vec` importable anywhere.

This adds a new '-Z trim-diagnostic-paths=false' option to control this
feature.

On the good path, with no diagnosis printed, we should try to avoid
issuing this query, so we need to prevent trimmed_def_paths query on
several cases.

This change also relies on a previous commit that differentiates
between `Debug` and `Display` on various rustc types, where the latter
is trimmed and presented to the user and the former is not.
2020-09-02 22:26:37 +03:00
Amanieu d'Antras
239f833ed1 Abort when catch_unwind catches a foreign exception 2020-08-27 21:08:30 +01:00
Vadim Petrochenkov
0a4217d09f rustc_metadata: Make crate loading fully speculative 2020-07-18 14:06:04 +04:00
Eric Huss
9b6b400084 Remove some ignore-stage1 annotations. 2020-07-02 22:29:38 -07:00
Dylan MacKenzie
d84f0c8d32 Update tests 2020-06-28 10:08:12 -07:00
Manish Goregaokar
dac512e04a
Rollup merge of #72934 - christianpoveda:mut-borrows-in-consts, r=oli-obk
forbid mutable references in all constant contexts except for const-fns

PR to address #71212

cc: @ecstatic-morse
2020-06-19 19:42:51 -07:00
Christian Poveda
1f48465a01
update diagnostics for &mut in constants 2020-06-19 11:48:46 -05:00
Ralf Jung
991dfe7595 bless all 2020-06-16 11:56:54 +02:00
Sam Elliott
cda994633e Add Option to Force Unwind Tables
When panic != unwind, `nounwind` is added to all functions for a target.
This can cause issues when a panic happens with RUST_BACKTRACE=1, as
there needs to be a way to reconstruct the backtrace. There are three
possible sources of this information: forcing frame pointers (for which
an option exists already), debug info (for which an option exists), or
unwind tables.

Especially for embedded devices, forcing frame pointers can have code
size overheads (RISC-V sees ~10% overheads, ARM sees ~2-3% overheads).
In code, it can be the case that debug info is not kept, so it is useful
to provide this third option, unwind tables, that users can use to
reconstruct the call stack. Reconstructing this stack is harder than
with frame pointers, but it is still possible.

This commit adds a compiler option which allows a user to force the
addition of unwind tables. Unwind tables cannot be disabled on targets
that require them for correctness, or when using `-C panic=unwind`.
2020-05-04 12:08:35 +01:00
Dylan MacKenzie
0592976f7e Bless tests 2020-04-29 12:18:30 -07:00
Eduard-Mihai Burtescu
38d38349f3 typeck: workaround WF hole in to_const. 2020-04-14 19:31:31 +03:00
Amanieu d'Antras
1cc521ef9d Update tests to use llvm_asm! 2020-03-26 15:49:22 +00:00
Oliver Scherer
799b15ed96 Evaluate repeat expression lengths as late as possible 2020-03-23 13:14:36 +01:00
bors
be055d96c4 Auto merge of #67502 - Mark-Simulacrum:opt-catch, r=Mark-Simulacrum
Optimize catch_unwind to match C++ try/catch

This refactors the implementation of catching unwinds to allow LLVM to inline the "try" closure directly into the happy path, avoiding indirection. This means that the catch_unwind implementation is (after this PR) zero-cost unless a panic is thrown.

https://rust.godbolt.org/z/cZcUSB is an example of the current codegen in a simple case. Notably, the codegen is *exactly the same* if `-Cpanic=abort` is passed, which is clearly not great.

This PR, on the other hand, generates the following assembly:

```asm
# -Cpanic=unwind:
	push   rbx
	mov    ebx,0x2a
	call   QWORD PTR [rip+0x1c53c]        # <happy>
	mov    eax,ebx
	pop    rbx
	ret
	mov    rdi,rax
	call   QWORD PTR [rip+0x1c537]        # cleanup function call
	call   QWORD PTR [rip+0x1c539]        # <unfortunate>
	mov    ebx,0xd
	mov    eax,ebx
	pop    rbx
	ret

# -Cpanic=abort:
	push   rax
	call   QWORD PTR [rip+0x20a1]        # <happy>
	mov    eax,0x2a
	pop    rcx
	ret
```

Fixes #64224, and resolves #64222.
2020-03-13 22:43:06 +00:00
Amanieu d'Antras
f4f91f0b2f Remove eh_unwind_resume lang item 2020-03-05 17:36:50 +00:00
CAD97
b3777c952f Remove chalk integration 2020-03-02 18:11:53 -05:00
Ralf Jung
94047f18c2 remove no-longer-needed test 2020-02-15 19:40:33 +01:00
Ralf Jung
c4a6f84b80 fix compile-fail 2020-02-15 14:57:13 +01:00
varkor
8461fa5119 Diagnostics should not end with a full stop 2020-01-12 15:37:50 +00:00
Vadim Petrochenkov
642669c74d Update tests 2020-01-09 21:23:12 +03:00
Esteban Küber
621d7e959b Fix rebase and sort assoc type list for deterministic output 2019-12-25 11:12:56 -08:00
Esteban Küber
547abe0c52 Tweak errors for missing associated types and type parameters 2019-12-24 22:02:43 -08:00
bors
5c5c8eb864 Auto merge of #66927 - RalfJung:engines-dont-panic, r=oli-obk
Miri core engine: use throw_ub instead of throw_panic

See https://github.com/rust-lang/rust/issues/66902 for context: panicking is not really an "interpreter error", but just part of a normal Rust execution. This is a first step towards removing the `InterpError::Panic` variant: the core Miri engine does not use it any more.

ConstProp and ConstEval still use it, though. This will be addressed in future PRs.

From what I can tell, all the error messages this removes are actually duplicates.

r? @oli-obk @wesleywiser
2019-12-07 14:46:30 +00:00
Christian Poveda
416b439ffb Correct other tests related to const_mut_refs 2019-12-02 09:46:26 -05:00
Ralf Jung
15f159adde fix compile-fail tests 2019-12-01 13:38:49 +01:00
Dylan MacKenzie
a4ce2011cb A Downcast is now reached when const-checking a for loop
I believe this occurs because the old checker stopped processing basic
blocks after a `SwitchInt`.
2019-11-15 10:33:52 -08:00
Dylan MacKenzie
86734b13bb Bless less verbose error messages
The MIR const-checker errors for if/match/loop are now delay span bugs,
so nothing will be emitted unless the HIR checker misses something.
2019-11-13 10:44:14 -08:00
Dylan MacKenzie
3ce8ca45d6 Bless const tests with improved diagnostics 2019-11-13 10:44:14 -08:00
Esteban Küber
88e4e2a208 fix compile-fail test 2019-10-22 12:42:15 -07:00
Wesley Wiser
a2e3ed5c05 [const-prop] Handle MIR Rvalue::Aggregates 2019-10-18 06:29:57 -04:00
Thomas Lively
2bf59bea48 Upgrade Emscripten targets to use upstream LLVM backend
- Compatible with Emscripten 1.38.46-upstream or later upstream.
 - Refactors the Emscripten target spec to share code with other wasm
   targets.
 - Replaces the old incorrect wasm32 C call ABI with the correct one,
   preserving the old one as wasm32_bindgen_compat for wasm-bindgen
   compatibility.
 - Updates the varargs ABI used by Emscripten and deletes the old one.
 - Removes the obsolete wasm32-experimental-emscripten target.
 - Uses EMCC_CFLAGS on CI to avoid the timeout problems with #63649.
2019-10-16 17:06:48 -07:00
Tyler Mandry
d16b7f705b Revert "Auto merge of #63649 - tlively:emscripten-upstream-upgrade, r=alexcrichton"
This reverts commit 7870050796, reversing
changes made to 2e7244807a.
2019-10-05 21:38:45 -07:00
Thomas Lively
5b56c660c9 Fix ABI, run and fix more tests, re-enable CI for PRs 2019-10-04 00:47:21 -07:00
Alex Crichton
50c57d8c80 rustc: Fix mixing crates with different share_generics
This commit addresses #64319 by removing the `dylib` crate type from the
list of crate type that exports generic symbols. The bug in #64319
arises because a `dylib` crate type was trying to export a symbol in an
uptream crate but it miscalculated the symbol name of the uptream
symbol. This isn't really necessary, though, since `dylib` crates aren't
that heavily used, so we can just conservatively say that the `dylib`
crate type never exports generic symbols, forcibly removing them from
the exported symbol lists if were to otherwise find them.

The fix here happens in two places:

* First is in the `local_crate_exports_generics` method, indicating that
  it's now `false` for the `Dylib` crate type. Only rlibs actually
  export generics at this point.

* Next is when we load exported symbols from upstream crate. If, for our
  compilation session, the crate may be included from a dynamic library,
  then its generic symbols are removed. When the crate was linked into a
  dynamic library its symbols weren't exported, so we can't consider
  them a candidate to link against.

Overally this should avoid situations where we incorrectly calculate the
upstream symbol names in the face of differnet `share_generics` options,
ultimately...

Closes #64319
2019-09-23 12:29:51 -07:00
Oliver Scherer
0de9485038 Get rid of special const intrinsic query in favour of const_eval 2019-09-17 16:31:55 +02:00
Esteban Küber
613c0a8780 move error with diverging output to compile-fail 2019-08-06 10:28:09 -07:00
Eduard-Mihai Burtescu
baa9efb178 rustc_mir: follow FalseUnwind's real_target edge in qualify_consts. 2019-07-11 12:28:02 +03:00
Mazdak Farrokhzad
547735457f Make WhileTrue into an EarlyLintPass lint. 2019-07-06 06:43:58 +02:00
bors
3c805ce183 Auto merge of #60341 - mtak-:macos-tlv-workaround, r=alexcrichton
macos tlv workaround

fixes: #60141

Includes:
* remove dead code: `requires_move_before_drop`. This hasn't been needed for a while now (oops I should have removed it in #57655)
* redox had a copy of `fast::Key` (not sure why?). That has been removed.
* Perform a `read_volatile` on OSX to reduce `tlv_get_addr` calls per `__getit` from (4-2 depending on context) to 1.

`tlv_get_addr` is relatively expensive (~1.5ns on my machine).

Previously, in contexts where `__getit` was inlined, 4 calls to `tlv_get_addr` were performed per lookup. For some reason when `__getit` is not inlined this is reduced to 2x - and performance improves to match.

After this PR, I have only ever seen 1x call to `tlv_get_addr` per `__getit`, and macos now benefits from situations where `__getit` is inlined.

I'm not sure if the `read_volatile(&&__KEY)` trick is working around an LLVM bug, or a rustc bug, or neither.

r? @alexcrichton
2019-06-20 02:36:49 +00:00
tyler
b148c25cac fix compile-fail test for targets without thread locals 2019-06-19 11:50:23 -07:00
Matthew Jasper
da22793a35 Create fewer basic blocks in match MIR lowering 2019-06-13 21:05:21 +01:00
memoryruins
fd347a8735 Update the rest of the test suites to use dyn 2019-05-29 00:57:42 -04:00
tyler
f5e56eeff6 clang tidy fixes 2019-05-15 07:30:33 -07:00
tyler
516c03d510 fix another test 2019-05-15 07:30:33 -07:00