aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2017-10-13 15:03:41 -0400
committerJason Merrill <jason@gcc.gnu.org>2017-10-13 15:03:41 -0400
commit5c9c546b9d321b34fd02d2cab8d020297dd7686a (patch)
tree9af5d74bb8fb013d5e4893237c5ab2aaa7416e03
parente6110fa622ff495f5a8d492fcad4cdab5259de0f (diff)
downloadgcc-5c9c546b9d321b34fd02d2cab8d020297dd7686a.zip
gcc-5c9c546b9d321b34fd02d2cab8d020297dd7686a.tar.gz
gcc-5c9c546b9d321b34fd02d2cab8d020297dd7686a.tar.bz2
PR c++/82357 - bit-field in template
* tree.c (cp_stabilize_reference): Just return a NON_DEPENDENT_EXPR. From-SVN: r253739
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/tree.c4
-rw-r--r--gcc/testsuite/g++.dg/template/bitfield4.C6
-rw-r--r--gcc/testsuite/g++.dg/template/cast4.C4
4 files changed, 19 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index c225835..2b6e3b6 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2017-10-13 Jason Merrill <jason@redhat.com>
+
+ PR c++/82357 - bit-field in template
+ * tree.c (cp_stabilize_reference): Just return a NON_DEPENDENT_EXPR.
+
2017-10-13 David Malcolm <dmalcolm@redhat.com>
* cp-tree.h (maybe_show_extern_c_location): New decl.
diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c
index e21ff6a..366f46f 100644
--- a/gcc/cp/tree.c
+++ b/gcc/cp/tree.c
@@ -333,6 +333,10 @@ cp_stabilize_reference (tree ref)
{
switch (TREE_CODE (ref))
{
+ case NON_DEPENDENT_EXPR:
+ /* We aren't actually evaluating this. */
+ return ref;
+
/* We need to treat specially anything stabilize_reference doesn't
handle specifically. */
case VAR_DECL:
diff --git a/gcc/testsuite/g++.dg/template/bitfield4.C b/gcc/testsuite/g++.dg/template/bitfield4.C
new file mode 100644
index 0000000..4927b7a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/bitfield4.C
@@ -0,0 +1,6 @@
+// PR c++/82357
+
+template <typename> struct A {
+ A() { x |= 0; }
+ int x : 8;
+};
diff --git a/gcc/testsuite/g++.dg/template/cast4.C b/gcc/testsuite/g++.dg/template/cast4.C
new file mode 100644
index 0000000..2f46c71
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/cast4.C
@@ -0,0 +1,4 @@
+template <class T> void f()
+{
+ static_cast<int&>(42); // { dg-error "static_cast" }
+}