aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2009-08-24 17:32:12 -0400
committerJason Merrill <jason@gcc.gnu.org>2009-08-24 17:32:12 -0400
commitd9fbd03b211d96fa1be5f0576e578dd11ed7bd21 (patch)
tree9fa4c73b40f5bfc98d2cc432e4d582f03e88d5c9 /gcc
parent3146f36f935b0594a4719320e891e2d7524c014c (diff)
downloadgcc-d9fbd03b211d96fa1be5f0576e578dd11ed7bd21.zip
gcc-d9fbd03b211d96fa1be5f0576e578dd11ed7bd21.tar.gz
gcc-d9fbd03b211d96fa1be5f0576e578dd11ed7bd21.tar.bz2
* decl2.c (mark_used): Streamline logic.
From-SVN: r151062
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/decl2.c35
2 files changed, 18 insertions, 21 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 8c555e6..be151df 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,4 +1,6 @@
-2009-08-21 Jason Merrill <jason@redhat.com>
+2009-08-24 Jason Merrill <jason@redhat.com>
+
+ * decl2.c (mark_used): Streamline logic.
PR c++/41109
PR c++/41110
diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c
index 960ccf0..2ef7a5c 100644
--- a/gcc/cp/decl2.c
+++ b/gcc/cp/decl2.c
@@ -3865,7 +3865,8 @@ mark_used (tree decl)
DECL_LANG_SPECIFIC set, and these are also the only decls that we
might need special handling for. */
if ((TREE_CODE (decl) != VAR_DECL && TREE_CODE (decl) != FUNCTION_DECL)
- || DECL_LANG_SPECIFIC (decl) == NULL)
+ || DECL_LANG_SPECIFIC (decl) == NULL
+ || DECL_THUNK_P (decl))
return;
/* We only want to do this processing once. We don't need to keep trying
@@ -3917,22 +3918,17 @@ mark_used (tree decl)
o the variable or function is not used (3.2 [basic.def.odr]) or is
defined in the same translation unit. */
if (TREE_PUBLIC (decl)
- && (TREE_CODE (decl) == FUNCTION_DECL
- || TREE_CODE (decl) == VAR_DECL)
- && DECL_LANG_SPECIFIC (decl))
- {
- if (!DECL_EXTERN_C_P (decl)
- && !DECL_ARTIFICIAL (decl)
- && !decl_defined_p (decl)
- && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
- {
- if (is_local_extern (decl))
- /* There's no way to define a local extern, and adding it to
- the vector interferes with GC, so give an error now. */
- no_linkage_error (decl);
- else
- VEC_safe_push (tree, gc, no_linkage_decls, decl);
- }
+ && !DECL_EXTERN_C_P (decl)
+ && !DECL_ARTIFICIAL (decl)
+ && !decl_defined_p (decl)
+ && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
+ {
+ if (is_local_extern (decl))
+ /* There's no way to define a local extern, and adding it to
+ the vector interferes with GC, so give an error now. */
+ no_linkage_error (decl);
+ else
+ VEC_safe_push (tree, gc, no_linkage_decls, decl);
}
if (TREE_CODE (decl) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (decl)
@@ -3956,7 +3952,6 @@ mark_used (tree decl)
if (TREE_CODE (decl) == FUNCTION_DECL
&& DECL_NONSTATIC_MEMBER_FUNCTION_P (decl)
&& DECL_DEFAULTED_FN (decl)
- && !DECL_THUNK_P (decl)
&& ! DECL_INITIAL (decl))
{
/* Synthesizing an implicitly defined member function will result in
@@ -3973,8 +3968,8 @@ mark_used (tree decl)
/* If this is a synthesized method we don't need to
do the instantiation test below. */
}
- else if ((DECL_NON_THUNK_FUNCTION_P (decl) || TREE_CODE (decl) == VAR_DECL)
- && DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl)
+ else if ((TREE_CODE (decl) == FUNCTION_DECL || TREE_CODE (decl) == VAR_DECL)
+ && DECL_TEMPLATE_INFO (decl)
&& (!DECL_EXPLICIT_INSTANTIATION (decl)
|| always_instantiate_p (decl)))
/* If this is a function or variable that is an instance of some