From: msebor Date: Fri, 13 May 2016 20:55:26 +0000 (+0000) Subject: c++/60049 - Right and left shift undefined behavior not an error in a constexpr X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=00a690cc8f195f17bb0367b9916f30c8219967e9;p=thirdparty%2Fgcc.git c++/60049 - Right and left shift undefined behavior not an error in a constexpr Add new test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@236225 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5f3ff4d4a8a9..7ef07977cef4 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-05-13 Martin Sebor + + PR c++/60049 + * g++.dg/cpp0x/constexpr-60049.C: New test. + 2016-05-13 Jakub Jelinek 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 000000000000..3a1ee811c634 --- /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" }