public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/25915]  New: instantiated templates with anonymous classes as arguments should be static
@ 2006-01-22 23:56 sabre at nondot dot org
  2006-01-23  0:17 ` [Bug c++/25915] " pinskia at gcc dot gnu dot org
                   ` (15 more replies)
  0 siblings, 16 replies; 17+ messages in thread
From: sabre at nondot dot org @ 2006-01-22 23:56 UTC (permalink / raw)
  To: gcc-bugs

Consider:

---
template <typename foo>
void bar() {}
namespace { class C {};}
void (*FP)() = bar<C>;
---

Because 'bar' is instantiated with 'C', a class in an anonymous namespace, this
instantiation can never be shared across other translation units.  As such, it
should be marked static, to improve static and dynamic link times and improve
future IPO potential.

On PPC Darwin, the instantion of bar turns into:

.section __TEXT,__textcoal_nt,coalesced,no_toc
        .align 2
.weak_definition __Z3barIN21_GLOBAL__N_t.cczMkGAb1CEEvv
.private_extern __Z3barIN21_GLOBAL__N_t.cczMkGAb1CEEvv
.section __TEXT,__textcoal_nt,coalesced,no_toc
        .align 2
__Z3barIN21_GLOBAL__N_t.cczMkGAb1CEEvv:
        blr


-Chris


-- 
           Summary: instantiated templates with anonymous classes as
                    arguments should be static
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: sabre at nondot dot org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25915


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Bug c++/25915] instantiated templates with anonymous classes as arguments should be static
  2006-01-22 23:56 [Bug c++/25915] New: instantiated templates with anonymous classes as arguments should be static sabre at nondot dot org
@ 2006-01-23  0:17 ` pinskia at gcc dot gnu dot org
  2006-01-23 14:43 ` [Bug c++/25915] instantiated templates with anonymous namespace class " pinskia at gcc dot gnu dot org
                   ` (14 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2006-01-23  0:17 UTC (permalink / raw)
  To: gcc-bugs



-- 

pinskia at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Severity|normal                      |enhancement


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25915


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Bug c++/25915] instantiated templates with anonymous namespace class as arguments should be static
  2006-01-22 23:56 [Bug c++/25915] New: instantiated templates with anonymous classes as arguments should be static sabre at nondot dot org
  2006-01-23  0:17 ` [Bug c++/25915] " pinskia at gcc dot gnu dot org
@ 2006-01-23 14:43 ` pinskia at gcc dot gnu dot org
  2006-01-23 20:43 ` geoffk at gcc dot gnu dot org
                   ` (13 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2006-01-23 14:43 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #1 from pinskia at gcc dot gnu dot org  2006-01-23 14:43 -------
Confirmed, related to PR 10591.


-- 

pinskia at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
  BugsThisDependsOn|                            |10591
             Status|UNCONFIRMED                 |NEW
     Ever Confirmed|0                           |1
   Last reconfirmed|0000-00-00 00:00:00         |2006-01-23 14:43:31
               date|                            |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25915


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Bug c++/25915] instantiated templates with anonymous namespace class as arguments should be static
  2006-01-22 23:56 [Bug c++/25915] New: instantiated templates with anonymous classes as arguments should be static sabre at nondot dot org
  2006-01-23  0:17 ` [Bug c++/25915] " pinskia at gcc dot gnu dot org
  2006-01-23 14:43 ` [Bug c++/25915] instantiated templates with anonymous namespace class " pinskia at gcc dot gnu dot org
@ 2006-01-23 20:43 ` geoffk at gcc dot gnu dot org
  2006-01-23 21:24 ` [Bug c++/25915] use ODR rules to make C++ objects not be TREE_PUBLIC sabre at nondot dot org
                   ` (12 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: geoffk at gcc dot gnu dot org @ 2006-01-23 20:43 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #2 from geoffk at gcc dot gnu dot org  2006-01-23 20:43 -------
Let's make this more general.

Any entity which could be defined more than once (like a class or an inline
function) but whose token stream refers to a function or variable which is not
TREE_PUBLIC, actually can't be defined more than once, and so every part of
such entity can be made not-TREE_PUBLIC.

Exception: if the object referred to is 'const', is of scalar type, is
initialized with a constant expression, and the value but not the address of
the object is used, it doesn't count.  For additional details, including
additional cases where this applies and an explanation of how it applies to
templates, see [basic.def.odr] paragraph 5.

For example

static int x;

struct myclass {
  int foo() { return x; }
  int bar() { return 1; }
};

in this example, myclass::foo, myclass::bar, and the typeinfo for myclass, can
all be made non-TREE_PUBLIC, because of the reference to 'x' in the definition
of myclass.  What's more, if someone says later

struct my_other_class : myclass {
  ...
}

then my_other_class can also be made non-TREE_PUBLIC.  If 'x' was in an
anonymous namespace the logic would be the same.


-- 

geoffk at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |geoffk at gcc dot gnu dot
                   |                            |org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25915


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Bug c++/25915] use ODR rules to make C++ objects not be TREE_PUBLIC
  2006-01-22 23:56 [Bug c++/25915] New: instantiated templates with anonymous classes as arguments should be static sabre at nondot dot org
                   ` (2 preceding siblings ...)
  2006-01-23 20:43 ` geoffk at gcc dot gnu dot org
@ 2006-01-23 21:24 ` sabre at nondot dot org
  2006-01-23 21:58 ` gdr at cs dot tamu dot edu
                   ` (11 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: sabre at nondot dot org @ 2006-01-23 21:24 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #3 from sabre at nondot dot org  2006-01-23 21:23 -------
Absolutely, it would be great to handle that as well.  The risk of making a
particular bugzilla PR more general is that it reduces the chance that it will
ever get fixed though.

-Chris


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25915


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Bug c++/25915] use ODR rules to make C++ objects not be TREE_PUBLIC
  2006-01-22 23:56 [Bug c++/25915] New: instantiated templates with anonymous classes as arguments should be static sabre at nondot dot org
                   ` (3 preceding siblings ...)
  2006-01-23 21:24 ` [Bug c++/25915] use ODR rules to make C++ objects not be TREE_PUBLIC sabre at nondot dot org
@ 2006-01-23 21:58 ` gdr at cs dot tamu dot edu
  2006-01-23 22:00 ` sabre at nondot dot org
                   ` (10 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: gdr at cs dot tamu dot edu @ 2006-01-23 21:58 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #4 from gdr at cs dot tamu dot edu  2006-01-23 21:58 -------
Subject: Re:  instantiated templates with anonymous namespace class as
arguments should be static

"geoffk at gcc dot gnu dot org" <gcc-bugzilla@gcc.gnu.org> writes:

| Let's make this more general.

Geoff and me had discussed this on the GCC mailing list in the past.

Just to clarify and make sure we are all at the same page., the
notion of "static" shall not be that of the C or C++ source language
rule, but that of the linker.  
This PR subject should be changed to reflect that.

-- Gaby


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25915


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Bug c++/25915] use ODR rules to make C++ objects not be TREE_PUBLIC
  2006-01-22 23:56 [Bug c++/25915] New: instantiated templates with anonymous classes as arguments should be static sabre at nondot dot org
                   ` (4 preceding siblings ...)
  2006-01-23 21:58 ` gdr at cs dot tamu dot edu
@ 2006-01-23 22:00 ` sabre at nondot dot org
  2006-03-09  0:35 ` geoffk at gcc dot gnu dot org
                   ` (9 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: sabre at nondot dot org @ 2006-01-23 22:00 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #5 from sabre at nondot dot org  2006-01-23 22:00 -------
Subject: Re:  use ODR rules to make C++ objects not be
 TREE_PUBLIC


Already done.  The subject is now "use ODR rules to make C++ objects not 
be TREE_PUBLIC"

Thanks,

-Chris

On Mon, 23 Jan 2006, gdr at cs dot tamu dot edu wrote:

>
>
> ------- Comment #4 from gdr at cs dot tamu dot edu  2006-01-23 21:58 -------
> Subject: Re:  instantiated templates with anonymous namespace class as
> arguments should be static
>
> "geoffk at gcc dot gnu dot org" <gcc-bugzilla@gcc.gnu.org> writes:
>
> | Let's make this more general.
>
> Geoff and me had discussed this on the GCC mailing list in the past.
>
> Just to clarify and make sure we are all at the same page., the
> notion of "static" shall not be that of the C or C++ source language
> rule, but that of the linker.
> This PR subject should be changed to reflect that.
>
> -- Gaby
>
>
>

-Chris


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25915


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Bug c++/25915] use ODR rules to make C++ objects not be TREE_PUBLIC
  2006-01-22 23:56 [Bug c++/25915] New: instantiated templates with anonymous classes as arguments should be static sabre at nondot dot org
                   ` (5 preceding siblings ...)
  2006-01-23 22:00 ` sabre at nondot dot org
@ 2006-03-09  0:35 ` geoffk at gcc dot gnu dot org
  2006-04-05 22:27 ` jason at gcc dot gnu dot org
                   ` (8 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: geoffk at gcc dot gnu dot org @ 2006-03-09  0:35 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #6 from geoffk at gcc dot gnu dot org  2006-03-09 00:35 -------


*** This bug has been marked as a duplicate of 10591 ***


-- 

geoffk at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|                            |DUPLICATE


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25915


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Bug c++/25915] use ODR rules to make C++ objects not be TREE_PUBLIC
  2006-01-22 23:56 [Bug c++/25915] New: instantiated templates with anonymous classes as arguments should be static sabre at nondot dot org
                   ` (6 preceding siblings ...)
  2006-03-09  0:35 ` geoffk at gcc dot gnu dot org
@ 2006-04-05 22:27 ` jason at gcc dot gnu dot org
  2006-04-05 22:49 ` jason at gcc dot gnu dot org
                   ` (7 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: jason at gcc dot gnu dot org @ 2006-04-05 22:27 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #7 from jason at gcc dot gnu dot org  2006-04-05 22:27 -------
I've changed the summary for 10591 such that this is no longer a duplicate.


-- 

jason at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|RESOLVED                    |REOPENED
         Resolution|DUPLICATE                   |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25915


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Bug c++/25915] use ODR rules to make C++ objects not be TREE_PUBLIC
  2006-01-22 23:56 [Bug c++/25915] New: instantiated templates with anonymous classes as arguments should be static sabre at nondot dot org
                   ` (7 preceding siblings ...)
  2006-04-05 22:27 ` jason at gcc dot gnu dot org
@ 2006-04-05 22:49 ` jason at gcc dot gnu dot org
  2006-06-21 19:07 ` pinskia at gcc dot gnu dot org
                   ` (6 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: jason at gcc dot gnu dot org @ 2006-04-05 22:49 UTC (permalink / raw)
  To: gcc-bugs



-- 

jason at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
         AssignedTo|unassigned at gcc dot gnu   |jason at gcc dot gnu dot org
                   |dot org                     |
             Status|REOPENED                    |ASSIGNED
   Last reconfirmed|2006-01-23 14:43:31         |2006-04-05 22:49:40
               date|                            |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25915


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Bug c++/25915] use ODR rules to make C++ objects not be TREE_PUBLIC
  2006-01-22 23:56 [Bug c++/25915] New: instantiated templates with anonymous classes as arguments should be static sabre at nondot dot org
                   ` (8 preceding siblings ...)
  2006-04-05 22:49 ` jason at gcc dot gnu dot org
@ 2006-06-21 19:07 ` pinskia at gcc dot gnu dot org
  2006-06-21 19:51 ` gdr at integrable-solutions dot net
                   ` (5 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2006-06-21 19:07 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #8 from pinskia at gcc dot gnu dot org  2006-06-21 18:44 -------
(In reply to comment #2)
> then my_other_class can also be made non-TREE_PUBLIC.  If 'x' was in an
> anonymous namespace the logic would be the same.

Actually it cannot because I define in a different TU my_other_class and now I
get an ODR violation.  Likewise for myclass.  Yes this is all undefined but I
rather have it be diagnose than having it be undefined behavior.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25915


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Bug c++/25915] use ODR rules to make C++ objects not be TREE_PUBLIC
  2006-01-22 23:56 [Bug c++/25915] New: instantiated templates with anonymous classes as arguments should be static sabre at nondot dot org
                   ` (9 preceding siblings ...)
  2006-06-21 19:07 ` pinskia at gcc dot gnu dot org
@ 2006-06-21 19:51 ` gdr at integrable-solutions dot net
  2006-06-21 20:45 ` geoffk at gcc dot gnu dot org
                   ` (4 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: gdr at integrable-solutions dot net @ 2006-06-21 19:51 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #9 from gdr at integrable-solutions dot net  2006-06-21 19:43 -------
Subject: Re:  use ODR rules to make C++ objects not be TREE_PUBLIC

"pinskia at gcc dot gnu dot org" <gcc-bugzilla@gcc.gnu.org> writes:

| Yes this is all undefined but I rather have it be diagnose than
| having it be undefined behavior. 

interesting shift of perspective :-)

-- Gaby


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25915


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Bug c++/25915] use ODR rules to make C++ objects not be TREE_PUBLIC
  2006-01-22 23:56 [Bug c++/25915] New: instantiated templates with anonymous classes as arguments should be static sabre at nondot dot org
                   ` (10 preceding siblings ...)
  2006-06-21 19:51 ` gdr at integrable-solutions dot net
@ 2006-06-21 20:45 ` geoffk at gcc dot gnu dot org
  2006-06-30  1:17 ` jason at gcc dot gnu dot org
                   ` (3 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: geoffk at gcc dot gnu dot org @ 2006-06-21 20:45 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #10 from geoffk at gcc dot gnu dot org  2006-06-21 20:44 -------
Hi Andrew,
I'm not sure what diagnostic you're talking about.  If you violate the ODR and
define myclass in a different TU, with a different definition for myclass::foo,
you will typically get no diagnostic; just inconsistent behaviour.


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25915


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Bug c++/25915] use ODR rules to make C++ objects not be TREE_PUBLIC
  2006-01-22 23:56 [Bug c++/25915] New: instantiated templates with anonymous classes as arguments should be static sabre at nondot dot org
                   ` (11 preceding siblings ...)
  2006-06-21 20:45 ` geoffk at gcc dot gnu dot org
@ 2006-06-30  1:17 ` jason at gcc dot gnu dot org
  2006-06-30 15:28 ` pinskia at gcc dot gnu dot org
                   ` (2 subsequent siblings)
  15 siblings, 0 replies; 17+ messages in thread
From: jason at gcc dot gnu dot org @ 2006-06-30  1:17 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #11 from jason at gcc dot gnu dot org  2006-06-30 01:16 -------
Subject: Bug 25915

Author: jason
Date: Fri Jun 30 01:15:56 2006
New Revision: 115086

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=115086
Log:
        PR c++/26905
        PR c++/26612
        PR c++/27000
        PR c++/26984
        PR c++/19134
        * tree.c (build_decl_stat): Don't hande #pragma visibility here.
        * c-common.c (c_determine_visibility): Handle it here.
        * c-decl.c (finish_decl): Call c_determine_visibility for
        functions, too.
        * flags.h (enum symbol_visibility): Sort from most to least visibility.
        * tree.h: Likewise.
        * varasm.c (default_assemble_visibility): Likewise.
        * c-common.c (handle_visibility_attribute): Complain about trying
        to give visibility to an already defined class, or trying to change
        declared visibility. Always attach the attribute.
        * cp/decl2.c (determine_visibility): Overhaul.
        (determine_visibility_from_class): Likewise.
        (min_vis_r, type_visibility, constrain_visibility): New fns.
        (constrain_visibility_for_template): Likewise.
        (constrain_class_visibility): Likewise.
        * cp/decl.c (cp_finish_decl): Call determine_visibility for function
        decls, too.
        * cp/name-lookup.c (pushtag): Call determine_visibility.
        * cp/decl.c (duplicate_decls): Don't copy visibility from template to
        specialization.
        * cp/pt.c (check_explicit_specialization): Likewise.
        (lookup_template_class, tsubst_decl): Call determine_visibility.
        * cp/class.c (finish_struct_1): Call constrain_class_visibility.

        PR c++/26905
        PR c++/21675
        PR c++/17470
        * cp/parser.c (cp_parser_explicit_instantiation): Pass the attributes
        to grokdeclarator.
        (cp_parser_type_specifier): Allow 'enum __attribute ((...)) E'.
        (cp_parser_enum_specifier): Likewise.
        (cp_parser_elaborated_type_specifier): Apply attributes if this
        declares only the class.
        (cp_parser_class_specifier): Apply leading attributes immediately.
        * cp/semantics.c (begin_class_definition): Add attributes parameter,
        apply them to the type.
        * attribs.c (decl_attributes): Ignore type-in-place attributes
        once the type has been defined.

        PR c++/21581
        PR c++/25915
        * cp/tree.c (decl_anon_ns_mem_p): New function.
        * cp/cp-tree.h: Declare it.
        * cp/decl2.c (determine_visibility): Make anonymous namespace
        members static.
        (min_vis_r, constrain_visibility): Likewise.
        * cp/rtti.c (create_pseudo_type_info): Set TREE_PUBLIC on
        pseudo-types.
        * cp/decl.c (cxx_init_decl_processing): Set TREE_PUBLIC on
        global_namespace.
        * cp/name-lookup.c (push_namespace_with_attribs): Don't set TREE_PUBLIC
        on anonymous namespaces.

Added:
    trunk/gcc/testsuite/g++.dg/ext/visibility/anon2.C
    trunk/gcc/testsuite/g++.dg/ext/visibility/class1.C
    trunk/gcc/testsuite/g++.dg/ext/visibility/prop1.C
    trunk/gcc/testsuite/g++.dg/ext/visibility/redecl1.C
    trunk/gcc/testsuite/g++.dg/ext/visibility/template1.C
    trunk/gcc/testsuite/g++.dg/ext/visibility/template2.C
    trunk/gcc/testsuite/g++.dg/ext/visibility/template3.C
    trunk/gcc/testsuite/g++.dg/ext/visibility/template4.C
    trunk/gcc/testsuite/g++.dg/ext/visibility/typeinfo1.C
    trunk/gcc/testsuite/g++.dg/ext/visibility/warn1.C
    trunk/gcc/testsuite/g++.dg/ext/visibility/warn2.C
    trunk/gcc/testsuite/g++.dg/ext/visibility/warn3.C
    trunk/gcc/testsuite/g++.dg/ext/visibility/warn4.C
Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/attribs.c
    trunk/gcc/c-common.c
    trunk/gcc/c-decl.c
    trunk/gcc/cp/ChangeLog
    trunk/gcc/cp/class.c
    trunk/gcc/cp/cp-tree.h
    trunk/gcc/cp/decl.c
    trunk/gcc/cp/decl2.c
    trunk/gcc/cp/name-lookup.c
    trunk/gcc/cp/parser.c
    trunk/gcc/cp/pt.c
    trunk/gcc/cp/rtti.c
    trunk/gcc/cp/semantics.c
    trunk/gcc/cp/tree.c
    trunk/gcc/doc/extend.texi
    trunk/gcc/doc/invoke.texi
    trunk/gcc/flags.h
    trunk/gcc/testsuite/g++.dg/ext/attrib14.C
    trunk/gcc/testsuite/g++.dg/ext/attrib9.C
    trunk/gcc/testsuite/g++.dg/ext/visibility/anon1.C
    trunk/gcc/testsuite/g++.dg/ext/visibility/assign1.C
    trunk/gcc/testsuite/g++.dg/ext/visibility/fvisibility-override2.C
    trunk/gcc/testsuite/g++.dg/ext/visibility/virtual.C
    trunk/gcc/testsuite/g++.old-deja/g++.pt/enum5.C
    trunk/gcc/tree.c
    trunk/gcc/tree.h
    trunk/gcc/varasm.c


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25915


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Bug c++/25915] use ODR rules to make C++ objects not be TREE_PUBLIC
  2006-01-22 23:56 [Bug c++/25915] New: instantiated templates with anonymous classes as arguments should be static sabre at nondot dot org
                   ` (12 preceding siblings ...)
  2006-06-30  1:17 ` jason at gcc dot gnu dot org
@ 2006-06-30 15:28 ` pinskia at gcc dot gnu dot org
  2006-08-28 12:28 ` jakub at gcc dot gnu dot org
  2007-04-03 19:04 ` pinskia at gcc dot gnu dot org
  15 siblings, 0 replies; 17+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2006-06-30 15:28 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #12 from pinskia at gcc dot gnu dot org  2006-06-30 15:27 -------
Fixed.


-- 

pinskia at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|ASSIGNED                    |RESOLVED
         Resolution|                            |FIXED
   Target Milestone|---                         |4.2.0


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25915


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Bug c++/25915] use ODR rules to make C++ objects not be TREE_PUBLIC
  2006-01-22 23:56 [Bug c++/25915] New: instantiated templates with anonymous classes as arguments should be static sabre at nondot dot org
                   ` (13 preceding siblings ...)
  2006-06-30 15:28 ` pinskia at gcc dot gnu dot org
@ 2006-08-28 12:28 ` jakub at gcc dot gnu dot org
  2007-04-03 19:04 ` pinskia at gcc dot gnu dot org
  15 siblings, 0 replies; 17+ messages in thread
From: jakub at gcc dot gnu dot org @ 2006-08-28 12:28 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #13 from jakub at gcc dot gnu dot org  2006-08-28 12:27 -------
Subject: Bug 25915

Author: jakub
Date: Mon Aug 28 12:26:41 2006
New Revision: 116505

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=116505
Log:
2006-07-06  Jason Merrill  <jason@redhat.com>

cp/
        PR c++/28279
        * decl2.c (finish_static_data_member_decl): Don't assert
        TREE_PUBLIC.

2006-07-01  Jason Merrill  <jason@redhat.com>

cp/
        PR c++/28215
        * method.c (make_thunk): Unset DECL_USE_TEMPLATE and 
        DECL_TEMPLATE_INFO.

2006-06-30  Jason Merrill  <jason@redhat.com>

objcp/
        * objcp-decl.c (objcp_start_struct): Pass null attributes argument
        to begin_class_definition.

2006-06-29  Jason Merrill  <jason@redhat.com>

        PR c++/26905
        PR c++/26612
        PR c++/27000
        PR c++/26984
        PR c++/19134
        * tree.c (build_decl_stat): Don't hande #pragma visibility here.
        * c-common.c (c_determine_visibility): Handle it here.
        * c-decl.c (finish_decl): Call c_determine_visibility for 
        functions, too.
        * flags.h (enum symbol_visibility): Sort from most to least visibility.
        * tree.h: Likewise.
        * varasm.c (default_assemble_visibility): Likewise.
        * c-common.c (handle_visibility_attribute): Complain about trying
        to give visibility to an already defined class, or trying to change
        declared visibility. Always attach the attribute.

        PR c++/26905
        PR c++/21675
        PR c++/17470
        * attribs.c (decl_attributes): Ignore type-in-place attributes
        once the type has been defined.
cp/
        PR c++/26905
        PR c++/26612
        PR c++/27000
        PR c++/26984
        PR c++/19134
        * decl2.c (determine_visibility): Overhaul.
        (determine_visibility_from_class): Likewise.
        (min_vis_r, type_visibility, constrain_visibility): New fns.
        (constrain_visibility_for_template): Likewise.
        (constrain_class_visibility): Likewise.
        * decl.c (cp_finish_decl): Call determine_visibility for function
        decls, too.
        * name-lookup.c (pushtag): Call determine_visibility.
        * decl.c (duplicate_decls): Don't copy visibility from template to
        specialization.
        * pt.c (check_explicit_specialization): Likewise.
        (lookup_template_class, tsubst_decl): Call determine_visibility.
        * class.c (finish_struct_1): Call constrain_class_visibility.

        PR c++/26905
        PR c++/21675
        PR c++/17470
        * parser.c (cp_parser_explicit_instantiation): Pass the attributes
        to grokdeclarator.
        (cp_parser_type_specifier): Allow 'enum __attribute ((...)) E'.
        (cp_parser_enum_specifier): Likewise.
        (cp_parser_elaborated_type_specifier): Apply attributes if this
        declares only the class.
        (cp_parser_class_specifier): Apply leading attributes immediately.
        * semantics.c (begin_class_definition): Add attributes parameter,
        apply them to the type.

        PR c++/21581
        PR c++/25915
        * tree.c (decl_anon_ns_mem_p): New function.
        * cp-tree.h: Declare it.
        * decl2.c (determine_visibility): Make anonymous namespace
        members static.
        (min_vis_r, constrain_visibility): Likewise.
        * rtti.c (create_pseudo_type_info): Set TREE_PUBLIC on
        pseudo-types.
        * decl.c (cxx_init_decl_processing): Set TREE_PUBLIC on
        global_namespace.
        * name-lookup.c (push_namespace_with_attribs): Don't set TREE_PUBLIC
        on anonymous namespaces.

Added:
    branches/redhat/gcc-4_1-branch/gcc/testsuite/g++.dg/ext/visibility/anon1.C
    branches/redhat/gcc-4_1-branch/gcc/testsuite/g++.dg/ext/visibility/anon2.C
    branches/redhat/gcc-4_1-branch/gcc/testsuite/g++.dg/ext/visibility/class1.C
    branches/redhat/gcc-4_1-branch/gcc/testsuite/g++.dg/ext/visibility/prop1.C
   
branches/redhat/gcc-4_1-branch/gcc/testsuite/g++.dg/ext/visibility/redecl1.C
   
branches/redhat/gcc-4_1-branch/gcc/testsuite/g++.dg/ext/visibility/template1.C
   
branches/redhat/gcc-4_1-branch/gcc/testsuite/g++.dg/ext/visibility/template2.C
   
branches/redhat/gcc-4_1-branch/gcc/testsuite/g++.dg/ext/visibility/template3.C
   
branches/redhat/gcc-4_1-branch/gcc/testsuite/g++.dg/ext/visibility/template4.C
   
branches/redhat/gcc-4_1-branch/gcc/testsuite/g++.dg/ext/visibility/typeinfo1.C
    branches/redhat/gcc-4_1-branch/gcc/testsuite/g++.dg/ext/visibility/warn1.C
    branches/redhat/gcc-4_1-branch/gcc/testsuite/g++.dg/ext/visibility/warn2.C
    branches/redhat/gcc-4_1-branch/gcc/testsuite/g++.dg/ext/visibility/warn3.C
    branches/redhat/gcc-4_1-branch/gcc/testsuite/g++.dg/ext/visibility/warn4.C
    branches/redhat/gcc-4_1-branch/gcc/testsuite/g++.dg/template/anon2.C
Modified:
    branches/redhat/gcc-4_1-branch/gcc/ChangeLog
    branches/redhat/gcc-4_1-branch/gcc/attribs.c
    branches/redhat/gcc-4_1-branch/gcc/c-common.c
    branches/redhat/gcc-4_1-branch/gcc/c-decl.c
    branches/redhat/gcc-4_1-branch/gcc/cp/ChangeLog
    branches/redhat/gcc-4_1-branch/gcc/cp/class.c
    branches/redhat/gcc-4_1-branch/gcc/cp/cp-tree.h
    branches/redhat/gcc-4_1-branch/gcc/cp/decl.c
    branches/redhat/gcc-4_1-branch/gcc/cp/decl2.c
    branches/redhat/gcc-4_1-branch/gcc/cp/method.c
    branches/redhat/gcc-4_1-branch/gcc/cp/name-lookup.c
    branches/redhat/gcc-4_1-branch/gcc/cp/parser.c
    branches/redhat/gcc-4_1-branch/gcc/cp/pt.c
    branches/redhat/gcc-4_1-branch/gcc/cp/rtti.c
    branches/redhat/gcc-4_1-branch/gcc/cp/semantics.c
    branches/redhat/gcc-4_1-branch/gcc/cp/tree.c
    branches/redhat/gcc-4_1-branch/gcc/doc/extend.texi
    branches/redhat/gcc-4_1-branch/gcc/doc/invoke.texi
    branches/redhat/gcc-4_1-branch/gcc/flags.h
    branches/redhat/gcc-4_1-branch/gcc/objcp/ChangeLog
    branches/redhat/gcc-4_1-branch/gcc/objcp/objcp-decl.c
    branches/redhat/gcc-4_1-branch/gcc/testsuite/g++.dg/ext/attrib14.C
    branches/redhat/gcc-4_1-branch/gcc/testsuite/g++.dg/ext/attrib9.C
   
branches/redhat/gcc-4_1-branch/gcc/testsuite/g++.dg/ext/visibility/assign1.C
   
branches/redhat/gcc-4_1-branch/gcc/testsuite/g++.dg/ext/visibility/fvisibility-override2.C
   
branches/redhat/gcc-4_1-branch/gcc/testsuite/g++.dg/ext/visibility/virtual.C
    branches/redhat/gcc-4_1-branch/gcc/testsuite/g++.old-deja/g++.pt/enum5.C
    branches/redhat/gcc-4_1-branch/gcc/tree.c
    branches/redhat/gcc-4_1-branch/gcc/tree.h
    branches/redhat/gcc-4_1-branch/gcc/varasm.c


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25915


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [Bug c++/25915] use ODR rules to make C++ objects not be TREE_PUBLIC
  2006-01-22 23:56 [Bug c++/25915] New: instantiated templates with anonymous classes as arguments should be static sabre at nondot dot org
                   ` (14 preceding siblings ...)
  2006-08-28 12:28 ` jakub at gcc dot gnu dot org
@ 2007-04-03 19:04 ` pinskia at gcc dot gnu dot org
  15 siblings, 0 replies; 17+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2007-04-03 19:04 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #14 from pinskia at gcc dot gnu dot org  2007-04-03 20:03 -------
*** Bug 31462 has been marked as a duplicate of this bug. ***


-- 

pinskia at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |guillaume dot melquiond at
                   |                            |ens-lyon dot fr


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25915


^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2007-04-03 19:04 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-01-22 23:56 [Bug c++/25915] New: instantiated templates with anonymous classes as arguments should be static sabre at nondot dot org
2006-01-23  0:17 ` [Bug c++/25915] " pinskia at gcc dot gnu dot org
2006-01-23 14:43 ` [Bug c++/25915] instantiated templates with anonymous namespace class " pinskia at gcc dot gnu dot org
2006-01-23 20:43 ` geoffk at gcc dot gnu dot org
2006-01-23 21:24 ` [Bug c++/25915] use ODR rules to make C++ objects not be TREE_PUBLIC sabre at nondot dot org
2006-01-23 21:58 ` gdr at cs dot tamu dot edu
2006-01-23 22:00 ` sabre at nondot dot org
2006-03-09  0:35 ` geoffk at gcc dot gnu dot org
2006-04-05 22:27 ` jason at gcc dot gnu dot org
2006-04-05 22:49 ` jason at gcc dot gnu dot org
2006-06-21 19:07 ` pinskia at gcc dot gnu dot org
2006-06-21 19:51 ` gdr at integrable-solutions dot net
2006-06-21 20:45 ` geoffk at gcc dot gnu dot org
2006-06-30  1:17 ` jason at gcc dot gnu dot org
2006-06-30 15:28 ` pinskia at gcc dot gnu dot org
2006-08-28 12:28 ` jakub at gcc dot gnu dot org
2007-04-03 19:04 ` pinskia at gcc dot gnu dot org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).