www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - DMD 0.122: Cross-module multiply nested template instantiation with

reply Burton Radons <burton-radons smocky.com> writes:
This requires two modules.

     [a.d]
     struct TC(T)
     {
         void method()
         {
             void inline_function()
             {
             }
         }
     }

     template TB(T)
     {
         alias TC!(T) tc_instance;
     }

     struct TA(T)
     {
         mixin TB!(T);
     }

     [b.d]
     import a;

     void main()
     {
         TA!(int) variable;
     }

Attempting to compile this causes the compiler to do an access 
violation; it should be acceptable code.  The following are variants 
known to cause the problem to disappear.  First variant, to remove the 
inline function:

     [a.d]
     struct TC(T)
     {
         void method()
         {
--            void inline_function()
--            {
--            }
         }
     }

     template TB(T)
     {
         alias TC!(T) tc_instance;
     }

     struct TA(T)
     {
         mixin TB!(T);
     }

     [b.d]
     import a;

     void main()
     {
         TA!(int) variable;
     }

Second variant, to remove an abstraction stage:

     [a.d]
     struct TC(T)
     {
         void method()
         {
             void inline_function()
             {
             }
         }
     }

--    template TB(T)
--    {
--        alias TC!(T) tc_instance;
--    }

     struct TA(T)
     {
--        mixin TB!(T);
++        alias TC!(T) tc_instance;
     }

     [b.d]
     import a;

     void main()
     {
         TA!(int) variable;
     }

Third variant, instantiate the template outside of the "main" function:

     [a.d]
     struct TC(T)
     {
         void method()
         {
             void inline_function()
             {
             }
         }
     }

     template TB(T)
     {
         alias TC!(T) tc_instance;
     }

     struct TA(T)
     {
         mixin TB!(T);
     }

     [b.d]
     import a;

++  alias TA!(int) TA_int;

     void main()
     {
--        TA!(int) variable;
++        TA_int variable;
     }
May 10 2005
parent reply "Walter" <newshound digitalmars.com> writes:
I couldn't reproduce the fault, but I put it in the test suite anyway.
May 18 2005
parent reply Thomas Kuehne <thomas-dloop kuehne.this-is.spam.cn> writes:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Walter schrieb am Wed, 18 May 2005 22:52:41 -0700:
 I couldn't reproduce the fault, but I put it in the test suite anyway.
(gdb) run -v a.d b.d Starting program: dmd-0.123 -v a.d b.d parse a parse b semantic a semantic b semantic2 a semantic2 b semantic3 a semantic3 b code a generating code for function 'method' Program received signal SIGSEGV, Segmentation fault. 0x080a9d16 in FuncDeclaration::toObjFile() () (gdb) bt Thomas -----BEGIN PGP SIGNATURE----- iD8DBQFCjFR+3w+/yD4P9tIRAkN6AKCvNyVgjHJdpne+ldeqzCueVM2uLwCeKLP0 37AVAbol2yLhZm4Ssim9GTI= =r3O2 -----END PGP SIGNATURE-----
May 19 2005
parent reply "Walter" <newshound digitalmars.com> writes:
"Thomas Kuehne" <thomas-dloop kuehne.this-is.spam.cn> wrote in message
news:d8ol3u.43o.thomas-dloop laermschleuder.kuehne.cn...
 Program received signal SIGSEGV, Segmentation fault.
Doesn't happen for me, either on windows or linux.
May 19 2005
parent Thomas Kuehne <thomas-dloop kuehne.this-is.spam.cn> writes:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Walter schrieb am Thu, 19 May 2005 14:46:00 -0700:
 "Thomas Kuehne" <thomas-dloop kuehne.this-is.spam.cn> wrote in message
 news:d8ol3u.43o.thomas-dloop laermschleuder.kuehne.cn...
 Program received signal SIGSEGV, Segmentation fault.
Doesn't happen for me, either on windows or linux.
The files are http://dstress.kuehne.cn/run/b/bug_20050510_A2.d http://dstress.kuehne.cn/compile/b/bug_20050510_A1.d no bug: dmd run/b/bug_20050510_A2.d compile/b/bug_20050510_A1.d bug: dmd compile/b/bug_20050510_A1.d run/b/bug_20050510_A2.d Thomas -----BEGIN PGP SIGNATURE----- iD8DBQFCjS6v3w+/yD4P9tIRAmIrAJ9qgxh72kss+rOMpjjVdorC0AgiBgCeML3L Akf2qcyY9dE5wEHstM+mx7w= =tNEF -----END PGP SIGNATURE-----
May 19 2005