- 17 1月, 2014 1 次提交
-
-
由 Niko Matsakis 提交于
Consider all zero-sized data structures to be voidish, bypassing some "quirky" parts of LLVM (see e.g. LLVM bug 9900) but also generating better code
-
- 16 1月, 2014 2 次提交
-
-
由 Niko Matsakis 提交于
-
由 Niko Matsakis 提交于
Major changes: - Define temporary scopes in a syntax-based way that basically defaults to the innermost statement or conditional block, except for in a `let` initializer, where we default to the innermost block. Rules are documented in the code, but not in the manual (yet). See new test run-pass/cleanup-value-scopes.rs for examples. - Refactors Datum to better define cleanup roles. - Refactor cleanup scopes to not be tied to basic blocks, permitting us to have a very large number of scopes (one per AST node). - Introduce nascent documentation in trans/doc.rs covering datums and cleanup in a more comprehensive way.
-
- 15 1月, 2014 1 次提交
-
-
由 Eduard Burtescu 提交于
-
- 11 1月, 2014 1 次提交
-
-
由 Eduard Burtescu 提交于
Fixes #7411, #10615.
-
- 10 1月, 2014 1 次提交
-
-
由 Eduard Burtescu 提交于
-
- 08 1月, 2014 1 次提交
-
-
由 Patrick Walton 提交于
stack-allocate function contexts.
-
- 04 1月, 2014 1 次提交
-
-
由 Patrick Walton 提交于
-
- 27 12月, 2013 4 次提交
-
-
由 Patrick Walton 提交于
-
由 Patrick Walton 提交于
-
由 Patrick Walton 提交于
-
由 Patrick Walton 提交于
-
- 19 12月, 2013 1 次提交
-
-
由 Huon Wilson 提交于
There's no need for the restrictions of a closure with the above methods.
-
- 30 11月, 2013 1 次提交
-
-
由 Marvin Löbel 提交于
-
- 29 11月, 2013 1 次提交
-
-
由 Alex Crichton 提交于
-
- 27 11月, 2013 1 次提交
-
-
由 Patrick Walton 提交于
and librustpkg.
-
- 20 11月, 2013 1 次提交
-
-
由 Patrick Walton 提交于
-
- 19 11月, 2013 2 次提交
- 10 11月, 2013 1 次提交
-
-
由 Alex Crichton 提交于
This adds an other ABI option which allows a custom selection over the target architecture and OS. The only current candidate for this change is that kernel32 on win32 uses stdcall, but on win64 it uses the cdecl calling convention. Otherwise everywhere else this is defined as using the Cdecl calling convention. cc #10049 Closes #8774
-
- 05 11月, 2013 1 次提交
-
-
由 Luqman Aden 提交于
-
- 22 10月, 2013 1 次提交
-
-
由 Alex Crichton 提交于
Who doesn't like a massive renaming?
-
- 20 10月, 2013 1 次提交
-
-
由 Alex Crichton 提交于
This commit resumes management of the stack boundaries and limits when switching between tasks. This additionally leverages the __morestack function to run code on "stack overflow". The current behavior is to abort the process, but this is probably not the best behavior in the long term (for deails, see the comment I wrote up in the stack exhaustion routine).
-
- 11 10月, 2013 1 次提交
-
-
由 Jyun-Yan You 提交于
I borrow some ideas from clang's ABIInfo.h and TargetInfo.cpp. LLVMType is replaced with ArgType, which is similar to clang's ABIArgInfo, and I also merge attrs of FnType into it. Now ABI implementation doesn't need to insert hidden return pointer to arg_tys of FnType. Instead it is handled in foreign.rs. This change also fixes LLVM assertion failure when compiling MIPS target.
-
- 09 10月, 2013 1 次提交
-
-
由 Daniel Micay 提交于
-
- 03 10月, 2013 1 次提交
-
-
由 Daniel Micay 提交于
This fixes two existing bugs along the way: * The `transmute` intrinsic did not correctly handle casts of immediate aggregates like newtype structs and tuples. * The code for calling foreign functions used the wrong type to create an `alloca` temporary enum Foo { A, B } fn foo() -> Foo { A } Before: ; Function Attrs: nounwind uwtable define void @_ZN3foo18hbedc642d5d9cf5aag4v0.0E(%enum.Foo* noalias nocapture sret, { i64, %tydesc*, i8*, i8*, i8 }* nocapture readnone) #0 { "function top level": %2 = getelementptr inbounds %enum.Foo* %0, i64 0, i32 0 store i64 0, i64* %2, align 8 ret void } After: ; Function Attrs: nounwind readnone uwtable define %enum.Foo @_ZN3foo18hbedc642d5d9cf5aag4v0.0E({ i64, %tydesc*, i8*, i8*, i8 }* nocapture readnone) #0 { "function top level": ret %enum.Foo zeroinitializer }
-
- 02 10月, 2013 1 次提交
-
-
由 Daniel Micay 提交于
-
- 01 10月, 2013 2 次提交
-
-
由 Daniel Micay 提交于
fn foo() -> (u32, u8, u8, u8, u8) { (4, 5, 6, 7, 8) } Before: ; Function Attrs: nounwind uwtable define void @_ZN3foo18hbb616262f874f8daf4v0.0E({ i32, i8, i8, i8, i8 }* noalias nocapture sret, { i64, %tydesc*, i8*, i8*, i8 }* nocapture readnone) #0 { "function top level": %2 = getelementptr inbounds { i32, i8, i8, i8, i8 }* %0, i64 0, i32 0 store i32 4, i32* %2, align 4 %3 = getelementptr inbounds { i32, i8, i8, i8, i8 }* %0, i64 0, i32 1 store i8 5, i8* %3, align 4 %4 = getelementptr inbounds { i32, i8, i8, i8, i8 }* %0, i64 0, i32 2 store i8 6, i8* %4, align 1 %5 = getelementptr inbounds { i32, i8, i8, i8, i8 }* %0, i64 0, i32 3 store i8 7, i8* %5, align 2 %6 = getelementptr inbounds { i32, i8, i8, i8, i8 }* %0, i64 0, i32 4 store i8 8, i8* %6, align 1 ret void } After: ; Function Attrs: nounwind readnone uwtable define { i32, i8, i8, i8, i8 } @_ZN3foo18hbb616262f874f8daf4v0.0E({ i64, %tydesc*, i8*, i8*, i8 }* nocapture readnone) #0 { "function top level": ret { i32, i8, i8, i8, i8 } { i32 4, i8 5, i8 6, i8 7, i8 8 } }
-
由 Alex Crichton 提交于
-
- 27 9月, 2013 1 次提交
-
-
由 Erick Tryzelaar 提交于
-
- 17 9月, 2013 3 次提交
-
-
由 Daniel Micay 提交于
-
由 Daniel Micay 提交于
This brings Rust in line with how `clang` handles return pointers. Example: pub fn bar() -> [uint, .. 8] { let a = [0, .. 8]; a } Before: ; Function Attrs: nounwind uwtable define void @_ZN3bar17ha4635c6f704bfa334v0.0E([8 x i64]* nocapture, { i64, %tydesc*, i8*, i8*, i8 }* nocapture readnone) #1 { "function top level": %a = alloca [8 x i64], align 8 %2 = bitcast [8 x i64]* %a to i8* call void @llvm.memset.p0i8.i64(i8* %2, i8 0, i64 64, i32 8, i1 false) %3 = bitcast [8 x i64]* %0 to i8* call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %2, i64 64, i32 8, i1 false) ret void } After: ; Function Attrs: nounwind uwtable define void @_ZN3bar17ha4635c6f704bfa334v0.0E([8 x i64]* noalias nocapture sret, { i64, %tydesc*, i8*, i8*, i8 }* nocapture readnone) #1 { "function top level": %2 = bitcast [8 x i64]* %0 to i8* call void @llvm.memset.p0i8.i64(i8* %2, i8 0, i64 64, i32 8, i1 false) ret void } Closes #9072 Closes #7298 Closes #9154
-
由 Daniel Micay 提交于
The `noalias` attributes were being set only on function definitions, not on all declarations. This is harmless for `noalias`, but prevented some optimization opportunities and is *not* harmless for other attributes like `sret` with ABI implications. Closes #9104
-
- 16 9月, 2013 2 次提交
-
-
由 Alex Crichton 提交于
Beforehand it was assumed that the standard cdecl abi was used for all extern fns of extern crates, but this reads the abi of the extern fn type and declares the function in the local crate with the appropriate type.
-
由 Daniel Micay 提交于
-
- 14 9月, 2013 1 次提交
-
-
由 Daniel Micay 提交于
Since function pointers do not carry along the function attributes with them in the type, this needs to be set on the call instruction itself. Closes #9152
-
- 01 9月, 2013 1 次提交
-
-
由 Marvin Löbel 提交于
-
- 21 8月, 2013 1 次提交
-
-
由 Niko Matsakis 提交于
cc #3678
-
- 19 8月, 2013 1 次提交
-
-
由 Niko Matsakis 提交于
-
- 12 8月, 2013 1 次提交
-
-
由 Niko Matsakis 提交于
-