[Issue 13465] Segfault by eager semantic2 running in template instantiation
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Tue Sep 23 19:52:39 PDT 2014
https://issues.dlang.org/show_bug.cgi?id=13465
Kenji Hara <k.hara.pg at gmail.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Hardware|x86_64 |All
Summary|Segfault in dmd (2.066.0 |Segfault by eager semantic2
|and 2.067.0-b1) |running in template
| |instantiation
OS|Linux |All
--- Comment #2 from Kenji Hara <k.hara.pg at gmail.com> ---
Reduced test case:
// [checkpoint.d]
module checkpoint;
import field;
auto createCheckpointMixins()
{
enum b = isMatchingMaskField!();
}
immutable checkpointMixins = createCheckpointMixins;
// [field.d]
module field;
template isMaskField() { import field; }
template isMatchingMaskField()
{
enum isMatchingMaskField = isMaskField!();
}
Command line:
dmd -o- checkpoint.d field.d
The route of semantic analysis that starts from the isMatchingMaskField!()
instantiation.
TemplateInstance('isMaskField!T')->semantic()
TemplateInstance('isMaskField!T')->semantic2() <---[1]
Import('import imports.ice1365a;')->semantic2()
Module('imports.ice1365a')->semantic2()
VarDeclaration('imports.ice1365a.isMatchingMaskField!().isMatchingMaskField')->semantic2()
<---[2]
[1] TemplateInstance::semantic() runs its semantic2() always. It was a fix for
the issue 782, but it violates the semantic analysis invariance, that
semantic2 should be done after semantic completed in each symbols.
[2] The type field is yet NULL, and then ICE happens.
--
More information about the Digitalmars-d-bugs
mailing list