----- urxae@urxae:~/tmp$ cat test.d template Templ(T) { pragma(msg, Type.mangleof); alias T Type; } void main() { Templ!(int).Type x; // instantiate } urxae@urxae:~/tmp$ dmd test.d dmd: mtype.c:550: virtual Expression* Type::getProperty(Loc, Identifier*): Assertion `deco' failed. Aborted (core dumped) ----- Saw this first in DMD v1.005 (not in bugzilla yet), but it fails with v1.00 as well.
Added to DStress as http://dstress.kuehne.cn/compile/p/pragma_msg_02_A.d http://dstress.kuehne.cn/compile/p/pragma_msg_02_B.d
Actually it's nothing to do with pragma(msg). It's the mangleof which is the problem. Change it to .stringof and problem disappears. template Templ(T) { const char [] XXX = Type.mangleof; alias T Type; } void main() { Templ!(int).Type x; // instantiate } ==================== Segfaults on DMD2.028. assert mtype.c(1272) deco <segfault> DMD1.042 Assertion failure: 'deco' on line 576 in file 'mtype.c' abnormal program termination
PATCH: DMD2.028 on mytype.c line 1272, replace assert(deco); with: if (!deco) { error(loc, ".mangleof forward reference"); return new StringExp(loc, "ERROR", 5, 'c'); } --- I was surprised to find that in most cases, this error doesn't appear -- seems the compiler absorbs the error and retries in the next semantic pass, and then the code works correctly. In other words, it completely fixes the bug in D2. From the line number, seems it's a different cause in D1.
Fixed DMD2.030 and 1.045
AltStyle によって変換されたページ (->オリジナル) / アドレス: モード: デフォルト 音声ブラウザ ルビ付き 配色反転 文字拡大 モバイル