Skip to content

Conversation

Clar Charr and others added 17 commits January 29, 2018 17:44
Because the last item needs special handling, it seems that LLVM has trouble canonicalizing the loops in external iteration. With the override, it becomes obvious that the start==end case exits the loop (as opposed to the one *after* that exiting the loop in external iteration).
…eavus Document std::os::raw. This adds a brief explanation to each type and its definition according to C. This also helps clarify that the definitions of the types, as described by rustdoc, are not necessarily the same from platform to platform.
…lacrum libtest: Replace panics with error messages This replaces explicit panics on failures in libtest with prints to stderr. Where "failures" == CLI argument parsing and such Before: ``` $ ./foo-stable --not-an-option thread 'main' panicked at '"Unrecognized option: \'not-an-option\'"', libtest/lib.rs:251:27 note: Run with `RUST_BACKTRACE=1` for a backtrace. ``` After: ``` $ ./foo-nightly --not-an-option error: Unrecognized option: 'not-an-option' ```
…, r=alexcrichton Override try_[r]fold for RangeInclusive Because the last item needs special handling, it seems that LLVM has trouble canonicalizing the loops in external iteration. With the override, it becomes obvious that the start==end case exits the loop (as opposed to the one *after* that exiting the loop in external iteration). Demo adapted from rust-lang#45222 ```rust #[no_mangle] pub fn foo3r(n: u64) -> u64 { let mut count = 0; (0..n).for_each(|_| { (0 ..= n).rev().for_each(|j| { count += j; }) }); count } ``` <details> <summary>Current nightly ASM, 100 lines (https://play.rust-lang.org/?gist=f5674c702c6e2045c3aab5d03763e5f6&version=nightly&mode=release)</summary> ```asm foo3r:	pushq	%rbx .Lcfi0: .Lcfi1:	testq	%rdi, %rdi	je	.LBB0_1	testb	$1, %dil	jne	.LBB0_4	xorl	%eax, %eax	xorl	%r8d, %r8d	cmpq	$1, %rdi	jne	.LBB0_11	jmp	.LBB0_23 .LBB0_1:	xorl	%eax, %eax	popq	%rbx	retq .LBB0_4:	xorl	%r8d, %r8d	movq	$-1, %r9	xorl	%eax, %eax	movq	%rdi, %r11	xorl	%r10d, %r10d	jmp	.LBB0_5 .LBB0_8:	addq	%r11, %rax	movq	%rsi, %r11	movq	%rdx, %r10 .LBB0_5:	cmpq	%r11, %r10	movl	$1, %ecx	cmovbq	%r9, %rcx	cmoveq	%r8, %rcx	testq	%rcx, %rcx	movl	$0, %esi	movl	$1, %edx	je	.LBB0_8	cmpq	$-1, %rcx	jne	.LBB0_9	leaq	-1(%r11), %rsi	movq	%r10, %rdx	jmp	.LBB0_8 .LBB0_9:	movl	$1, %r8d	cmpq	$1, %rdi	je	.LBB0_23 .LBB0_11:	xorl	%r9d, %r9d	movq	$-1, %r10 .LBB0_12:	movq	%rdi, %rsi	xorl	%r11d, %r11d	jmp	.LBB0_13 .LBB0_16:	addq	%rsi, %rax	movq	%rcx, %rsi	movq	%rbx, %r11 .LBB0_13:	cmpq	%rsi, %r11	movl	$1, %edx	cmovbq	%r10, %rdx	cmoveq	%r9, %rdx	testq	%rdx, %rdx	movl	$0, %ecx	movl	$1, %ebx	je	.LBB0_16	cmpq	$-1, %rdx	jne	.LBB0_17	leaq	-1(%rsi), %rcx	movq	%r11, %rbx	jmp	.LBB0_16 .LBB0_17:	movq	%rdi, %rcx	xorl	%r11d, %r11d	jmp	.LBB0_18 .LBB0_21:	addq	%rcx, %rax	movq	%rsi, %rcx	movq	%rbx, %r11 .LBB0_18:	cmpq	%rcx, %r11	movl	$1, %edx	cmovbq	%r10, %rdx	cmoveq	%r9, %rdx	testq	%rdx, %rdx	movl	$0, %esi	movl	$1, %ebx	je	.LBB0_21	cmpq	$-1, %rdx	jne	.LBB0_22	leaq	-1(%rcx), %rsi	movq	%r11, %rbx	jmp	.LBB0_21 .LBB0_22:	addq	$2, %r8	cmpq	%rdi, %r8	jne	.LBB0_12 .LBB0_23:	popq	%rbx	retq .Lfunc_end0: ``` </details><br> With this PR: ```asm foo3r:	test	rcx, rcx	je	.LBB3_1	lea	r8, [rcx - 1]	lea	rdx, [rcx - 2]	mov	rax, r8	mul	rdx	shld	rdx, rax, 63	imul	r8, r8	add	r8, rcx	sub	r8, rdx	imul	r8, rcx	mov	rax, r8	ret .LBB3_1:	xor	r8d, r8d	mov	rax, r8	ret ```
…alexcrichton Use time crate in bootstrap dist instead of date `bootstrap dist` command is trying to run *NIX specific `date` command to get current month and year. This command keep failing when it's called on a Windows command prompt. This patch is making it use time crate. Closes: rust-lang#47908
… r=nikomatsakis Document that associated constants prevent a trait from being made into an object Fixes rust-lang#47952 Add a short mention of associated constants to E0038
…s, r=kennytm config.toml.example: fix typos. Most of them were found by codespell: https://github.com/lucasdemarchi/codespell
@rust-highfive
Copy link
Contributor

r? @cramertj

(rust_highfive has picked a reviewer for you, use r? to override)

@kennytm
Copy link
Member Author

kennytm commented Feb 6, 2018

@bors r+ p=7

@bors
Copy link
Collaborator

bors commented Feb 6, 2018

📌 Commit 7f0e87a has been approved by kennytm

@bors bors added the S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. label Feb 6, 2018
@bors
Copy link
Collaborator

bors commented Feb 6, 2018

⌛ Testing commit 7f0e87a with merge bd98fe0...

bors added a commit that referenced this pull request Feb 6, 2018
Rollup of 7 pull requests - Successful merges: #46962, #47986, #48012, #48013, #48026, #48031, #48036 - Failed merges:
@bors
Copy link
Collaborator

bors commented Feb 6, 2018

☀️ Test successful - status-appveyor, status-travis
Approved by: kennytm
Pushing bd98fe0 to master...

@bors bors merged commit 7f0e87a into rust-lang:master Feb 6, 2018
@Centril Centril added the rollup A PR which is a rollup label Oct 2, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

rollup A PR which is a rollup S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion.