about summary refs log tree commit diff
path: root/src/test/codegen
AgeCommit message (Collapse)AuthorLines
2015-06-18Auto merge of #26336 - dotdash:raw_ptr_coercions, r=nrcbors-0/+27
Unlike coercing from reference to unsafe pointer, coercing between two unsafe pointers doesn't need an AutoDerefRef, because there is no region that regionck would need to know about. In unoptimized libcore, this reduces the number of "auto_deref" allocas from 174 to 4.
2015-06-16rustc: Update LLVMAlex Crichton-6/+6
This commit updates the LLVM submodule in use to the current HEAD of the LLVM repository. This is primarily being done to start picking up unwinding support for MSVC, which is currently unimplemented in the revision of LLVM we are using. Along the way a few changes had to be made: * As usual, lots of C++ debuginfo bindings in LLVM changed, so there were some significant changes to our RustWrapper.cpp * As usual, some pass management changed in LLVM, so clang was re-scrutinized to ensure that we're doing the same thing as clang. * Some optimization options are now passed directly into the `PassManagerBuilder` instead of through CLI switches to LLVM. * The `NoFramePointerElim` option was removed from LLVM, favoring instead the `no-frame-pointer-elim` function attribute instead. Additionally, LLVM has picked up some new optimizations which required fixing an existing soundness hole in the IR we generate. It appears that the current LLVM we use does not expose this hole. When an enum is moved, the previous slot in memory is overwritten with a bit pattern corresponding to "dropped". When the drop glue for this slot is run, however, the switch on the discriminant can often start executing the `unreachable` block of the switch due to the discriminant now being outside the normal range. This was patched over locally for now by having the `unreachable` block just change to a `ret void`.
2015-06-16Avoid deref/ref cycles for no-op coercions between unsafe pointersBjörn Steinbrink-0/+27
Unlike coercing from reference to unsafe pointer, coercing between two unsafe pointers doesn't need an AutoDerefRef, because there is no region that regionck would need to know about. In unoptimized libcore, this reduces the number of "auto_deref" allocas from 174 to 4.
2015-05-27Revamp codegen tests to check IR quality instead of quantityBjörn Steinbrink-377/+192
The current codegen tests only compare IR line counts between similar rust and C programs, the latter getting compiled with clang. That looked like a good idea back then, but actually things like lifetime intrinsics mean that less IR isn't always better, so the metric isn't really helpful. Instead, we can start doing tests that check specific aspects of the generated IR, like attributes or metadata. To do that, we can use LLVM's FileCheck tool which has a number of useful features for such tests. To start off, I created some tests for a few things that were recently added and/or broken.
2015-03-26Mass rename uint/int to usize/isizeAlex Crichton-14/+14
Now that support has been removed, all lingering use cases are renamed.
2014-09-22librustc: Forbid private types in public APIs.Patrick Walton-5/+5
This breaks code like: struct Foo { ... } pub fn make_foo() -> Foo { ... } Change this code to: pub struct Foo { // note `pub` ... } pub fn make_foo() -> Foo { ... } The `visible_private_types` lint has been removed, since it is now an error to attempt to expose a private type in a public API. In its place a `#[feature(visible_private_types)]` gate has been added. Closes #16463. RFC #48. [breaking-change]
2013-10-10Add `pub` to all the codegen testsAlex Crichton-13/+13
Otherwise the test function is internalized and LLVM will most likely optimize it out.
2013-08-17Fix warnings it testsErick Tryzelaar-1/+1
2013-08-10Elide unnecessary ret slot allocasBjörn Steinbrink-0/+28
When there is only a single store to the ret slot that dominates the load that gets the value for the "ret" instruction, we can elide the ret slot and directly return the operand of the dominating store instruction. This is the same thing that clang does, except for a special case that doesn't seem to affect us. Fixes #8238
2013-07-31test: add more codegen tests, add copyright headers to all.Graydon Hoare-0/+268
2013-07-16test: new codegen tests, rename hello.Graydon Hoare-0/+65
2013-07-11wire up makefile to run codegen tests and add one to startGraydon Hoare-0/+16