Commit Graph

3351 Commits

Author SHA1 Message Date
Marijn Haverbeke
8f8ebb550c Implement a last-use-of-local finding algorithm
Issue #925
2011-11-18 12:49:01 +01:00
Marijn Haverbeke
0c97fcbf66 Properly check kinds in instantiation of generics
Issue #1177
2011-11-18 12:49:01 +01:00
Marijn Haverbeke
7bef89f9b5 Prevent alias pass from inserting implicit copies for noncopyable types
Issue #1177
2011-11-18 12:49:01 +01:00
Marijn Haverbeke
17b78c4a7a Overhaul the kind-checking pass
Not really useful yet because missing last-use-of-local optimization.

Also: instantiation of type parameters needs to be checked.

Issue #1177
2011-11-18 12:49:01 +01:00
Marijn Haverbeke
cefff237bf Make tag, resource and object constructors take their arguments by copy
Doing something like some([1, 2, 3]) will now no longer create a temporary
copy of the vector. It will also be easier for the kind checker to see that
putting a resource into a data-structure constructor is safe.
2011-11-18 12:49:01 +01:00
Marijn Haverbeke
4e03112141 Add a pass-by-copy parameter passing convention
This is intended to solve the problem of how to pass arguments to
constructor functions -- you want to move in rvalues, but not have to
explicitly copy stuff that is not an rvalue. The by-copy passing
convention will ensure the callee gets its own copy of the value. For
rvalues, it'll just pass off the value. For lvalues, it'll make a
copy.

Issue #1177
2011-11-18 12:49:00 +01:00
Marijn Haverbeke
9cf48d3753 Preparation for kind system overhaul
This goes before a snapshot, so that subsequenct patches can make the
transition without breaking the build. Disables kind checking pass, makes
parser accept both new and old-style kind annotation.

Issue #1177
2011-11-18 10:52:28 +01:00
Niko Matsakis
b30f7af98b remove blank line 2011-11-17 15:11:52 -08:00
Niko Matsakis
8925875ccb add FIXME for issue #1184 2011-11-17 13:44:13 -08:00
Niko Matsakis
0d874476cf fix resource-generic 2011-11-17 13:44:13 -08:00
Brian Anderson
dd275cd749 Stop using temporary intrinsic_2 functions 2011-11-17 11:55:04 -08:00
Niko Matsakis
adc79e2f44 remove compile-command from local variable blocks 2011-11-17 11:46:13 -08:00
Haitao Li
388eed383f rustc: Add a flag '--warn-unused-imports'
Followup of issue #889
2011-11-17 09:28:30 +01:00
Haitao Li
fe6484d3e6 rustc: Fix warn on unused import bug
rustc generates incorrect warning for cascaded import declarations like:

  use std;
  import std::io;
  import io::println;
  fn main() { println("hello"); }

  warning: unused import io

A followup of issue #889
2011-11-17 09:27:17 +01:00
Niko Matsakis
bfc81352aa remove unused flag (thanks lht) 2011-11-16 21:52:01 -08:00
Stefan Plantikow
99c421f01d Removed --no-typestate flag from rutsc
Fixes issue #1139
2011-11-16 18:52:46 -08:00
Brian Anderson
55f89dbed9 rustc: Fix help text for --sysroot 2011-11-16 18:35:30 -08:00
Niko Matsakis
809ca13bfa fix minor merge errors 2011-11-16 16:13:43 -08:00
Niko Matsakis
c22ad0752f wrap long line 2011-11-16 15:27:49 -08:00
Niko Matsakis
037a1de405 apply calling convention at call site too 2011-11-16 15:27:09 -08:00
Niko Matsakis
834b6879ea temp workaround for failure to pass ulonglong successfully 2011-11-16 15:27:09 -08:00
Niko Matsakis
cbcdeb80d9 remove wrappers from intrinsics 2011-11-16 15:27:08 -08:00
Niko Matsakis
e3699a2636 make stdcall use shim 2011-11-16 15:24:56 -08:00
Brian Anderson
d2199e8716 Various fixes for x86_64 on linux
Configure LLVM correctly, use the right data layout, add the readlink
function back, fix C constants, etc.
2011-11-16 15:24:56 -08:00
Niko Matsakis
319f3b02f3 fix natives with user-specified link names, remove unused imports 2011-11-16 15:24:38 -08:00
Niko Matsakis
b27a88e99c fix bug in shape where s_int/s_uint were not customized to platform 2011-11-16 15:16:43 -08:00
Niko Matsakis
9043bd9778 wrap long line; 2011-11-16 15:16:43 -08:00
Niko Matsakis
b3ae63c9d9 temporarily disable these tests b/c they crash rustc 2011-11-16 15:16:43 -08:00
Niko Matsakis
cb9675259f enable comments in generated asm, ll 2011-11-16 15:16:42 -08:00
Niko Matsakis
96cdfa11db correct translation of neg. numbers in 64-bit architectures 2011-11-16 15:16:42 -08:00
Niko Matsakis
5cabfb3a39 remove fixed FIXME 2011-11-16 15:16:42 -08:00
Niko Matsakis
4fc34e23fa wrap long line 2011-11-16 15:16:40 -08:00
Niko Matsakis
d77968dd7c finish up the shim approach 2011-11-16 15:16:40 -08:00
Niko Matsakis
4f28419d0c add back call to zero_and_revoke 2011-11-16 15:16:40 -08:00
Niko Matsakis
85083ec51b begin efforts to use shim functions for c-stack calls 2011-11-16 15:16:40 -08:00
Brian Anderson
b655fb9ea7 Replace 'mutable?' with 'const' 2011-11-16 14:41:32 -08:00
Brian Anderson
045a437556 rustc: Accept 'const' as synonym for 'mutable?' 2011-11-16 13:52:08 -08:00
Haitao Li
88f29aab27 Use attributes for native module ABI and link name
This patch changes how to specify ABI and link name of a native module.

Before:
  native "cdecl" mod llvm = "rustllvm" {...}

After:
  #[abi = "cdecl"]
  #[link_name = "rustllvm"]
  native mod llvm {...}

The old optional syntax for ABI and link name is no longer supported.

Fixes issue #547
2011-11-16 11:35:13 -08:00
Haitao Li
fba0df72d3 Use attributes for native module ABI and link name [temp]
This patch adds support of using attributes to specify native mode ABI
and link name. The old optional syntax like:
  native "cdecl" mod llvm = "rustllvm" { ... }
is still supported.

This is a transitional commit to avoid making a stage1 (backward
imcompatible) snapshot.
2011-11-16 23:45:07 +08:00
Haitao Li
3b683f5205 rustc: Use link_name attribute for native function
Fixes issue #906
2011-11-16 23:45:07 +08:00
Brian Anderson
a7188a6577 rustc: Don't sign extend uints during translation
Doing so produces incorrect results on a 32-bit compiler targeting 64-bits
2011-11-15 17:53:44 -08:00
Brian Anderson
dd5512ccb0 Support conditional compilation based on architecture
target_os = "x86" or target_os = "x86_64"
2011-11-15 16:33:09 -08:00
Haitao Li
eae478cd74 Use native fn's link name attribute if given
Fixes issue #905
2011-11-15 22:31:33 +08:00
Marijn Haverbeke
9ff6f816ba Fix handling of loops and conditionals in alias.rs
It now threads information about invalidated aliases through the AST
properly. This makes it more permissive for conditionals (invalidating
an alias in one branch doesn't prevent you from using it in another),
and less permissive for loops (it now properly notices when a loop
invalidates an alias that it might still use in another iteration).

Closes #1144
2011-11-15 13:29:57 +01:00
Haitao Li
b8dd148444 rustllvm: Add a GetOrInsertFunction wrapper
Fixes issue #1161

Test-case-by: Brian Anderson <banderson@mozilla.com>
Signed-off-by: Haitao Li <lihaitao@gmail.com>
2011-11-15 00:33:29 +08:00
Brian Anderson
3cc2641fc3 Make various binops not typecheck for unsafe pointers. Closes #1173 2011-11-13 13:55:12 -08:00
Haitao Li
39084fb881 Remove unused "--check-unsafe" flag
Fixes issue #1138
2011-11-12 00:01:37 +08:00
Haitao Li
5a7249c935 Cleanup unused imports 2011-11-10 19:19:40 -08:00
Haitao Li
9bc2f1800d rustc: Add support of warning on unused imports
Fixes issue #889
2011-11-10 19:19:10 -08:00
Josh Matthews
43cb74b830 Add float support to #fmt. Fix #1014. 2011-11-10 11:40:34 -08:00
Brian Anderson
0d9e32d70d Rename "c-stack-stdcall" ABI to "stdcall" 2011-11-09 18:45:25 -08:00
Brian Anderson
b7ab28b50f Rename "c-stack-cdecl" ABI to "cdecl" 2011-11-09 18:44:12 -08:00
Brian Anderson
d26a96d2bb Add "cdecl" as synonym for "c-stack-cdecl" 2011-11-09 16:47:44 -08:00
Brian Anderson
e96342820d Add "stdcall" as synonym for "c-stack-stdcall" 2011-11-09 16:47:44 -08:00
Brian Anderson
1afc943c91 rustc: Rename native_abi_c_stack_cdecl to native_abi_cdecl 2011-11-09 16:47:44 -08:00
Brian Anderson
10c35959e7 rustc: Rename native_abi_c_stack_stdcall to native_abi_stdcall 2011-11-09 16:47:44 -08:00
Brian Anderson
c7f0ca6063 Remove native "x86stdcall" ABI 2011-11-09 16:47:43 -08:00
Brian Anderson
4a4d31cf0e Make native "c-stack-stdcall" ABI work
The symbol name is based on the number of arguments, so we have to declare
it correctly.

For some reason GetLastError doesn't work now.
2011-11-09 15:29:53 -08:00
Joshua Wise
c8fae5dc75 trans: Add binops (except for logic and comparators) and unops to trans_const_expr. Working towards issue #570. 2011-11-09 14:33:06 -08:00
Joshua Wise
e674a7e99f middle: Add a pass to reject bad const expressions earlier. Currently just rejects unimplemented const expressions, but will be needed later. 2011-11-09 14:33:05 -08:00
Brian Anderson
4f3f04643f Remove native "cdecl" ABI 2011-11-08 17:17:06 -08:00
Haitao Li
253242390c Use ".ll" as default suffix of LLVM assembly file
This commit is a follow up of Issue #1147.

Althought there are some inconsistency about this naming convention in
LLVM. For example, `clang' write LLVM assembly to a file with ".s" suffix,
while both `llvm-dis' and `opt' write to files with ".ll" suffices. We
think ".ll" makes more sense.

Also rustc manual page is updated.
2011-11-07 21:12:48 -08:00
Brian Anderson
fcd39b1191 Remove native "llvm" ABI 2011-11-07 15:29:05 -08:00
Brian Anderson
1103fe8ca0 Remove native "rust" ABI 2011-11-07 15:14:10 -08:00
David Rajchenbach-Teller
16bdb85cb4 [Parser] parser.rs: Made two error messages less ambiguous 2011-11-07 12:04:16 -08:00
Haitao Li
852e789e78 rustc: Set LLVM module identifier as crate name 2011-11-07 22:59:21 +08:00
Haitao Li
b12de98814 rustc: Add support of generating LLVM assembly
rustc generates output files in LLVM bitcode format if "--emit-llvm"
option is given. When used with the "-S" option, rustc generates LLVM
intermediate language assembly files.

Fixes Issue #476
2011-11-07 21:44:40 +08:00
Marijn Haverbeke
f3468d03a2 Fix a long line 2011-11-07 10:10:27 +01:00
Joshua Wise
07bab92970 llvm::mk_object_file should really return an option, since the underlying LLVM function can fail. Fixes a crash on OS X when rust has bad dylibs within eyeshot. 2011-11-07 09:56:30 +01:00
Marijn Haverbeke
1a68a98824 Disallow writing to function arguments again
Remove implicit copying hack.

Closes #1118
2011-11-03 10:57:54 +01:00
Niko Matsakis
8385d77b32 fix line too long 2011-11-02 14:14:20 -07:00
Niko Matsakis
ec77144713 add -m64 to gcc args if appropriate 2011-11-02 14:14:20 -07:00
Niko Matsakis
e012fd03f3 correct more i32 vs int mismatches 2011-11-02 14:14:19 -07:00
Niko Matsakis
602ae9139c convert various ints to i32 and vice versa 2011-11-02 14:14:19 -07:00
Niko Matsakis
4bd05e5be2 convert GEP to i32 2011-11-02 14:14:19 -07:00
Niko Matsakis
f1bc9307d8 get things checking on ia32 2011-11-02 14:14:19 -07:00
Niko Matsakis
c0e9c42bd2 thread the context through so that int can be 64 bits on x86_64 2011-11-02 14:14:19 -07:00
Niko Matsakis
2521cda1ec work on making the size of ints depend on the target arch 2011-11-02 14:14:19 -07:00
Niko Matsakis
9146bb09a1 work on making the size of ints depend on the target arch 2011-11-02 14:14:19 -07:00
Niko Matsakis
8011e3fabb hack around on makefiles trying to get a 64 bit build
right now there are many temporary hacks, search for NDM to find them
2011-11-02 14:13:22 -07:00
Niko Matsakis
5b3bddcd87 start to isolate target strings so that they can be configured for
x64 or other targets
2011-11-02 14:13:22 -07:00
Marijn Haverbeke
eef9a0bd39 Evaluate alt expressions in their own block context
Closes #785
2011-11-02 14:30:51 +01:00
Marijn Haverbeke
d8d35e7c40 Rename car/cdr to head/tail in std::list
Closes #1086
2011-11-02 14:23:49 +01:00
Marijn Haverbeke
5b0c103b39 Make it possible to cast unsafe pointers with the 'as' operator 2011-11-02 12:20:12 +01:00
Marijn Haverbeke
eaf9e05611 Make 'lambda(...) -> ...' parse as a type 2011-11-02 12:20:11 +01:00
Marijn Haverbeke
4e9b8a28f7 Make resolving of imports behave more sanely
An import now ignores itself when resolving its target. This gets rid of
the previously existing (problematic) behaviour where the import would start
looking one scope up when its name was the same as its target's first
component.

Closes #1114
2011-11-02 12:20:11 +01:00
Marijn Haverbeke
7ed7e7fa79 Fix printing of parameterized tag types in ppaux
It was printing option::t[int] instead of option::t<int>
2011-11-02 12:20:11 +01:00
Matt Brubeck
76077a9fb7 Add should_fail annotation for unit tests
This allows test cases to assert that a function is expected to fail.
Tests annotated with "should_fail" will succeed only if the function
fails.
2011-11-01 16:55:39 -07:00
Brian Anderson
61b604580b Fix alignment of interior pointers of dynamic-size types. Closes #1112
GEP_tup_like finds interior pointers by creating a tuple of all the types
preceding the element it wants a pointer to, then asks for the size of that
tuple. This results in incorrect pointers when the alignment of that tuple
is not the alignment of the interior type you're getting a pointer to.
2011-11-01 12:13:00 -07:00
Haitao Li
16dad84f7b rustc: Find crates by matching the name metadata 2011-10-31 14:43:43 -07:00
Patrick Walton
329f045d4c rustc: Enable segmented stacks in LLVM when --stack-growth is on 2011-10-31 14:42:44 -07:00
Brian Anderson
f7ebe23ae1 Add the ability to ignore tests by compiler config
[test]
[ignore(cfg(target_os = "win32"))]
2011-10-29 18:30:32 -07:00
Brian Anderson
da064ef884 Add more logging to crate resolution 2011-10-29 15:04:44 -07:00
Brian Anderson
e0f44730e8 rustc: Support 'companion mod's for crates and directory mods
Under this scheme when parsing foo.rc the parser will also look for
foo.rs to fill in the crate-level module, and when evaluating a
directory module directive it will look for a .rs file with the
same name as the directory.
2011-10-29 01:40:20 -07:00
Brian Anderson
2cebef095e stdlib: Make io failures recoverable by returning a result 2011-10-29 01:25:11 -07:00
Matt Brubeck
b510a74a36 Cleanup: Remove uneccesary generic_cmp function. 2011-10-28 14:44:39 -07:00
Matt Brubeck
000b2fe9a6 Use IEEE 754 semantics for NaN (Issue #1084) 2011-10-28 14:44:39 -07:00
Brian Anderson
f96ad30dfc stdlib: Make reinterpret_cast and leak unsafe 2011-10-28 14:19:17 -07:00
Brian Anderson
83219269d5 rustc: Remove broken --depend flag 2011-10-28 12:58:10 -07:00
Brian Anderson
2a2945e5de rustc: -h cleanup 2011-10-28 12:51:46 -07:00