Luqman Aden
c669ccf3d3
libsyntax/librustc: Allow calling variadic foreign functions.
2013-11-04 23:53:11 -05:00
Alex Crichton
daf5f5a4d1
Drop the '2' suffix from logging macros
...
Who doesn't like a massive renaming?
2013-10-22 08:09:56 -07:00
Daniel Micay
abe648d608
treat uninhabited enums as voidish
2013-10-02 10:02:52 -04:00
bors
33a5928b46
auto merge of #9656 : thestinger/rust/immediate, r=alexcrichton
...
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 }
}
2013-10-01 21:56:27 -07:00
Daniel Micay
5e4ae4f45f
make small (<= size_of::<int>()) tuples immediate
...
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 }
}
2013-10-01 02:57:59 -04:00
Alex Crichton
1b80558be3
rustc: Remove usage of fmt!
2013-09-30 23:21:19 -07:00
blake2-ppc
948b5ab87a
trans: Change @ast::Expr -> &ast::Expr where possible
2013-09-30 19:37:17 +02:00
Felix S. Klock II
9d0727736b
Fold context into CalleeTranslationVisitor.
2013-09-25 10:59:06 +02:00
Daniel Micay
22b6f7481f
document why attributes are set on CallInst
2013-09-16 13:44:04 -04:00
Daniel Micay
b2eb1c01a4
add sret + noalias to the out pointer parameter
...
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
2013-09-16 13:44:04 -04:00
Daniel Micay
6d0a847c3a
teach Call/CallWithConv to set attributes
2013-09-15 23:34:11 -04:00
SiegeLord
8c5402fd36
Properly encode/decode structural variants.
2013-09-11 14:49:09 -04:00
Marvin Löbel
7419085337
Modernized a few more types in syntax::ast
2013-09-03 14:45:06 +02:00
Patrick Walton
6c37e3b7f8
librustc: Implement basic lazy implementation loading.
...
This is only for implementations defined in the same crate as the trait they
implement.
2013-08-27 18:47:59 -07:00
Patrick Walton
8693943676
librustc: Ensure that type parameters are in the right positions in paths.
...
This removes the stacking of type parameters that occurs when invoking
trait methods, and fixes all places in the standard library that were
relying on it. It is somewhat awkward in places; I think we'll probably
want something like the `Foo::<for T>::new()` syntax.
2013-08-27 18:47:57 -07:00
bors
9feaf1d023
auto merge of #8594 : bytewiseand/rust/static-fn-ptr, r=pcwalton
...
Fixes #8588
2013-08-21 15:51:34 -07:00
bors
2246d56e71
auto merge of #8619 : pnkfelix/rust/fsk-visitor-vpar-defaults-step3, r=nmatsakis
...
Follow up to #8539 (step 2 of 5).
(See #8527 , which was step 1 of 5, for the full outline.)
Part of #7081 .
2013-08-19 09:12:03 -07:00
Niko Matsakis
303f650ecf
Issue #3678 : Remove wrappers and call foreign functions directly
2013-08-19 07:13:15 -04:00
Andreas Martens
a1066130c0
Fix ICE when calling static and static function pointers
...
Fixes #8588
2013-08-18 20:21:23 +02:00
Felix S. Klock II
23ce08a4cd
port callee.rs from oldvisit to <V:Visitor> trait API.
2013-08-15 04:09:19 +02:00
Niko Matsakis
006c6b6be4
trans: Rely on new AutoBorrowObj adjustment to match up object receivers
...
Note: some portions of this commit written by @Sodel-the-Vociferous
(Daniel Ralston)
2013-08-11 14:01:19 -04:00
bors
8495ee52b2
auto merge of #8262 : dotdash/rust/no_rval_copies, r=pcwalton
...
rvalues aren't going to be used anywhere but as the argument, so
there's no point in copying them. LLVM used to eliminate the copy
later, but why bother emitting it in the first place?
2013-08-04 10:55:53 -07:00
Daniel Micay
e7bb33aed8
rm obsolete for
support from the compiler
2013-08-04 00:39:48 -04:00
Daniel Micay
1008945528
remove obsolete foreach
keyword
...
this has been replaced by `for`
2013-08-03 22:48:02 -04:00
Björn Steinbrink
a51e3e46ef
trans_arg_expr: Omit extra copies for rvalues
...
rvalues aren't going to be used anywhere but as the argument, so
there's no point in copying them. LLVM used to eliminate the copy
later, but why bother emitting it in the first place?
2013-08-03 15:03:58 +02:00
Patrick Walton
887c656970
librustc: Introduce a new visitor type based on traits and port syntax to it.
...
This is preparation for removing `@fn`.
This does *not* use default methods yet, because I don't know
whether they work. If they do, a forthcoming PR will use them.
This also changes the precedence of `as`.
2013-08-02 21:57:58 -07:00
Daniel Micay
1fc4db2d08
migrate many for
loops to foreach
2013-08-01 05:34:55 -04:00
Michael Woerister
8a329770b6
New naming convention for ast::{node_id, local_crate, crate_node_id, blk_check_mode, ty_field, ty_method}
2013-07-29 16:16:48 +02:00
bors
baa649ede6
auto merge of #8027 : nikomatsakis/rust/issue-4846-multiple-lifetime-parameters-1, r=pcwalton
...
Small step towards #4846 . r? @msullivan
2013-07-25 07:37:45 -07:00
bors
906264b50f
auto merge of #8015 : msullivan/rust/default-methods, r=nikomatsakis
...
Lots of changes to vtable resolution, handling of super/self method calls in default methods. Fix a lot of trait inheritance bugs.
r? @nikomatsakis
2013-07-25 03:07:44 -07:00
Niko Matsakis
dc38e1616a
Generalize the ty::substs
struct so that it can represent
...
multiple lifetime parameters, and not just one. Also add an option
for erasing lifetimes, which makes trans code somewhat simpler
and cleaner.
2013-07-24 16:52:57 -04:00
Birunthan Mohanathas
d047cf1ec6
Change 'print(fmt!(...))' to printf!/printfln! in src/lib*
2013-07-24 09:45:20 -04:00
Michael Sullivan
79f8a7fee5
Properly track and export information about vtables for impls in metadata.
...
Partially rework how vtables are handled in default method calls.
Closes #7460 .
2013-07-23 17:06:33 -07:00
Michael Sullivan
89c4af0ea9
Fix a default method polymorphism bug.
2013-07-23 17:06:32 -07:00
Michael Woerister
3315edfae7
Adapted trans::common::{block, fn_ctxt, scope_info}
to new naming convention.
2013-07-23 15:38:55 +02:00
Michael Woerister
4bd1424622
Ast spanned<T> refactoring, renaming: crate, local, blk, crate_num, crate_cfg.
...
`crate => Crate`
`local => Local`
`blk => Block`
`crate_num => CrateNum`
`crate_cfg => CrateConfig`
Also, Crate and Local are not wrapped in spanned<T> anymore.
2013-07-22 15:35:28 +02:00
Michael Sullivan
585e283769
Add provided method information to ty::Method. Get rid of ProvidedMethodSource.
2013-07-18 13:56:14 -07:00
Patrick Walton
99b33f7219
librustc: Remove all uses of "copy".
2013-07-17 14:57:51 -07:00
Patrick Walton
b4e674f6e6
librustc: Add a lint mode for unnecessary copy
and remove a bunch of them.
2013-07-17 14:56:42 -07:00
Alex Crichton
242606c793
Clean up various warnings throughout the codebase
2013-07-14 09:29:12 -07:00
Björn Steinbrink
dcd5d14e6c
Avoid return blocks that have only a single predecessor
...
Currently, we always create a dedicated "return" basic block, but when
there's only a single predecessor for that block, it can be merged with
that predecessor. We can achieve that merge by only creating the return
block on demand, avoiding its creation when its not required.
Reduces the pre-optimization size of librustc.ll created with --passes ""
by about 90k lines which equals about 4%.
2013-07-13 13:33:48 +02:00
Michael Sullivan
19446418bc
Drop a now unnecessary argument from maybe_instantiate_inline.
2013-07-11 15:51:10 -07:00
Michael Sullivan
2b89b437fb
Normalize self types for monomorphization.
2013-07-11 15:51:09 -07:00
Brendan Cully
e6e4f52bcf
remove unused imports
2013-07-10 22:08:50 -07:00
Niko Matsakis
979d3a54f9
Correct merge failures
2013-07-08 13:55:11 -04:00
Niko Matsakis
2d3262ca7b
Update trans to use type to decide when to move, not the moves table (simpler
...
for cases where it's hard to decide what id to use for the lookup); modify
irrefutable bindings code to move or copy depending on the type, rather than
threading through a flag. Also updates how local variables and arguments are
registered. These changes were hard to isolate.
2013-07-08 13:55:10 -04:00
Niko Matsakis
41efcdf299
Make all allocas named so we can see where they originate
...
in the generated LLVM code.
2013-07-08 13:55:10 -04:00
Björn Steinbrink
00ba8b3ac0
Improve handling of immediate return values
...
We currently still handle immediate return values a lot like
non-immediate ones. We provide a slot for them and store them into
memory, often just to immediately load them again. To improve this
situation, trans_call_inner has to return a Result which contains the
immediate return value.
Also, it also needs to accept "No destination" in addition to just
SaveIn and Ignore. Since "No destination" isn't something that fits
well into the Dest type, I've chosen to simply use Option<Dest>
instead, paired with an assertion that checks that "None" is only
allowed for immediate return values.
2013-07-08 13:34:13 +02:00
Björn Steinbrink
4a485f8cec
Avoid unused allocas for immediate return values
...
There's no need to allocate a return slot for anykind of immediate
return value, not just not for nils. Also, when the return value is
ignored, we only have to copy it to a temporary alloca if it's actually
required to call drop_ty on it.
2013-07-08 13:17:46 +02:00
Seo Sanghyeon
fd19289108
Classify newtype structs S(T) as immediates if T is an immediate
2013-07-01 13:02:14 +09:00