From: Martin Sebor 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: https://git.libre-soc.org/?a=commitdiff_plain;h=653fb4a289f340c37c18432ae50971b0be7f5ed8;p=gcc.git c++/60049 - Right and left shift undefined behavior not an error in a constexpr Add new test. From-SVN: r236225 --- diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5f3ff4d4a8a..7ef07977cef 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 00000000000..3a1ee811c63 --- /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" }