From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14089 invoked by alias); 3 Oct 2014 10:20:45 -0000 Mailing-List: contact gcc-help-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-help-owner@gcc.gnu.org Received: (qmail 14077 invoked by uid 89); 3 Oct 2014 10:20:45 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.4 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-lb0-f178.google.com Received: from mail-lb0-f178.google.com (HELO mail-lb0-f178.google.com) (209.85.217.178) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Fri, 03 Oct 2014 10:20:44 +0000 Received: by mail-lb0-f178.google.com with SMTP id w7so729831lbi.37 for ; Fri, 03 Oct 2014 03:20:40 -0700 (PDT) MIME-Version: 1.0 X-Received: by 10.152.42.194 with SMTP id q2mr4681049lal.75.1412331640515; Fri, 03 Oct 2014 03:20:40 -0700 (PDT) Received: by 10.112.4.73 with HTTP; Fri, 3 Oct 2014 03:20:40 -0700 (PDT) In-Reply-To: <542E75B9.9010504@gmail.com> References: <542E5BF1.2070508@gmail.com> <542E75B9.9010504@gmail.com> Date: Fri, 03 Oct 2014 10:20:00 -0000 Message-ID: Subject: Re: std::string clobbers memory when compiling without optimizations From: Jonathan Wakely To: =?UTF-8?Q?Henrik_Mannerstr=C3=B6m?= Cc: gcc-help Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-IsSubscribed: yes X-SW-Source: 2014-10/txt/msg00015.txt.bz2 On 3 October 2014 11:08, Henrik Mannerstr=C3=B6m wrote: > Hi, > > On 10/03/2014 12:58 PM, Jonathan Wakely wrote: >> Have you tried valgrind? Or compiling with GCC's -fstack-protector >> option? I can't reproduce the problem, and I think it's pretty >> unlikely std::string has that kind of bug without someone noticing >> years ago. > > I'm not assuming that std::string has a bug (even though the title might > suggest that), I'm just saying that the gdb watchpoint is triggered > inside that function. I tried valgrind memcheck, but I'm no expert, so > suggestions are welcome. Below is the output with stack-protector, what > do you make out of it? Could it be my installation? > > - Henrik > > > $ g++-4.9 -std=3Dgnu++1y mvu.cc -o mvu > $ ./mvu > Correct diagonal: 1 1 1 > Eigen::Matrix > Incorrect diagonal: 1.81749e-316 1 1 > $ g++-4.9 -std=3Dgnu++1y -fstack-protector-all mvu.cc -o mvu > $ ./mvu > Correct diagonal: 1 1 1 > Eigen::Matrix > Incorrect diagonal: 1 2 3 I get the same "1 2 3" result using -fstack-protector-all and valgrind. My guess is that Sigma holds a dangling reference to some temporary object that has gone out of scope, and the function call t2s overwrites that stack memory, then when you return to main you go through the dangling reference. Are you sure you're using the Eigen types correctly?