March 01, 2012
http://d.puremagic.com/issues/show_bug.cgi?id=7619

           Summary: Broken deprecated feature with template function
           Product: D
           Version: D2
          Platform: All
        OS/Version: All
            Status: NEW
          Keywords: rejects-valid
          Severity: normal
          Priority: P2
         Component: DMD
        AssignedTo: nobody@puremagic.com
        ReportedBy: k.hara.pg@gmail.com


--- Comment #0 from Kenji Hara <k.hara.pg@gmail.com> 2012-03-01 06:00:00 PST ---
I think following code should compile with and without -d switch.

test.d
----
void main(){}

void foo(T)(T t){}  // line 3

deprecated struct S{}

deprecated void test()
{
    S s;
    foo(s);   // line 10
    // foo is instantiated with deprecated struct S.
}

command line
----
dmd -run test.d

output:
----
test.d(3): Error: struct test.S is deprecated
test.d(10): Error: template instance test.foo!(S) error instantiating

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
March 01, 2012
http://d.puremagic.com/issues/show_bug.cgi?id=7619


Stewart Gordon <smjg@iname.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |smjg@iname.com


--- Comment #1 from Stewart Gordon <smjg@iname.com> 2012-03-01 09:10:41 PST ---
It seems to me the compiler generates

void fooS(S t) {}

but once the time's come to semantically analyse the instance, it has forgotten what created it in the first place.

Perhaps what's needed is: If when semantically analysing a template instance a deprecated symbol is hit, flag the template instance as deprecated.  Then only if non-deprecated code references it will an error be generated.

The complication is that the error shown to the user should be about the original deprecated symbol.  This can be achieved by accommodating in the propagated deprecation flag a note of the original deprecation.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------