From 43ffdd08fa6ba95ea871f720cd6b70da51a629db Mon Sep 17 00:00:00 2001 From: Dicebot Date: Wed, 10 Feb 2016 08:42:26 +0200 Subject: [PATCH] Fix 15668: __LINE__ evaluated at declaration context Relevant argument deduction code was using declaration `loc` instead of instantiation `instLoc` --- src/dtemplate.d | 4 ++-- test/compilable/test15668.d | 9 +++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 test/compilable/test15668.d diff --git a/src/dtemplate.d b/src/dtemplate.d index da5e33123d60..c6cab499067f 100644 --- a/src/dtemplate.d +++ b/src/dtemplate.d @@ -1435,7 +1435,7 @@ public: * the oded == oarg */ (*dedargs)[i] = oded; - MATCH m2 = tparam.matchArg(loc, paramscope, dedargs, i, parameters, dedtypes, null); + MATCH m2 = tparam.matchArg(instLoc, paramscope, dedargs, i, parameters, dedtypes, null); //printf("m2 = %d\n", m2); if (m2 <= MATCHnomatch) goto Lnomatch; @@ -1453,7 +1453,7 @@ public: } else { - oded = tparam.defaultArg(loc, paramscope); + oded = tparam.defaultArg(instLoc, paramscope); if (oded) (*dedargs)[i] = declareParameter(paramscope, tparam, oded); } diff --git a/test/compilable/test15668.d b/test/compilable/test15668.d new file mode 100644 index 000000000000..723521622001 --- /dev/null +++ b/test/compilable/test15668.d @@ -0,0 +1,9 @@ +void foo ( int line = __LINE__ ) ( string msg = "" ) +{ + static assert (line == 8); +} + +void main() +{ + foo(); +}