diff options
author | Danny Smith <dannysmith@users.sourceforge.net> | 2005-04-01 08:20:24 +0000 |
---|---|---|
committer | Danny Smith <dannysmith@gcc.gnu.org> | 2005-04-01 08:20:24 +0000 |
commit | 40ce6bf64841651b0d9dc4a686246b4a828a613a (patch) | |
tree | 2e6c5f4ad83dc86a5175419065a0eab141ff993e | |
parent | a20f6f00bf53a4debcbf361256ed098f8e930850 (diff) | |
download | gcc-40ce6bf64841651b0d9dc4a686246b4a828a613a.zip gcc-40ce6bf64841651b0d9dc4a686246b4a828a613a.tar.gz gcc-40ce6bf64841651b0d9dc4a686246b4a828a613a.tar.bz2 |
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
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ext/selectany1.C | 21 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/ext/selectany2.C | 30 |
3 files changed, 57 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a08f51c..2f5f466 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2005-04-01 Danny Smith <dannysmith@users.sourceforge.net> + + * 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 <jakub@redhat.com> 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 0000000..065332a --- /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 0000000..af70dcc --- /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; +} |