aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/ChangeLog5
-rw-r--r--gcc/ada/gcc-interface/utils.c3
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gnat.dg/discr47.adb19
4 files changed, 30 insertions, 1 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 053ca00..a7edb41 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,8 @@
+2017-02-24 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gcc-interface/utils.c (max_size) <tcc_expression>: Flip the second
+ argument when recursing on TRUTH_NOT_EXPR.
+
2017-02-12 John Marino <gnugcc@marino.st>
* system-freebsd-x86.ads: Rename into...
diff --git a/gcc/ada/gcc-interface/utils.c b/gcc/ada/gcc-interface/utils.c
index 3cda631..33a37ce 100644
--- a/gcc/ada/gcc-interface/utils.c
+++ b/gcc/ada/gcc-interface/utils.c
@@ -3635,7 +3635,8 @@ max_size (tree exp, bool max_p)
return exp;
return fold_build1 (code, type,
- max_size (TREE_OPERAND (exp, 0), max_p));
+ max_size (TREE_OPERAND (exp, 0),
+ code == TRUTH_NOT_EXPR ? !max_p : max_p));
case 2:
if (code == COMPOUND_EXPR)
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 6b62ae8..dc2cf4e 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2017-02-24 Eric Botcazou <ebotcazou@adacore.com>
+
+ * gnat.dg/discr47.adb: New test.
+
2017-02-24 Richard Biener <rguenther@suse.de>
PR tree-optimization/79389
diff --git a/gcc/testsuite/gnat.dg/discr47.adb b/gcc/testsuite/gnat.dg/discr47.adb
new file mode 100644
index 0000000..0aaa655
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/discr47.adb
@@ -0,0 +1,19 @@
+-- { dg-do run }
+-- { dg-options "-O -gnatws" }
+
+procedure Discr47 is
+
+ type Rec (D : Boolean := False) is record
+ case D is
+ when True => null;
+ when False => C : Character;
+ end case;
+ end record;
+
+ R : Rec;
+
+begin
+ if R'Size /= 16 then
+ raise Program_Error;
+ end if;
+end;