From 2be2de827f2bcb42b619ee18df2530eab41e853b Mon Sep 17 00:00:00 2001 From: Ekaitz Zarraga Date: Tue, 29 Aug 2023 20:15:03 +0200 Subject: [PATCH] lib: tests: Add 17-compare-rotated. * lib/tests/scaffold/17-compare-rotated.c: Add file. * build-aux/check-mescc.sh (mes_tests): Add it. --- build-aux/check-mescc.sh | 1 + lib/tests/scaffold/17-compare-rotated.c | 42 +++++++++++++++++++++++++ 2 files changed, 43 insertions(+) create mode 100644 lib/tests/scaffold/17-compare-rotated.c diff --git a/build-aux/check-mescc.sh b/build-aux/check-mescc.sh index b8dfc6d3..0ac7216c 100755 --- a/build-aux/check-mescc.sh +++ b/build-aux/check-mescc.sh @@ -64,6 +64,7 @@ lib/tests/scaffold/17-compare-or.c lib/tests/scaffold/17-compare-and-or.c lib/tests/scaffold/17-compare-assign.c lib/tests/scaffold/17-compare-call.c +lib/tests/scaffold/17-compare-rotated.c lib/tests/scaffold/18-assign-shadow.c lib/tests/scaffold/20-while.c lib/tests/scaffold/21-char-array-simple.c diff --git a/lib/tests/scaffold/17-compare-rotated.c b/lib/tests/scaffold/17-compare-rotated.c new file mode 100644 index 00000000..2487445e --- /dev/null +++ b/lib/tests/scaffold/17-compare-rotated.c @@ -0,0 +1,42 @@ +/* -*-comment-start: "//";comment-end:""-*- + * GNU Mes --- Maxwell Equations of Software + * Copyright © 2023 Ekaitz Zarraga + * + * This file is part of GNU Mes. + * + * GNU Mes is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or (at + * your option) any later version. + * + * GNU Mes is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GNU Mes. If not, see . + */ + +int +main () +{ + unsigned u = 0xFFFFFFFF; + u = u <<30 >>30; // higher 30 bits are cleared because they leave + // the register to the left + int i = 3; + int r = u != i; + if (r) + return 1; + + unsigned short s = 0xFFFF; + s = s <<14 >>14; // s<<14 is promoted to int, the higher bits are + // not cleared, because there's space in the + // register + i = 0xFFFF; + r = s != i; + if (r) + return 2; + + return 0; +}