From: Jason Merrill Date: Fri, 2 May 2014 20:56:41 +0000 (-0400) Subject: * decl2.c (vague_linkage_p): Local statics have vague linkage. X-Git-Tag: releases/gcc-5.1.0~7801 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c4fa3572228b695728835f9f52186f9c584040ab;p=thirdparty%2Fgcc.git * decl2.c (vague_linkage_p): Local statics have vague linkage. From-SVN: r210019 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 422e98cb980a..d15fed166cf3 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 918ea2fc6d08..71402181af61 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,