On Dec 17, 2013, at 6:34 PM, Richard Smith <[email protected]> wrote:
> On Tue, Dec 17, 2013 at 5:47 PM, David Vandevoorde <[email protected]> wrote:
> 
> On Dec 17, 2013, at 5:22 PM, John McCall <[email protected]> wrote:
> 
>> On Dec 17, 2013, at 12:01 PM, Sean Hunt <[email protected]> wrote:
>>> On Tue, Dec 17, 2013 at 2:57 PM, John McCall <[email protected]> wrote:
>>> On Dec 17, 2013, at 11:12 AM, David Vandevoorde <[email protected]> wrote:
>>> > On Dec 16, 2013, at 8:33 PM, John McCall <[email protected]> wrote:
>>> >> On Dec 16, 2013, at 5:10 PM, Richard Smith <[email protected]> 
>>> >> wrote:
>>> >>> Consider:
>>> >>
>>> >> Remind me why it’s impossible to go back to the committee and repeatedly 
>>> >> weaken any remaining guarantees about string literal addresses until 
>>> >> none of this is important?
>>> >
>>> > I don't know if it's impossible or not, but I suspect it would be 
>>> > controversial.  (I, at least, would be opposed.)
>>> 
>>> Really?  You feel that having really strong guarantees about the address of 
>>> a string literal is the right thing to do?  Like, it’s worth significantly 
>>> increasing build times, code size, and launch times over?
>>> 
>>> John.
>>> 
>>> I don't see a situation where baz() below returns false really being 
>>> defensible:
>> 
>> Why?  Who cares?  Why is “don’t rely on string literal addresses being 
>> consistent” actually an unreasonable piece of advice?  Because I’m pretty 
>> sure that’s the advice that everybody’s been rolling with for over thirty 
>> years now.
> 
> 
> We put in the C++ rules about 20 years ago because people wanted to have
> 
>       inline char const* name() { return "SomeName"; }
> 
> return the name pointer value in every TU (I think that's reasonable). There 
> is certainly still plenty of code relying on that.
> 
> I find that a little surprising, since GCC does not guarantee this, and it is 
> the system compiler on a lot of platforms. (Likewise, Clang does not, and is 
> the system compiler on some platforms). There's a GCC bug on this with only 
> two duplicates, and no Clang bug has been filed, so I don't get the 
> impression that this is a big deal for a lot of people on Linux or Mac.
> 
> On the other hand, MSVC guarantees something much stronger: it appears to 
> give *all* string literals a mangled name comprising their type, the first 
> few (32?) characters of the string, and a checksum of the rest.

Hmm, that’s interesting.  I wonder how that interacts with their string-pooling 
option (/GF), which is what I was looking at before.

I assume that the mangled name isn’t exported from the DLL, though.

John.
_______________________________________________
cxx-abi-dev mailing list
[email protected]
http://sourcerytools.com/cgi-bin/mailman/listinfo/cxx-abi-dev

Reply via email to