diff --git a/src/template.c b/src/template.c index e764c9e29a5e..a00016be3322 100644 --- a/src/template.c +++ b/src/template.c @@ -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) @@ -7360,6 +7362,7 @@ void TemplateInstance::printInstantiationTrace() { for (TemplateInstance *cur = this; cur; cur = cur->tinst) { + cur->errors = true; errorSupplemental(cur->loc, format, cur->toChars()); } } @@ -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)) { @@ -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); diff --git a/test/fail_compilation/diag12280.d b/test/fail_compilation/diag12280.d new file mode 100644 index 000000000000..9bba833e90bc --- /dev/null +++ b/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; diff --git a/test/fail_compilation/fail125.d b/test/fail_compilation/fail125.d index 66d00f93c068..48099827b151 100644 --- a/test/fail_compilation/fail125.d +++ b/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) --- */ diff --git a/test/fail_compilation/fail238_m32.d b/test/fail_compilation/fail238_m32.d index c7637dce5993..5b06cf6ffd5b 100644 --- a/test/fail_compilation/fail238_m32.d +++ b/test/fail_compilation/fail238_m32.d @@ -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)) --- */ diff --git a/test/fail_compilation/fail238_m64.d b/test/fail_compilation/fail238_m64.d index 927e76d7d81e..6d44e1b2ecbb 100644 --- a/test/fail_compilation/fail238_m64.d +++ b/test/fail_compilation/fail238_m64.d @@ -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)) --- */ diff --git a/test/fail_compilation/fail260.d b/test/fail_compilation/fail260.d index c5affbad6d7e..639a6f8e005e 100644 --- a/test/fail_compilation/fail260.d +++ b/test/fail_compilation/fail260.d @@ -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; @@ -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() diff --git a/test/fail_compilation/fail278.d b/test/fail_compilation/fail278.d index 16c64835a85c..8437acd64248 100644 --- a/test/fail_compilation/fail278.d +++ b/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) --- */ diff --git a/test/fail_compilation/ice10076.d b/test/fail_compilation/ice10076.d index 940e760293eb..fd3571777828 100644 --- a/test/fail_compilation/ice10076.d +++ b/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' --- */ diff --git a/test/fail_compilation/ice10624.d b/test/fail_compilation/ice10624.d index 3628fc902b40..1e8633de4391 100644 --- a/test/fail_compilation/ice10624.d +++ b/test/fail_compilation/ice10624.d @@ -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)) --- */ @@ -22,6 +21,7 @@ void main() data = Tuple!Msg(); } + struct Variant { ptrdiff_t function() fptr = &handler!(void); diff --git a/test/fail_compilation/ice11822.d b/test/fail_compilation/ice11822.d index fea84789b1a9..4ec46c3a2f5f 100644 --- a/test/fail_compilation/ice11822.d +++ b/test/fail_compilation/ice11822.d @@ -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; diff --git a/test/fail_compilation/ice11850.d b/test/fail_compilation/ice11850.d index bc206afac882..9d1f172a50e3 100644 --- a/test/fail_compilation/ice11850.d +++ b/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[][]) --- */ @@ -14,6 +13,3 @@ void main() { filter!(a => a < [0])([[0u]]); } - - - diff --git a/test/fail_compilation/ice11919.d b/test/fail_compilation/ice11919.d index 67f67e989643..edb31d4cf1b0 100644 --- a/test/fail_compilation/ice11919.d +++ b/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) --- */