From c4fa3572228b695728835f9f52186f9c584040ab Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Fri, 2 May 2014 16:56:41 -0400 Subject: [PATCH] * decl2.c (vague_linkage_p): Local statics have vague linkage. From-SVN: r210019 --- gcc/cp/ChangeLog | 2 ++ gcc/cp/decl2.c | 19 +++++++++++++------ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 422e98cb980..d15fed166cf 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,7 @@ 2014-05-02 Jason Merrill + * decl2.c (vague_linkage_p): Local statics have vague linkage. + PR c++/60992 * lambda.c (lambda_capture_field_type): Wrap anything dependent other than 'this'. diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index 918ea2fc6d0..71402181af6 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -1804,12 +1804,19 @@ vague_linkage_p (tree decl) /* Unfortunately, import_export_decl has not always been called before the function is processed, so we cannot simply check DECL_COMDAT. */ - return (DECL_COMDAT (decl) - || (((TREE_CODE (decl) == FUNCTION_DECL - && DECL_DECLARED_INLINE_P (decl)) - || (DECL_LANG_SPECIFIC (decl) - && DECL_TEMPLATE_INSTANTIATION (decl))) - && TREE_PUBLIC (decl))); + if (DECL_COMDAT (decl) + || (((TREE_CODE (decl) == FUNCTION_DECL + && DECL_DECLARED_INLINE_P (decl)) + || (DECL_LANG_SPECIFIC (decl) + && DECL_TEMPLATE_INSTANTIATION (decl))) + && TREE_PUBLIC (decl))) + return true; + else if (DECL_FUNCTION_SCOPE_P (decl)) + /* A local static in an inline effectively has vague linkage. */ + return (TREE_STATIC (decl) + && vague_linkage_p (DECL_CONTEXT (decl))); + else + return false; } /* Determine whether or not we want to specifically import or export CTYPE,