diff options
author | mmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-09-11 00:40:15 +0000 |
---|---|---|
committer | mmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-09-11 00:40:15 +0000 |
commit | dd4df4a5772939f22b62e3c5b39b93989882801d (patch) | |
tree | 638e093b62285063b24863274ca086abe9301c4b /gcc | |
parent | 239f44dbb2876c3eca1a3c7279406a6af06f1a24 (diff) | |
download | gcc-dd4df4a5772939f22b62e3c5b39b93989882801d.tar.gz |
PR c++/28991
* cp-objcp-common.c (cxx_staticp): New function.
* cp-objcp-common.h (LANG_HOOOKS_STATICP): Use it.
* cp-tree.h (cxx_staticp): New function.
PR c++/289991
* g++.dg/init/static3.C: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@116838 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/cp/cp-objcp-common.c | 15 | ||||
-rw-r--r-- | gcc/cp/cp-objcp-common.h | 2 | ||||
-rw-r--r-- | gcc/cp/cp-tree.h | 1 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/init/static3.C | 26 |
6 files changed, 56 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index f565f4c8ac0..bcb6dc8fe61 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2006-09-10 Mark Mitchell <mark@codesourcery.com> + + PR c++/28991 + * cp-objcp-common.c (cxx_staticp): New function. + * cp-objcp-common.h (LANG_HOOOKS_STATICP): Use it. + * cp-tree.h (cxx_staticp): New function. + 2006-09-09 Jason Merrill <jason@redhat.com> PR c++/28996 diff --git a/gcc/cp/cp-objcp-common.c b/gcc/cp/cp-objcp-common.c index cb8369cb53b..f40be969695 100644 --- a/gcc/cp/cp-objcp-common.c +++ b/gcc/cp/cp-objcp-common.c @@ -185,6 +185,21 @@ cxx_types_compatible_p (tree x, tree y) return 0; } +tree +cxx_staticp (tree arg) +{ + switch (TREE_CODE (arg)) + { + case BASELINK: + return staticp (BASELINK_FUNCTIONS (arg)); + + default: + break; + } + + return NULL_TREE; +} + /* Stubs to keep c-opts.c happy. */ void push_file_scope (void) diff --git a/gcc/cp/cp-objcp-common.h b/gcc/cp/cp-objcp-common.h index 65eb6aedfa3..f420d93b191 100644 --- a/gcc/cp/cp-objcp-common.h +++ b/gcc/cp/cp-objcp-common.h @@ -59,6 +59,8 @@ extern tree objcp_tsubst_copy_and_build (tree, tree, tsubst_flags_t, #define LANG_HOOKS_EXPAND_DECL c_expand_decl #undef LANG_HOOKS_PARSE_FILE #define LANG_HOOKS_PARSE_FILE c_common_parse_file +#undef LANG_HOOKS_STATICP +#define LANG_HOOKS_STATICP cxx_staticp #undef LANG_HOOKS_DUP_LANG_SPECIFIC_DECL #define LANG_HOOKS_DUP_LANG_SPECIFIC_DECL cxx_dup_lang_specific_decl #undef LANG_HOOKS_SET_DECL_ASSEMBLER_NAME diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index f8644877027..8f88976e787 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -4519,6 +4519,7 @@ extern bool cp_var_mod_type_p (tree, tree); extern void cxx_initialize_diagnostics (struct diagnostic_context *); extern int cxx_types_compatible_p (tree, tree); extern void init_shadowed_var_for_decl (void); +extern tree cxx_staticp (tree); /* in cp-gimplify.c */ extern int cp_gimplify_expr (tree *, tree *, tree *); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ebddaa604a0..55c511ee075 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2006-09-10 Mark Mitchell <mark@codesourcery.com> + + PR c++/28991 + * g++.dg/init/static3.C: New test. + 2006-09-10 Andrew Pinski <pinskia@physics.uc.edu> PR testsuite/29007 diff --git a/gcc/testsuite/g++.dg/init/static3.C b/gcc/testsuite/g++.dg/init/static3.C new file mode 100644 index 00000000000..a8e62169f30 --- /dev/null +++ b/gcc/testsuite/g++.dg/init/static3.C @@ -0,0 +1,26 @@ +// { dg-do run } + +struct T +{ + static void (*handler)(); + static void func() {}; +}; + +bool fail; + +struct S { + S() { + if (T::handler != T::func) + fail = true; + } +}; + +static S s; + +void (*T::handler)() = func; + +int main() +{ + if (fail) + return 1; +} |