Skip to content

Commit

Permalink
fix Issue 12280 - Redundant "template instance ... error instantiatin…
Browse files Browse the repository at this point in the history
…g" messages
  • Loading branch information
9rnsr committed Mar 10, 2014
1 parent 1ede8e2 commit 75356c6
Show file tree
Hide file tree
Showing 12 changed files with 62 additions and 57 deletions.
14 changes: 10 additions & 4 deletions src/template.c
Expand Up @@ -6126,10 +6126,12 @@ void TemplateInstance::semantic(Scope *sc, Expressions *fargs)
// Give additional context info if error occurred during instantiation
if (global.errors != errorsave)
{
if (!tempdecl->literal)
error(loc, "error instantiating");
if (tinst)
{ tinst->printInstantiationTrace();
if (!errors)
{
if (!tempdecl->literal)
error(loc, "error instantiating");
if (tinst)
tinst->printInstantiationTrace();
}
errors = true;
if (global.gag)
Expand Down Expand Up @@ -7360,6 +7362,7 @@ void TemplateInstance::printInstantiationTrace()
{
for (TemplateInstance *cur = this; cur; cur = cur->tinst)
{
cur->errors = true;
errorSupplemental(cur->loc, format, cur->toChars());
}
}
Expand All @@ -7370,6 +7373,7 @@ void TemplateInstance::printInstantiationTrace()
int recursionDepth=0;
for (TemplateInstance *cur = this; cur; cur = cur->tinst)
{
cur->errors = true;
if (cur->tinst && cur->tempdecl && cur->tinst->tempdecl
&& cur->tempdecl->loc.equals(cur->tinst->tempdecl->loc))
{
Expand All @@ -7392,6 +7396,8 @@ void TemplateInstance::printInstantiationTrace()
unsigned i = 0;
for (TemplateInstance *cur = this; cur; cur = cur->tinst)
{
cur->errors = true;

if (i == max_shown / 2)
errorSupplemental(cur->loc, "... (%d instantiations, -v to show) ...", n_instantiations - max_shown);

Expand Down
18 changes: 18 additions & 0 deletions test/fail_compilation/diag12280.d
@@ -0,0 +1,18 @@
/*
TEST_OUTPUT:
---
fail_compilation/diag12280.d(15): Error: undefined identifier nonexistent
fail_compilation/diag12280.d(13): Error: template instance diag12280.f!10 error instantiating
fail_compilation/diag12280.d(18): 11 recursive instantiations from here: f!0
---
*/

void f(int i)()
{
static if (i < 10)
f!(i + 1);
else
nonexistent();
}

alias f0 = f!0;
9 changes: 4 additions & 5 deletions test/fail_compilation/fail125.d
@@ -1,11 +1,10 @@
/*
TEST_OUTPUT:
---
fail_compilation/fail125.d(16): Error: array index [2] is outside array bounds [0 .. 2]
fail_compilation/fail125.d(16): Error: cannot implicitly convert expression (tuple(a, b)) of type (int, int) to int
fail_compilation/fail125.d(19): Error: template instance fail125.main.recMove!(1, a, b) error instantiating
fail_compilation/fail125.d(26): instantiated from here: recMove!(0, a, b)
fail_compilation/fail125.d(26): Error: template instance fail125.main.recMove!(0, a, b) error instantiating
fail_compilation/fail125.d(15): Error: array index [2] is outside array bounds [0 .. 2]
fail_compilation/fail125.d(15): Error: cannot implicitly convert expression (tuple(a, b)) of type (int, int) to int
fail_compilation/fail125.d(18): Error: template instance fail125.main.recMove!(1, a, b) error instantiating
fail_compilation/fail125.d(25): instantiated from here: recMove!(0, a, b)
---
*/

Expand Down
11 changes: 5 additions & 6 deletions test/fail_compilation/fail238_m32.d
Expand Up @@ -2,12 +2,11 @@
/*
TEST_OUTPUT:
---
fail_compilation/fail238_m32.d(22): Error: cannot implicitly convert expression ("a") of type string to uint
fail_compilation/fail238_m32.d(25): Error: Cannot interpret X!() at compile time
fail_compilation/fail238_m32.d(30): Error: template instance fail238_m32.A!"a" error instantiating
fail_compilation/fail238_m32.d(36): instantiated from here: M!(q)
fail_compilation/fail238_m32.d(36): Error: template instance fail238_m32.main.M!(q) error instantiating
fail_compilation/fail238_m32.d(36): while evaluating pragma(msg, M!(q))
fail_compilation/fail238_m32.d(21): Error: cannot implicitly convert expression ("a") of type string to uint
fail_compilation/fail238_m32.d(24): Error: Cannot interpret X!() at compile time
fail_compilation/fail238_m32.d(29): Error: template instance fail238_m32.A!"a" error instantiating
fail_compilation/fail238_m32.d(35): instantiated from here: M!(q)
fail_compilation/fail238_m32.d(35): while evaluating pragma(msg, M!(q))
---
*/

Expand Down
11 changes: 5 additions & 6 deletions test/fail_compilation/fail238_m64.d
Expand Up @@ -2,12 +2,11 @@
/*
TEST_OUTPUT:
---
fail_compilation/fail238_m64.d(22): Error: cannot implicitly convert expression ("a") of type string to ulong
fail_compilation/fail238_m64.d(25): Error: Cannot interpret X!() at compile time
fail_compilation/fail238_m64.d(30): Error: template instance fail238_m64.A!"a" error instantiating
fail_compilation/fail238_m64.d(36): instantiated from here: M!(q)
fail_compilation/fail238_m64.d(36): Error: template instance fail238_m64.main.M!(q) error instantiating
fail_compilation/fail238_m64.d(36): while evaluating pragma(msg, M!(q))
fail_compilation/fail238_m64.d(21): Error: cannot implicitly convert expression ("a") of type string to ulong
fail_compilation/fail238_m64.d(24): Error: Cannot interpret X!() at compile time
fail_compilation/fail238_m64.d(29): Error: template instance fail238_m64.A!"a" error instantiating
fail_compilation/fail238_m64.d(35): instantiated from here: M!(q)
fail_compilation/fail238_m64.d(35): while evaluating pragma(msg, M!(q))
---
*/

Expand Down
8 changes: 3 additions & 5 deletions test/fail_compilation/fail260.d
Expand Up @@ -2,12 +2,12 @@
TEST_OUTPUT:
---
fail_compilation/fail260.d(26): Error: template instance Static!(4u, 4u) Static!(4u, 4u) is nested in both Static and Static
fail_compilation/fail260.d(32): Error: template instance fail260.Static!(1, 4).Static.MultReturn!(Static!(1, 4), Static!(4, 1)) error instantiating
fail_compilation/fail260.d(45): instantiated from here: opMultVectors!(Static!(4, 1))
fail_compilation/fail260.d(45): Error: template instance fail260.Static!(1, 4).Static.opMultVectors!(Static!(4, 1)) error instantiating
fail_compilation/fail260.d(31): Error: template instance fail260.Static!(1, 4).Static.MultReturn!(Static!(1, 4), Static!(4, 1)) error instantiating
fail_compilation/fail260.d(43): instantiated from here: opMultVectors!(Static!(4, 1))
---
*/
// REQUIRED_ARGS: -d

struct Static(uint width2, uint height2)
{
immutable width = width2;
Expand All @@ -26,12 +26,10 @@ struct Static(uint width2, uint height2)
alias Static!(M2.width, M1.height) MultReturn;
}


void opMultVectors(M2)(M2 b)
{
alias MultReturn!(Static, M2) ret_matrix;
}

}

void test()
Expand Down
7 changes: 3 additions & 4 deletions test/fail_compilation/fail278.d
@@ -1,10 +1,9 @@
/*
TEST_OUTPUT:
---
fail_compilation/fail278.d(12): Error: template instance NONEXISTENT!() template 'NONEXISTENT' is not defined
fail_compilation/fail278.d(13): Error: template instance fail278.F!() error instantiating
fail_compilation/fail278.d(14): instantiated from here: Bar!(Foo)
fail_compilation/fail278.d(14): Error: template instance fail278.Bar!(Foo) error instantiating
fail_compilation/fail278.d(11): Error: template instance NONEXISTENT!() template 'NONEXISTENT' is not defined
fail_compilation/fail278.d(12): Error: template instance fail278.F!() error instantiating
fail_compilation/fail278.d(13): instantiated from here: Bar!(Foo)
---
*/

Expand Down
11 changes: 5 additions & 6 deletions test/fail_compilation/ice10076.d
@@ -1,12 +1,11 @@
/*
TEST_OUTPUT:
---
fail_compilation/ice10076.d(21): Error: template instance getMembersAndAttributesWhere!() template 'getMembersAndAttributesWhere' is not defined
fail_compilation/ice10076.d(26): Error: template instance ice10076.getValidaterAttrs!string error instantiating
fail_compilation/ice10076.d(16): instantiated from here: validate!string
fail_compilation/ice10076.d(26): Error: forward reference to 'getMembersAndAttributesWhere!().Elements'
fail_compilation/ice10076.d(26): Error: forward reference to 'getMembersAndAttributesWhere!().Elements'
fail_compilation/ice10076.d(16): Error: template instance ice10076.validate!string error instantiating
fail_compilation/ice10076.d(20): Error: template instance getMembersAndAttributesWhere!() template 'getMembersAndAttributesWhere' is not defined
fail_compilation/ice10076.d(25): Error: template instance ice10076.getValidaterAttrs!string error instantiating
fail_compilation/ice10076.d(15): instantiated from here: validate!string
fail_compilation/ice10076.d(25): Error: forward reference to 'getMembersAndAttributesWhere!().Elements'
fail_compilation/ice10076.d(25): Error: forward reference to 'getMembersAndAttributesWhere!().Elements'
---
*/

Expand Down
4 changes: 2 additions & 2 deletions test/fail_compilation/ice10624.d
Expand Up @@ -3,8 +3,7 @@ TEST_OUTPUT:
---
fail_compilation/ice10624.d(38): Error: need member function opCmp() for struct Tuple!(Msg) to compare
fail_compilation/ice10624.d(48): Error: template instance ice10624.Variant.handler!(Tuple!(Msg)) error instantiating
fail_compilation/ice10624.d(22): instantiated from here: opAssign!(Tuple!(Msg))
fail_compilation/ice10624.d(22): Error: template instance ice10624.Variant.opAssign!(Tuple!(Msg)) error instantiating
fail_compilation/ice10624.d(21): instantiated from here: opAssign!(Tuple!(Msg))
---
*/

Expand All @@ -22,6 +21,7 @@ void main()
data = Tuple!Msg();

}

struct Variant
{
ptrdiff_t function() fptr = &handler!(void);
Expand Down
11 changes: 3 additions & 8 deletions test/fail_compilation/ice11822.d
Expand Up @@ -4,33 +4,28 @@
/*
TEST_OUTPUT:
---
fail_compilation/ice11822.d(37): Deprecation: function ice11822.d is deprecated
fail_compilation/ice11822.d(24): instantiated from here: S!(__lambda1)
fail_compilation/ice11822.d(37): instantiated from here: g!((n) => d(i))
fail_compilation/ice11822.d(37): Error: template instance ice11822.h.g!((n) => d(i)) error instantiating
fail_compilation/ice11822.d(32): Deprecation: function ice11822.d is deprecated
fail_compilation/ice11822.d(21): instantiated from here: S!(__lambda1)
fail_compilation/ice11822.d(32): instantiated from here: g!((n) => d(i))
---
*/


struct S(alias pred)
{
this(int) { pred(1); }
void f() { pred(2); }
}


auto g(alias pred)()
{
return S!pred(3);
}


deprecated bool d(int)
{
return true;
}


auto h()
{
int i;
Expand Down
8 changes: 2 additions & 6 deletions test/fail_compilation/ice11850.d
@@ -1,10 +1,9 @@
/*
TEST_OUTPUT:
---
fail_compilation/ice11850.d(15): Error: incompatible types for ((a) < ([0])): 'uint[]' and 'int[]'
fail_compilation/ice11850.d(14): Error: incompatible types for ((a) < ([0])): 'uint[]' and 'int[]'
fail_compilation/imports/a11850.d(9): instantiated from here: FilterResult!(__lambda1, uint[][])
fail_compilation/ice11850.d(15): instantiated from here: filter!(uint[][])
fail_compilation/ice11850.d(15): Error: template instance ice11850.main.filter!((a) => a < [0]).filter!(uint[][]) error instantiating
fail_compilation/ice11850.d(14): instantiated from here: filter!(uint[][])
---
*/

Expand All @@ -14,6 +13,3 @@ void main()
{
filter!(a => a < [0])([[0u]]);
}



7 changes: 2 additions & 5 deletions test/fail_compilation/ice11919.d
@@ -1,13 +1,10 @@
/*
TEST_OUTPUT:
---
fail_compilation/ice11919.d(20): Error: Cannot interpret foo at compile time
fail_compilation/ice11919.d(17): Error: Cannot interpret foo at compile time
fail_compilation/imports/a11919.d(4): Error: template instance a11919.doBar!(Foo).doBar.zoo!(t) error instantiating
fail_compilation/imports/a11919.d(11): instantiated from here: doBar!(Foo)
fail_compilation/ice11919.d(28): instantiated from here: doBar!(Bar)
fail_compilation/imports/a11919.d(11): Error: template instance a11919.doBar!(Foo) error instantiating
fail_compilation/ice11919.d(28): instantiated from here: doBar!(Bar)
fail_compilation/ice11919.d(28): Error: template instance a11919.doBar!(Bar) error instantiating
fail_compilation/ice11919.d(25): instantiated from here: doBar!(Bar)
---
*/

Expand Down

0 comments on commit 75356c6

Please sign in to comment.