From: Jason Merrill Date: Mon, 27 Jun 2011 01:13:33 +0000 (-0400) Subject: re PR c++/49440 (Invalid dynamic_cast for unnamed namespace) X-Git-Tag: releases/gcc-4.5.4~573 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d49372734b4bddf1db33c59c9f0d3b871c3b2106;p=thirdparty%2Fgcc.git re PR c++/49440 (Invalid dynamic_cast for unnamed namespace) PR c++/49440 * class.c (set_linkage_according_to_type): Hand off to determine_visibility. From-SVN: r175418 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 01332373acae..69dcf301052f 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2011-06-23 Jason Merrill + + PR c++/49440 + * class.c (set_linkage_according_to_type): Hand off to + determine_visibility. + 2011-05-31 Duncan Sands Backported from 4.6 branch diff --git a/gcc/cp/class.c b/gcc/cp/class.c index 1bab07dd42c6..e98e5b20ab64 100644 --- a/gcc/cp/class.c +++ b/gcc/cp/class.c @@ -681,21 +681,10 @@ get_vtable_name (tree type) the abstract. */ void -set_linkage_according_to_type (tree type, tree decl) +set_linkage_according_to_type (tree type ATTRIBUTE_UNUSED, tree decl) { - /* If TYPE involves a local class in a function with internal - linkage, then DECL should have internal linkage too. Other local - classes have no linkage -- but if their containing functions - have external linkage, it makes sense for DECL to have external - linkage too. That will allow template definitions to be merged, - for example. */ - if (no_linkage_check (type, /*relaxed_p=*/true)) - { - TREE_PUBLIC (decl) = 0; - DECL_INTERFACE_KNOWN (decl) = 1; - } - else - TREE_PUBLIC (decl) = 1; + TREE_PUBLIC (decl) = 1; + determine_visibility (decl); } /* Create a VAR_DECL for a primary or secondary vtable for CLASS_TYPE. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b4bf554c36a5..ee72cd1c0664 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-06-23 Jason Merrill + + PR c++/49440 + * g++.dg/rtti/anon-ns1.C: New. + 2011-06-17 Hans-Peter Nilsson Backport from mainline diff --git a/gcc/testsuite/g++.dg/rtti/anon-ns1.C b/gcc/testsuite/g++.dg/rtti/anon-ns1.C new file mode 100644 index 000000000000..fd6f8af61b08 --- /dev/null +++ b/gcc/testsuite/g++.dg/rtti/anon-ns1.C @@ -0,0 +1,15 @@ +// PR c++/49440 +// The typeinfo name for A should start with * so we compare +// it by address rather than contents. + +// { dg-final { scan-assembler "\"\*N\[^\"\]+1AE\"" } } + +namespace +{ + class A { }; +} + +void f() +{ + throw A(); +}