User account creation filtered due to spam.

Bug 63891 - [5/6/7/8 regression] Failure of darwin-weakimport-3.c
Summary: [5/6/7/8 regression] Failure of darwin-weakimport-3.c
Status: NEW
Alias: None
Product: gcc
Classification: Unclassified
Component: target (show other bugs)
Version: 5.0
: P4 normal
Target Milestone: 5.5
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2014-11-15 15:36 UTC by Francois-Xavier Coudert
Modified: 2016-06-03 10:04 UTC (History)
4 users (show)

See Also:
Host: x86_64-apple-darwin14
Target: x86_64-apple-darwin14
Build: x86_64-apple-darwin14
Known to work:
Known to fail:
Last reconfirmed: 2014-11-21 00:00:00


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Francois-Xavier Coudert 2014-11-15 15:36:13 UTC
Current trunk shows runtime failure for gcc.dg/darwin-weakimport-3.c on x86_64-apple-darwin14 with -m32. The difference in the assembler between the 4.9.2 compiler (good) and the trunk compiler (bad, revision 217599) is:

$ diff -pu good-49.s bad-trunk.s 
--- good-49.s	2014-11-15 16:33:50.000000000 +0100
+++ bad-trunk.s	2014-11-15 16:33:30.000000000 +0100
@@ -3,6 +3,15 @@
 _foo:
 	pushl	%ebp
 	movl	%esp, %ebp
+	call	___x86.get_pc_thunk.ax
+L1$pb:
+	nop
 	popl	%ebp
 	ret
+	.section __TEXT,__textcoal_nt,coalesced,pure_instructions
+	.weak_definition	___x86.get_pc_thunk.ax
+	.private_extern	___x86.get_pc_thunk.ax
+___x86.get_pc_thunk.ax:
+	movl	(%esp), %eax
+	ret
 	.subsections_via_symbols


The presence of the line with "coalesced" makes the test fail.
Comment 1 Iain Sandoe 2014-11-15 15:49:43 UTC
confirmed on x86_64-darwin12.

this is generating an unnecesary picbase (since it is unused in the function), and thus the thunk - which triggers the failure.

This is probably more fallout from the EBX changes.
Comment 2 Dominique d'Humieres 2014-11-15 15:59:27 UTC
> This is probably more fallout from the EBX changes.

Yep! I see the failure with r216154 but not with 216153.
Comment 3 Francois-Xavier Coudert 2014-11-15 16:28:13 UTC
This same bug may also be the root for:
 FAIL: gcc.dg/torture/builtin-self.c   -O0   scan-assembler-not \\tcall

which is also a 5.0 regression, due to the extra "call	___x86.get_pc_thunk.ax". Dominique, could you check whether both appeared at the same time?
Comment 4 Dominique d'Humieres 2014-11-15 16:31:26 UTC
> Dominique, could you check whether both appeared at the same time?

Yes: r216154.
Comment 5 Dominique d'Humieres 2014-12-10 15:32:05 UTC
FAIL: gcc.dg/torture/builtin-self.c   -O0   scan-assembler-not \\tcall

is also seen on i686-pc-linux-gnu with -fpic: see

https://gcc.gnu.org/ml/gcc-testresults/2014-12/msg01216.html
Comment 6 Jeffrey A. Law 2015-02-18 20:49:07 UTC
AFAICT, this is actually a false positive and mostly points to an inefficiency in our -O0 32-bit PIC code generation on x86.

The test wants to make sure that _foo doesn't end up in textcoal_nt section, which is marked with the coalesced section attribute.

The test (reasonably so) just blindly looks for the existence of the magic section declaration without any regard to what's in it.

In this case we emit PIC setup.  It's not strictly necessary as there aren't any uses of the PIC register, but since the optimizer isn't on, DCE is not run and thus the PIC setup remains.

Once we have PIC setup, we have the get_pc_thunk routine which gets put into that magic section.  Which then triggers the false positive.

For darwin-weakimport-3.c, the right fix is probably to turn on -O1.  Not sure what the best fix for builtin-self.c is (maybe an xfail), but in both cases this isn't worthy of a P1 regresion.  I'd peg it more at a P4/P5 level since the inefficiencies only show up at -O0.
Comment 7 Jakub Jelinek 2015-04-22 11:58:57 UTC
GCC 5.1 has been released.
Comment 8 Richard Biener 2015-07-16 09:11:24 UTC
GCC 5.2 is being released, adjusting target milestone to 5.3.
Comment 9 Richard Biener 2015-12-04 10:43:48 UTC
GCC 5.3 is being released, adjusting target milestone.
Comment 10 Richard Biener 2016-06-03 10:04:26 UTC
GCC 5.4 is being released, adjusting target milestone.