Bug 447 – frontend: writeable string constants

Status
RESOLVED
Resolution
FIXED
Severity
enhancement
Priority
P2
Component
dmd
Product
D
Version
D1 (retired)
Platform
x86
OS
Linux
Creation time
2006-10-24T05:06:00Z
Last change time
2014-02-15T13:22:03Z
Keywords
patch
Assigned to
bugzilla
Creator
thomas-dloop

Attachments

IDFilenameSummaryContent-TypeSize
39dmd-0.170.string_constants.zipdmd-0.170.string_constantsapplication/octet-stream221234

Comments

Comment #0 by thomas-dloop — 2006-10-24T05:06:07Z
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.