On 08/06/2016 09:08 AM, Richard Biener wrote:
On August 6, 2016 12:15:26 PM GMT+02:00, Aldy Hernandez <al...@redhat.com>
wrote:
On 08/05/2016 04:07 PM, Richard Biener wrote:
On August 5, 2016 8:15:54 PM GMT+02:00, Oleg Endo
<oleg.e...@t-online.de> wrote:
On Fri, 2016-08-05 at 19:55 +0200, Richard Biener wrote:
Please don't use std::string. For string building you can use
obstacks.
Just out of curiosity ... why? I remember there was some discussion
about it, what was the conclusion? Is that now a general rule or
does
it depend on the context where strings are used?
Because you make a messy mix of string handling variants.
Std::string is not powerful enough to capture all uses, it is vastly
more expensive to embed into structs and it pulls in too much headers.
(Oh, and I hate I/o streams even more)
Oh, and there is prior use in ipa-chkp.c, although I suppose it
could've
crept in:
Definitely.
std::string s;
/* called_as_built_in checks DECL_NAME to identify calls to
builtins. We want instrumented calls to builtins to be
recognized by called_as_built_in. Therefore use original
DECL_NAME for cloning with no prefixes. */
s = IDENTIFIER_POINTER (DECL_NAME (fndecl));
s += ".chkp";
DECL_NAME (new_decl) = get_identifier (s.c_str ());
You can't tell me obstacks are easier on the eyes for this ;-).
Even strcat is shorter and cheaper.
ISTM that unless the code is performance critical we should be writing
code that is easy to understand and hard to get wrong.
Thus when we have something that is non-critical and can be handled by
std:: routines we should be using them.
If performance is important in a particular piece of code an obstack or
explicit malloc/free seems better.
Can we agree on those as guiding principles and thus boil the argument
down to whether or not a particular piece of code is performance critical?
jeff