DMD's frontend code assumes that string constants are implicitly convertible to "char *". The attached sources treat string constants as "const char *". Were the changes would require extensive modification the const_cast kludge was used.
Comment #1 by thomas-dloop — 2006-10-24T05:08:48Z
Created attachment 39
dmd-0.170.string_constants
Comment #2 by bugzilla — 2006-10-25T20:48:18Z
The C++ standard allows implicit conversion from string literals to char*, so DMD's usage of it is compliant code.
What this would be a move towards is making the DMD source const-correct. Going halfway towards it is where the const_cast thing comes in, and that's not any better than relying on the literal => char* being allowed. Const correctness needs to be done either full bore or not at all. I'm not willing to convert it all to be const-correct, because it's ugly, a lot of work, and I'm pretty sure would not find a single problem.
Comment #3 by thomas-dloop — 2006-10-26T18:31:04Z
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
[email protected] schrieb am 2006-10-26:
> http://d.puremagic.com/issues/show_bug.cgi?id=447
> What this would be a move towards is making the DMD source const-correct. Going
> halfway towards it is where the const_cast thing comes in, and that's not any
> better than relying on the literal => char* being allowed. Const correctness
> needs to be done either full bore or not at all. I'm not willing to convert it
> all to be const-correct, because it's ugly, a lot of work, and I'm pretty sure
> would not find a single problem.
Sure, it is a lot of work and the current solution is only a start.
(for the time beeing you could replace "const_cast<char *>" with "mem.strdup")
"Pritty sure" is nice but having as much as possible automatic
detections is more important to me in the long run.
<rant>
Trying to clean up the frontend for 64bit proved surpisingly hard.
64bit builds with gcc and icc show different behaviours.
Seemingly simple test cases like
http://dstress.kuehne.cn/run/l/large_id_01_D.d and
http://dstress.kuehne.cn/compile/template_class_08.d
fail for 64bit but pass for 32bit builds. etc.
</rant>
-----BEGIN PGP SIGNATURE-----
iD8DBQFFQVC5LK5blCcjpWoRAkCgAJ48YFkIuYDNrFNlH0acacLA6HTO6wCeLH5Y
rU0gq/zrcnvzd2lO+FE42eI=
=PQ5G
-----END PGP SIGNATURE-----
Comment #4 by sean — 2006-10-27T08:50:24Z
Walter Bright wrote:
> Thomas Kuehne wrote:
>
>> <rant>
>> Trying to clean up the frontend for 64bit proved surpisingly hard.
>> 64bit builds with gcc and icc show different behaviours.
>> Seemingly simple test cases like
>> http://dstress.kuehne.cn/run/l/large_id_01_D.d and
>> http://dstress.kuehne.cn/compile/template_class_08.d
>> fail for 64bit but pass for 32bit builds. etc.
>> </rant>
>
> I'm very interested in folding in the changes necessary to fix this.
> I've already folded in the ones listed in the bug reports here (they'll
> be in the next update).
The most obvious offender in Phobos is internal/gc/gc.d, where arrays
are cast to long before being returned from functions. GPhobos may be a
useful comparison for 64-bit changes needed in Phobos.
Sean
Comment #5 by clugdbug — 2010-04-15T02:04:47Z
I'm closing this because:
(1) the 64-bit bugs were fixed in dmd 0.171;
(2) The DMD source will not become const-correct;
(3) everything else in this bug report is obsolete.