Commit Graph

38274 Commits

Author SHA1 Message Date
bors e29f420255 Auto merge of #21972 - pnkfelix:new-dtor-semantics-6, r=nikomatsakis
This is a resurrection and heavy revision/expansion of a PR that pcwalton did to resolve #8861.

The most relevant, user-visible semantic change is this: #[unsafe_destructor] is gone. Instead, if a type expression for some value has a destructor, then any lifetimes referenced within that type expression must strictly outlive the scope of the value.

See discussion on https://github.com/rust-lang/rfcs/pull/769
2015-02-11 17:59:37 +00:00
bors 446bc899b2 Auto merge of #22175 - pnkfelix:featuregate-boxpat-rfc469, r=nikomatsakis
Feature gate `box` patterns.

Note that this adds a new feature gate, `box_patterns` specific to e.g. `let box i = ...`, while leaving  `box` expressions (alone) still guarded via the preexisting `box_syntax`.
2015-02-11 15:00:35 +00:00
Felix S. Klock II cdd8a5ad74 Generalize all error messages with "experimental in alpha release" to
just say "experimental."
2015-02-11 14:13:33 +01:00
Felix S. Klock II 2c9d81b2d4 Added lifetime param to Arena.
It (1.) is invariant, (2.) must strictly outlive the arena itself,
(3.) constrains the inputs to the arena so that their borrows must
also strictly outlive the arena itself.

This implies that, for now, one can no longer have cross-references
between data allocated via the same `Arena` (even when the data is not
subject to the Drop Check rule).  Instead one must carry multiple
`Arena` instances, or (more commonly), use one or more `TypedArena`
instances with enums encoding the different variants of allocated
data.
2015-02-11 13:51:21 +01:00
Felix S. Klock II c1cda0793e compile-fail tests.
Some compile-fail tests illustrated cases to be rejected by dropck,
including ones that check cyclic data cases designed to exposed bugs
if they are actually tricked into running by an unsound analysis.

E.g. these exposed bugs in earlier broken ways of handling `Vec<T>`.

(Note that all the uses of `unsafe_destructor` are just placating the
simple analysis used for that feature, which will eventually go away
once we have put the dropck through its paces.)
2015-02-11 13:51:21 +01:00
Felix S. Klock II 4459a438c2 run-pass tests.
includes regression tests discovered during bootstrapping and tests of
cyclic structure that currently pass and are expected to continue
passing under the dropck rule.

(Note that all the uses of `unsafe_destructor` are just placating the
simple analysis used for that feature, which will eventually go away
once we have put the dropck through its paces.)
2015-02-11 13:51:21 +01:00
Felix S. Klock II d6c158d262 address nit from niko's review. 2015-02-11 13:51:21 +01:00
Felix S. Klock II f51176df01 dropck: treat parametric types as safe for dropping.
Handles e.g. `impl<T> Drop for Vec<T>` as parametric: If `T` does not
have any drop code that could read from borrowed data of lifetime `'a`,
then we infer that the drop code for `Vec<T>` also cannot read from
borrowed data of lifetime `'a`, and therefore we do not need to inject
the SafeDestructor constraint for it.

Notably, this enables us to continue storing cyclic structure, without
any `unsafe` code, in `Vec`, without allowing (unsound) destructors on
such cyclic data. (Later commits have tests illustrating these two
cases in run-pass and compile-fail, respectively.)

(This is "Condition (B.)" in Drop-Check rule described in RFC 769.)
2015-02-11 13:51:21 +01:00
Felix S. Klock II f90c3864b6 Add core::marker::PhantomData.
Port `core::ptr::Unique` to have `PhantomData`. Add `PhantomData` to
`TypedArena` and `Vec` as well.

As a drive-by, switch `ptr::Unique` from a tuple-struct to a struct
with fields.
2015-02-11 13:51:09 +01:00
Felix S. Klock II dbe0828699 generalize error text to not focus on any particular release. 2015-02-11 12:01:57 +01:00
Felix S. Klock II ff56e376f9 opt into box_patterns in the reference doc that uses them. 2015-02-11 11:47:14 +01:00
Felix S. Klock II edabfe2912 opt into box_patterns in debuginfo tests. 2015-02-11 11:47:14 +01:00
Felix S. Klock II 23e9d7cbe4 Opt into `box_patterns` feature gate in all tests that use them. 2015-02-11 11:47:14 +01:00
Felix S. Klock II e5ec43e217 Opt into new `box_patterns` feature gate in various crates.
Namely: `collections` (used in `dlist.rs`), `syntax`, `rustc`,
`rustc_typeck`, `rustc_trans`, and `rustdoc`.
2015-02-11 11:47:14 +01:00
Felix S. Klock II 105f70b500 Add `box_patterns` feature gate.
Switch feature-gate checker from `box_syntax` to `box_patterns` when
visiting a pattern.

(Having to opt into both `box_syntax` and `box_patterns` seemed
unnecessary.)

[breaking-change]
2015-02-11 11:47:05 +01:00
bors 1500df8934 Auto merge of #22169 - gfxmonk:disable-docs, r=steveklabnik
`make docs` fails when (xe)latex is not installed. The output is pretty weird, looks like it's doing some `eval` tricks but something is blank:

    /bin/sh: -output-directory=.: command not found
    /home/tim/dev/rust/rust/mk/docs.mk:220: recipe for target 'doc/reference.pdf' failed

I have neither latex or xelatex installed. It seems like the following snippet is meant for me, but the logic is backwards:

    ifeq ($(CFG_XELATEX),)
        CFG_LATEX := $(CFG_XELATEX)
        XELATEX = 1
      else
        $(info cfg: no xelatex found, disabling LaTeX docs)
        NO_PDF_DOCS = 1
    endif

I verified with:

    $ make doc/reference.pdf CFG_XELATEX=/bin/foo
    cfg: no xelatex found, disabling LaTeX docs
2015-02-11 08:54:30 +00:00
Felix S. Klock II e02b6d1748 destructor checker (dropck).
Largely adapted from pcwalton's original branch, with following
notable modifications:

Use `regionck::type_must_outlive` to generate `SafeDestructor`
constraints.  (this plugged some soundness holes in the analysis).

Avoid exponential time blowup on compile-fail/huge-struct.rs by
keeping the breadcrumbs until end of traversal.

Avoid premature return from regionck::visit_expr.

Factored drop-checking code out into dropck module.

Added `SafeDestructor` to enum `SubregionOrigin` (for error reporting).

----

Since this imposes restrictions on the lifetimes used in types with
destructors, this is a (wait for it)

[breaking-change]
2015-02-11 08:50:27 +01:00
Felix S. Klock II 81383bd869 Added DestructionScope variant to CodeExtent, representing the area
immediately surrounding a node that is a terminating_scope
(e.g. statements, looping forms) during which the destructors run (the
destructors for temporaries from the execution of that node, that is).

Introduced DestructionScopeData newtype wrapper around ast::NodeId, to
preserve invariant that FreeRegion and ScopeChain::BlockScope carry
destruction scopes (rather than arbitrary CodeExtents).

Insert DestructionScope and block Remainder into enclosing CodeExtents
hierarchy.

Add more doc for DestructionScope, complete with ASCII art.

Switch to constructing DestructionScope rather than Misc in a number
of places, mostly related to `ty::ReFree` creation, and use
destruction-scopes of node-ids at various calls to
liberate_late_bound_regions.

middle::resolve_lifetime: Map BlockScope to DestructionScope in `fn resolve_free_lifetime`.

Add the InnermostDeclaringBlock and InnermostEnclosingExpr enums that
are my attempt to clarify the region::Context structure, and that
later commmts build upon.

Improve the debug output for `CodeExtent` attached to `ty::Region::ReScope`.

Loosened an assertion in `rustc_trans::trans::cleanup` to account for
`DestructionScope`.  (Perhaps this should just be switched entirely
over to `DestructionScope`, rather than allowing for either `Misc` or
`DestructionScope`.)

----

Even though the DestructionScope is new, this particular commit should
not actually change the semantics of any current code.
2015-02-11 08:50:27 +01:00
Felix S. Klock II bdb9f3e266 shift bindings to accommodate new lifetime/dtor rules.
(My fix to for-loops (21984) did not deal with similar problems in
if-let expressions, so those binding shifts stay.)
2015-02-11 08:50:27 +01:00
bors 0047f8bbd8 Auto merge of #22163 - bleibig:grammar-updates, r=sanxiyn
Updates to the bison grammar:

* Fixes to range syntax - allow `expr[..]`, and fix precedence to allow `for _ in i.. { }`
* Allow "extern crate" in stmts
* Add qualified path expressions (`<TYPE as TRAIT_REF>::item`)
2015-02-11 06:45:25 +00:00
Tim Cuthbertson 2a367b9330 docs: disable PDF docs when latex _isn't_ present 2015-02-11 17:16:37 +11:00
bors 5936278ed6 Auto merge of #22076 - carols10cents:exp2-calling-exp, r=huonw
I was working on adding examples to the documentation in `std::num::Float`. I got to `exp2`, which says "Returns 2 raised to the power of the number, `2^(self)`."

So I tried running this code:

```
use std::num::Float;

#[test]
fn test_exp2() {
    assert_eq!(32.0, 5.0.exp2());
}
```

and it resulted in a failure of `(left: `32`, right: `148.413159`)`. That 148.413159 is the value for e^5, which is `exp()`, not `exp2()`.

Sure enough, `exp2` is calling `exp` and shouldn't be, looks like a copy-paste error. 

I haven't added any tests for this since it's unlikely to break again, but I will happily do so if people think that would be a good idea. The doc examples are coming :)

I scanned through the other functions in these files for similar sorts of errors and didn't notice any.
2015-02-11 03:15:00 +00:00
Brian Leibig 3bca5f23aa Bison grammar: fix precedence with ranges followed by blocks 2015-02-10 17:59:02 -08:00
Brian Leibig 03cc48c38d Bison grammar: refactor items to allow "extern crate" in stmts 2015-02-10 17:59:01 -08:00
Brian Leibig 41d6513b8f Bison grammar: add qualified path expressions 2015-02-10 17:59:01 -08:00
Brian Leibig ad6bb17acf Bison grammar: refactor index expressions to use ordinary expressions as indexes, remove index_expr and expr_norange 2015-02-10 17:59:01 -08:00
bors 2067dd2a86 Auto merge of #22160 - dotdash:extern_rust, r=brson
As the function comment already says, the types generated in the
foreign_signture function don't necessarily match the types used for a
corresponding rust function. Therefore we can't just use these types to
guide the translation of the wrapper function that bridges between the
external ABI and the rust ABI. Instead, we can query LLVM about the
types used in the rust function and use those to generate an appropriate
wrapper.

Fixes #21454
2015-02-11 01:04:54 +00:00
Björn Steinbrink 61db6923e2 Fix ICE when compiling "extern" rust functions
As the function comment already says, the types generated in the
foreign_signture function don't necessarily match the types used for a
corresponding rust function. Therefore we can't just use these types to
guide the translation of the wrapper function that bridges between the
external ABI and the rust ABI. Instead, we can query LLVM about the
types used in the rust function and use those to generate an appropriate
wrapper.

Fixes #21454
2015-02-10 23:43:38 +01:00
bors a954663db6 Auto merge of #22089 - dotdash:llvm_20150207, r=alexcrichton
Fixes #21996
2015-02-10 22:08:30 +00:00
bors bc87efef2c Auto merge of #22153 - alexcrichton:rollup, r=alexcrichton 2015-02-10 19:52:04 +00:00
Alex Crichton 3e10785e21 Test fixes and rebase conflicts 2015-02-10 11:51:38 -08:00
Alex Crichton 1138f88f82 rollup merge of #22144: pnkfelix/fru-privacy-rfc-736 2015-02-10 09:05:17 -08:00
Alex Crichton 08cbb4a5af rollup merge of #22147: dotdash/llvm_version
When trying to build against a newer, local LLVM version it might be
preferable to have a flag to disable the LLVM version check instead of
having to modify the configure script.

Fixes #21998

r? @alexcrichton
2015-02-10 08:43:20 -08:00
Alex Crichton df55acf1d0 rollup merge of #22143: pnkfelix/fix-issue-20801
Add error message (i.e. do not ICE) when moving out of unsafe pointers.

Fix #20801.
2015-02-10 08:43:18 -08:00
Alex Crichton ba7b79008b rollup merge of #22142: Kimundi/unsized_unique
This is to allow for use cases like sending a raw pointer slice across thread boundaries.
2015-02-10 08:43:16 -08:00
Alex Crichton 8b44cf2a40 rollup merge of #22135: apasel422/issue-22131
fixes #22131
2015-02-10 08:43:14 -08:00
Alex Crichton 3161cb096f rollup merge of #22130: steveklabnik/gh20172
Fixes #20172
2015-02-10 08:43:12 -08:00
Alex Crichton e630ed6983 rollup merge of #22129: steveklabnik/gh22032
Fixes #22032
2015-02-10 08:43:09 -08:00
Alex Crichton b0b373dce2 rollup merge of #22128: steveklabnik/gh22085
Fixes #22085

/cc @tomjakubowski
2015-02-10 08:43:07 -08:00
Alex Crichton d3dd389224 rollup merge of #22125: alexcrichton/into-iter-stability
* Remove type parameters from `IteratorExt::cloned`
* Rename `IntoIterator::Iter` to `IntoIterator::IntoIter`
* Mark `IntoIterator::into_iter` as stable (but not the trait, only the method).
2015-02-10 08:43:04 -08:00
Alex Crichton 637a89bdf6 rollup merge of #22120: lukesteensen/closures_guide
Based off https://github.com/rust-lang/rust/pull/21843, it looks like the syntax in the Closures guide is outdated.
2015-02-10 08:43:03 -08:00
Alex Crichton bbc8a54c63 rollup merge of #22116: kmcallister/cfg_attr
Fixes #22070.
Fixes #19372.

r? @sfackler
2015-02-10 08:43:01 -08:00
Alex Crichton c33acf658a rollup merge of #22115: nagisa/dedupe-cratetypes
Crate types from multiple sources appear to be deduplicated properly, but not
deduplicated if they come from the command line arguments. At worst, this used
to cause compiler failures when `--crate-type=lib,rlib` (the same as
`--crate-type=rlib,rlib`, at least at the time of this commit) is provided and
generate the output multiple times otherwise.

r? @alexcrichton
2015-02-10 08:42:57 -08:00
Alex Crichton b6e5f1bfe8 rollup merge of #22112: mbudde/std-cell-doc-fix
Replace links to `../index.html` with `index.html` as they are linking to the `std` module and not `std::cell` as intended.

See for example [RefCell documentation](http://doc.rust-lang.org/std/cell/struct.RefCell.html).
2015-02-10 08:42:55 -08:00
Alex Crichton 6ecb011a58 rollup merge of #22109: petrochenkov/intuint1 2015-02-10 08:42:53 -08:00
Alex Crichton 011b77b69c rollup merge of #22106: steveklabnik/doc_trait_objects
I started to write up some docs on this, and then realized I was just repeating http://huonw.github.io/blog/2015/01/peeking-inside-trait-objects/ but worse. @huonw previously said that we can use this content if we wanted, so I made some tweaks and integrated it into the book.

Fixes #21707
2015-02-10 08:42:51 -08:00
Alex Crichton 6d55d3ac45 rollup merge of #22103: pczarn/fix-ice-22091
Fixes #22091

I'm not sure how to write a test for this. An ICE happens with spans that start near (after?) a null character or some other zero-width unicode character.
2015-02-10 08:42:49 -08:00
Alex Crichton 5ad52ca6b3 rollup merge of #22097: cllns/fix-fallback-fonts
The fallback font for a serif font should also be serif, not sans serif.
2015-02-10 08:42:47 -08:00
Alex Crichton 7e378edb39 rollup merge of #22094: alkor/cleanup-show-string
Rename several remaining `Show`s to Debug, `String`s to Display (mostly in comments and docs).
Update reference.md:
 - derive() no longer supports Zero trait
 - derive() now supports Copy trait
2015-02-10 08:42:45 -08:00
Alex Crichton 0568422a27 rollup merge of #22088: semarie/openbsd-rmake
- c-link-to-rust-staticlib: use `EXTRACFLAGS` defined by tools.mk for
  choose the good libraries to link to.

tools.mk define a variable `EXTRACFLAGS` that contains the needed library per target. So it is better to use it, instead of duplicate the code here. I keep the `ifndef IS_WINDOWS` has tools.mk define something for WINDOWS... so I don't change things that I couldn't test.

- no-stack-check: disabled for openbsd (no segmented stacks here)

- symbols-are-reasonable: use portable grep pattern

- target-specs: use POSIX form for options when invoking grep

- use-extern-for-plugins: disable as OpenBSD only support x86_64 for now
2015-02-10 08:41:54 -08:00