Commit graph

29767 commits

Author SHA1 Message Date
Alex Crichton
ef89cc8f04 Store LLVM bitcode in object files, not compressed
This commit is an attempted resurrection of #70458 where LLVM bitcode
emitted by rustc into rlibs is stored into object file sections rather
than in a separate file. The main rationale for doing this is that when
rustc emits bitcode it will no longer use a custom compression scheme
which makes it both easier to interoperate with existing tools and also
cuts down on compile time since this compression isn't happening.

The blocker for this in #70458 turned out to be that native linkers
didn't handle the new sections well, causing the sections to either
trigger bugs in the linker or actually end up in the final linked
artifact. This commit attempts to address these issues by ensuring that
native linkers ignore the new sections by inserting custom flags with
module-level inline assembly.

Note that this does not currently change the API of the compiler at all.
The pre-existing `-C bitcode-in-rlib` flag is co-opted to indicate
whether the bitcode should be present in the object file or not.

Finally, note that an important consequence of this commit, which is also
one of its primary purposes, is to enable rustc's `-Clto` bitcode
loading to load rlibs produced with `-Clinker-plugin-lto`. The goal here
is that when you're building with LTO Cargo will tell rustc to skip
codegen of all intermediate crates and only generate LLVM IR. Today
rustc will generate both object code and LLVM IR, but the object code is
later simply thrown away, wastefully.
2020-04-29 11:57:26 -07:00
Dylan DPC
4ae7037582
Rollup merge of #71396 - DeeDeeG:improve-e0308-again, r=estebank
Improve E0308 error message wording again

Hello again,

I recently did this PR: #70242

I felt the error message could be further improved, so I made [a post on the Rust community forum](https://users.rust-lang.org/t/looking-for-feedback-on-an-improved-error-message-for-e0308/40004) to ask for feedback.

(Also, there were some comments on my original PR that I took into consideration as well.)

This PR is my attempt to take all the feedback into account and propose a better and simplified error message that should still be accurate. Its main benefit is having simpler grammar, and hopefully being easier to read and understand.

Thanks to everyone who commented and gave feedback, and thank you for taking a look at this PR.
2020-04-23 15:57:14 +02:00
Dylan DPC
61fbc6a394
Rollup merge of #71005 - jonas-schievink:no-place-like-return, r=oli-obk
Reading from the return place is fine

Const eval thinks that reading from local `_0` is UB, but it isn't. `_0` is just a normal local like any other, and codegen handles it that way too. The only special thing is that the `Return` terminator will read from it.

I've hit these errors while working on an NRVO pass that can merge other locals with `_0` in https://github.com/rust-lang/rust/pull/71003.

r? @oli-obk
2020-04-23 15:57:11 +02:00
Dylan DPC
0f806534c0
Rollup merge of #71400 - dtolnay:isavailable, r=petrochenkov
proc_macro::is_available()

This PR adds `proc_macro::is_available() -> bool` to determine whether proc_macro has been made accessible to the currently running program.

The proc_macro crate is only intended for use inside the implementation of procedural macros. All the functions in the crate panic if invoked from outside of a procedural macro, such as from a build script or unit test or ordinary Rust binary.

Unfortunately those panics made it impossible for libraries that are designed to support both macro and non-macro use cases (e.g. Syn) to be used from binaries that are compiled with panic=abort. In panic=unwind mode we're able to attempt a proc macro call inside catch_unwind and use libproc_macro's result if it succeeds, otherwise fall back to a non-macro alternative implementation. But in panic=abort there was no way to determine which implementation needs to be used.

r? @eddyb
attn: @petrochenkov @adetaylor
ref: https://github.com/dtolnay/cxx/issues/130
2020-04-22 23:19:24 +02:00
Dylan DPC
10e47f5b7b
Rollup merge of #71256 - cuviper:must_use_replace, r=estebank
Lint must_use on mem::replace

This adds a hint on `mem::replace`, "if you don't need the old value,
you can just assign the new value directly". This is in similar spirit
to the `must_use` on `ManuallyDrop::take`.
2020-04-22 23:19:19 +02:00
Dylan DPC
7939a4d728
Rollup merge of #71370 - PankajChaudhary5:ErrorCode-E0696, r=GuillaumeGomez
Added detailed error code explanation for issue E0696 in Rust compiler.

Added proper error explanation for issue E0696 in the Rust compiler.
Error Code E0696

Sub Part of Issue #61137

r? @GuillaumeGomez
2020-04-22 16:41:12 +02:00
Dylan DPC
221f677d70
Rollup merge of #71336 - ecstatic-morse:check-consts-asm, r=oli-obk
Exhaustively match on `{Statement,Terminator}Kind` during const checking

This adds a pre-monomorphization error for inline assembly in a const context as well.

r? @oli-obk
2020-04-22 16:41:11 +02:00
bors
00f677d897 Auto merge of #71424 - Dylan-DPC:rollup-iunh61a, r=Dylan-DPC
Rollup of 6 pull requests

Successful merges:

 - #70970 (Detect mistyped associated consts in `Instance::resolve`.)
 - #71203 (Correct await span for async-await error reporting)
 - #71214 (Add error code for inner doc error)
 - #71337 (Moving all rustdoc-ui tests to check-pass)
 - #71412 (Clarify unused_doc_comments note on macro invocations)
 - #71414 (More diagnostic items for Clippy usage)

Failed merges:

r? @ghost
2020-04-22 11:14:23 +00:00
Dylan DPC
91ef66374b
Rollup merge of #71412 - dtolnay:uselessdoc, r=Manishearth
Clarify unused_doc_comments note on macro invocations

The previous error message used to say:

<pre>
/// doc
^^^^^^^ rustdoc does not generate documentation for <b>macros</b>
</pre>

Obviously we do generate documentation for macros, such as https://docs.rs/bitflags/1.2.1/bitflags/macro.bitflags.html. It's only macro invocations that don't get their own docs. This PR updates the message to say "rustdoc does not generate documentation for <b>macro invocations</b>".

I observe that prior to #69084 this used to say "rustdoc does not generate documentation for **macro expansions**", as implemented originally in #57882. I don't have a preference between those but I made the commit before looking up the history.

r? @Manishearth
attn: @yaahc @euclio
2020-04-22 12:18:38 +02:00
Dylan DPC
e7c5334a88
Rollup merge of #71337 - Valloric:rustdoc-check-pass, r=GuillaumeGomez
Moving all rustdoc-ui tests to check-pass

These were all build-pass before and don't seem to need it.

Helps with #62277

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/rust-lang/rust/71337)
<!-- Reviewable:end -->
2020-04-22 12:18:36 +02:00
Dylan DPC
372d37b106
Rollup merge of #71214 - GuillaumeGomez:add-error-code-inner-doc-error, r=Dylan-DPC
Add error code for inner doc error

r? @Dylan-DPC

cc @oli-obk
2020-04-22 12:18:34 +02:00
Dylan DPC
7b1ce6e98d
Rollup merge of #71203 - csmoe:issue-71137, r=csmoe
Correct await span for async-await error reporting

Closes #71137
r? @tmandry
2020-04-22 12:18:33 +02:00
Dylan DPC
707004c552
Rollup merge of #70970 - eddyb:trait-vs-impl-mismatch, r=oli-obk
Detect mistyped associated consts in `Instance::resolve`.

*Based on #71049 to prevent redundant/misleading downstream errors.*

Fixes #70942 by refusing to resolve an associated `const` if it doesn't have the same type in the `impl` that it does in the `trait` (which we assume had errored, and `delay_span_bug` guards against bugs).
2020-04-22 12:18:31 +02:00
Guillaume Gomez
038f5b7433 Update UI tests 2020-04-22 11:09:57 +02:00
bors
4bfd62acb1 Auto merge of #71323 - nnethercote:bitcode-in-rlib, r=alexcrichton
Add `-Cbitcode-in-rlib`.

This is a cut-down version of #70458 that gets the compile-time wins.

r? @alexcrichton
2020-04-22 07:52:42 +00:00
Nicholas Nethercote
2984799881 Add a simple test. 2020-04-22 15:22:18 +10:00
David Tolnay
3a8097f2b4
Clarify unused_doc_comments note on macro invocations 2020-04-21 21:16:50 -07:00
csmoe
00d12ef901 add test for correct await span 2020-04-22 09:51:56 +08:00
Yuki Okushi
f28e3873c5
Rollup merge of #71366 - faern:use-assoc-int-consts3, r=dtolnay
Use assoc int consts3

Define module level int consts with associated constants instead of `min_value()` and `max_value()`. So the code become consistent with what the docs recommend etc. Seems natural.

Also remove the last usages of the int module constants from this repo (except src/test/ directory which I have still not really done anything in). Some places were missed in the previous PRs because the code uses `crate::<IntTy>` to reach the constants.

This is a continuation of #70857

r? @dtolnay
2020-04-22 10:34:06 +09:00
Yuki Okushi
24fb393207
Rollup merge of #70998 - estebank:suggest-impl-trait-empty-fn, r=varkor
Suggest `-> impl Trait` and `-> Box<dyn Trait>` on fn that doesn't return

During development, a function could have a return type set that is a
bare trait object by accident. We already suggest using either a boxed
trait object or `impl Trait` if the return paths will allow it. We now
do so too when there are *no* return paths or they all resolve to `!`.
We still don't handle cases where the trait object is *not* the entirety
of the return type gracefully.

Closes #38376.
2020-04-22 10:34:03 +09:00
David Tolnay
7435547b25
proc_macro::is_available() 2020-04-21 12:50:16 -07:00
DeeDeeG
57c2712895 Improve E0308 error message wording again 2020-04-21 15:06:24 -04:00
Dylan MacKenzie
152c06569b Assign correct span to new illegal ops 2020-04-21 09:24:41 -07:00
pankajchaudhary5
e5b68bc719 Added proper explanation error code E0696 2020-04-21 20:09:07 +05:30
bors
45d050cde2 Auto merge of #71170 - spastorino:dyn-fnonce-alignment, r=nikomatsakis
Make Box<dyn FnOnce> respect self alignment

Closes #68304

r? @eddyb @nikomatsakis
2020-04-21 08:58:44 +00:00
Dylan DPC
e3a514c44a
Rollup merge of #71174 - Nokel81:fix-async-main-error, r=petrochenkov
Check that main/start is not async

* Add new error code E0752
* Add span to hir::IsAsync::Yes
* Emit an error if main or the start function is marked as async
* Add two regression tests

This PR fixes #68523.
2020-04-21 00:30:55 +02:00
Linus Färnstrand
9af047ff74 Fix show-const-contents rustdoc test 2020-04-20 23:38:07 +02:00
Jonas Schievink
415fd0cc1a const prop: don't special case return place 2020-04-20 21:18:20 +02:00
Jonas Schievink
1ce6e6a999 Bless 32-bit test output 2020-04-20 21:18:20 +02:00
Jonas Schievink
a5c1851607 Fix codegen and mir-opt tests
Mostly renamed allocations, but I'm not sure about the const prop tests
2020-04-20 21:18:20 +02:00
Jonas Schievink
4eaf535d2b Treat RETURN_PLACE as a normal Local
Copy its value to the `return_place` upon leaving a call frame
2020-04-20 21:18:18 +02:00
Esteban Küber
e536257061 Ensure tail expression will have a Ty for E0746
When the return type is `!Sized` we look for all the returned
expressions in the body to fetch their types and provide a reasonable
suggestion. The tail expression of the body is normally evaluated after
checking whether the return type is `Sized`. Changing the order of the
evaluation produces undesirable knock down effects, so we detect the
specific case that newcomers are likely to encounter ,returning a single
bare trait object, and only in that case we evaluate the tail
expression's type so that the suggestion will be accurate.
2020-04-20 11:17:03 -07:00
Esteban Küber
d3c96f03b5 Suggest -> impl Trait and -> Box<dyn Trait> on fn that doesn't return
During development, a function could have a return type set that is a
bare trait object by accident. We already suggest using either a boxed
trait object or `impl Trait` if the return paths will allow it. We now
do so too when there are *no* return paths or they all resolve to `!`.
We still don't handle cases where the trait object is *not* the entirety
of the return type gracefully.
2020-04-20 09:24:41 -07:00
Dylan DPC
314b78c550
Rollup merge of #71284 - JOE1994:serialize_id, r=petrochenkov
fix -Zast-json to output correct JSON form

fixes #71086 (Reverts some of the changes made in #70215)

JSON output (from an empty library) after fix has something for **"id"** field
```shell
lonelyjoe@lonelyjoe-desktop:~/workspace/empty_lib/src$ rustc lib.rs -Zast-json
```
```json
{
   "module":{
      "inner":{
         "lo":0,
         "hi":94
      },
      "items":[
         {
            "attrs":[
               {
                  "kind":{
                     "variant":"Normal",
                     "fields":[
                        {
                           "path":{
                              "span":{
                                 "lo":0,
                                 "hi":0
                              },
                              "segments":[
                                 {
                                    "ident":{
                                       "name":"prelude_import",
                                       "span":{
                                          "lo":0,
                                          "hi":0
                                       }
                                    },
                                    "id":3,
                                    "args":null
                                 }
                              ]
                           },
                           "args":"Empty"
                        }
                     ]
                  },
                  "id":null,
                  "style":"Outer",
                  "span":{
                     "lo":0,
                     "hi":0
                  }
               }
            ],
            "id":4,
            "span":{
               "lo":0,
               "hi":0
            },
            "vis":{
               "node":"Inherited",
               "span":{
                  "lo":0,
                  "hi":0
               }
            },
            "ident":{
               "name":"",
               "span":{
                  "lo":0,
                  "hi":0
               }
            },
            "kind":{
               "variant":"Use",
               "fields":[
                  {
                     "prefix":{
                        "span":{
                           "lo":0,
                           "hi":0
                        },
                        "segments":[
                           {
                              "ident":{
                                 "name":"{{root}}",
                                 "span":{
                                    "lo":0,
                                    "hi":0
                                 }
                              },
                              "id":5,
                              "args":null
                           },
                           {
                              "ident":{
                                 "name":"std",
                                 "span":{
                                    "lo":0,
                                    "hi":0
                                 }
                              },
                              "id":6,
                              "args":null
                           },
                           {
                              "ident":{
                                 "name":"prelude",
                                 "span":{
                                    "lo":0,
                                    "hi":0
                                 }
                              },
                              "id":7,
                              "args":null
                           },
                           {
                              "ident":{
                                 "name":"v1",
                                 "span":{
                                    "lo":0,
                                    "hi":0
                                 }
                              },
                              "id":8,
                              "args":null
                           }
                        ]
                     },
                     "kind":"Glob",
                     "span":{
                        "lo":0,
                        "hi":0
                     }
                  }
               ]
            },
            "tokens":null
         },
         {
            "attrs":[
               {
                  "kind":{
                     "variant":"Normal",
                     "fields":[
                        {
                           "path":{
                              "span":{
                                 "lo":0,
                                 "hi":0
                              },
                              "segments":[
                                 {
                                    "ident":{
                                       "name":"macro_use",
                                       "span":{
                                          "lo":0,
                                          "hi":0
                                       }
                                    },
                                    "id":9,
                                    "args":null
                                 }
                              ]
                           },
                           "args":"Empty"
                        }
                     ]
                  },
                  "id":null,
                  "style":"Outer",
                  "span":{
                     "lo":0,
                     "hi":0
                  }
               }
            ],
            "id":10,
            "span":{
               "lo":0,
               "hi":0
            },
            "vis":{
               "node":"Inherited",
               "span":{
                  "lo":0,
                  "hi":0
               }
            },
            "ident":{
               "name":"std",
               "span":{
                  "lo":0,
                  "hi":0
               }
            },
            "kind":{
               "variant":"ExternCrate",
               "fields":[
                  null
               ]
            },
            "tokens":null
         }
      ],
      "inline":true
   },
   "attrs":[

   ],
   "span":{
      "lo":0,
      "hi":94
   },
   "proc_macros":[

   ]
}
```
2020-04-20 18:07:09 +02:00
Sebastian Malton
6120acec87 Check that main/start is not async
* Add new error code E0752
* Add span to hir::IsAsync::Yes
* Emit an error if main or the start function is marked as async
* Add two regression tests

Fix formatting errors and bless test outputs
* move tests to ui/async-await

fix test error text

remove span from IsAsync
2020-04-20 09:37:11 -04:00
bors
4ca5fd2d7b Auto merge of #71232 - eddyb:print-const-adts, r=oli-obk
ty/print: pretty-print constant aggregates (arrays, tuples and ADTs).

Oddly enough, we don't have any UI tests showing this off in types, only `mir-opt` tests.
However, the pretty form should show up in the test output diff of #71018, if this PR is merged first.

<hr/>

Examples of before/after:
|`Option<bool>`|
|:-:|
|`{transmute(0x01): std::option::Option<bool>}`|
|  ↓↓↓  |
|`std::option::Option::<bool>::Some(true)`|

| `RawVec<u32>` |
|:-:|
| `ByRef { alloc: Allocation { bytes: [4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], relocations: Relocations(SortedMap { data: [] }), undef_mask: UndefMask { blocks: [65535], len: Size { raw: 16 } }, size: Size { raw: 16 }, align: Align { pow2: 3 }, mutability: Not, extra: () }, offset: Size { raw: 0 } }: alloc::raw_vec::RawVec::<u32>`|
|  ↓↓↓  |
|`alloc::raw_vec::RawVec::<u32> { ptr: std::ptr::Unique::<u32> { pointer: {0x4 as *const u32}, _marker: std::marker::PhantomData::<u32> }, cap: 0usize, alloc: std::alloc::Global }`|

<hr/>

This PR is a prerequisite for #61486, *sort of*, in that we need to be able to pretty-print values in order to even consider how we might mangle them.
We still don't have pretty-printing for constants of reference types, @oli-obk has the necessary support logic in a PR but I didn't want to interfere with that.

<hr/>

Each commit should be reviewed separately, as I've fixed a couple deficiencies along the way.

r? @oli-obk cc @rust-lang/wg-mir-opt @varkor @yodaldevoid
2020-04-20 05:30:12 +00:00
Dylan MacKenzie
79543397d7 Bless new miri_unleashed test 2020-04-19 20:42:36 -07:00
JOE1994
b469d2db6d check '-Zast-json' & '-Zast-json-noexpand' to output legal JSON 2020-04-19 22:24:42 -04:00
bors
9b2f8dbba3 Auto merge of #71007 - Amanieu:deprecate_asm, r=Mark-Simulacrum
Deprecate the asm! macro in favor of llvm_asm!

Since we will be changing the syntax of `asm!` soon, deprecate it and encourage people to use `llvm_asm!` instead (which preserves the old syntax). This will avoid breakage when `asm!` is changed.

RFC: https://github.com/rust-lang/rfcs/pull/2843
2020-04-20 02:18:00 +00:00
Josh Stone
7fca9f809d allow(unused_must_use) in issue-23611-enum-swap-in-drop.rs 2020-04-19 18:15:06 -07:00
Dylan MacKenzie
65a985e81e Check for llvm_asm in a const context 2020-04-19 17:50:56 -07:00
Val Markovic
2add9d8fc2 Moving all rustdoc-ui tests to check-pass
These were all build-pass before and don't seem to need it.

Helps with #62277
2020-04-19 16:40:53 -07:00
Dylan DPC
9fc24430e2
Rollup merge of #71324 - petrochenkov:passcheck2, r=RalfJung
Fix some tests failing in `--pass check` mode

r? @RalfJung
2020-04-19 21:11:29 +02:00
Dylan DPC
b20bd73673
Rollup merge of #71317 - RalfJung:unleash-inline-asm, r=ecstatic-morse
miri-unleash test for llvm_asm

r? @oli-obk @ecstatic-morse
2020-04-19 21:11:28 +02:00
Dylan DPC
ab44c7701e
Rollup merge of #71310 - JohnTitor:dont-did, r=estebank
Do not show DefId in diagnostics

Fixes #71222
r? @estebank cc @eddyb
2020-04-19 21:11:24 +02:00
Dylan DPC
9c5da9afa9
Rollup merge of #71026 - seiyab:issue-64362-adhoc, r=varkor
Fix false "never constructed" warnings for `Self::` variant paths

Closes #64362 .
2020-04-19 21:11:22 +02:00
Ralf Jung
f6adbc3a26 Fix comment 2020-04-19 20:23:28 +02:00
Vadim Petrochenkov
1c77e20aba Fix some tests failing in --pass check mode 2020-04-19 17:19:28 +03:00
Dylan DPC
36791dabe8
Rollup merge of #71188 - Duddino:fix, r=matthewjasper
Fixed missing trait method suggests incorrect code (self parameter not named "self").

fixes #71150
2020-04-19 15:12:38 +02:00
jakubadamw
f742afaca4 test for false "never constructed" warnings for Self:: variant paths 2020-04-19 21:57:35 +09:00