Commit Graph

28796 Commits

Author SHA1 Message Date
Richo Healey
201cd9e3f9 Ignore tests broken by failing on ICE 2014-05-06 21:47:25 -07:00
Richo Healey
48b1a45cbc Fail on internal compiler errors in compile-fail 2014-05-06 21:47:21 -07:00
Alex Crichton
08237cad8d rustc: Enable writing "unsafe extern fn() {}"
Previously, the parser would not allow you to simultaneously implement a
function with a different abi as well as being unsafe at the same time. This
extends the parser to allow functions of the form:

    unsafe extern fn foo() {
        // ...
    }

The closure type grammar was also changed to reflect this reversal, types
previously written as "extern unsafe fn()" must now be written as
"unsafe extern fn()". The parser currently has a hack which allows the old
style, but this will go away once a snapshot has landed.

Closes #10025

[breaking-change]
2014-05-06 21:03:59 -07:00
Alan Williams
8543e1b6ce Add documentation for Windows compatibility layer and remove unneeded attributes 2014-05-06 20:39:06 -07:00
Joseph Crail
2fc3b3a48f Add documentation for Bitv. 2014-05-06 23:34:19 -04:00
bors
24f6f26e63 auto merge of #13892 : alexcrichton/rust/mixing-rlib-dylib-deps, r=brson
Currently, rustc requires that a linkage be a product of 100% rlibs or 100%
dylibs. This is to satisfy the requirement that each object appear at most once
in the final output products. This is a bit limiting, and the upcoming libcore
library cannot exist as a dylib, so these rules must change.

The goal of this commit is to enable *some* use cases for mixing rlibs and
dylibs, primarily libcore's use case. It is not targeted at allowing an
exhaustive number of linkage flavors.

There is a new dependency_format module in rustc which calculates what format
each upstream library should be linked as in each output type of the current
unit of compilation. The module itself contains many gory details about what's
going on here.

cc #10729
2014-05-06 19:46:44 -07:00
Alex Crichton
49efab8ac9 rustc: Fix enum variant privacy across crates
The code in resolve erroneously assumed that private enums weren't visited, so
the logic was adjusted to check to see if the enum definition itself was public.

Closes #11680
2014-05-06 16:45:21 -07:00
bors
b299231d12 auto merge of #13982 : alexcrichton/rust/more-logging, r=nikomatsakis
This was accidentally left out of the recent logging improvements.
2014-05-06 16:31:39 -07:00
Felix S. Klock II
a22413b46a Revise doc-comments for graphviz to avoid generating files from rustdoc runs.
Fix #13965.

There is a dance here between the `main` that actually runs versus the
`main` that is printed in the output documentation.  We don't run the
latter `main`, but we do at least compile (and thus type-check) it.
It is still the responsibility of the documenter to ensure that the
signatures of `fn render` are kept in sync across the blocks.
2014-05-07 00:52:27 +02:00
Alex Crichton
be71d809bd log: Use writeln!() instead of write!()
This was accidentally left out of the recent logging improvements.
2014-05-06 15:08:16 -07:00
bors
df621acf5f auto merge of #13960 : brandonw/rust/master, r=alexcrichton
Update the example to make the usage of `pub mod foo;` much more
apparent, as well as using an example where setting the visibility of
the module is actually necessary.
2014-05-06 15:06:52 -07:00
Niko Matsakis
683d6646ce Remove error message that refactor suppresses 2014-05-06 18:00:50 -04:00
bors
cf6857b9e9 auto merge of #13897 : aturon/rust/issue-6085, r=bjz
The `std::bitflags::bitflags!` macro did not provide support for
adding attributes to the generates structure, due to limitations in
the parser for macros. This patch works around the parser limitations
by requiring a `flags` keyword in the `bitflags!` invocations:

    bitflags!(
        #[deriving(Hash)]
        #[doc="Three flags"]
        flags Flags: u32 {
            FlagA       = 0x00000001,
            FlagB       = 0x00000010,
            FlagC       = 0x00000100
        }
    )

The intent of `std::bitflags` is to allow building type-safe wrappers
around C-style flags APIs. But in addition to construction these flags
from the Rust side, we need a way to convert them from the C
side. This patch adds a `from_bits` function, which is unsafe since
the bits in question may not represent a valid combination of flags.

Finally, this patch changes `std::io::FilePermissions` from an exposed
`u32` representation to a typesafe representation (that only allows valid
flag combinations) using the `std::bitflags`.

Closes #6085.
2014-05-06 12:41:55 -07:00
Niko Matsakis
5f48cb6203 Refactor writeback code. cc #5527 2014-05-06 15:16:29 -04:00
Alex Crichton
948526134b etc: Add box as a keyword to editor configs
This keyword is about to be used much more often than it was a few weeks ago,
it's time to tell editors about the new keyword.
2014-05-06 10:49:35 -07:00
bors
1f6db7f4f6 auto merge of #13822 : EdorianDark/rust/master, r=cmr
New attempt to generalize stats, after #12606.
Since #12355 did not get merged, i want go get first get my change done and the try to fix sum.
2014-05-06 10:16:40 -07:00
Brandon Waskiewicz
949143e17a Update multiple file use statement example
Update the example to make the usage of `pub mod foo;` much more
apparent, as well as using an example where setting the visibility of
the module is actually necessary.
2014-05-06 11:11:52 -04:00
bors
c600dc0f53 auto merge of #13962 : luqmana/rust/al, r=alexcrichton 2014-05-06 08:06:45 -07:00
bors
061db52b2b auto merge of #13961 : richo/rust/richo-author, r=alexcrichton
Shamelessly adds myself as a contributor.
2014-05-06 01:36:34 -07:00
bors
0605f05e42 auto merge of #13952 : aaronraimist/rust/patch-1, r=thestinger 2014-05-06 00:11:37 -07:00
Luqman Aden
feb2be6bd1 Lower armhf target feature to v6. 2014-05-06 02:05:05 -04:00
bors
5c16cf975d auto merge of #13939 : richo/rust/docs/composability, r=thestinger
While there are various references to the work compositionality on the web, I can't find any reference to it being an actual word. My understanding is that composability is what's actually meant here anyway.
2014-05-05 22:46:35 -07:00
bors
cba66bc920 auto merge of #13925 : kballard/rust/vim_indent_bracket_fix, r=thestinger
If an unbalanced [ exists in a string or comment, this should not be
considered when calculating the indent at the top level.

Similarly, when testing for ({/}) to see if we're at the top level to
begin with, strings and comments should be skipped.
2014-05-05 21:21:34 -07:00
Richo Healey
809a2f8a7b Add Richo Healey to contributors 2014-05-05 20:49:50 -07:00
bors
a1ca57237b auto merge of #13946 : pnkfelix/rust/fsk-cleanup-proc-comment-in-guide-tasks, r=alexcrichton
Followup to some recent feedback in PR #13676.
2014-05-05 19:56:33 -07:00
bors
acf9d42146 auto merge of #13940 : edwardw/rust/refutable-match, r=pcwalton
By carefully distinguishing falling back to the default arm from moving
on to the next pattern, this patch adjusts the codegen logic for range
and guarded arms of pattern matching expression. It is a more
appropriate way of fixing #12582 and #13027 without causing regressions
such as #13867.
    
Closes #13867
2014-05-05 18:31:33 -07:00
bors
bd3fb81e5e auto merge of #13934 : huonw/rust/transmute-mut, r=alexcrichton
Turning a `&T` into an `&mut T` is undefined behaviour, and needs to be
done very very carefully. Providing a convenience function for exactly
this task is a bad idea, just tempting people into doing the wrong
thing.

(The right thing is to use types like `Cell`, `RefCell` or `Unsafe`.)

cc https://github.com/mozilla/rust/issues/13933
2014-05-05 16:51:30 -07:00
bors
7583544fb5 auto merge of #13912 : seanmonstar/rust/logrecord, r=alexcrichton
The logging macros now create a LogRecord, and pass that to the Logger. This will allow custom loggers to change the formatting, and possible filter on more properties of the log record.

DefaultLogger's formatting was taken from Python's default formatting:
`LEVEL:from: message`

Also included: fmt::Arguments now implement Show, so they can be used to
extend format strings.

@alexcrichton r?
2014-05-05 15:26:31 -07:00
Aaron Turon
8d1d7d9b5f Change std::io::FilePermission to a typesafe representation
This patch changes `std::io::FilePermissions` from an exposed `u32`
representation to a typesafe representation (that only allows valid
flag combinations) using the `std::bitflags`, thus ensuring a greater
degree of safety on the Rust side.

Despite the change to the type, most code should continue to work
as-is, sincde the new type provides bit operations in the style of C
flags. To get at the underlying integer representation, use the `bits`
method; to (unsafely) convert to `FilePermissions`, use
`FilePermissions::from_bits`.

Closes #6085.

[breaking-change]
2014-05-05 15:24:36 -07:00
Aaron Turon
c00d8fd9a0 Add (unsafe) coercion from bits to std::bitflags
The intent of `std::bitflags` is to allow building type-safe wrappers
around C-style flags APIs. But in addition to construction these flags
from the Rust side, we need a way to convert them from the C
side. This patch adds a `from_bits` function, which is unsafe since
the bits in question may not represent a valid combination of flags.
2014-05-05 15:24:36 -07:00
Aaron Turon
b733df0fc7 Allow attributes in std::bitflags::bitflags!
The `std::bitflags::bitflags!` macro did not provide support for
adding attributes to the generated structure or flags, due to
limitations in the parser for macros. This patch works around the
parser limitations by requiring a `flags` keyword in the overall
`bitflags!` invocation, and a `static` keyword for each flag:

    bitflags!(
        #[deriving(Hash)]
        #[doc="Three flags"]
        flags Flags: u32 {
            #[doc="The first flag"]
            static FlagA       = 0x00000001,
            static FlagB       = 0x00000010,
            static FlagC       = 0x00000100
        }
    )
2014-05-05 15:24:36 -07:00
bors
600507d538 auto merge of #13782 : alexcrichton/rust/issue-13775, r=pcwalton
These often crop up when using default methods that don't actually bind their
argument names.

Closes #13775
2014-05-05 13:46:31 -07:00
Aaron Raimist
ea46a7406a Updated CONTRIBUTING.md for 2014 2014-05-05 15:46:10 -05:00
bors
d943b0fee8 auto merge of #13907 : iliekturtles/rust/tutorial, r=alexcrichton
Some minor clarifications and fixes.
2014-05-05 12:21:36 -07:00
Sean McArthur
ceb29314a7 log: Logger receiveis a LogRecord
The logging macros now create a LogRecord, and pass that to the
Logger, instead of passing a `level` and `args`. The new signature is:

    trait Logger {
        fn log(&mut self, record: &LogRecord);
    }

The LogRecord includes additional values that may be useful to custom
loggers, and also allows for further expansion if not values are found
useful.

DefaultLogger's formatting was taken from Python's default formatting:
`LEVEL:from: message`

Also included: fmt::Arguments now implement Show, so they can be used to
extend format strings.

[breaking-change]
2014-05-05 11:18:53 -07:00
bors
fd625dda9a auto merge of #13271 : stepancheg/rust/align, r=pcwalton
This patch fixes issue #13186.

When generating constant expression for enum, it is possible that
alignment of expression may be not equal to alignment of type.  In that
case space after last struct field must be padded to match size of value
and size of struct. This commit adds that padding.

See detailed explanation in src/test/run-pass/trans-tag-static-padding.rs
2014-05-05 10:06:39 -07:00
bors
2be738ae36 auto merge of #13935 : thestinger/rust/noalias, r=pcwalton
This was removed because these could alias with `&const T` or `@mut T`
and those are now gone from the language. There are still aliasing
issues within local scopes, but this is correct for function parameters.

This also removes the no-op `noalias` marker on proc (not a pointer) and
leaves out the mention of #6750 because real type-based alias analysis
is not within the scope of best effort usage of the `noalias` attribute.

Test case:

    pub fn foo(x: &mut &mut u32) {
        **x = 5;
        **x = 5;
    }

Before:

    define void @_ZN3foo20h0ce94c9671b0150bdaa4v0.0E(i32** nocapture readonly) unnamed_addr #0 {
    entry-block:
      %1 = load i32** %0, align 8
      store i32 5, i32* %1, align 4
      %2 = load i32** %0, align 8
      store i32 5, i32* %2, align 4
      ret void
    }

After:

    define void @_ZN3foo20h0ce94c9671b0150bdaa4v0.0E(i32** noalias nocapture readonly) unnamed_addr #0 {
    entry-block:
      %1 = load i32** %0, align 8
      store i32 5, i32* %1, align 4
      ret void
    }

Closes #12436
2014-05-05 08:41:39 -07:00
Mike Boutin
055cbdeee0 doc: Corrected example in 17.8 Deriving implementations for traits
Corrected example to to use Rand trait referenced in preceding
description and included an example using the Show trait to print ABC.
2014-05-05 11:25:16 -04:00
Mike Boutin
e65aea522c doc: Minor example formatting in 11 References 2014-05-05 11:24:00 -04:00
Mike Boutin
81bc32d975 doc: Clarified 4.2 Pattern matching
Combined redundant paragraphs about the match expression and removed a
redundant example.
2014-05-05 11:24:00 -04:00
bors
ecc18f3444 auto merge of #13749 : pnkfelix/rust/add-libgraphviz-crate, r=alexcrichton
Add a `graphviz` crate for making .dot files to layout and render graphs.

(This is a precursor to other work to render control-flow graphs from within rustc itself; but this crate should be independently usable, since it abstracts over the client's graph-representation and labeling method.)
2014-05-05 05:36:37 -07:00
Felix S. Klock II
67307d4e08 Placate rustdocs testable-by-default code blocks. 2014-05-05 14:31:06 +02:00
Edward Wang
90449abcb3 Adjust codegen logic for range and guarded arms
By carefully distinguishing falling back to the default arm from moving
on to the next pattern, this patch adjusts the codegen logic for range
and guarded arms of pattern matching expression. It is a more
appropriate way of fixing #12582 and #13027 without causing regressions
such as #13867.

Closes #13867
2014-05-05 20:17:59 +08:00
Edward Wang
7adc48527f Reverse #13034
It has been found that #13034 was flawed and caused regression #13867.
This patch reveres the changes made by it except the companion tests.
2014-05-05 20:16:18 +08:00
Felix S. Klock II
0fb1f3fd38 Cleanup proc comment in guide-tasks.md. 2014-05-05 13:24:54 +02:00
bors
8895f25241 auto merge of #13942 : JamesLaverack/rust/master, r=luqmana
Version changed due to a newer requirement in LLVM.
2014-05-05 03:06:37 -07:00
bors
dcde1ee163 auto merge of #13936 : Armavica/rust/lint_check-range, r=kballard
Some cases were not correctly handled by this lint, for instance `let a = 42u8; a < 0` and `let a = 42u8; a > 255`.
It led to the discovery of two useless comparisons, which I removed.
2014-05-05 01:41:39 -07:00
Huon Wilson
edd9bad4ee std::comm: use Unsafe to avoid U.B. & -> &mut transmutes. 2014-05-05 18:20:41 +10:00
Huon Wilson
781ac3e777 std: deprecate cast::transmute_mut.
Turning a `&T` into an `&mut T` carries a large risk of undefined
behaviour, and needs to be done very very carefully. Providing a
convenience function for exactly this task is a bad idea, just tempting
people into doing the wrong thing.

The right thing is to use types like `Cell`, `RefCell` or `Unsafe`.

For memory safety, Rust has that guarantee that `&mut` pointers do not
alias with any other pointer, that is, if you have a `&mut T` then that
is the only usable pointer to that `T`. This allows Rust to assume that
writes through a `&mut T` do not affect the values of any other `&` or
`&mut` references. `&` pointers have no guarantees about aliasing or
not, so it's entirely possible for the same pointer to be passed into
both arguments of a function like

    fn foo(x: &int, y: &int) { ... }

Converting either of `x` or `y` to a `&mut` pointer and modifying it
would affect the other value: invalid behaviour.

(Similarly, it's undefined behaviour to modify the value of an immutable
local, like `let x = 1;`.)

At a low-level, the *only* safe way to obtain an `&mut` out of a `&` is
using the `Unsafe` type (there are higher level wrappers around it, like
`Cell`, `RefCell`, `Mutex` etc.). The `Unsafe` type is registered with
the compiler so that it can reason a little about these `&` to `&mut`
casts, but it is still up to the user to ensure that the `&mut`s
obtained out of an `Unsafe` never alias.

(Note that *any* conversion from `&` to `&mut` can be invalid, including
a plain `transmute`, or casting `&T` -> `*T` -> `*mut T` -> `&mut T`.)

[breaking-change]
2014-05-05 18:20:41 +10:00
bors
abdacecdf8 auto merge of #13930 : alexcrichton/rust/snapshots, r=huonw
cc @pcwalton and @flaper87, this has box expressions and opt-in builtin kinds.
2014-05-04 23:16:40 -07:00