From 061ac36a75866ec6cb6827c1bb99263764ccac14 Mon Sep 17 00:00:00 2001 From: k-hara Date: Tue, 1 Sep 2015 13:30:36 +0900 Subject: [PATCH] fix Issue 14950 - Setting enum value to the last member of another enum causes int overflow error --- src/denum.d | 3 ++- test/fail_compilation/diag14950.d | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 test/fail_compilation/diag14950.d diff --git a/src/denum.d b/src/denum.d index 65bc705cf855..96a42554d6a4 100644 --- a/src/denum.d +++ b/src/denum.d @@ -656,7 +656,8 @@ public: e = e.ctfeInterpret(); if (e.toInteger()) { - error("initialization with (%s.%s + 1) causes overflow for type '%s'", emprev.ed.toChars(), emprev.toChars(), ed.type.toBasetype().toChars()); + error("initialization with (%s.%s + 1) causes overflow for type '%s'", + emprev.ed.toChars(), emprev.toChars(), ed.memtype.toChars()); goto Lerrors; } // Now set e to (eprev + 1) diff --git a/test/fail_compilation/diag14950.d b/test/fail_compilation/diag14950.d new file mode 100644 index 000000000000..841af5a6e207 --- /dev/null +++ b/test/fail_compilation/diag14950.d @@ -0,0 +1,18 @@ +/* +TEST_OUTPUT: +--- +fail_compilation/diag14950.d(17): Error: enum member diag14950.B.end initialization with (B.start + 1) causes overflow for type 'A' +--- +*/ + +enum A +{ + start, + end +} + +enum B +{ + start = A.end, + end +}