+2006-10-23 Ulrich Weigand <uweigand@de.ibm.com>
+
+ * config/s390/predicates.md ("bras_sym_operand"): Do not accept
+ nonlocal function symbols if flag_pic.
+
2006-10-23 Richard Guenther <rguenther@suse.de>
PR middle-end/27132
;; Allow SYMBOL_REFs and @PLT stubs.
(define_special_predicate "bras_sym_operand"
- (ior (match_code "symbol_ref")
+ (ior (and (match_code "symbol_ref")
+ (match_test "!flag_pic || SYMBOL_REF_LOCAL_P (op)"))
(and (match_code "const")
(and (match_test "GET_CODE (XEXP (op, 0)) == UNSPEC")
(match_test "XINT (XEXP (op, 0), 1) == UNSPEC_PLT")))))
+2006-10-23 Ulrich Weigand <uweigand@de.ibm.com>
+
+ * g++.dg/other/s390-1.C: New testcase.
+
2006-10-23 Richard Guenther <rguenther@suse.de>
PR middle-end/27132
--- /dev/null
+// { dg-do compile { target s390x-*-* } }
+// { dg-options "-O3 -fPIC" }
+
+class A
+{
+public:
+ void f (void) { _M_a = 0; }
+ void g (void) { _M_a = 1; }
+ void h (void);
+
+private:
+ int _M_a;
+};
+
+class B : virtual public A
+{
+};
+
+void
+test (B& x)
+{
+ for (int i = 0; i < 17; i++)
+ {
+ x.f ();
+ (x.*&A::g) ();
+ x.h ();
+ }
+}
+
+// Check that every call to A::g goes via the PLT.
+// { dg-final { scan-assembler-not "brasl\[^@\]*\n" } }
+