public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* optimization/7708: g++ -O inserts definition of std::string::replace in library module
@ 2002-08-23 18:26 Castalia
  0 siblings, 0 replies; only message in thread
From: Castalia @ 2002-08-23 18:26 UTC (permalink / raw)
  To: gcc-gnats


>Number:         7708
>Category:       optimization
>Synopsis:       g++ -O inserts definition of std::string::replace in library module
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri Aug 23 18:06:00 PDT 2002
>Closed-Date:
>Last-Modified:
>Originator:     Bradford Castalia
>Release:        gcc version 3.1.1 20020617 (prerelease) [FreeBSD]
>Organization:
>Environment:
FreeBSD idaeim 4.6-STABLE FreeBSD 4.6-STABLE #0: Mon Aug  5 19:42:48 MST 2002

Configured with: ./..//gcc-20020617/configure --disable-nls --with-gnu-as --with-gnu-ld --with-gxx-include-dir=/usr/local/lib/gcc-lib/i386-portbld-freebsd4.6/3.1.1/include/g++ --disable-libgcj --disable-shared --prefix=/usr/local i386-portbld-freebsd4.6
Thread model: posix
>Description:
Use of -O with g++ when compiling a class that uses the
std::string methods replace and/or erase generates a
definition of the replace method in the object file. When
the object file is used as a library module this results
in multiple definition error at link time when the problem
has occured in more than one module.
>How-To-Repeat:
Separate the attached file into Test.h, Test.cpp, and
Makefile files. Use gmake with the Makefile to compile
the object module and place it in the library; or just
compile the object file with "g++ -O -c -o Test.o Test.cpp".
Examine the results with nm. Notice the definition of the
std::string::replace method in the object file. Recompile
without the -O option. Notice that the definition of the
std::string::replace method is no longer present in the
nm report of the object file.
>Fix:
A) Don't use optimization (sigh).
B) Note this "side effect" of optimization in the docs.
C) Prevent optimization from generating method definitions
   not defined by the user code itself.
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="Test"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="Test"

VGVzdC5oIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQoKI2luY2x1ZGUgPHN0cmluZz4KCmNsYXNzIFRlc3QKewpwdWJsaWM6ClRl
c3QgKGNvbnN0IHN0ZDo6c3RyaW5nJiBtZXNzYWdlID0gIiIpOwp2b2lkIG1lc3NhZ2UgKGNvbnN0
IHN0ZDo6c3RyaW5nJiBtZXNzYWdlKTsKCnByaXZhdGU6CnN0ZDo6c3RyaW5nIE1lc3NhZ2U7Cn07
CgpUZXN0LmNwcCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCgojaW5jbHVkZSAiVGVzdC5oIgoKVGVzdDo6VGVzdCAoY29uc3Qgc3Rk
OjpzdHJpbmcmIG1lc3NhZ2UpIDogTWVzc2FnZSAobWVzc2FnZSkKewppZiAoISBNZXNzYWdlLmVt
cHR5ICgpICYmIE1lc3NhZ2VbTWVzc2FnZS5zaXplICgpIC0gMV0gPT0gJ1xuJykKICBNZXNzYWdl
LmVyYXNlIChNZXNzYWdlLnNpemUgKCkgLSAxKTsKfQoKdm9pZCBUZXN0OjptZXNzYWdlIChjb25z
dCBzdGQ6OnN0cmluZyYgbmV3X21lc3NhZ2UpCnsKTWVzc2FnZS5yZXBsYWNlIChzdGQ6OnN0cmlu
Zzo6c2l6ZV90eXBlKDApLCBNZXNzYWdlLmxlbmd0aCAoKSwgbmV3X21lc3NhZ2UpOwppZiAoISBN
ZXNzYWdlLmVtcHR5ICgpICYmIE1lc3NhZ2VbTWVzc2FnZS5zaXplICgpIC0gMV0gPT0gJ1xuJykK
ICBNZXNzYWdlLmVyYXNlIChNZXNzYWdlLnNpemUgKCkgLSAxKTsKfQoKTWFrZWZpbGUgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoK
IyBMaWJyYXJ5CgojIFRoZSBsaWJyYXJ5OgoKTElCUkFSWSAgPSBsaWJUZXN0LmEKCiMgU291cmNl
IGZpbGVzOgoKU09VUkNFUyAgPSBUZXN0LmNwcApPQkpFQ1RTICA9ICQoU09VUkNFUzolLmNwcD0l
Lm8pCgojIFJlbW92ZSB0aGUgZm9sbG93aW5nIGxpbmUgdG8gZWxpbWluYXRlIHRoZSBkZWZpbml0
aW9uIG9mICJyZXBsYWNlIi4KQ1hYRkxBR1MgPSAtTwoKJChMSUJSQVJZKToJCSQoTElCUkFSWSko
JChPQkpFQ1RTKSkKCg==


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2002-08-24  1:06 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-08-23 18:26 optimization/7708: g++ -O inserts definition of std::string::replace in library module Castalia

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).