From 40ce6bf64841651b0d9dc4a686246b4a828a613a Mon Sep 17 00:00:00 2001 From: Danny Smith Date: Fri, 1 Apr 2005 08:20:24 +0000 Subject: [PATCH] selectany1.C: New file. * g++.dg/ext/selectany1.C: New file. Test for linkonce sections. * g++.dg/ext/selectany2.C: New file. Test for errors with invalid selectany usage. From-SVN: r97378 --- gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/g++.dg/ext/selectany1.C | 21 +++++++++++++++++++ gcc/testsuite/g++.dg/ext/selectany2.C | 30 +++++++++++++++++++++++++++ 3 files changed, 57 insertions(+) create mode 100644 gcc/testsuite/g++.dg/ext/selectany1.C create mode 100644 gcc/testsuite/g++.dg/ext/selectany2.C diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a08f51c35db..2f5f4669d07 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2005-04-01 Danny Smith + + * g++.dg/ext/selectany1.C: New file. Test for linkonce sections. + * g++.dg/ext/selectany2.C: New file. Test for errors with invalid + selectany usage. + 2005-04-01 Jakub Jelinek PR c++/19406 diff --git a/gcc/testsuite/g++.dg/ext/selectany1.C b/gcc/testsuite/g++.dg/ext/selectany1.C new file mode 100644 index 00000000000..065332a51c7 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/selectany1.C @@ -0,0 +1,21 @@ +// { dg-do compile { target i?86-pc-cygwin } } +// { dg-do compile { target i?86-pc-mingw* } } + +// Check that selectany attribute puts symbols into link-once sections. + +// { dg-final { scan-assembler "\.section\t\.data\\\$foo\[^\n\]*\n\t\.linkonce discard" } } +// { dg-final { scan-assembler "\.section\t\.data\\\$x\[^\n\]*\n\t\.linkonce discard" } } +// { dg-final { scan-assembler-dem "\nguard variable for x:" } } + +__declspec (selectany) int foo = 1; + +class X +{ +private: + int m_i; +public: + X(int i): m_i(i){} + ~X(){}; +}; + +__declspec(selectany) X x(1); diff --git a/gcc/testsuite/g++.dg/ext/selectany2.C b/gcc/testsuite/g++.dg/ext/selectany2.C new file mode 100644 index 00000000000..af70dcc0869 --- /dev/null +++ b/gcc/testsuite/g++.dg/ext/selectany2.C @@ -0,0 +1,30 @@ +// { dg-do compile { target i?86-pc-cygwin } } +// { dg-do compile { target i?86-pc-mingw* } } + +// Check for errors with invalid usage of selectany attribute. + +extern int foo; +__declspec (selectany) int foo = 1; // OK + +struct d +{ + static int foo; +}; +__declspec (selectany) int d::foo = 1; // OK + +struct f +{ + int i; +}; +__declspec (selectany) struct f F= {1}; // OK + +__declspec (selectany) int boo; //{ dg-error "selectany" } + +__declspec (selectany) static int bar = 1; // { dg-error "selectany" } +int use_bar = bar; // Avoid defined but not used warning. + +int baz() +{ + __declspec (selectany) int foo = 1; // { dg-error "selectany" } + return foo; +}