diff options
author | Martin Sebor <msebor@redhat.com> | 2016-05-13 20:55:26 +0000 |
---|---|---|
committer | Martin Sebor <msebor@gcc.gnu.org> | 2016-05-13 14:55:26 -0600 |
commit | 653fb4a289f340c37c18432ae50971b0be7f5ed8 (patch) | |
tree | 517906003b4aad8cb885a9e4984cf5b7eeb8d2db /gcc | |
parent | 6eaba1b066d5a7e6628cb1f83d8c3ffa43df0e10 (diff) | |
download | gcc-653fb4a289f340c37c18432ae50971b0be7f5ed8.zip gcc-653fb4a289f340c37c18432ae50971b0be7f5ed8.tar.gz gcc-653fb4a289f340c37c18432ae50971b0be7f5ed8.tar.bz2 |
c++/60049 - Right and left shift undefined behavior not an error in a constexpr
Add new test.
From-SVN: r236225
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/constexpr-60049.C | 24 |
2 files changed, 29 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5f3ff4d..7ef0797 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-05-13 Martin Sebor <msebor@redhat.com> + + PR c++/60049 + * g++.dg/cpp0x/constexpr-60049.C: New test. + 2016-05-13 Jakub Jelinek <jakub@redhat.com> PR bootstrap/71071 diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-60049.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-60049.C new file mode 100644 index 0000000..3a1ee81 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-60049.C @@ -0,0 +1,24 @@ +// PR c++/60049 - Right and left shift undefined behavior not an error +// in a constexpr +// { dg-do compile { target c++11 } } +// { dg-additional-options "-Wno-shift-negative-value -Wno-shift-count-negative -Wno-shift-count-overflow" } + +constexpr int f1 (int n) { return 1 << n; } // { dg-error "shift expression" } +constexpr int f2 (int n) { return 1 << n; } // { dg-error "shift expression" } +constexpr int f3 (int n) { return n << 1; } // { dg-error "shift expression" } +constexpr int f4 (int n) { return 1 >> n; } // { dg-error "shift expression" } +constexpr int f5 (int n) { return 1 >> n; } // { dg-error "shift expression" } + +constexpr int X = __CHAR_BIT__ * sizeof (int) + 1; + +constexpr int x1 = f1 (X); +constexpr int x2 = f2 (-1); +constexpr int x3 = f3 (-1); +constexpr int x4 = f4 (X); +constexpr int x5 = f5 (-1); + +constexpr int y1 = 1 << X; // { dg-error "shift expression" } +constexpr int y2 = 1 << -1; // { dg-error "shift expression" } +constexpr int y3 = -1 << 1; // { dg-error "shift expression" } +constexpr int y4 = 1 >> X; // { dg-error "shift expression" } +constexpr int y5 = 1 >> -1; // { dg-error "shift expression" } |