[疑难] 发个帖子,活跃下气氛!

Colorful 2007-09-02
今天偶然间发现了一个有意思的问题。

我使用的编译器是Windows平台的DMD 2.003版本。
看下试验代码:
import std.stdio;
void main()
{
    int[10] arrayA = [0,1,2,3,4,5,6,7,8,9];
    foreach(int i; arrayA)
    {
        writefln(i);
    }
}

编译执行上述代码,会报Stack Overflow的错误。

偶还没有发现问题所在,不知道这是不是Bug?

不知道这个会不会在D 1.0重现,哪位仁兄可以测试一下其在D 1.0的表现。
oldrev 2007-09-02
Linux DMD2 也有此问题,应该是 bug,去报告吧
oldrev 2007-09-02
DMD/GDC 1 都没这个问题
Colorful 2007-09-02
应该是新版本的更新引入的。
郁闷。
redsea 2007-09-02
我报告了比你前一号的 bug.

其实令我烦的是另外的 ld multiple definition.  我的 project 中, 有几个文件, 如果 import tango.net.Socket 的位置在 import 我的文件之后, 就会出现报告 sprint multiple definition; 好像还有更微妙的情况会发生这个bug. 但是我无法用少量代码重复其他情形.

dmd 的template 实例化处理中, 必定有 bug, 但是不知道有几个.


code:

------------
class C1(alias t1, alias t2)
{
    mixin t1!();

    class C2
    {
        mixin t2!();
    }
}

struct S1()
{
int i;
}

void main()
{
C1!(S1, S1) v;
}

------------
dmd 1.018 & 1.020 gave same ld error message.

dmd 1.018 within dsss(tango) compile result:

dsss_objs/_test.o:(.gnu.linkonce.d._D4test7__T2S1Z2S16__initZ+0x0): multiple
definition of `_D4test7__T2S1Z2S16__initZ'
dsss_objs/_test.o:(.gnu.linkonce.d._D4test7__T2S1Z2S16__initZ+0x0): first
defined here
collect2: ld returned 1 exit status

standalone dmd 1.020 compile result:

test.o:(.gnu.linkonce.d._D4test7__T2S1Z2S16__initZ+0x0): multiple definition of
`_D4test7__T2S1Z2S16__initZ'
test.o:(.gnu.linkonce.d._D4test7__T2S1Z2S16__initZ+0x0): first defined here

ideage 2007-09-03
1.0正常。这个帖子没有活跃了气氛,反而添加了气愤,呵呵
Colorful 2007-09-03
1.0已经比较成熟了,2.0还在Alpha阶段,出问题是正常的。

只是这个错误应该在1.0就修正了的,怎么在2.0又重现了?
ideage 2007-09-03
我到目前还没有发现DMD的BUG呢,呵呵,代码也写了不少了!
redsea 2007-09-03
ideage 写道
我到目前还没有发现DMD的BUG呢,呵呵,代码也写了不少了!


那你真幸福.
今天又碰到一个 bug, 弄了半天.

结构定义
align(1)
struct PacketHead
{
   uint       contentLen_;    // 包的正文大小, 放到最前面, 最有希望能够知道包的大小
   pktid_t    id_;            // 包的 id 号
   PkgFlags   flags_;         // 标志
   ushort     pktType_;       // 包的类型,这是应用层准备的。
}


另外一个文件的一个模板类的一个成员函数里面
int offsetIncludeContent = PacketHead.contentLen_.offsetof + PacketHead.contentLen_.sizeof;

死活无法通过编译, 说
util/pktcomm/core/SocketConnection.d(200): Error: this for contentLen_ needs to be type PacketHead not type util.pktcomm.core.SocketConnection.SocketConnection!(Test).SocketConnection

最后只有将这个变量改成类的 const 常数才编译过去.

无法弄出一个小的代码片来重复 bug.

bug 还是很多的, 如果 open source 估计就能好不少.
oldrev 2007-09-03
我都提交了n(n>=5)个了,有些 bug 实在是大得离谱
Global site tag (gtag.js) - Google Analytics