D issues are now tracked on GitHub. This Bugzilla instance remains as a read-only archive.
Issue 1913 - Template error message reports correct line # but wrong file
Summary: Template error message reports correct line # but wrong file
Status: RESOLVED FIXED
Alias: None
Product: D
Classification: Unclassified
Component: dmd (show other issues)
Version: D2
Hardware: x86 Linux
: P2 normal
Assignee: No Owner
URL:
Keywords: diagnostic
Depends on:
Blocks:
 
Reported: 2008-03-12 10:18 UTC by Russ Lewis
Modified: 2015-06-09 01:14 UTC (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this issue.
Description Russ Lewis 2008-03-12 10:18:08 UTC
The code below actually has two problems with the error messages produced.

This bug is to report the fact that the second error message reports the wrong file name (although it reports the right line number).

dmd 2.012, Linux

BEGIN MODULE "a.d"
  import b;

  import std.stdio;

  template typeof_each(T,TPL...)
  {
    static if(TPL.length == 0)
      alias Tuple!(typeof(T)) typeof_each;
    else
      alias Tuple!(typeof(T), typeof_each!(TPL)) typeof_each;
  }

  template typeid_each(T,TPL...)
  {
    static if(TPL.length == 0)
      alias Tuple!(typeid(T)) typeid_each;
    else
      alias Tuple!(typeid(T), typeid_each!(TPL)) typeid_each;
  }

  void foo(ARGS_TPL...)(ARGS_TPL args)
  {
    writefln("", typeid_each!(typeof_each!(ARGS_TPL)));
  }

  void bar()
  {
    foo(',' , ',');
  }

BEGIN MODULE "b.d"
  template Tuple(TPL...)
  {
    alias TPL Tuple;
  }

END CODE

COMPILER OUTPUT
  Error: expression & _D10TypeInfo_a6__initZ is not a valid template value argument
  b.d(16): template instance b.Tuple!(& _D10TypeInfo_a6__initZ) error instantiating
Comment 1 Simen Kjaeraas 2008-03-25 17:25:21 UTC
Simpler code to showcase the error. Bug is in message #1

BEGIN MODULE "a.d"

module a;
import b;

void main()
{
	int bar;
	foo!(bar) baz;
}

BEGIN MODULE "b.d"

module b;

struct foo(alias T)
{
	mixin T;
}

END CODE

COMPILER OUTPUT
a.d(5): mixin T isn't a template
a.d(7): template instance a.main.foo!(bar) error instantiating
Comment 2 Russ Lewis 2008-07-09 14:32:19 UTC
The error in question (the one that had the wrong line number) went away.  So, I no longer have this problem.  However, since the error went away altogether, I cannot confirm that the erroneous filename reporting is actually fixed.  It is possible that maybe the problem that exposed it simply vanished.
Comment 3 Kenji Hara 2011-07-09 20:13:48 UTC
As Russ says in comment #2, now Error message is correct (dmd 45cc9c5).
----
b.d(5): Error: mixin T isn't a template
a.d(7): Error: template instance a.main.foo!(bar) error instantiating
----