summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.target/i386/ret-thunk-18.c
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2018-01-13 18:01:54 -0800
committerH.J. Lu <hjl.tools@gmail.com>2018-01-14 13:34:58 -0800
commita3144b575e1575ce48d56f44065b970d91fdcd19 (patch)
treefab7dd0f2dfd70bbbda75de1cc329bc05771cbde /gcc/testsuite/gcc.target/i386/ret-thunk-18.c
parent3b73022d2a23780df5925e97b658e565299dedd9 (diff)
downloadgcc-hjl/indirect/gcc-7-branch/master.tar.gz
x86: Disallow -mindirect-branch=/-mfunction-return= with -mcmodel=largehjl/indirect/gcc-7-branch/master
Since the thunk function may not be reachable in large code model, -mcmodel=large is incompatible with -mindirect-branch=thunk, -mindirect-branch=thunk-extern, -mfunction-return=thunk and -mfunction-return=thunk-extern. Issue an error when they are used with -mcmodel=large. gcc/ Backport from mainline * config/i386/i386.c (ix86_set_indirect_branch_type): Disallow -mcmodel=large with -mindirect-branch=thunk, -mindirect-branch=thunk-extern, -mfunction-return=thunk and -mfunction-return=thunk-extern. * doc/invoke.texi: Document -mcmodel=large is incompatible with -mindirect-branch=thunk, -mindirect-branch=thunk-extern, -mfunction-return=thunk and -mfunction-return=thunk-extern. gcc/testsuite/ Backport from mainline * gcc.target/i386/indirect-thunk-10.c: New test. * gcc.target/i386/indirect-thunk-8.c: Likewise. * gcc.target/i386/indirect-thunk-9.c: Likewise. * gcc.target/i386/indirect-thunk-attr-10.c: Likewise. * gcc.target/i386/indirect-thunk-attr-11.c: Likewise. * gcc.target/i386/indirect-thunk-attr-9.c: Likewise. * gcc.target/i386/ret-thunk-17.c: Likewise. * gcc.target/i386/ret-thunk-18.c: Likewise. * gcc.target/i386/ret-thunk-19.c: Likewise. * gcc.target/i386/ret-thunk-20.c: Likewise. * gcc.target/i386/ret-thunk-21.c: Likewise.
Diffstat (limited to 'gcc/testsuite/gcc.target/i386/ret-thunk-18.c')
-rw-r--r--gcc/testsuite/gcc.target/i386/ret-thunk-18.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.target/i386/ret-thunk-18.c b/gcc/testsuite/gcc.target/i386/ret-thunk-18.c
new file mode 100644
index 00000000000..307019dc242
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/ret-thunk-18.c
@@ -0,0 +1,8 @@
+/* { dg-do compile { target { lp64 } } } */
+/* { dg-options "-O2 -mfunction-return=thunk-extern -mindirect-branch=keep -mcmodel=large" } */
+/* { dg-additional-options "-fPIC" { target fpic } } */
+
+void
+bar (void)
+{ /* { dg-error "'-mfunction-return=thunk-extern' and '-mcmodel=large' are not compatible" } */
+}