aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>2003-08-28 07:14:26 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>2003-08-28 07:14:26 +0000
commit22bd385b2b2c5e3a8b2bc1370cd576b75195d72e (patch)
tree33b46f58435734419c1a15c485d745d9839d668d /gcc
parent45dff86efa42f35786a2624ff70d7304d3e7ef77 (diff)
downloadgcc-22bd385b2b2c5e3a8b2bc1370cd576b75195d72e.zip
gcc-22bd385b2b2c5e3a8b2bc1370cd576b75195d72e.tar.gz
gcc-22bd385b2b2c5e3a8b2bc1370cd576b75195d72e.tar.bz2
re PR rtl-optimization/5079 (Reference to static const int not eliminated during optimization)
PR optimization/5079 * call.c (build_conditional_expr): Use decl_constant_value to simplify the arguments. PR optimization/5079 * g++.dg/opt/static3.C: New test. From-SVN: r70881
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/call.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/opt/static3.C35
4 files changed, 48 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index a779d62..87857b2 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2003-08-28 Mark Mitchell <mark@codesourcery.com>
+
+ PR optimization/5079
+ * call.c (build_conditional_expr): Use decl_constant_value to
+ simplify the arguments.
+
2003-08-26 Dan Nicolaescu <dann@ics.uci.edu>
* parser.c (struct cp_token): Use enum bitfields.
diff --git a/gcc/cp/call.c b/gcc/cp/call.c
index a74fd63..739ce71 100644
--- a/gcc/cp/call.c
+++ b/gcc/cp/call.c
@@ -3358,6 +3358,8 @@ build_conditional_expr (tree arg1, tree arg2, tree arg3)
}
valid_operands:
+ arg2 = decl_constant_value (arg2);
+ arg3 = decl_constant_value (arg3);
result = fold (build (COND_EXPR, result_type, arg1, arg2, arg3));
/* We can't use result_type below, as fold might have returned a
throw_expr. */
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 0877585..e0c5d5b 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2003-08-28 Mark Mitchell <mark@codesourcery.com>
+
+ PR optimization/5079
+ * g++.dg/opt/static3.C: New test.
+
2003-08-27 Zdenek Dvorak <rakdver@atrey.karlin.mff.cuni.cz>
* gcc.misc-tests/gcov-10b.c: New test.
diff --git a/gcc/testsuite/g++.dg/opt/static3.C b/gcc/testsuite/g++.dg/opt/static3.C
new file mode 100644
index 0000000..00c7265
--- /dev/null
+++ b/gcc/testsuite/g++.dg/opt/static3.C
@@ -0,0 +1,35 @@
+// { dg-do link }
+
+class Foo {
+public:
+ // No out-of-class definition is provided for these class members.
+ // That's technically a violation of the standard, but no diagnostic
+ // is required, and, as a QOI issue, we should optimize away all
+ // references.
+ static const int erf = 0;
+ static const int foo = 1;
+};
+
+int one()
+{
+ return Foo::foo;
+}
+
+int two()
+{
+ return Foo::foo + Foo::erf;
+}
+
+int three(int x)
+{
+ return x ? Foo::erf : Foo::foo;
+}
+
+int i;
+
+int main ()
+{
+ one ();
+ two ();
+ three (i);
+}