www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 654] New: Const string member using implicit type inference gives garbage in certain situation

reply d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=654

           Summary: Const string member using implicit type inference gives
                    garbage in certain situation
           Product: D
           Version: 0.176
          Platform: PC
        OS/Version: Windows
            Status: NEW
          Severity: normal
          Priority: P3
         Component: DMD
        AssignedTo: bugzilla digitalmars.com
        ReportedBy: chris inventivedingo.com


Suppose we have a class (call it A), with a const member called MY_CONST_STRING
that is initialised to a char array using implicit type inference. Suppose also
that at some point in the code we refer to it as "A.MY_CONST_STRING". Then, if
we print "MY_CONST_STRING" from within the class A, garbage will be produced.

However, if we never refer to "A.MY_CONST_STRING" anywhere, then printing
"MY_CONST_STRING" will work as expected (without producing garbage).

It seems to be necessary that the member is a char array, and that implicit
type inference is used. (Declaring it as static const char[] MY_CONST_... will
cause everything to work.)

This is easier to see in code:

---------
testbug.d
---------
import std.stdio;

class A {
        static const MY_CONST_STRING = "hello";

        this() {
                // This will either print garbage or throw a UTF exception.
                // But if never_called() is commented out, then it will work.
                writefln("%s", MY_CONST_STRING);
        }
}

void never_called() {
        // This can be anything; there just needs to be a reference to
        // A.MY_CONST_STRING somewhere.
        writefln("%s", A.MY_CONST_STRING);
}

void main() {
        A a = new A();
}

---------

D:\D>dmd -run testbug
♣   Error: 4invalid UTF-8 sequence

D:\D>


-- 
Dec 05 2006
next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=654


bugzilla digitalmars.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|                            |FIXED





Fixed DMD 0.178


-- 
Dec 27 2006
prev sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=654






Added to DStress as
http://dstress.kuehne.cn/run/o/odd_bug_11_A.d
http://dstress.kuehne.cn/run/o/odd_bug_11_B.d
http://dstress.kuehne.cn/run/o/odd_bug_11_C.d
http://dstress.kuehne.cn/run/o/odd_bug_11_D.d
http://dstress.kuehne.cn/run/o/odd_bug_11_E.d


-- 
Dec 30 2006