diff options
author | Jason Merrill <jason@redhat.com> | 2019-11-27 03:14:33 +0000 |
---|---|---|
committer | Jason Merrill <jason@redhat.com> | 2019-11-27 03:14:33 +0000 |
commit | 934392e344650668683ee8add798068ce0c68ed1 (patch) | |
tree | fbf6664ddf8b75e5751be33ff9a1987da6c3854e /gcc/testsuite/g++.dg | |
parent | e5970fb2cad51c4593e53de4bc583eb00f28045a (diff) |
Remember the location of a variable template-id.
I noticed that tsubst of a TEMPLATE_ID_EXPR was losing the location
information from its EXPR_LOCATION. Then I noticed that
cxx_eval_constant_expression was also throwing away location information for
variable references.
* pt.c (tsubst_copy_and_build) [TEMPLATE_ID_EXPR]: Remember the
location of a variable template-id.
* constexpr.c (cxx_eval_constant_expression): Get expr location
before stripping location wrappers.
(non_const_var_error): Take location argument.
git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@278755 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/testsuite/g++.dg')
-rw-r--r-- | gcc/testsuite/g++.dg/concepts/pr67595.C | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp1y/var-templ64.C | 14 |
2 files changed, 15 insertions, 1 deletions
diff --git a/gcc/testsuite/g++.dg/concepts/pr67595.C b/gcc/testsuite/g++.dg/concepts/pr67595.C index 7199e0517d4..029ec7a1186 100644 --- a/gcc/testsuite/g++.dg/concepts/pr67595.C +++ b/gcc/testsuite/g++.dg/concepts/pr67595.C @@ -9,6 +9,6 @@ template <class X> bool input_iterator{weak_input_iterator<X>}; // { dg-warning template <class X> bool forward_iterator{input_iterator<X>}; template <class X> bool bidirectional_iterator{forward_iterator<X>}; template <class X> -concept bool random_access_iterator{bidirectional_iterator<X>}; +concept bool random_access_iterator{bidirectional_iterator<X>}; // { dg-error "constant" } void fn1(random_access_iterator); int main() { fn1(0); } // { dg-error "" } diff --git a/gcc/testsuite/g++.dg/cpp1y/var-templ64.C b/gcc/testsuite/g++.dg/cpp1y/var-templ64.C new file mode 100644 index 00000000000..4e2b43b1d07 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1y/var-templ64.C @@ -0,0 +1,14 @@ +// { dg-do compile { target c++14 } } + +template <class T> T var = T(); + +template <class T> +void f() +{ + constexpr T i = var<T>; // { dg-error "19:var" } +} + +int main() +{ + f<int>(); +} |