all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: David Engster <deng@randomsample.de>
To: Eli Zaretskii <eliz@gnu.org>
Cc: chengang31@gmail.com, emacs-devel@gnu.org
Subject: Re: Using stpcpy
Date: Sat, 27 Dec 2014 21:03:10 +0100	[thread overview]
Message-ID: <878uhsvp1d.fsf@engster.org> (raw)
In-Reply-To: <83bnmolvkb.fsf@gnu.org> (Eli Zaretskii's message of "Sat, 27 Dec 2014 21:52:20 +0200")

Eli Zaretskii writes:
>> From: cg <chengang31@gmail.com>
>> Date: Sat, 27 Dec 2014 19:57:07 +0800
>> 
>
>> On 12/27/2014 3:45 PM, Eli Zaretskii wrote:
>> >
>> > Sorry, I don't understand this: there's no call to stpcpy on line 350
>> > of ntlib.c, or anywhere else in ntlib.c, actually.  That line calls
>> >
>> 
>> Yes, I was confused by the error message too, and found ntlib.c
>> didin't use stpcpy at all. It looks like it has something to do with
>> compiler optimization.
>> 
>> So I tried to use different optimization flags, and this error only
>> happens when -O2 or -Ofast is used as CFLAGS:
>> 
>> ./autogen.sh
>> export CFLASG=-O0 # no error
>> #export CFLASG=-O1 # no error
>> #export CFLASG=-O2 # error!
>> #export CFLASG=-Ofast # error!
>> ./confgure
>> make
>> 
>> I am using msys2.
>
> Incredible as it sounds, in an optimized build, GCC (sometimes?) calls
> stpcpy even though the source calls strcpy, provided that the
> prototype of stpcpy is in scope.  In this case, ntlib.c includes
> windows.h, which includes string.h, which comes from lib/string.h,
> which declares the prototype of stpcpy, and that is enough to trigger
> this misfeature.
>
> I fixed this by switching the order of the libraries, as suggested,
> but only because doing so is TRT in general.

Yes, it seems gcc optimizes this because of the following strlen
call. You can disable this optimization with -fno-optimize-strlen.

-David



  reply	other threads:[~2014-12-27 20:03 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-12-22 16:41 Using stpcpy Dmitry Antipov
2014-12-23  6:47 ` Paul Eggert
2014-12-23 10:39   ` Dmitry Antipov
2014-12-25 12:25     ` Paul Eggert
2014-12-25 17:42       ` Dmitry Antipov
2014-12-25 23:44         ` Paul Eggert
2014-12-26 17:06           ` Dani Moncayo
2014-12-26 21:24             ` Eli Zaretskii
2014-12-26 22:01               ` Dani Moncayo
2014-12-27  5:56                 ` cg
2014-12-27  7:45                   ` Eli Zaretskii
2014-12-27 10:26                     ` Dani Moncayo
2014-12-27 10:39                       ` Eli Zaretskii
2014-12-27 10:54                         ` Dani Moncayo
2014-12-27 11:57                     ` cg
2014-12-27 19:52                       ` Eli Zaretskii
2014-12-27 20:03                         ` David Engster [this message]
2014-12-27 20:17                           ` Eli Zaretskii
2014-12-27 20:25                             ` Eli Zaretskii
2014-12-27 20:49                               ` David Engster
2014-12-28  3:36                                 ` Eli Zaretskii
2014-12-28 23:57                               ` Richard Stallman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=878uhsvp1d.fsf@engster.org \
    --to=deng@randomsample.de \
    --cc=chengang31@gmail.com \
    --cc=eliz@gnu.org \
    --cc=emacs-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.