From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 25156 invoked by alias); 25 May 2010 13:57:21 -0000 Received: (qmail 24549 invoked by uid 48); 25 May 2010 13:56:59 -0000 Date: Tue, 25 May 2010 13:57:00 -0000 Message-ID: <20100525135659.24548.qmail@sourceware.org> X-Bugzilla-Reason: CC References: Subject: [Bug rtl-optimization/44164] [4.5 Regression] Aliasing bug triggered by Boost.Bind/Boost.Function In-Reply-To: Reply-To: gcc-bugzilla@gcc.gnu.org To: gcc-bugs@gcc.gnu.org From: "rguenth at gcc dot gnu dot org" Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org X-SW-Source: 2010-05/txt/msg02844.txt.bz2 ------- Comment #20 from rguenth at gcc dot gnu dot org 2010-05-25 13:56 ------- -fsched2-use-superblocks also fixes it. -fdbg-cnt=sched_region:65 is broken, -fdbg-cnt=sched_region:64 works for a simplified testcase tail: int bmi_get(const int* id) { if (*id != 42) __builtin_abort(); return 0; } int main() { int id = 42; typedef boost::function func_t; func_t f = boost::bind(&bmi_get, &id); func_t g = f; g(); return 0; } Assembler difference: --- /tmp/gtest.s.ok 2010-05-25 15:51:19.000000000 +0200 +++ /tmp/gtest.s.broken 2010-05-25 15:51:30.000000000 +0200 @@ -825,21 +825,21 @@ call _ZN5boost6detail8function16has_empty_targetEz testb %al, %al jne .L93 + movq 112(%rsp), %rdx leaq 96(%rsp), %rbx - movq $_Z7bmi_getPKi, 104(%rsp) - movq %rbp, 16(%rbx) movl $_ZZN5boost9function0IiE9assign_toINS_3_bi6bind_tIiPFiPKiENS3_5l ist1INS3_5valueIPiEEEEEEEEvT_E13stored_vtable, %eax orq $1, %rax - movq %rax, 96(%rsp) - movq %rax, 64(%rsp) + movq $_Z7bmi_getPKi, 104(%rsp) movq $_Z7bmi_getPKi, 72(%rsp) - movq 112(%rsp), %rdx + movq %rbp, 16(%rbx) + leaq 64(%rsp), %rbp + movq %rax, 96(%rsp) movq %rdx, 80(%rsp) movq 120(%rsp), %rdx - movq %rdx, 88(%rsp) + movq %rax, 64(%rsp) andq $-2, %rax - leaq 64(%rsp), %rbp leaq 8(%rbp), %rdi + movq %rdx, 88(%rsp) .LEHB15: call *8(%rax) .LEHE15: Still can't see where that is broken ... :/ -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44164