diff mbox

[testsuite] check if -shared is supported

Message ID CAKdteOZ-=iM0D_EUgrwg0KNnENaDS_xdndG1c9ub7qMz3UfDzw@mail.gmail.com
State New
Headers show

Commit Message

Christophe Lyon Oct. 7, 2014, 9:54 p.m. UTC
Hi,

When Jason added the new g++.dg/ipa/devirt-28a.C test  along with his
fix for PR c++/58678
(https://gcc.gnu.org/ml/gcc-patches/2014-09/msg00838.html), this new
test was failing in the ARM and AArch64 configuration I am testing.

For the arm*-none-eabi and aarch64*-none-elf configurations, this was
simply because -shared is not supported by these targets. The attached
patch adds support to test availability of this option, similarly to
what is done for -fpic.

For the record, for the arm*linux configurations, the test was also
failing because testglue.o contained relocations incompatible with
-shared. I managed to have them work by adding
set_board_info wrap_compile_flags "-mword-relocations"
to my .exp dejagnu configuration.

In summary, this patch enables to have devirt-28a.C:
- PASS on arm*linux*
- UNSUPPORTED on arm*-none-eabi and aarch64*-none-elf
instead of FAIL.

Is it OK for trunk, and 4.9 (since Jason's patch was also committed to 4.9) ?

2014-10-08  Christophe Lyon  <christophe.lyon@linaro.org>

        * lib/target-supports.exp (check_effective_target_shared): New
        function.
        * g++.dg/ipa/devirt-28a.C: Check if -shared is supported.

Thanks,

Christophe.

Comments

Mike Stump Oct. 9, 2014, 10:02 p.m. UTC | #1
On Oct 7, 2014, at 2:54 PM, Christophe Lyon <christophe.lyon@linaro.org> wrote:
> When Jason added the new g++.dg/ipa/devirt-28a.C test  along with his
> fix for PR c++/58678
> (https://gcc.gnu.org/ml/gcc-patches/2014-09/msg00838.html), this new
> test was failing in the ARM and AArch64 configuration I am testing.

> Is it OK for trunk, and 4.9 (since Jason's patch was also committed to 4.9) ?

Ok.
diff mbox

Patch

diff --git a/gcc/testsuite/g++.dg/ipa/devirt-28a.C b/gcc/testsuite/g++.dg/ipa/devirt-28a.C
index bdd1682..65d5fcd 100644
--- a/gcc/testsuite/g++.dg/ipa/devirt-28a.C
+++ b/gcc/testsuite/g++.dg/ipa/devirt-28a.C
@@ -1,6 +1,6 @@ 
 // PR c++/58678
 // { dg-options "-O3 -flto -shared -fPIC -Wl,--no-undefined" }
-// { dg-do link { target { gld && fpic } } }
+// { dg-do link { target { { gld && fpic } && shared } } }
 
 struct A {
   virtual ~A();
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index 77e45cb..7ae6161 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -840,6 +840,19 @@  proc check_effective_target_fpic { } {
     return 0
 }
 
+# Return 1 if -shared is supported, as in no warnings or errors
+# emitted, 0 otherwise.
+
+proc check_effective_target_shared { } {
+    # Note that M68K has a multilib that supports -fpic but not
+    # -fPIC, so we need to check both.  We test with a program that
+    # requires GOT references.
+    return [check_no_compiler_messages shared executable {
+	extern int foo (void); extern int bar;
+	int baz (void) { return foo () + bar; }
+    } "-shared -fpic"]
+}
+
 # Return 1 if -pie, -fpie and -fPIE are supported, 0 otherwise.
 
 proc check_effective_target_pie { } {