Commit graph

531 commits

Author SHA1 Message Date
Alex Crichton
618aeec51f Improve codegen for unchecked float casts on wasm
This commit improves codegen for unchecked casts on WebAssembly targets
to use the singluar `iNN.trunc_fMM_{u,s}` instructions. Previously rustc
would codegen a bare `fptosi` and `fptoui` for float casts but for
WebAssembly targets the codegen for these instructions is quite large.
This large codegen is due to the fact that LLVM can speculate these
instructions so the trapping behavior of WebAssembly needs to be
protected against in case they're speculated.

The change here is to update the codegen for the unchecked cast
intrinsics to have a wasm-specific case where they call the appropriate
LLVM intrinsic to generate the right wasm instruction. The intrinsic is
explicitly opting-in to undefined behavior so a trap here for
out-of-bounds inputs on wasm should be acceptable.

cc #73591
2020-07-22 15:05:05 -07:00
Manish Goregaokar
216ed3c4ab
Rollup merge of #74237 - lzutao:compiletest, r=Mark-Simulacrum
compiletest: Rewrite extract_*_version functions

This makes extract_lldb_version has the same version type like
extract_gdb_version.
2020-07-22 09:29:05 -07:00
Manish Goregaokar
8afb305e72
Rollup merge of #73893 - ajpaverd:cfguard-stabilize, r=nikomatsakis
Stabilize control-flow-guard codegen option

This is the stabilization PR discussed in #68793. It converts the `-Z control-flow-guard` debugging option into a codegen option (`-C control-flow-guard`), and changes the associated tests.
2020-07-22 09:29:03 -07:00
Dylan McKay
8ae5eadb22 [AVR] Correctly set the pointer address space when constructing pointers to functions
This patch extends the existing `type_i8p` method so that it requires an
explicit address space to be specified. Before this patch, the
`type_i8p` method implcitily assumed the default address space, which is
not a safe transformation on all targets, namely AVR.

The Rust compiler already has support for tracking the "instruction
address space" on a per-target basis. This patch extends the code
generation routines so that an address space must always be specified.

In my estimation, around 15% of the callers of `type_i8p` produced
invalid code on AVR due to the loss of address space prior to LLVM final
code generation. This would lead to unavoidable assertion errors
relating to invalid bitcasts.

With this patch, the address space is always either 1) explicitly set to
the instruction address space because the logic is dealing with functions
which must be placed there, or 2) explicitly set to the default address
space 0 because the logic can only operate on data space pointers and thus
we keep the existing semantics of assuming the default, "data" address space.
2020-07-22 05:16:22 +12:00
Lzu Tao
2bcefa8d81 Add missing : after *llvm-version 2020-07-19 11:03:04 +00:00
Tomasz Miąsko
b26ecd261b Test codegen of compare_exchange operations 2020-07-17 00:00:00 +00:00
Manish Goregaokar
5d5455bf3d
Rollup merge of #74171 - ehuss:44056-debug-macos, r=nikomatsakis
Fix 44056 test with debug on macos.

The test `codegen/issue-44056-macos-tls-align.rs` fails on macos if `debug-assertions` is enabled in `config.toml`.  It has the following error:

```
/Users/eric/Proj/rust/rust/src/test/codegen/issue-44056-macos-tls-align.rs:9:11: error: CHECK: expected string not found in input
// CHECK: @STATIC_VAR_1 = thread_local local_unnamed_addr global <{ [32 x i8] }> zeroinitializer, section "__DATA,__thread_bss", align 4
          ^
/Users/eric/Proj/rust/rust/build/x86_64-apple-darwin/test/codegen/issue-44056-macos-tls-align/issue-44056-macos-tls-align.ll:1:1: note: scanning from here
; ModuleID = 'issue_44056_macos_tls_align.3a1fbbbh-cgu.0'
^
/Users/eric/Proj/rust/rust/build/x86_64-apple-darwin/test/codegen/issue-44056-macos-tls-align/issue-44056-macos-tls-align.ll:9:1: note: possible intended match here
@STATIC_VAR_1 = thread_local global <{ [32 x i8] }> zeroinitializer, section "__DATA,__thread_bss", align 4
^
```

Comparing the output, the actual output is missing the text "`local_unnamed_addr`".

The fix here is to ignore `local_unnamed_addr`, as it doesn't seem relevant to the test.
2020-07-16 11:18:48 -07:00
Manish Goregaokar
622a8b83cb
Rollup merge of #73926 - joaopaulocarreiro:github_rust-6, r=nikomatsakis
Ignoring test case: [codegen] repr-transparent-aggregates-1.rs for aarch64

Ignoring test case: [codegen] repr-transparent-aggregates-1.rs for aarch64.

Copyright (c) 2020, Arm Limited.
2020-07-16 11:18:35 -07:00
Andrew Paverd
31c7aae113 Stabilize control-flow-guard codegen option 2020-07-14 15:27:42 +01:00
Manish Goregaokar
fa4ada1a86
Rollup merge of #74285 - wangtheo:issue-71669, r=lcnr
#71669: add ui, codegen tests for volatile + nearby int intrinsics

Added some tests for intrinsics. See https://github.com/rust-lang/rust/issues/71669.
2020-07-13 22:23:13 -07:00
Teddy_Wang
5ff7e1ad2c Added ui tests for volatile and nearby intrinsics 2020-07-13 00:47:09 -04:00
Teddy_Wang
9a3a31a153 Added tests for volatile and nearbyint intrinsics 2020-07-12 22:38:37 -04:00
Andrew Paverd
1ca7bfe481 Only add cfguard module flag on windows-msvc 2020-07-10 09:56:13 +01:00
Eric Huss
9f91a9540d Ignore changes when debug assertions are enabled. 2020-07-09 10:41:33 -07:00
Eric Huss
24abe1646e Disable 44056 test with debug on macos. 2020-07-08 18:08:25 -07:00
Christopher Serr
4c08451fc4 Add codegen tests 2020-07-02 09:32:09 +02:00
joacar01
582071c1eb Ignoring test case: [codegen] repr-transparent-aggregates-1.rs for aarch64
Copyright (c) 2020, Arm Limited.
2020-07-01 16:02:10 +01:00
Manish Goregaokar
45ec25e088
Rollup merge of #73525 - cuviper:llvm11, r=nikic
Prepare for LLVM 11

These are just the code changes needed to build with the current LLVM master (version 11).

r? @nikic
2020-06-27 22:29:54 -07:00
Manish Goregaokar
14dc103a85
Rollup merge of #72620 - tmiasko:linkage-name, r=eddyb
Omit DW_AT_linkage_name when it is the same as DW_AT_name

The DWARF standard suggests that it might be useful to include
`DW_AT_linkage_name` when it is *distinct* from the identifier name.

Fixes #46487.
Fixes #59422.
2020-06-26 00:38:56 -07:00
Josh Stone
49f6166ef7 Prepare for LLVM 11 2020-06-25 18:52:41 -07:00
Tyler Mandry
887fbd9d34 Split out async fn and generator test
This keeps FileCheck from tripping over unimportant differences in
codegen.
2020-06-24 15:08:59 -07:00
Tyler Mandry
fe3df646fe Give up on checking filename 2020-06-24 15:08:59 -07:00
Tyler Mandry
2d652d9d73 Add generator-debug test for MSVC
..which doesn't use variant types.
2020-06-24 15:08:59 -07:00
Tyler Mandry
477ecc51ca Generalize generator-debug test a bit
Don't be so reliant on particular line ordering (though FileCheck makes
this hard in general, IMO). Also disable for MSVC.
2020-06-24 14:53:30 -07:00
Tyler Mandry
367858aedc Add test for generator debuginfo 2020-06-24 14:53:29 -07:00
bors
7058471ade Auto merge of #73563 - Manishearth:rollup-oowgwwm, r=Manishearth
Rollup of 9 pull requests

Successful merges:

 - #72456 (Try to suggest dereferences on trait selection failed)
 - #72788 (Projection bound validation)
 - #72790 (core/time: Add Duration methods for zero)
 - #73227 (Allow multiple `asm!` options groups and report an error on duplicate options)
 - #73287 (lint: normalize projections using opaque types)
 - #73291 (Pre-compute `LocalDefId` <-> `HirId` mappings and remove `NodeId` <-> `HirId` conversion APIs)
 - #73378 (Remove use of specialization from librustc_arena)
 - #73411 (Update bootstrap to rustc 1.45.0-beta.2 (1dc0f6d8e 2020-06-15))
 - #73443 (ci: allow gating GHA on everything but macOS)

Failed merges:

r? @ghost
2020-06-20 22:53:46 +00:00
Camelid
820bba1c46 Add codegen test for multiple asm! options 2020-06-20 11:12:42 -07:00
Ralf Jung
91bd3337e3
Rollup merge of #73404 - ajpaverd:cfguard_syntax, r=Mark-Simulacrum
Update CFGuard syntax

Update the naming and syntax of the control-flow-guard option, as discussed in #68793.

r? @Mark-Simulacrum
2020-06-20 16:39:53 +02:00
Ralf Jung
125c196bca
Rollup merge of #73054 - RalfJung:dont-panic, r=Mark-Simulacrum
memory access sanity checks: abort instead of panic

Suggested by @Mark-Simulacrum, this should help reduce the performance impact of these checks.
2020-06-19 14:29:24 +02:00
Ralf Jung
0851036ae3
Rollup merge of #73044 - tmiasko:compiletest-san, r=nikomatsakis
compiletest: Add directives to detect sanitizer support

Add needs-sanitizer-{address,leak,memory,thread} directive indicating
that test requires target with support for specific sanitizer.

This is an addition to the existing needs-sanitizer-support directive
indicating that test requires a sanitizer runtime library.

The existing needs-sanitizer-support directive could be incorporated into the
new ones, but I decided to retain it, since it enables running sanitizer
codegen tests even when building of sanitizer runtime libraries is disabled.
2020-06-19 14:29:22 +02:00
Ralf Jung
7d3238f9b9
Rollup merge of #73362 - erikdesjardins:bounds, r=nikomatsakis
Test that bounds checks are elided when slice len is checked up-front

Closes #69101
2020-06-19 08:56:13 +02:00
erikdesjardins
6351850d8f
ignore-debug: debug assertions in slice indexing prevent the optimization 2020-06-17 13:10:49 -04:00
Ralf Jung
81c7ebd544 we can enable one more codegen test in debug mode now 2020-06-16 16:01:30 -04:00
Andrew Paverd
83e6c0e986 Update CFGuard syntax 2020-06-16 17:44:03 +01:00
Erik Desjardins
e0975b9b01 elaborate, add check for exact bounds 2020-06-15 18:19:54 -04:00
Nathan Corbyn
e8e0a0e4e2 Update sanitizer test 2020-06-15 11:12:19 +01:00
Nathan Corbyn
babda9470e Fix sanitizer test 2020-06-15 10:21:19 +01:00
Nathan Corbyn
11b56fbfb6 Fix whitespace 2020-06-15 09:40:57 +01:00
Nathan Corbyn
ee810a75e4 Fix exports with #[inline(always)] 2020-06-15 09:40:56 +01:00
Nathan Corbyn
d23bedd13d Fix whitespace 2020-06-15 09:40:56 +01:00
Nathan Corbyn
6b7cacb2c9 Export all fns with extern indicator 2020-06-15 09:40:56 +01:00
Nathan Corbyn
f62903b74a Export #[inline] #[no_mangle] fns in cdylibs and staticlibs 2020-06-15 09:40:56 +01:00
Erik Desjardins
0906066ae7 Test that bounds checks are elided when slice len is checked up-front 2020-06-15 01:00:46 -04:00
Tomasz Miąsko
d40e624a36 compiletest: Add directives to detect sanitizer support
Add needs-sanitizer-{address,leak,memory,thread} directive indicating
that test requires target with support for specific sanitizer.

This is an addition to the existing needs-sanitizer-support directive
indicating that test requires a sanitizer runtime library.
2020-06-13 14:24:30 +02:00
Dylan DPC
4dd5d5d4d6
Rollup merge of #72977 - tblah:riscv-codegen-llvm10, r=nikomatsakis
Fix codegen tests for RISC-V

Some codegen tests didn't seem relevant (e.g. unsupported annotations).

The RISC-V abi tests were broken by LLVM 10, c872dcf fixes that (cc: @msizanoen1)

I'm not sure about skipping catch-unwind.rs and included that change here mostly as a request for comment - I can't tell if that's a bug.
2020-06-07 18:11:29 +02:00
Felix S. Klock II
e1ebdeeefb Revert "Defer creating drop trees in MIR lowering until leaving that scope"
This reverts commit 611988551f.
2020-06-04 11:34:42 -04:00
Tom Eccles
08529aff80 test: codegen: skip catch-unwind on riscv64
It isn't clear to me if this is a bug or not, hence the FIXME
2020-06-04 12:15:26 +01:00
Tom Eccles
37e8e05712 test: codegen: Add riscv abi llvm intrinsics test 2020-06-04 12:02:03 +01:00
Tom Eccles
c872dcf956 test: codegen: riscv64-abi: print value numbers for unnamed func args
LLVM 10 includes a009a60a917bc30940422bcef73f8270566d78db which will
print value numbers for unnamed func args.

Update these tests to be in line with the referenced clang tests.
2020-06-04 12:02:03 +01:00
Tom Eccles
95e9768da1 test: codegen: skip tests inappropriate for riscv64 2020-06-04 12:02:03 +01:00