+2010-08-09 Richard Guenther <rguenther@suse.de>
+
+ PR middle-end/44632
+ * function.c (gimplify_parameters): Do not clear addressable
+ bit of the original parameter.
+
2010-08-09 Richard Guenther <rguenther@suse.de>
PR middle-end/45212
DECL_IGNORED_P (local) = 0;
/* If PARM was addressable, move that flag over
to the local copy, as its address will be taken,
- not the PARMs. */
+ not the PARMs. Keep the parms address taken
+ as we'll query that flag during gimplification. */
if (TREE_ADDRESSABLE (parm))
- {
- TREE_ADDRESSABLE (parm) = 0;
- TREE_ADDRESSABLE (local) = 1;
- }
+ TREE_ADDRESSABLE (local) = 1;
}
else
{
+2010-08-09 Richard Guenther <rguenther@suse.de>
+
+ PR middle-end/44632
+ * g++.dg/opt/nrv17.C: New testcase.
+
2010-08-09 Richard Guenther <rguenther@suse.de>
PR middle-end/45212
--- /dev/null
+// { dg-do run }
+
+#include <cstdlib>
+#include <complex>
+
+void __attribute__((noinline))
+h(std::complex<double> x)
+{
+ if (x.real() != 2.0)
+ std::abort ();
+}
+
+void __attribute__((noinline))
+g(std::complex<double> x)
+{
+ if (x.real() != 0.5)
+ std::abort ();
+}
+
+void __attribute__((noinline))
+f(std::complex<double> x)
+{
+ h (x);
+ x = 1.0 / x;
+ g (x);
+}
+
+int main()
+{
+ f(2.0);
+ return 0;
+}