diff options
author | Jason Merrill <jason@redhat.com> | 2017-10-13 15:03:41 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2017-10-13 15:03:41 -0400 |
commit | 5c9c546b9d321b34fd02d2cab8d020297dd7686a (patch) | |
tree | 9af5d74bb8fb013d5e4893237c5ab2aaa7416e03 /gcc | |
parent | e6110fa622ff495f5a8d492fcad4cdab5259de0f (diff) | |
download | gcc-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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/tree.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/bitfield4.C | 6 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/cast4.C | 4 |
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" } +} |