Skip to content

Commit 923ce72

Browse files
committed
---
yaml --- r: 145261 b: refs/heads/try2 c: 040f1c0 h: refs/heads/master i: 145259: 63196e7 v: v3
1 parent 23aa6e9 commit 923ce72

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

93 files changed

+3111
-2911
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ refs/heads/snap-stage3: 78a7676898d9f80ab540c6df5d4c9ce35bb50463
55
refs/heads/try: 519addf6277dbafccbb4159db4b710c37eaa2ec5
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
8-
refs/heads/try2: 99ec14dbb0c6017106f2378bedd35ac256aa0006
8+
refs/heads/try2: 040f1c06bc7c1c5fa37477513227114d343b3ec3
99
refs/heads/dist-snap: ba4081a5a8573875fed17545846f6f6902c8ba8d
1010
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
1111
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503

branches/try2/doc/rust.md

Lines changed: 12 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ string_body : non_double_quote
248248
| '\x5c' [ '\x22' | common_escape ] ;
249249
250250
common_escape : '\x5c'
251-
| 'n' | 'r' | 't' | '0'
251+
| 'n' | 'r' | 't'
252252
| 'x' hex_digit 2
253253
| 'u' hex_digit 4
254254
| 'U' hex_digit 8 ;
@@ -962,76 +962,24 @@ parameters to allow methods with that trait to be called on values
962962
of that type.
963963

964964

965-
#### Unsafety
965+
#### Unsafe functions
966966

967-
Unsafe operations are those that potentially violate the memory-safety guarantees of Rust's static semantics.
967+
Unsafe functions are those containing unsafe operations that are not contained in an [`unsafe` block](#unsafe-blocks).
968+
Such a function must be prefixed with the keyword `unsafe`.
968969

969-
The following language level features cannot be used in the safe subset of Rust:
970+
Unsafe operations are those that potentially violate the memory-safety guarantees of Rust's static semantics.
971+
Specifically, the following operations are considered unsafe:
970972

971973
- Dereferencing a [raw pointer](#pointer-types).
972-
- Calling an unsafe function (including an intrinsic or foreign function).
973-
974-
##### Unsafe functions
975-
976-
Unsafe functions are functions that are not safe in all contexts and/or for all possible inputs.
977-
Such a function must be prefixed with the keyword `unsafe`.
974+
- Casting a [raw pointer](#pointer-types) to a safe pointer type.
975+
- Calling an unsafe function.
978976

979977
##### Unsafe blocks
980978

981-
A block of code can also be prefixed with the `unsafe` keyword, to permit calling `unsafe` functions
982-
or dereferencing raw pointers within a safe function.
983-
984-
When a programmer has sufficient conviction that a sequence of potentially unsafe operations is
985-
actually safe, they can encapsulate that sequence (taken as a whole) within an `unsafe` block. The
986-
compiler will consider uses of such code safe, in the surrounding context.
987-
988-
Unsafe blocks are used to wrap foreign libraries, make direct use of hardware or implement features
989-
not directly present in the language. For example, Rust provides the language features necessary to
990-
implement memory-safe concurrency in the language but the implementation of tasks and message
991-
passing is in the standard library.
992-
993-
Rust's type system is a conservative approximation of the dynamic safety requirements, so in some
994-
cases there is a performance cost to using safe code. For example, a doubly-linked list is not a
995-
tree structure and can only be represented with managed or reference-counted pointers in safe code.
996-
By using `unsafe` blocks to represent the reverse links as raw pointers, it can be implemented with
997-
only owned pointers.
998-
999-
##### Behavior considered unsafe
1000-
1001-
This is a list of behavior which is forbidden in all Rust code. Type checking provides the guarantee
1002-
that these issues are never caused by safe code. An `unsafe` block or function is responsible for
1003-
never invoking this behaviour or exposing an API making it possible for it to occur in safe code.
1004-
1005-
* Data races
1006-
* Dereferencing a null/dangling raw pointer
1007-
* Mutating an immutable value/reference, if it is not marked as non-`Freeze`
1008-
* Reads of [undef](http://llvm.org/docs/LangRef.html#undefined-values) (uninitialized) memory
1009-
* Breaking the [pointer aliasing rules](http://llvm.org/docs/LangRef.html#pointer-aliasing-rules)
1010-
with raw pointers (a subset of the rules used by C)
1011-
* Invoking undefined behavior via compiler intrinsics:
1012-
* Indexing outside of the bounds of an object with `std::ptr::offset` (`offset` intrinsic), with
1013-
the exception of one byte past the end which is permitted.
1014-
* Using `std::ptr::copy_nonoverlapping_memory` (`memcpy32`/`memcpy64` instrinsics) on
1015-
overlapping buffers
1016-
* Invalid values in primitive types, even in private fields/locals:
1017-
* Dangling/null pointers in non-raw pointers, or slices
1018-
* A value other than `false` (0) or `true` (1) in a `bool`
1019-
* A discriminant in an `enum` not included in the type definition
1020-
* A value in a `char` which is a surrogate or above `char::MAX`
1021-
* non-UTF-8 byte sequences in a `str`
1022-
1023-
##### Behaviour not considered unsafe
1024-
1025-
This is a list of behaviour not considered *unsafe* in Rust terms, but that may be undesired.
1026-
1027-
* Deadlocks
1028-
* Reading data from private fields (`std::repr`, `format!("{:?}", x)`)
1029-
* Leaks due to reference count cycles, even in the global heap
1030-
* Exiting without calling destructors
1031-
* Sending signals
1032-
* Accessing/modifying the file system
1033-
* Unsigned integer overflow (well-defined as wrapping)
1034-
* Signed integer overflow (well-defined as two's complement representation wrapping)
979+
A block of code can also be prefixed with the `unsafe` keyword, to permit a sequence of unsafe operations in an otherwise-safe function.
980+
This facility exists because the static semantics of Rust are a necessary approximation of the dynamic semantics.
981+
When a programmer has sufficient conviction that a sequence of unsafe operations is actually safe, they can encapsulate that sequence (taken as a whole) within an `unsafe` block. The compiler will consider uses of such code "safe", to the surrounding context.
982+
1035983

1036984
#### Diverging functions
1037985

branches/try2/mk/llvm.mk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ LLVM_STAMP_$(1) = $$(CFG_LLVM_BUILD_DIR_$(1))/llvm-auto-clean-stamp
2828

2929
$$(LLVM_CONFIG_$(1)): $$(LLVM_DEPS) $$(LLVM_STAMP_$(1))
3030
@$$(call E, make: llvm)
31-
$$(Q)$$(MAKE) -C $$(CFG_LLVM_BUILD_DIR_$(1)) $$(CFG_LLVM_BUILD_ENV_$(1))
31+
$$(Q)$$(MAKE) -C $$(CFG_LLVM_BUILD_DIR_$(1)) $$(CFG_LLVM_BUILD_ENV)
3232
$$(Q)touch $$(LLVM_CONFIG_$(1))
3333
endif
3434

branches/try2/mk/platform.mk

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -343,7 +343,6 @@ CFG_PATH_MUNGE_mips-unknown-linux-gnu := true
343343
CFG_LDPATH_mips-unknown-linux-gnu :=
344344
CFG_RUN_mips-unknown-linux-gnu=
345345
CFG_RUN_TARG_mips-unknown-linux-gnu=
346-
RUSTC_FLAGS_mips-unknown-linux-gnu := --linker=$(CXX_mips-unknown-linux-gnu) --target-cpu mips32r2 --target-feature +mips32r2,+o32
347346

348347
# i686-pc-mingw32 configuration
349348
CC_i686-pc-mingw32=$(CC)
@@ -353,7 +352,7 @@ AR_i686-pc-mingw32=$(AR)
353352
CFG_LIB_NAME_i686-pc-mingw32=$(1).dll
354353
CFG_LIB_GLOB_i686-pc-mingw32=$(1)-*.dll
355354
CFG_LIB_DSYM_GLOB_i686-pc-mingw32=$(1)-*.dylib.dSYM
356-
CFG_GCCISH_CFLAGS_i686-pc-mingw32 := -Wall -Werror -g -m32 -march=i686 -D_WIN32_WINNT=0x0600 -I$(CFG_SRC_DIR)src/etc/mingw-fix-include
355+
CFG_GCCISH_CFLAGS_i686-pc-mingw32 := -Wall -Werror -g -m32 -march=i686 -D_WIN32_WINNT=0x0600
357356
CFG_GCCISH_CXXFLAGS_i686-pc-mingw32 := -fno-rtti
358357
CFG_GCCISH_LINK_FLAGS_i686-pc-mingw32 := -shared -fPIC -g -m32
359358
CFG_GCCISH_DEF_FLAG_i686-pc-mingw32 :=
@@ -362,7 +361,6 @@ CFG_GCCISH_POST_LIB_FLAGS_i686-pc-mingw32 :=
362361
CFG_DEF_SUFFIX_i686-pc-mingw32 := .mingw32.def
363362
CFG_INSTALL_NAME_i686-pc-mingw32 =
364363
CFG_LIBUV_LINK_FLAGS_i686-pc-mingw32 := -lWs2_32 -lpsapi -liphlpapi
365-
CFG_LLVM_BUILD_ENV_i686-pc-mingw32 := CPATH=$(CFG_SRC_DIR)src/etc/mingw-fix-include
366364
CFG_EXE_SUFFIX_i686-pc-mingw32 := .exe
367365
CFG_WINDOWSY_i686-pc-mingw32 := 1
368366
CFG_UNIXY_i686-pc-mingw32 :=
@@ -481,7 +479,7 @@ define CFG_MAKE_TOOLCHAIN
481479
$$(CFG_GCCISH_DEF_FLAG_$(1))$$(3) $$(2) \
482480
$$(call CFG_INSTALL_NAME_$(1),$$(4))
483481

484-
ifeq ($$(findstring $(HOST_$(1)),arm mips),)
482+
ifneq ($(HOST_$(1)),arm)
485483

486484
# We're using llvm-mc as our assembler because it supports
487485
# .cfi pseudo-ops on mac
@@ -493,7 +491,7 @@ define CFG_MAKE_TOOLCHAIN
493491
-o=$$(1)
494492
else
495493

496-
# For the ARM and MIPS crosses, use the toolchain assembler
494+
# For the ARM crosses, use the toolchain assembler
497495
# XXX: We should be able to use the LLVM assembler
498496
CFG_ASSEMBLE_$(1)=$$(CC_$(1)) $$(CFG_DEPEND_FLAGS) $$(2) -c -o $$(1)
499497

branches/try2/mk/rt.mk

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
# working under these assumptions).
2525

2626
# Hack for passing flags into LIBUV, see below.
27-
LIBUV_FLAGS_i386 = -m32 -fPIC -I$(S)src/etc/mingw-fix-include
27+
LIBUV_FLAGS_i386 = -m32 -fPIC
2828
LIBUV_FLAGS_x86_64 = -m64 -fPIC
2929
ifeq ($(OSTYPE_$(1)), linux-androideabi)
3030
LIBUV_FLAGS_arm = -fPIC -DANDROID -std=gnu99
@@ -71,6 +71,7 @@ RUNTIME_CXXS_$(1)_$(2) := \
7171
rt/sync/lock_and_signal.cpp \
7272
rt/sync/rust_thread.cpp \
7373
rt/rust_builtin.cpp \
74+
rt/rust_run_program.cpp \
7475
rt/rust_rng.cpp \
7576
rt/rust_upcall.cpp \
7677
rt/rust_uv.cpp \

branches/try2/src/compiletest/compiletest.rs

Lines changed: 28 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ extern mod extra;
1717

1818
use std::os;
1919
use std::rt;
20+
use std::f64;
2021

2122
use extra::getopts;
2223
use extra::getopts::groups::{optopt, optflag, reqopt};
@@ -91,62 +92,64 @@ pub fn parse_config(args: ~[~str]) -> config {
9192
let matches =
9293
&match getopts::groups::getopts(args_, groups) {
9394
Ok(m) => m,
94-
Err(f) => fail!(f.to_err_msg())
95+
Err(f) => fail!(getopts::fail_str(f))
9596
};
9697

97-
if matches.opt_present("h") || matches.opt_present("help") {
98+
if getopts::opt_present(matches, "h") || getopts::opt_present(matches, "help") {
9899
let message = fmt!("Usage: %s [OPTIONS] [TESTNAME...]", argv0);
99100
println(getopts::groups::usage(message, groups));
100101
println("");
101102
fail!()
102103
}
103104

104105
fn opt_path(m: &getopts::Matches, nm: &str) -> Path {
105-
Path(m.opt_str(nm).unwrap())
106+
Path(getopts::opt_str(m, nm))
106107
}
107108

108109
config {
109-
compile_lib_path: matches.opt_str("compile-lib-path").unwrap(),
110-
run_lib_path: matches.opt_str("run-lib-path").unwrap(),
110+
compile_lib_path: getopts::opt_str(matches, "compile-lib-path"),
111+
run_lib_path: getopts::opt_str(matches, "run-lib-path"),
111112
rustc_path: opt_path(matches, "rustc-path"),
112-
clang_path: matches.opt_str("clang-path").map_move(|s| Path(s)),
113-
llvm_bin_path: matches.opt_str("llvm-bin-path").map_move(|s| Path(s)),
113+
clang_path: getopts::opt_maybe_str(matches, "clang-path").map_move(|s| Path(s)),
114+
llvm_bin_path: getopts::opt_maybe_str(matches, "llvm-bin-path").map_move(|s| Path(s)),
114115
src_base: opt_path(matches, "src-base"),
115116
build_base: opt_path(matches, "build-base"),
116117
aux_base: opt_path(matches, "aux-base"),
117-
stage_id: matches.opt_str("stage-id").unwrap(),
118-
mode: str_mode(matches.opt_str("mode").unwrap()),
119-
run_ignored: matches.opt_present("ignored"),
118+
stage_id: getopts::opt_str(matches, "stage-id"),
119+
mode: str_mode(getopts::opt_str(matches, "mode")),
120+
run_ignored: getopts::opt_present(matches, "ignored"),
120121
filter:
121122
if !matches.free.is_empty() {
122123
Some(matches.free[0].clone())
123124
} else {
124125
None
125126
},
126-
logfile: matches.opt_str("logfile").map_move(|s| Path(s)),
127-
save_metrics: matches.opt_str("save-metrics").map_move(|s| Path(s)),
127+
logfile: getopts::opt_maybe_str(matches, "logfile").map_move(|s| Path(s)),
128+
save_metrics: getopts::opt_maybe_str(matches, "save-metrics").map_move(|s| Path(s)),
128129
ratchet_metrics:
129-
matches.opt_str("ratchet-metrics").map_move(|s| Path(s)),
130+
getopts::opt_maybe_str(matches, "ratchet-metrics").map_move(|s| Path(s)),
130131
ratchet_noise_percent:
131-
matches.opt_str("ratchet-noise-percent").and_then(|s| from_str::<f64>(s)),
132-
runtool: matches.opt_str("runtool"),
133-
rustcflags: matches.opt_str("rustcflags"),
134-
jit: matches.opt_present("jit"),
135-
target: opt_str2(matches.opt_str("target")).to_str(),
136-
adb_path: opt_str2(matches.opt_str("adb-path")).to_str(),
132+
getopts::opt_maybe_str(matches,
133+
"ratchet-noise-percent").map_move(|s|
134+
f64::from_str(s).unwrap()),
135+
runtool: getopts::opt_maybe_str(matches, "runtool"),
136+
rustcflags: getopts::opt_maybe_str(matches, "rustcflags"),
137+
jit: getopts::opt_present(matches, "jit"),
138+
target: opt_str2(getopts::opt_maybe_str(matches, "target")).to_str(),
139+
adb_path: opt_str2(getopts::opt_maybe_str(matches, "adb-path")).to_str(),
137140
adb_test_dir:
138-
opt_str2(matches.opt_str("adb-test-dir")).to_str(),
141+
opt_str2(getopts::opt_maybe_str(matches, "adb-test-dir")).to_str(),
139142
adb_device_status:
140-
if (opt_str2(matches.opt_str("target")) ==
143+
if (opt_str2(getopts::opt_maybe_str(matches, "target")) ==
141144
~"arm-linux-androideabi") {
142-
if (opt_str2(matches.opt_str("adb-test-dir")) !=
145+
if (opt_str2(getopts::opt_maybe_str(matches, "adb-test-dir")) !=
143146
~"(none)" &&
144-
opt_str2(matches.opt_str("adb-test-dir")) !=
147+
opt_str2(getopts::opt_maybe_str(matches, "adb-test-dir")) !=
145148
~"") { true }
146149
else { false }
147150
} else { false },
148-
test_shard: test::opt_shard(matches.opt_str("test-shard")),
149-
verbose: matches.opt_present("verbose")
151+
test_shard: test::opt_shard(getopts::opt_maybe_str(matches, "test-shard")),
152+
verbose: getopts::opt_present(matches, "verbose")
150153
}
151154
}
152155

branches/try2/src/etc/mingw-fix-include/README.txt

Lines changed: 0 additions & 6 deletions
This file was deleted.

branches/try2/src/etc/mingw-fix-include/bits/c++config.h

Lines changed: 0 additions & 8 deletions
This file was deleted.

branches/try2/src/etc/mingw-fix-include/winbase.h

Lines changed: 0 additions & 8 deletions
This file was deleted.

branches/try2/src/etc/mingw-fix-include/winsock2.h

Lines changed: 0 additions & 12 deletions
This file was deleted.

0 commit comments

Comments
 (0)