@@ -35,12 +35,14 @@ import dmd.denum;
3535import dmd.dstruct;
3636import dmd.dsymbol;
3737import dmd.dtemplate;
38- import dmd.errors;
38+ import dmd.errors : fatal;
39+ import dmd.errorsink;
3940import dmd.expression;
4041import dmd.id;
4142import dmd.expressionsem : toBool, toInteger;
4243import dmd.func;
4344import dmd.globals;
45+ import dmd.hdrgen : toErrMsg;
4446import dmd.init;
4547import dmd.location;
4648import dmd.mtype;
@@ -72,6 +74,8 @@ alias Dts = Array!(dt_t*);
7274
7375void Initializer_toDt (Initializer init, ref DtBuilder dtb, bool isCfile)
7476{
77+ auto eSink = global.errorSink;
78+
7579 void visitError (ErrorInitializer)
7680 {
7781 assert (0 );
@@ -125,7 +129,7 @@ void Initializer_toDt(Initializer init, ref DtBuilder dtb, bool isCfile)
125129 auto dtb = DtBuilder(0 );
126130 Initializer_toDt(ai.value[i], dtb, isCfile);
127131 if (dts[length] && ! ai.isCarray)
128- error(ai.loc, " duplicate initializations for index `%d`" , length);
132+ eSink. error(ai.loc, " duplicate initializations for index `%d`" , length);
129133 dts[length] = dtb.finish();
130134 length++ ;
131135 }
@@ -182,7 +186,7 @@ void Initializer_toDt(Initializer init, ref DtBuilder dtb, bool isCfile)
182186 }
183187 else if (ai.dim > tadim)
184188 {
185- error(ai.loc, " too many initializers, %u, for array[%llu]" , ai.dim, cast (ulong ) tadim);
189+ eSink. error(ai.loc, " too many initializers, %u, for array[%llu]" , ai.dim, cast (ulong ) tadim);
186190 }
187191 dtb.cat(dtbarray);
188192 break ;
@@ -235,6 +239,8 @@ void Initializer_toDt(Initializer init, ref DtBuilder dtb, bool isCfile)
235239
236240void Expression_toDt (Expression e, ref DtBuilder dtb)
237241{
242+ auto eSink = global.errorSink;
243+
238244 dtb.checkInitialized();
239245
240246 void nonConstExpError (Expression e)
@@ -243,7 +249,7 @@ void Expression_toDt(Expression e, ref DtBuilder dtb)
243249 {
244250 printf(" Expression.toDt() op = %d e = %s \n " , e.op, e.toChars());
245251 }
246- error(e.loc, " non-constant expression `%s`" , e.toErrMsg());
252+ eSink. error(e.loc, " non-constant expression `%s`" , e.toErrMsg());
247253 dtb.nzeros(1 );
248254 }
249255
@@ -526,7 +532,7 @@ void Expression_toDt(Expression e, ref DtBuilder dtb)
526532 {
527533 if (! e.loweringCtfe)
528534 {
529- error(e.loc, " internal compiler error: failed to detect static initialization of associative array" );
535+ eSink. error(e.loc, " internal compiler error: failed to detect static initialization of associative array" );
530536 assert (0 );
531537 }
532538 Expression_toDt(e.loweringCtfe, dtb);
@@ -561,7 +567,7 @@ void Expression_toDt(Expression e, ref DtBuilder dtb)
561567 if ((v.isConst() || v.isImmutable()) &&
562568 e.type.toBasetype().ty != Tsarray && v._init)
563569 {
564- error(e.loc, " recursive reference `%s`" , e.toErrMsg());
570+ eSink. error(e.loc, " recursive reference `%s`" , e.toErrMsg());
565571 return ;
566572 }
567573 v.inuse++ ;
@@ -1243,9 +1249,10 @@ private extern (C++) class TypeInfoDtVisitor : Visitor
12431249 printf(" expected = x%x, %s.structsize = x%x\n " , cast (uint )expected,
12441250 typeclass.toChars(), cast (uint )typeclass.structsize);
12451251 }
1246- error(typeclass.loc, " `%s`: mismatch between compiler (%d bytes) and object.d or object.di (%d bytes) found" ,
1252+ auto eSink = global.errorSink;
1253+ eSink.error(typeclass.loc, " `%s`: mismatch between compiler (%d bytes) and object.d or object.di (%d bytes) found" ,
12471254 typeclass.toErrMsg(), cast (uint )expected, cast (uint )typeclass.structsize);
1248- errorSupplemental(typeclass.loc, " check installation and import paths with `-v` compiler switch" );
1255+ eSink. errorSupplemental(typeclass.loc, " check installation and import paths with `-v` compiler switch" );
12491256 fatal();
12501257 }
12511258 }
0 commit comments