predicates.md ("bras_sym_operand"): Do not accept nonlocal function symbols if flag_pic.

ChangeLog:

	* config/s390/predicates.md ("bras_sym_operand"): Do not accept
	nonlocal function symbols if flag_pic.

testsuite/ChangeLog:

	* g++.dg/other/s390-1.C: New testcase.

From-SVN: r117974
This commit is contained in:
Ulrich Weigand
2006-10-23 13:43:04 +00:00
committed by Ulrich Weigand
parent 8916b2fb5f
commit d7d42cf51a
4 changed files with 43 additions and 1 deletions

View File

@@ -1,3 +1,8 @@
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-22 Richard Sandiford <richard@codesourcery.com>
* config/mips/mips.c (mips_split_const): Don't accept bare PLUS

View File

@@ -62,7 +62,8 @@
;; 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")))))

View File

@@ -1,3 +1,7 @@
2006-10-23 Ulrich Weigand <uweigand@de.ibm.com>
* g++.dg/other/s390-1.C: New testcase.
2006-10-20 Lee Millward <lee.millward@codesourcery.com>
PR c++/28053

View File

@@ -0,0 +1,32 @@
// { 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" } }