Commit graph

2237 commits

Author SHA1 Message Date
Jan-Erik Rediger
1798c1aa59 Refactor determining of relocation model into methods 2016-07-29 10:29:44 +02:00
Jan-Erik Rediger
12ccff99bf Use relative path to type 2016-07-29 10:29:44 +02:00
Jan-Erik Rediger
9e706f90cb [LLVM-3.9] Configure PIE at the module level instead of compilation unit level
This was deleted here[1] which appears to be replaced by this[2]
which is a new setPIELevel function on the LLVM module itself.

[1]: http://reviews.llvm.org/D19753
[2]: http://reviews.llvm.org/D19671
2016-07-29 10:29:44 +02:00
Jan-Erik Rediger
fba1f8f123 [LLVM-3.9] Setup the compile unit information immediately
Since LLVM reversed the order of the debug info graphs, we need to have
a compile unit that exists *before* any functions (`DISubprogram`s) are
created. This allows the LLVM debug info builder to automatically link
the functions to the compile unit.
2016-07-29 10:29:44 +02:00
Jan-Erik Rediger
7420874a97 [LLVM-3.9] Rename custom methods to Rust-specific ones 2016-07-29 10:29:44 +02:00
Niko Matsakis
2f9fff2191 Keep multiple files per work-product
In the older version, a `.o` and ` .bc` file were separate
work-products.  This newer version keeps, for each codegen-unit, a set
of files of different kinds. We assume that if any kinds are available
then all the kinds we need are available, since the precise set of
switches will depend on attributes and command-line switches.

Should probably test this: the effect of changing attributes in
particular might not be successfully tracked?
2016-07-28 12:05:45 -04:00
Niko Matsakis
ceeb158e0a Address mw nits 2016-07-28 12:05:45 -04:00
Niko Matsakis
08a72d20c9 Add a testing mechanism and a simple spike test 2016-07-28 12:05:45 -04:00
Niko Matsakis
58d4b8edd3 Modify trans to skip generating .o files
This checks the `previous_work_products` data from the dep-graph and
tries to simply copy a `.o` file if possible.  We also add new
work-products into the dep-graph, and create edges to/from the dep-node
for a work-product.
2016-07-28 12:05:45 -04:00
bors
f2e59cc6aa Auto merge of #34907 - arielb1:found-parse-error, r=nikomatsakis
Centralize and clean type error reporting

Refactors the code that handles type errors to be cleaner and fixes various edge cases.

This made the already-bad "type mismatch resolving" error message somewhat uglier. I want to fix that in another commit before this PR is merged.

Fixes #31173

r? @jonathandturner, cc @nikomatsakis
2016-07-27 14:28:06 -07:00
bors
2c50f4e484 Auto merge of #34832 - vadimcn:rusty-personality, r=alexcrichton
Implement rust_eh_personality in Rust, remove rust_eh_personality_catch.

Well, not quite: ARM EHABI platforms still use the old scheme -- for now.

r? @alexcrichton
2016-07-23 09:35:34 -07:00
Vadim Chugunov
051c2d14fb Implement rust_eh_personality in Rust, remove rust_eh_personality_catch.
Well, not quite: ARM EHABI platforms still use the old scheme -- for now.
2016-07-22 14:58:35 -07:00
Ariel Ben-Yehuda
37c569627c refactor constant evaluation error reporting
Refactor constant evaluation to use a single error reporting function
that reports a type-error-like message.

Also, unify all error codes with the "constant evaluation error" message
to just E0080, and similarly for a few other duplicate codes. The old
situation was a total mess, and now that we have *something* we can
further iterate on the UX.
2016-07-22 14:32:56 +03:00
Michael Woerister
ecc12953db trans: Make base::internalize_symbols() respect explicit linkage directives. 2016-07-20 10:26:25 -04:00
Michael Woerister
4c605e52e6 Fix wrong condition in base::internalize_symbols(). 2016-07-19 05:47:28 -04:00
Michael Woerister
22f77a9171 Run base::internalize_symbols() even for single-codegen-unit crates.
The initial linkage-assignment (especially for closures) is a conservative one that makes some symbols more visible than they need to be. While this is not a correctness problem, it does force the LLVM inliner to be more conservative too, which results in poor performance. Once translation is based solely on MIR, it will be easier to also make the initial linkage assignment a better fitting one. Until then `internalize_symbols()` does a good job of preventing most performance regressions.
2016-07-18 10:21:40 -04:00
bors
7ed6068d3e Auto merge of #34789 - jonathandturner:simplify_liberror, r=alexcrichton
Simplify librustc_errors

This is part 2 of the error crate refactor, starting with #34403.

In this refactor, I focused on slimming down the error crate to fewer moving parts.  As such, I've removed quite a few parts and replaced the with simpler, straight-line code.  Specifically, this PR:

* Removes BasicEmitter
* Remove emit from emitter, leaving emit_struct
* Renames emit_struct to emit
* Removes CoreEmitter and focuses on a single Emitter
* Implements the latest changes to error format RFC (#1644)
* Removes (now-unused) code in emitter.rs and snippet.rs
* Moves more tests to the UI tester, removing some duplicate tests in the process

There is probably more that could be done with some additional refactoring, but this felt like it was getting to a good state.

r? @alexcrichton   cc: @Manishearth (as there may be breaking changes in stuff I removed/changed)
2016-07-17 00:06:29 -07:00
Guillaume Gomez
6f07b6ca4b Rollup merge of #34456 - tbu-:pr_ptr_null, r=aturon
Use `ptr::{null, null_mut}` instead of `0 as *{const, mut}`
2016-07-15 10:56:42 +02:00
Jonathan Turner
a019c2c6ba Remove CoreEmitter and focus on Emitter 2016-07-14 07:57:46 -04:00
bors
0b7fb80e1c Auto merge of #34772 - jseyfried:cleanup_interner, r=eddyb
Start cleaning up the string interner

r? @eddyb
2016-07-13 10:26:18 -07:00
Tobias Bucher
81e95c18b7 Use ptr::{null, null_mut} instead of 0 as *{const, mut} 2016-07-12 10:40:40 +02:00
Jeffrey Seyfried
752d4419a0 Refactor get_ident_interner -> with_ident_interner. 2016-07-11 22:25:04 +00:00
Jeffrey Seyfried
1eb6d0b485 Remove Interner<T> and rename StrInterner to Interner. 2016-07-11 22:16:00 +00:00
Jonas Schievink
fd2b65ee70 Register reads on the corrent HIR item 2016-07-11 17:11:51 +02:00
Jonas Schievink
37d5c06a0d Don't register reads for external items
Presumably, this ICEs when translating an inlined item from another
crate. There shouldn't be a need to track dependencies in that case.
2016-07-11 01:49:38 +02:00
Jonas Schievink
f5d29a3b59 Move variant_size_differences out of trans
Also enhances the error message a bit, fixes #30505 on the way, and adds
a test (which was missing).

Closes #34018
2016-07-10 22:12:31 +02:00
bors
f93aaf84cb Auto merge of #34365 - petrochenkov:deferr, r=eddyb
Some more pattern cleanup and bugfixing

The next part of https://github.com/rust-lang/rust/pull/34095

The most significant fixed mistake is definitions for partially resolved associated types not being updated after full resolution.
```
fn f<T: Fn()>(arg: T::Output) { .... } // <- the definition of T::Output was not updated in def_map
```
For this reason unstable associated types of stable traits, like `FnOnce::Output`, could be used in stable code when written in unqualified form. Now they are properly checked, this is a **[breaking-change]** (pretty minor one, but a crater run would be nice). The fix is not to use unstable library features in stable code, alternatively `FnOnce::Output` can be stabilized.

Besides that, paths in struct patterns and expressions `S::A { .. }` are now fully resolved as associated types. Such types cannot be identified as structs at the moment, i.e. the change doesn't make previously invalid code valid, but it improves error diagnostics.

Other changes: `Def::Err` is supported better (less chances for ICEs for erroneous code), some incorrect error messages are corrected, some duplicated error messages are not reported, ADT definitions are now available through constructor IDs, everything else is cleanup and code audit.

Fixes https://github.com/rust-lang/rust/issues/34209
Closes https://github.com/rust-lang/rust/issues/22933 (adds tests)

r? @eddyb
2016-07-09 15:16:21 -07:00
Michael Woerister
b732cf46f8 trans: Make sure that closures only get translated once. 2016-07-09 12:15:34 -04:00
Michael Woerister
1c03bfe3b4 trans: Adjust linkage assignment so that we don't need weak linkage. 2016-07-08 10:42:48 -04:00
Michael Woerister
ac80d41175 trans: Remove tracking of translation item state.
The data tracked here was meant to compare the output of the
translation item collector to the set of translation items found
by the on-demand translator.
2016-07-08 10:42:48 -04:00
Michael Woerister
b149b9d19b trans: Set COMDAT section for weak symbols so that Windows can handle them. 2016-07-08 10:42:48 -04:00
Michael Woerister
4c27a3c6d5 trans: Enable falling back to on-demand instantiation for drop-glue and monomorphizations.
See issue #34151 for more information.
2016-07-08 10:42:48 -04:00
Michael Woerister
a7bc0b920f trans: Add missing normalize_associated_type() call to callee::get_fn(). 2016-07-08 10:42:48 -04:00
Michael Woerister
4a3f9b8962 hir-trans: Don't generate code for unreachable operands in short-circuiting logical operations. 2016-07-08 10:42:48 -04:00
Michael Woerister
b33240e2cc trans::collector: Also consider initializers of const items. 2016-07-08 10:42:48 -04:00
Michael Woerister
ab80f74670 collector-driven-trans: Take care of nits. 2016-07-08 10:42:47 -04:00
Michael Woerister
00226fc0c8 Pacify make tidy. 2016-07-08 10:42:47 -04:00
Michael Woerister
3a47103f1d Fix codegen tests by make sure items are translated in AST order. 2016-07-08 10:42:47 -04:00
Michael Woerister
283c94cd49 Clean up trans::trans_crate() after making things collector driven. 2016-07-08 10:42:47 -04:00
Michael Woerister
37a10ecbe8 Make item translation order deterministic by sorting by symbol name. 2016-07-08 10:42:47 -04:00
Michael Woerister
b38e0d0d44 Build SymbolMap for symbol name conflict checking and caching. 2016-07-08 10:42:47 -04:00
Michael Woerister
87c1c87dd7 Make drop-glue translation collector-driven. 2016-07-08 10:42:47 -04:00
Michael Woerister
6c8c94b848 Improve linkage assignment in trans::partitioning. 2016-07-08 10:42:47 -04:00
Michael Woerister
65e8a13441 Adapt backend to trans::partitioning dictating the codegen-unit setup. 2016-07-08 10:42:46 -04:00
Michael Woerister
5f3fefc77d trans: Get rid of the last potential on-demand creation of non-closure functions. 2016-07-08 10:42:46 -04:00
James Miller
6717106947 Drive function item translation from collector
Functions and method are declared ahead-of-time, including generic ones.

Closures are not considered trans items anymore, instead they are
translated on demands.
2016-07-08 10:42:38 -04:00
Michael Woerister
891c2a082f trans: Make translation of statics collector-driven. 2016-07-08 09:37:23 -04:00
Vadim Petrochenkov
9c05fb29d2 Merge PatKind::QPath into PatKind::Path in HIR 2016-07-08 12:42:57 +03:00
Vadim Petrochenkov
49ea3d48a2 Remove unnecessary accessor function VariantDefData::kind 2016-07-08 12:42:57 +03:00
Vadim Petrochenkov
4d4c7be19e Better support for associated types in struct patterns 2016-07-08 12:36:45 +03:00