8002 – Excess initial errors when passing template args to non-templated struct

D issues are now tracked on GitHub. This Bugzilla instance remains as a read-only archive.
Issue 8002 - Excess initial errors when passing template args to non-templated struct
Summary: Excess initial errors when passing template args to non-templated struct
Status: RESOLVED FIXED
Alias: None
Product: D
Classification: Unclassified
Component: dmd (show other issues)
Version: D2
Hardware: All All
: P2 normal
Assignee: No Owner
URL:
Keywords: diagnostic, pull
Depends on:
Blocks:
Reported: 2012年04月29日 14:14 UTC by Nick Sabalausky
Modified: 2012年04月30日 12:01 UTC (History)
1 user (show)

See Also:


Attachments
Add an attachment (proposed patch, testcase, etc.)

Note You need to log in before you can comment on or make changes to this issue.
Description Nick Sabalausky 2012年04月29日 14:14:11 UTC
---------------
import std.stdio;
struct Foo
{
	int a;
}
int bar()
{
	writeln();
	return 1;
}
void main()
{
	Foo x = Foo!(bar());
}
---------------
A template argument is (accidentally) being passed to Foo. The compiler should, and does, print a "not a template declaration" error. But before doing so, it evaluates the completely erroneous template arg, resulting in a big pile of totally non-applicable error text ("cannot be interpreted at compile time") which obscures the one real problem.
>dmd test.d
C:\Documents and Settings\Nick Sabalausky\Application Data\dvm\compilers\dmd-2.059\bin\..\src\phobos\std\stdio.d(1548): Error: fputc cannot be interpreted at compile time, because it has no available source code
C:\Documents and Settings\Nick Sabalausky\Application Data\dvm\compilers\dmd-2.059\bin\..\src\phobos\std\stdio.d(1548): called from here: enforce(fputc(10,(*stdout.p).handle) == 10,delegate pure nothrow @safe const(char)[]()
{
return null;
}
)
test.d(10): called from here: writeln()
test.d(16): called from here: bar()
test.d(16): Error: template instance Foo!(bar()) Foo is not a template declaration, it is a struct
Comment 1 Kenji Hara 2012年04月30日 08:05:07 UTC
https://github.com/D-Programming-Language/dmd/pull/915 
Comment 2 github-bugzilla 2012年04月30日 11:22:17 UTC
Commits pushed to master at https://github.com/D-Programming-Language/dmd
https://github.com/D-Programming-Language/dmd/commit/81eca37fcb551a9adbec23f9d60c6b1fc90e247d
fix Issue 8002 - Excess initial errors when passing template args to non-templated struct
https://github.com/D-Programming-Language/dmd/commit/d303d30500689dc4f9c9b60ae4b497549887c2b4
Merge pull request #915 from 9rnsr/fix8002
Issue 8002 - Excess initial errors when passing template args to non-templated struct


AltStyle によって変換されたページ (->オリジナル) /