public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/61659] New: Extra undefined symbol because of devirtualization
@ 2014-06-30 15:01 rafael.espindola at gmail dot com
  2014-06-30 15:06 ` [Bug c++/61659] " rafael.espindola at gmail dot com
                   ` (35 more replies)
  0 siblings, 36 replies; 37+ messages in thread
From: rafael.espindola at gmail dot com @ 2014-06-30 15:01 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61659

            Bug ID: 61659
           Summary: Extra undefined symbol because of devirtualization
           Product: gcc
           Version: 4.10.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: rafael.espindola at gmail dot com
                CC: hubicka at gcc dot gnu.org

Given

struct generic_parser_base {
  virtual void getOption();
  void getExtraOptionNames() { getOption(); }
};
template <class DataType> struct parser : public generic_parser_base {
  virtual void getOption() {}
};
struct PassNameParser : public parser<int> {
  PassNameParser();
};
struct list {
  PassNameParser Parser;
  virtual void getExtraOptionNames() { return Parser.getExtraOptionNames(); }
};
list PassList;

gcc 4.9 and trunk will produce an undefined reference to
_ZN6parserIiE9getOptionEv (parser<int>::getOption()) which suggest that the
template is not being instantiated when the call is devirtualized.

Using -fno-devirtualize avoids the bug.


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

* [Bug c++/61659] Extra undefined symbol because of devirtualization
  2014-06-30 15:01 [Bug c++/61659] New: Extra undefined symbol because of devirtualization rafael.espindola at gmail dot com
@ 2014-06-30 15:06 ` rafael.espindola at gmail dot com
  2014-06-30 15:15 ` pinskia at gcc dot gnu.org
                   ` (34 subsequent siblings)
  35 siblings, 0 replies; 37+ messages in thread
From: rafael.espindola at gmail dot com @ 2014-06-30 15:06 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61659

--- Comment #1 from Rafael Avila de Espindola <rafael.espindola at gmail dot com> ---
The undefined is still present with -fno-devirtualize-speculatively.


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

* [Bug c++/61659] Extra undefined symbol because of devirtualization
  2014-06-30 15:01 [Bug c++/61659] New: Extra undefined symbol because of devirtualization rafael.espindola at gmail dot com
  2014-06-30 15:06 ` [Bug c++/61659] " rafael.espindola at gmail dot com
@ 2014-06-30 15:15 ` pinskia at gcc dot gnu.org
  2014-06-30 15:20 ` pinskia at gcc dot gnu.org
                   ` (33 subsequent siblings)
  35 siblings, 0 replies; 37+ messages in thread
From: pinskia at gcc dot gnu.org @ 2014-06-30 15:15 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61659

--- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
I don't see why you think this is a bug.  parser<int>::getOption will be part
of the vtable of PassNameParser anyways.


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

* [Bug c++/61659] Extra undefined symbol because of devirtualization
  2014-06-30 15:01 [Bug c++/61659] New: Extra undefined symbol because of devirtualization rafael.espindola at gmail dot com
  2014-06-30 15:06 ` [Bug c++/61659] " rafael.espindola at gmail dot com
  2014-06-30 15:15 ` pinskia at gcc dot gnu.org
@ 2014-06-30 15:20 ` pinskia at gcc dot gnu.org
  2014-06-30 15:22 ` [Bug ipa/61659] [4.9/4.10 Regression] " trippels at gcc dot gnu.org
                   ` (32 subsequent siblings)
  35 siblings, 0 replies; 37+ messages in thread
From: pinskia at gcc dot gnu.org @ 2014-06-30 15:20 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61659

--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Oh I see it, it is declared inside the template.


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

* [Bug ipa/61659] [4.9/4.10 Regression] Extra undefined symbol because of devirtualization
  2014-06-30 15:01 [Bug c++/61659] New: Extra undefined symbol because of devirtualization rafael.espindola at gmail dot com
                   ` (2 preceding siblings ...)
  2014-06-30 15:20 ` pinskia at gcc dot gnu.org
@ 2014-06-30 15:22 ` trippels at gcc dot gnu.org
  2014-06-30 15:26 ` rafael.espindola at gmail dot com
                   ` (31 subsequent siblings)
  35 siblings, 0 replies; 37+ messages in thread
From: trippels at gcc dot gnu.org @ 2014-06-30 15:22 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61659

Markus Trippelsdorf <trippels at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
      Known to work|                            |4.8.3
   Last reconfirmed|                            |2014-06-30
          Component|c++                         |ipa
                 CC|                            |trippels at gcc dot gnu.org
     Ever confirmed|0                           |1
            Summary|Extra undefined symbol      |[4.9/4.10 Regression] Extra
                   |because of devirtualization |undefined symbol because of
                   |                            |devirtualization
   Target Milestone|---                         |4.9.1
      Known to fail|                            |4.10.0, 4.9.1


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

* [Bug ipa/61659] [4.9/4.10 Regression] Extra undefined symbol because of devirtualization
  2014-06-30 15:01 [Bug c++/61659] New: Extra undefined symbol because of devirtualization rafael.espindola at gmail dot com
                   ` (3 preceding siblings ...)
  2014-06-30 15:22 ` [Bug ipa/61659] [4.9/4.10 Regression] " trippels at gcc dot gnu.org
@ 2014-06-30 15:26 ` rafael.espindola at gmail dot com
  2014-06-30 16:20 ` jakub at gcc dot gnu.org
                   ` (30 subsequent siblings)
  35 siblings, 0 replies; 37+ messages in thread
From: rafael.espindola at gmail dot com @ 2014-06-30 15:26 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61659

--- Comment #4 from Rafael Avila de Espindola <rafael.espindola at gmail dot com> ---
I ran the testcase with just -O2 (original code with -O3, but the reduced
testcase with -O2).

getOption will be part of the vtable, but it can end up being hidden.

In the original source code it ends up being hidden because of
-fvisibility-inlines-hidden (I think, haven't checked).

It also seems invalid to produce the extra undefined at a more fundamental
level. The ABI doesn't say that symbol has to be exposed. In particular, the
vtable can be in another DSO and it is legal to remeve the symbol of getOption
from the dso since the compiler knows that any user can emit a copy.

The above optimization is why PREVAILING_DEF_IRONLY_EXP was added to the gold
plugin api and both gcc and llvm LTO's optimizations do it.

See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53808 for a related
discussion.


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

* [Bug ipa/61659] [4.9/4.10 Regression] Extra undefined symbol because of devirtualization
  2014-06-30 15:01 [Bug c++/61659] New: Extra undefined symbol because of devirtualization rafael.espindola at gmail dot com
                   ` (4 preceding siblings ...)
  2014-06-30 15:26 ` rafael.espindola at gmail dot com
@ 2014-06-30 16:20 ` jakub at gcc dot gnu.org
  2014-06-30 16:42 ` hubicka at gcc dot gnu.org
                   ` (29 subsequent siblings)
  35 siblings, 0 replies; 37+ messages in thread
From: jakub at gcc dot gnu.org @ 2014-06-30 16:20 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61659

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jakub at gcc dot gnu.org

--- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Started to ICE with r205019, and since r205528 there is no ICE but the
undefined symbol.


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

* [Bug ipa/61659] [4.9/4.10 Regression] Extra undefined symbol because of devirtualization
  2014-06-30 15:01 [Bug c++/61659] New: Extra undefined symbol because of devirtualization rafael.espindola at gmail dot com
                   ` (5 preceding siblings ...)
  2014-06-30 16:20 ` jakub at gcc dot gnu.org
@ 2014-06-30 16:42 ` hubicka at gcc dot gnu.org
  2014-06-30 17:15 ` hubicka at gcc dot gnu.org
                   ` (28 subsequent siblings)
  35 siblings, 0 replies; 37+ messages in thread
From: hubicka at gcc dot gnu.org @ 2014-06-30 16:42 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61659

Jan Hubicka <hubicka at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |ASSIGNED
           Assignee|unassigned at gcc dot gnu.org      |hubicka at gcc dot gnu.org

--- Comment #6 from Jan Hubicka <hubicka at gcc dot gnu.org> ---
mine.


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

* [Bug ipa/61659] [4.9/4.10 Regression] Extra undefined symbol because of devirtualization
  2014-06-30 15:01 [Bug c++/61659] New: Extra undefined symbol because of devirtualization rafael.espindola at gmail dot com
                   ` (6 preceding siblings ...)
  2014-06-30 16:42 ` hubicka at gcc dot gnu.org
@ 2014-06-30 17:15 ` hubicka at gcc dot gnu.org
  2014-06-30 20:21 ` jason at gcc dot gnu.org
                   ` (27 subsequent siblings)
  35 siblings, 0 replies; 37+ messages in thread
From: hubicka at gcc dot gnu.org @ 2014-06-30 17:15 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61659

Jan Hubicka <hubicka at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jason at redhat dot com

--- Comment #7 from Jan Hubicka <hubicka at gcc dot gnu.org> ---
Jason, it seems that the symbol in question is getting into symtab as:
_ZN6parserIiE9getOptionEv/21 (void parser<DataType>::getOption() [with DataType
= int]) @0x7ffff6c665c0
  Type: function
  Visibility: external public virtual
  References:
  Referring:
  Availability: not_available
  First run: 0
  Function flags:
  Called by: _ZN4list19getExtraOptionNamesEv/1 (1.00 per call) (can throw
external)
  Calls:

I think it should be declared comdat that would make us to output the body.
Perhaps it somehow misses import/export decl?

The devirtualization happens as part of normal folding in early inline.  We
inline:

void generic_parser_base::getExtraOptionNames() (struct generic_parser_base *
const this)
{ 
  int (*__vtbl_ptr_type) () * _3;
  int (*__vtbl_ptr_type) () _4;

  <bb 2>:
  _3 = this_2(D)->_vptr.generic_parser_base;
  _4 = *_3;
  OBJ_TYPE_REF(_4;(struct generic_parser_base)this_2(D)->0) (this_2(D));
  return;
}  

to

virtual void list::getExtraOptionNames() (struct list * const this)
{
  struct generic_parser_base * _2;

  <bb 2>:
  _2 = &this_1(D)->Parser.D.2262.D.2251;
  generic_parser_base::getExtraOptionNames (_2);
  return;

}


this makes base type known and given the visibility we just fold it.


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

* [Bug ipa/61659] [4.9/4.10 Regression] Extra undefined symbol because of devirtualization
  2014-06-30 15:01 [Bug c++/61659] New: Extra undefined symbol because of devirtualization rafael.espindola at gmail dot com
                   ` (7 preceding siblings ...)
  2014-06-30 17:15 ` hubicka at gcc dot gnu.org
@ 2014-06-30 20:21 ` jason at gcc dot gnu.org
  2014-06-30 22:05 ` trippels at gcc dot gnu.org
                   ` (26 subsequent siblings)
  35 siblings, 0 replies; 37+ messages in thread
From: jason at gcc dot gnu.org @ 2014-06-30 20:21 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61659

--- Comment #8 from Jason Merrill <jason at gcc dot gnu.org> ---
Author: jason
Date: Mon Jun 30 20:20:55 2014
New Revision: 212174

URL: https://gcc.gnu.org/viewcvs?rev=212174&root=gcc&view=rev
Log:
    PR c++/61659
    PR lto/53808
gcc/cp
    * decl2.c (maybe_emit_vtables): Mark all vtable entries if
    devirtualizing.
    * init.c (build_vtbl_address): Don't mark destructor.
    * class.c (finish_struct_1): Add all classes to keyed_classes
    if devirtualizing.
libstdc++-v3/
    * libsupc++/cxxabi.h (class __pbase_type_info): __pointer_catch
    is pure, not inline.

Added:
    trunk/gcc/testsuite/g++.dg/opt/devirt5.C
Modified:
    trunk/gcc/cp/ChangeLog
    trunk/gcc/cp/class.c
    trunk/gcc/cp/decl2.c
    trunk/gcc/cp/init.c
    trunk/libstdc++-v3/ChangeLog
    trunk/libstdc++-v3/libsupc++/cxxabi.h


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

* [Bug ipa/61659] [4.9/4.10 Regression] Extra undefined symbol because of devirtualization
  2014-06-30 15:01 [Bug c++/61659] New: Extra undefined symbol because of devirtualization rafael.espindola at gmail dot com
                   ` (8 preceding siblings ...)
  2014-06-30 20:21 ` jason at gcc dot gnu.org
@ 2014-06-30 22:05 ` trippels at gcc dot gnu.org
  2014-06-30 23:24 ` pinskia at gcc dot gnu.org
                   ` (25 subsequent siblings)
  35 siblings, 0 replies; 37+ messages in thread
From: trippels at gcc dot gnu.org @ 2014-06-30 22:05 UTC (permalink / raw)
  To: gcc-bugs

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset="UTF-8", Size: 10162 bytes --]

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61659

--- Comment #9 from Markus Trippelsdorf <trippels at gcc dot gnu.org> ---
Unfortunately llvm still fails to build:

FAILED: /var/tmp/gcc_test/usr/local/bin/g++   -DGTEST_HAS_RTTI=0
-DLLVMCodeGen_EXPORTS -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS
-D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -fPIC -fvisibility-inlines-hidden
-Wall -W -Wno-unused-parameter -Wwrite-strings -Wno-missing-field-initializers
-pedantic -Wno-long-long -Wno-maybe-uninitialized -Wnon-virtual-dtor
-Wno-comment -std=c++11 -ffunction-sections -fdata-sections -O2  -DNDEBUG -pipe
-fPIC -Ilib/CodeGen -I/var/tmp/llvm-project/llvm/lib/CodeGen -Iinclude
-I/var/tmp/llvm-project/llvm/include    -fno-exceptions -fno-rtti -MMD -MT
lib/CodeGen/CMakeFiles/LLVMCodeGen.dir/MachineFunctionAnalysis.cpp.o -MF
"lib/CodeGen/CMakeFiles/LLVMCodeGen.dir/MachineFunctionAnalysis.cpp.o.d" -o
lib/CodeGen/CMakeFiles/LLVMCodeGen.dir/MachineFunctionAnalysis.cpp.o -c
/var/tmp/llvm-project/llvm/lib/CodeGen/MachineFunctionAnalysis.cpp
In file included from
/var/tmp/gcc_test/usr/local/include/c++/4.10.0/memory:81:0,
                 from
/var/tmp/llvm-project/llvm/include/llvm/ADT/SmallVector.h:28,
                 from
/var/tmp/llvm-project/llvm/include/llvm/Support/Allocator.h:24,
                 from
/var/tmp/llvm-project/llvm/include/llvm/ADT/StringMap.h:18,
                 from
/var/tmp/llvm-project/llvm/include/llvm/PassRegistry.h:23,
                 from /var/tmp/llvm-project/llvm/include/llvm/PassSupport.h:27,
                 from /var/tmp/llvm-project/llvm/include/llvm/Pass.h:377,
                 from
/var/tmp/llvm-project/llvm/include/llvm/CodeGen/MachineFunctionAnalysis.h:17,
                 from
/var/tmp/llvm-project/llvm/lib/CodeGen/MachineFunctionAnalysis.cpp:14:
/var/tmp/gcc_test/usr/local/include/c++/4.10.0/bits/unique_ptr.h: In
instantiation of ‘void std::default_delete<_Tp>::operator()(_Tp*) const [with
_Tp = llvm::GCStrategy]’:
/var/tmp/gcc_test/usr/local/include/c++/4.10.0/bits/unique_ptr.h:236:16:  
required from ‘std::unique_ptr<_Tp, _Dp>::~unique_ptr() [with _Tp =
llvm::GCStrategy; _Dp = std::default_delete<llvm::GCStrategy>]’
/var/tmp/gcc_test/usr/local/include/c++/4.10.0/bits/stl_construct.h:93:7:  
required from ‘void std::_Destroy(_Tp*) [with _Tp =
std::unique_ptr<llvm::GCStrategy>]’
/var/tmp/gcc_test/usr/local/include/c++/4.10.0/bits/stl_construct.h:103:46:  
required from ‘static void std::_Destroy_aux<<anonymous>
>::__destroy(_ForwardIterator, _ForwardIterator) [with _ForwardIterator =
std::unique_ptr<llvm::GCStrategy>*; bool <anonymous> = false]’
/var/tmp/gcc_test/usr/local/include/c++/4.10.0/bits/stl_construct.h:127:27:  
required from ‘void std::_Destroy(_ForwardIterator, _ForwardIterator) [with
_ForwardIterator = std::unique_ptr<llvm::GCStrategy>*]’
/var/tmp/gcc_test/usr/local/include/c++/4.10.0/bits/stl_construct.h:151:31:  
required from ‘void std::_Destroy(_ForwardIterator, _ForwardIterator,
std::allocator<_T2>&) [with _ForwardIterator =
std::unique_ptr<llvm::GCStrategy>*; _Tp = std::unique_ptr<llvm::GCStrategy>]’
/var/tmp/gcc_test/usr/local/include/c++/4.10.0/bits/stl_vector.h:425:30:  
required from ‘std::vector<_Tp, _Alloc>::~vector() [with _Tp =
std::unique_ptr<llvm::GCStrategy>; _Alloc =
std::allocator<std::unique_ptr<llvm::GCStrategy> >]’
/var/tmp/llvm-project/llvm/include/llvm/CodeGen/GCMetadata.h:166:9:   required
from here
/var/tmp/gcc_test/usr/local/include/c++/4.10.0/bits/unique_ptr.h:74:22: error:
invalid application of ‘sizeof’ to incomplete type ‘llvm::GCStrategy’
  static_assert(sizeof(_Tp)>0,
                      ^

markus@x4 llvm_build % cat MachineFunctionAnalysis.ii                          
                                                                               
                                                                               
                              [25/7733]
template <typename _Tp> _Tp *__addressof (_Tp &);
template <typename _Tp> struct integral_constant
{
  static constexpr _Tp value = 0;
};
template <typename...> struct __and_;
template <typename _B1> struct __and_<_B1> : _B1
{
};
template <typename> struct G : integral_constant<int>
{
};
template <int> struct H
{
  typedef int type;
};
template <typename... _Cond>
using _Require = typename H<__and_<_Cond...>::value>::type;
template <typename> class unique_ptr;
class new_allocator
{
};
template <typename> using __allocator_base = new_allocator;
template <typename> class allocator : __allocator_base<unique_ptr<int> >
{
};
class ModulePass
{
public:
  virtual ~ModulePass ();
};
template <typename _Alloc> struct allocator_traits
{
  static unique_ptr<int> *_S_pointer_helper (...);
  typedef decltype(_S_pointer_helper ()) __pointer;
  typedef __pointer pointer;
  struct B
  {
    template <typename> static integral_constant<int> __test (...);
    using type = decltype(__test<_Alloc>);
  };
  template <typename> using __has_destroy = typename B::type;
  template <typename _Tp>
  static _Require<G<__has_destroy<_Tp> > >
  _S_destroy (allocator<unique_ptr<int> > &, _Tp *p2)
  {
    p2->~_Tp ();
  }
  template <class _Tp>
  static void destroy (allocator<unique_ptr<int> > &p1, _Tp *p2)
  {
    _S_destroy (p1, p2);
  }
};

template <typename>
struct __alloc_traits : allocator_traits<allocator<unique_ptr<int> > >
{
};
template <typename _ForwardIterator, typename _Allocator>
void _Destroy (_ForwardIterator p1, _ForwardIterator, _Allocator &p3)
{
  __alloc_traits<_Allocator>::destroy (p3, __addressof (*p1));
}

template <typename> struct _Vector_base
{
  typedef allocator<unique_ptr<int> > _Tp_alloc_type;
  typedef __alloc_traits<_Tp_alloc_type>::pointer pointer;
  struct D
  {
    pointer _M_start;
    pointer _M_finish;
  };
  _Tp_alloc_type &_M_get_Tp_allocator ();
  D _M_impl;
};
template <typename> class vector : _Vector_base<allocator<unique_ptr<int> > >
{
public:
  ~vector ()
  {
  std:
    _Destroy (this->_M_impl._M_start, this->_M_impl._M_finish,
              _M_get_Tp_allocator ());
  }
};
template <typename _Tp> struct F
{
  void operator()(_Tp *) { sizeof(_Tp); }
};
class A;
template <typename> class unique_ptr
{
  class C
  {
    template <typename> static A *__test (...);
    typedef F<int> _Del;

  public:
    typedef decltype(__test<_Del>()) type;
  };

public:
  typename C::type pointer;
  ~unique_ptr () { get_deleter ()(0); }
  F<A> &get_deleter ();
};

class I : ModulePass
{
  vector<unique_ptr<int> > StrategyList;
};
markus@x4 llvm_build % g++ -c -std=c++11 -O2 MachineFunctionAnalysis.ii
MachineFunctionAnalysis.ii: In instantiation of ‘void F<_Tp>::operator()(_Tp*)
[with _Tp = A]’:
MachineFunctionAnalysis.ii:106:33:   required from ‘unique_ptr<
<template-parameter-1-1> >::~unique_ptr() [with <template-parameter-1-1> =
int]’
MachineFunctionAnalysis.ii:47:5:   required from ‘static _Require<G<typename
allocator_traits<_Alloc>::B::type> >
allocator_traits<_Alloc>::_S_destroy(allocator<unique_ptr<int> >&, _Tp*) [with
_Tp = unique_ptr<int>; _Alloc = allocator<unique_ptr<int> >;
_Require<G<typename allocator_traits<_Alloc>::B::type> > = int]’
MachineFunctionAnalysis.ii:52:23:   required from ‘static void
allocator_traits<_Alloc>::destroy(allocator<unique_ptr<int> >&, _Tp*) [with _Tp
= unique_ptr<int>; _Alloc = allocator<unique_ptr<int> >]’
MachineFunctionAnalysis.ii:63:61:   required from ‘void
_Destroy(_ForwardIterator, _ForwardIterator, _Allocator&) [with
_ForwardIterator = unique_ptr<int>*; _Allocator = allocator<unique_ptr<int> >]’
MachineFunctionAnalysis.ii:85:37:   required from ‘vector<
<template-parameter-1-1> >::~vector() [with <template-parameter-1-1> =
unique_ptr<int>]’
MachineFunctionAnalysis.ii:110:7:   required from here
MachineFunctionAnalysis.ii:90:34: error: invalid application of ‘sizeof’ to
incomplete type ‘A’
   void operator()(_Tp *) { sizeof(_Tp); }
>From gcc-bugs-return-455404-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org Mon Jun 30 22:07:46 2014
Return-Path: <gcc-bugs-return-455404-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org>
Delivered-To: listarch-gcc-bugs@gcc.gnu.org
Received: (qmail 9958 invoked by alias); 30 Jun 2014 22:07:45 -0000
Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm
Precedence: bulk
List-Id: <gcc-bugs.gcc.gnu.org>
List-Archive: <http://gcc.gnu.org/ml/gcc-bugs/>
List-Post: <mailto:gcc-bugs@gcc.gnu.org>
List-Help: <mailto:gcc-bugs-help@gcc.gnu.org>
Sender: gcc-bugs-owner@gcc.gnu.org
Delivered-To: mailing list gcc-bugs@gcc.gnu.org
Received: (qmail 9631 invoked by uid 48); 30 Jun 2014 22:07:34 -0000
From: "trippels at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug ipa/61659] [4.9/4.10 Regression] Extra undefined symbol because of devirtualization
Date: Mon, 30 Jun 2014 22:07:00 -0000
X-Bugzilla-Reason: CC
X-Bugzilla-Type: changed
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: gcc
X-Bugzilla-Component: ipa
X-Bugzilla-Version: 4.10.0
X-Bugzilla-Keywords:
X-Bugzilla-Severity: normal
X-Bugzilla-Who: trippels at gcc dot gnu.org
X-Bugzilla-Status: ASSIGNED
X-Bugzilla-Priority: P3
X-Bugzilla-Assigned-To: jason at gcc dot gnu.org
X-Bugzilla-Target-Milestone: 4.9.1
X-Bugzilla-Flags:
X-Bugzilla-Changed-Fields: attachments.created
Message-ID: <bug-61659-4-gWby4TGmMc@http.gcc.gnu.org/bugzilla/>
In-Reply-To: <bug-61659-4@http.gcc.gnu.org/bugzilla/>
References: <bug-61659-4@http.gcc.gnu.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 7bit
X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-SW-Source: 2014-06/txt/msg02486.txt.bz2
Content-length: 233

https://gcc.gnu.org/bugzilla/show_bug.cgi?ida659

--- Comment #10 from Markus Trippelsdorf <trippels at gcc dot gnu.org> ---
Created attachment 33036
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id3036&actioníit
testcase


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

* [Bug ipa/61659] [4.9/4.10 Regression] Extra undefined symbol because of devirtualization
  2014-06-30 15:01 [Bug c++/61659] New: Extra undefined symbol because of devirtualization rafael.espindola at gmail dot com
                   ` (9 preceding siblings ...)
  2014-06-30 22:05 ` trippels at gcc dot gnu.org
@ 2014-06-30 23:24 ` pinskia at gcc dot gnu.org
  2014-07-01  5:59 ` trippels at gcc dot gnu.org
                   ` (24 subsequent siblings)
  35 siblings, 0 replies; 37+ messages in thread
From: pinskia at gcc dot gnu.org @ 2014-06-30 23:24 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61659

--- Comment #11 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
(In reply to Markus Trippelsdorf from comment #10)
> Created attachment 33036 [details]
> testcase

I think this is a correct error message.  See
https://gcc.gnu.org/gcc-4.9/porting_to.html at the end.
GCC now checks return types more strictly and will reject declarations of
functions which return abstract types, including in uninstantiated templates
and in typedefs to function pointers. Returning an abstract type is not
possible so the code must be fixed.

Also see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60775#c4:
14.7.1 [temp.inst] p1:
"The implicit instantiation of a class template specialization causes the
implicit
instantiation of the declarations, but not of the definitions, default
arguments, or exception-specifications of the class member functions, member
classes, scoped member enumerations, static data members and member templates;"


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

* [Bug ipa/61659] [4.9/4.10 Regression] Extra undefined symbol because of devirtualization
  2014-06-30 15:01 [Bug c++/61659] New: Extra undefined symbol because of devirtualization rafael.espindola at gmail dot com
                   ` (10 preceding siblings ...)
  2014-06-30 23:24 ` pinskia at gcc dot gnu.org
@ 2014-07-01  5:59 ` trippels at gcc dot gnu.org
  2014-07-01  7:20 ` trippels at gcc dot gnu.org
                   ` (23 subsequent siblings)
  35 siblings, 0 replies; 37+ messages in thread
From: trippels at gcc dot gnu.org @ 2014-07-01  5:59 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61659

--- Comment #12 from Markus Trippelsdorf <trippels at gcc dot gnu.org> ---
Well, if I revert Jason's patch it compiles just fine.
gcc-4.9 is also fine. And -fno-devirtualize, too.


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

* [Bug ipa/61659] [4.9/4.10 Regression] Extra undefined symbol because of devirtualization
  2014-06-30 15:01 [Bug c++/61659] New: Extra undefined symbol because of devirtualization rafael.espindola at gmail dot com
                   ` (11 preceding siblings ...)
  2014-07-01  5:59 ` trippels at gcc dot gnu.org
@ 2014-07-01  7:20 ` trippels at gcc dot gnu.org
  2014-07-01  8:55 ` jason at gcc dot gnu.org
                   ` (22 subsequent siblings)
  35 siblings, 0 replies; 37+ messages in thread
From: trippels at gcc dot gnu.org @ 2014-07-01  7:20 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61659

--- Comment #13 from Markus Trippelsdorf <trippels at gcc dot gnu.org> ---
Adding "#include "llvm/CodeGen/GCStrategy.h" to
llvm/lib/CodeGen/MachineFunctionAnalysis.cpp fixes the issue.

Can you take care of this Rafael?


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

* [Bug ipa/61659] [4.9/4.10 Regression] Extra undefined symbol because of devirtualization
  2014-06-30 15:01 [Bug c++/61659] New: Extra undefined symbol because of devirtualization rafael.espindola at gmail dot com
                   ` (12 preceding siblings ...)
  2014-07-01  7:20 ` trippels at gcc dot gnu.org
@ 2014-07-01  8:55 ` jason at gcc dot gnu.org
  2014-07-01 12:58 ` rafael.espindola at gmail dot com
                   ` (21 subsequent siblings)
  35 siblings, 0 replies; 37+ messages in thread
From: jason at gcc dot gnu.org @ 2014-07-01  8:55 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61659

--- Comment #14 from Jason Merrill <jason at gcc dot gnu.org> ---
Right.  My patch causes us to synthesize ~I so that it's available for
devirtualization, which we weren't doing before.  This is allowed by the C++
standard: 3.2p3 says "A virtual member function is odr-used if it is not pure."
so the compiler is free to instantiate/synthesize any virtual function.

Avoiding this while still getting the devirtualization benefit would require
some mechanism for devirtualization to call back into the front end to trigger
the instantiation/synthesis directly.  This might be workable for an individual
translation unit, but not for LTO.


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

* [Bug ipa/61659] [4.9/4.10 Regression] Extra undefined symbol because of devirtualization
  2014-06-30 15:01 [Bug c++/61659] New: Extra undefined symbol because of devirtualization rafael.espindola at gmail dot com
                   ` (13 preceding siblings ...)
  2014-07-01  8:55 ` jason at gcc dot gnu.org
@ 2014-07-01 12:58 ` rafael.espindola at gmail dot com
  2014-07-10 19:30 ` jason at gcc dot gnu.org
                   ` (20 subsequent siblings)
  35 siblings, 0 replies; 37+ messages in thread
From: rafael.espindola at gmail dot com @ 2014-07-01 12:58 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61659

--- Comment #15 from Rafael Avila de Espindola <rafael.espindola at gmail dot com> ---
(In reply to Jason Merrill from comment #14)
> Right.  My patch causes us to synthesize ~I so that it's available for
> devirtualization, which we weren't doing before.  This is allowed by the C++
> standard: 3.2p3 says "A virtual member function is odr-used if it is not
> pure." so the compiler is free to instantiate/synthesize any virtual
> function.
> 
> Avoiding this while still getting the devirtualization benefit would require
> some mechanism for devirtualization to call back into the front end to
> trigger the instantiation/synthesis directly.  This might be workable for an
> individual translation unit, but not for LTO.

And make which c++ errors user see dependent on which optimizations they run,
which is not very friendly. I agree your approach is better.

Markus Trippelsdorf:

The include should go where it is used, so in GCMetadata.h.


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

* [Bug ipa/61659] [4.9/4.10 Regression] Extra undefined symbol because of devirtualization
  2014-06-30 15:01 [Bug c++/61659] New: Extra undefined symbol because of devirtualization rafael.espindola at gmail dot com
                   ` (14 preceding siblings ...)
  2014-07-01 12:58 ` rafael.espindola at gmail dot com
@ 2014-07-10 19:30 ` jason at gcc dot gnu.org
  2014-07-16 13:29 ` jakub at gcc dot gnu.org
                   ` (19 subsequent siblings)
  35 siblings, 0 replies; 37+ messages in thread
From: jason at gcc dot gnu.org @ 2014-07-10 19:30 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61659

--- Comment #16 from Jason Merrill <jason at gcc dot gnu.org> ---
Author: jason
Date: Thu Jul 10 19:29:59 2014
New Revision: 212436

URL: https://gcc.gnu.org/viewcvs?rev=212436&root=gcc&view=rev
Log:
    PR c++/61659
    PR c++/61687
gcc/c-family/
    * c.opt (-fuse-all-virtuals): New.
gcc/cp/
    * decl2.c (mark_all_virtuals): New variable.
    (maybe_emit_vtables): Check it instead of flag_devirtualize.
    (cp_write_global_declarations): Set it and give helpful diagnostic
    if it introduces errors.
    * class.c (finish_struct_1): Check it.
    * decl.c (grokdeclarator): Clear virtualp after 'virtual auto' error.

Added:
    trunk/gcc/testsuite/g++.dg/template/dtor9a.C
Modified:
    trunk/gcc/c-family/ChangeLog
    trunk/gcc/c-family/c.opt
    trunk/gcc/cp/ChangeLog
    trunk/gcc/cp/class.c
    trunk/gcc/cp/decl.c
    trunk/gcc/cp/decl2.c
    trunk/gcc/testsuite/g++.dg/template/dtor9.C


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

* [Bug ipa/61659] [4.9/4.10 Regression] Extra undefined symbol because of devirtualization
  2014-06-30 15:01 [Bug c++/61659] New: Extra undefined symbol because of devirtualization rafael.espindola at gmail dot com
                   ` (15 preceding siblings ...)
  2014-07-10 19:30 ` jason at gcc dot gnu.org
@ 2014-07-16 13:29 ` jakub at gcc dot gnu.org
  2014-07-30 17:27 ` jason at gcc dot gnu.org
                   ` (18 subsequent siblings)
  35 siblings, 0 replies; 37+ messages in thread
From: jakub at gcc dot gnu.org @ 2014-07-16 13:29 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61659

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Target Milestone|4.9.1                       |4.9.2

--- Comment #17 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
GCC 4.9.1 has been released.


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

* [Bug ipa/61659] [4.9/4.10 Regression] Extra undefined symbol because of devirtualization
  2014-06-30 15:01 [Bug c++/61659] New: Extra undefined symbol because of devirtualization rafael.espindola at gmail dot com
                   ` (17 preceding siblings ...)
  2014-07-30 17:27 ` jason at gcc dot gnu.org
@ 2014-07-30 17:27 ` jason at gcc dot gnu.org
  2014-07-30 17:28 ` jason at gcc dot gnu.org
                   ` (16 subsequent siblings)
  35 siblings, 0 replies; 37+ messages in thread
From: jason at gcc dot gnu.org @ 2014-07-30 17:27 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61659

--- Comment #18 from Jason Merrill <jason at gcc dot gnu.org> ---
Author: jason
Date: Wed Jul 30 17:27:14 2014
New Revision: 213307

URL: https://gcc.gnu.org/viewcvs?rev=213307&root=gcc&view=rev
Log:
    PR lto/53808
    PR c++/61659
    * pt.c (push_template_decl_real): Set DECL_COMDAT on templates.
    (check_explicit_specialization): Clear it on specializations.
    * decl.c (duplicate_decls, start_decl): Likewise.
    (grokmethod, grokfndecl): Set DECL_COMDAT on inlines.
    * method.c (implicitly_declare_fn): Set DECL_COMDAT.  Determine
    linkage after setting the appropriate flags.
    * tree.c (decl_linkage): Don't check DECL_COMDAT.
    * decl2.c (mark_needed): Mark clones.
    (import_export_decl): Not here.

Modified:
    trunk/gcc/cp/ChangeLog
    trunk/gcc/cp/decl.c
    trunk/gcc/cp/decl2.c
    trunk/gcc/cp/method.c
    trunk/gcc/cp/pt.c
    trunk/gcc/cp/tree.c
    trunk/gcc/testsuite/g++.dg/opt/devirt4.C


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

* [Bug ipa/61659] [4.9/4.10 Regression] Extra undefined symbol because of devirtualization
  2014-06-30 15:01 [Bug c++/61659] New: Extra undefined symbol because of devirtualization rafael.espindola at gmail dot com
                   ` (16 preceding siblings ...)
  2014-07-16 13:29 ` jakub at gcc dot gnu.org
@ 2014-07-30 17:27 ` jason at gcc dot gnu.org
  2014-07-30 17:27 ` jason at gcc dot gnu.org
                   ` (17 subsequent siblings)
  35 siblings, 0 replies; 37+ messages in thread
From: jason at gcc dot gnu.org @ 2014-07-30 17:27 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61659

--- Comment #19 from Jason Merrill <jason at gcc dot gnu.org> ---
Author: jason
Date: Wed Jul 30 17:27:20 2014
New Revision: 213308

URL: https://gcc.gnu.org/viewcvs?rev=213308&root=gcc&view=rev
Log:
    PR c++/61659
    PR c++/61687
Revert:
gcc/c-family/
    * c.opt (-fuse-all-virtuals): New.
gcc/cp/
    * decl2.c (mark_all_virtuals): New variable.
    (maybe_emit_vtables): Check it instead of flag_devirtualize.
    (cp_write_global_declarations): Set it and give helpful diagnostic
    if it introduces errors.
    * class.c (finish_struct_1): Check it.

Removed:
    trunk/gcc/testsuite/g++.dg/template/dtor9a.C
Modified:
    trunk/gcc/c-family/ChangeLog
    trunk/gcc/c-family/c.opt
    trunk/gcc/cp/ChangeLog
    trunk/gcc/cp/class.c
    trunk/gcc/cp/decl2.c
    trunk/gcc/doc/invoke.texi
    trunk/gcc/testsuite/g++.dg/template/dtor9.C


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

* [Bug ipa/61659] [4.9/4.10 Regression] Extra undefined symbol because of devirtualization
  2014-06-30 15:01 [Bug c++/61659] New: Extra undefined symbol because of devirtualization rafael.espindola at gmail dot com
                   ` (18 preceding siblings ...)
  2014-07-30 17:27 ` jason at gcc dot gnu.org
@ 2014-07-30 17:28 ` jason at gcc dot gnu.org
  2014-07-30 21:30 ` jason at gcc dot gnu.org
                   ` (15 subsequent siblings)
  35 siblings, 0 replies; 37+ messages in thread
From: jason at gcc dot gnu.org @ 2014-07-30 17:28 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61659

--- Comment #19 from Jason Merrill <jason at gcc dot gnu.org> ---
Author: jason
Date: Wed Jul 30 17:27:20 2014
New Revision: 213308

URL: https://gcc.gnu.org/viewcvs?rev=213308&root=gcc&view=rev
Log:
    PR c++/61659
    PR c++/61687
Revert:
gcc/c-family/
    * c.opt (-fuse-all-virtuals): New.
gcc/cp/
    * decl2.c (mark_all_virtuals): New variable.
    (maybe_emit_vtables): Check it instead of flag_devirtualize.
    (cp_write_global_declarations): Set it and give helpful diagnostic
    if it introduces errors.
    * class.c (finish_struct_1): Check it.

Removed:
    trunk/gcc/testsuite/g++.dg/template/dtor9a.C
Modified:
    trunk/gcc/c-family/ChangeLog
    trunk/gcc/c-family/c.opt
    trunk/gcc/cp/ChangeLog
    trunk/gcc/cp/class.c
    trunk/gcc/cp/decl2.c
    trunk/gcc/doc/invoke.texi
    trunk/gcc/testsuite/g++.dg/template/dtor9.C


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

* [Bug ipa/61659] [4.9/4.10 Regression] Extra undefined symbol because of devirtualization
  2014-06-30 15:01 [Bug c++/61659] New: Extra undefined symbol because of devirtualization rafael.espindola at gmail dot com
                   ` (19 preceding siblings ...)
  2014-07-30 17:28 ` jason at gcc dot gnu.org
@ 2014-07-30 21:30 ` jason at gcc dot gnu.org
  2014-08-12  6:14 ` amker.cheng at gmail dot com
                   ` (14 subsequent siblings)
  35 siblings, 0 replies; 37+ messages in thread
From: jason at gcc dot gnu.org @ 2014-07-30 21:30 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61659

--- Comment #20 from Jason Merrill <jason at gcc dot gnu.org> ---
Author: jason
Date: Wed Jul 30 21:29:25 2014
New Revision: 213311

URL: https://gcc.gnu.org/viewcvs?rev=213311&root=gcc&view=rev
Log:
    PR lto/53808
    PR c++/61659
    * pt.c (push_template_decl_real): Don't set DECL_COMDAT on friends.

Added:
    trunk/gcc/testsuite/g++.dg/template/friend56.C
Modified:
    trunk/gcc/cp/ChangeLog
    trunk/gcc/cp/pt.c


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

* [Bug ipa/61659] [4.9/4.10 Regression] Extra undefined symbol because of devirtualization
  2014-06-30 15:01 [Bug c++/61659] New: Extra undefined symbol because of devirtualization rafael.espindola at gmail dot com
                   ` (20 preceding siblings ...)
  2014-07-30 21:30 ` jason at gcc dot gnu.org
@ 2014-08-12  6:14 ` amker.cheng at gmail dot com
  2014-08-19 17:30 ` [Bug ipa/61659] [4.9/5 " jason at gcc dot gnu.org
                   ` (13 subsequent siblings)
  35 siblings, 0 replies; 37+ messages in thread
From: amker.cheng at gmail dot com @ 2014-08-12  6:14 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61659

bin.cheng <amker.cheng at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |amker.cheng at gmail dot com

--- Comment #21 from bin.cheng <amker.cheng at gmail dot com> ---
(In reply to Jason Merrill from comment #18)
> Author: jason
> Date: Wed Jul 30 17:27:14 2014
> New Revision: 213307
> 
> URL: https://gcc.gnu.org/viewcvs?rev=213307&root=gcc&view=rev
> Log:
> 	PR lto/53808
> 	PR c++/61659
> 	* pt.c (push_template_decl_real): Set DECL_COMDAT on templates.
> 	(check_explicit_specialization): Clear it on specializations.
> 	* decl.c (duplicate_decls, start_decl): Likewise.
> 	(grokmethod, grokfndecl): Set DECL_COMDAT on inlines.
> 	* method.c (implicitly_declare_fn): Set DECL_COMDAT.  Determine
> 	linkage after setting the appropriate flags.
> 	* tree.c (decl_linkage): Don't check DECL_COMDAT.
> 	* decl2.c (mark_needed): Mark clones.
> 	(import_export_decl): Not here.
> 
> Modified:
>     trunk/gcc/cp/ChangeLog
>     trunk/gcc/cp/decl.c
>     trunk/gcc/cp/decl2.c
>     trunk/gcc/cp/method.c
>     trunk/gcc/cp/pt.c
>     trunk/gcc/cp/tree.c
>     trunk/gcc/testsuite/g++.dg/opt/devirt4.C

Hi Jason,
After setting DECL_COMDAT, testcase g++.dg/ext/arm-fp16/fp16-mangle-1.C as
below no longer works.

/* { dg-do compile { target arm*-*-* } } */
/* { dg-options "-mfp16-format=ieee" } */

/* Test mangling */

/* { dg-final { scan-assembler "\t.global\t_Z1fPDh" } } */
void f (__fp16 *x) { }

/* { dg-final { scan-assembler "\t.global\t_Z1gPDhS_" } } */
void g (__fp16 *x, __fp16 *y) { }

/* { dg-final { scan-assembler "\t.global\t_ZN1SIDhDhE1iE" } } */
template <typename T, typename U> struct S { static int i; }; 
template <> int S<__fp16, __fp16>::i = 3;

Since g++ now outputs:

    .weak    _ZN1SIDhDhE1iE
    .section    .data._ZN1SIDhDhE1iE,"awG",%progbits,_ZN1SIDhDhE1iE,comdat
    .align    2
    .type    _ZN1SIDhDhE1iE, %object
    .size    _ZN1SIDhDhE1iE, 4
_ZN1SIDhDhE1iE:
    .word    3
    .ident    "GCC: (GNU) 4.10.0 20140811 (experimental)"

rather than ".global\t_ZN1SIDhDhE1iE".

I assume we should refine the testcase? 

Thanks.
>From gcc-bugs-return-458228-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org Tue Aug 12 06:43:52 2014
Return-Path: <gcc-bugs-return-458228-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org>
Delivered-To: listarch-gcc-bugs@gcc.gnu.org
Received: (qmail 15648 invoked by alias); 12 Aug 2014 06:43:51 -0000
Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm
Precedence: bulk
List-Id: <gcc-bugs.gcc.gnu.org>
List-Archive: <http://gcc.gnu.org/ml/gcc-bugs/>
List-Post: <mailto:gcc-bugs@gcc.gnu.org>
List-Help: <mailto:gcc-bugs-help@gcc.gnu.org>
Sender: gcc-bugs-owner@gcc.gnu.org
Delivered-To: mailing list gcc-bugs@gcc.gnu.org
Received: (qmail 15581 invoked by uid 48); 12 Aug 2014 06:43:43 -0000
From: "law at redhat dot com" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug target/62025] [4.9/4.10 Regression] Miscompilation of openssl sha512.c
Date: Tue, 12 Aug 2014 06:43:00 -0000
X-Bugzilla-Reason: CC
X-Bugzilla-Type: changed
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: gcc
X-Bugzilla-Component: target
X-Bugzilla-Version: 4.9.1
X-Bugzilla-Keywords: wrong-code
X-Bugzilla-Severity: normal
X-Bugzilla-Who: law at redhat dot com
X-Bugzilla-Status: UNCONFIRMED
X-Bugzilla-Priority: P3
X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org
X-Bugzilla-Target-Milestone: 4.9.2
X-Bugzilla-Flags:
X-Bugzilla-Changed-Fields:
Message-ID: <bug-62025-4-MUn98bHDy9@http.gcc.gnu.org/bugzilla/>
In-Reply-To: <bug-62025-4@http.gcc.gnu.org/bugzilla/>
References: <bug-62025-4@http.gcc.gnu.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 7bit
X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-SW-Source: 2014-08/txt/msg00725.txt.bz2
Content-length: 529

https://gcc.gnu.org/bugzilla/show_bug.cgi?idb025

--- Comment #6 from Jeffrey A. Law <law at redhat dot com> ---
It's late and I need to catch some zzzs. But as I hinted in my prior update, I
think we may chasing something latent.   I would recommend looking very closely
at r204497, which my bisecting implicated as the failing commit for a severely
hacked up test.

Reverting r204497 by hand on the trunk results in the original testcase working
properly.  I'm too tired to really analyze, but I think it's worth a looksie.


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

* [Bug ipa/61659] [4.9/5 Regression] Extra undefined symbol because of devirtualization
  2014-06-30 15:01 [Bug c++/61659] New: Extra undefined symbol because of devirtualization rafael.espindola at gmail dot com
                   ` (21 preceding siblings ...)
  2014-08-12  6:14 ` amker.cheng at gmail dot com
@ 2014-08-19 17:30 ` jason at gcc dot gnu.org
  2014-08-27 15:54 ` [Bug ipa/61659] [4.9 " trippels at gcc dot gnu.org
                   ` (12 subsequent siblings)
  35 siblings, 0 replies; 37+ messages in thread
From: jason at gcc dot gnu.org @ 2014-08-19 17:30 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61659

--- Comment #22 from Jason Merrill <jason at gcc dot gnu.org> ---
Author: jason
Date: Tue Aug 19 17:29:41 2014
New Revision: 214177

URL: https://gcc.gnu.org/viewcvs?rev=214177&root=gcc&view=rev
Log:
    PR lto/53808
    PR c++/61659
    * decl.c (maybe_commonize_var): Don't use DECL_COMDAT to trigger
    comdat_linkage.

Added:
    trunk/gcc/testsuite/g++.dg/abi/spec1.C
Modified:
    trunk/gcc/cp/ChangeLog
    trunk/gcc/cp/decl.c


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

* [Bug ipa/61659] [4.9 Regression] Extra undefined symbol because of devirtualization
  2014-06-30 15:01 [Bug c++/61659] New: Extra undefined symbol because of devirtualization rafael.espindola at gmail dot com
                   ` (22 preceding siblings ...)
  2014-08-19 17:30 ` [Bug ipa/61659] [4.9/5 " jason at gcc dot gnu.org
@ 2014-08-27 15:54 ` trippels at gcc dot gnu.org
  2014-09-01 12:49 ` trippels at gcc dot gnu.org
                   ` (11 subsequent siblings)
  35 siblings, 0 replies; 37+ messages in thread
From: trippels at gcc dot gnu.org @ 2014-08-27 15:54 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61659

Markus Trippelsdorf <trippels at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
      Known to work|                            |5.0
            Summary|[4.9/5 Regression] Extra    |[4.9 Regression] Extra
                   |undefined symbol because of |undefined symbol because of
                   |devirtualization            |devirtualization
      Known to fail|4.10.0                      |

--- Comment #23 from Markus Trippelsdorf <trippels at gcc dot gnu.org> ---
gcc-4.9 branch is still affected. Do you plan a backport, Jason?


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

* [Bug ipa/61659] [4.9 Regression] Extra undefined symbol because of devirtualization
  2014-06-30 15:01 [Bug c++/61659] New: Extra undefined symbol because of devirtualization rafael.espindola at gmail dot com
                   ` (23 preceding siblings ...)
  2014-08-27 15:54 ` [Bug ipa/61659] [4.9 " trippels at gcc dot gnu.org
@ 2014-09-01 12:49 ` trippels at gcc dot gnu.org
  2014-09-01 13:03 ` trippels at gcc dot gnu.org
                   ` (10 subsequent siblings)
  35 siblings, 0 replies; 37+ messages in thread
From: trippels at gcc dot gnu.org @ 2014-09-01 12:49 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61659

--- Comment #25 from Markus Trippelsdorf <trippels at gcc dot gnu.org> ---
(In reply to Jason Merrill from comment #24)
> Created attachment 33407 [details]
> Patch for 4.9
> 
> Here's a patch for the 4.9 branch.  I'm nervous about applying it because I
> suspect that we haven't yet found all the effects of setting DECL_COMDAT.

I've tested your patch and it causes a qt-5.4 build failure
(also happens on trunk):

markus@x4 WebCore % cat Font.ii
namespace WTF
{
template <typename T> inline void deleteOwnedPtr (T *);
}
namespace WebCore
{
class TextLayout;
}
namespace WTF
{
template <>
void
deleteOwnedPtr (WebCore::TextLayout *)
{
}
}

(Without your patch:)
markus@x4 WebCore % g++ -c -O2 Font.ii
markus@x4 WebCore % nm Font.o
0000000000000000 T _ZN3WTF14deleteOwnedPtrIN7WebCore10TextLayoutEEEvPT_

(with patch applied)
markus@x4 WebCore % g++ -c -O2 Font.ii
markus@x4 WebCore % nm Font.o
markus@x4 WebCore %


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

* [Bug ipa/61659] [4.9 Regression] Extra undefined symbol because of devirtualization
  2014-06-30 15:01 [Bug c++/61659] New: Extra undefined symbol because of devirtualization rafael.espindola at gmail dot com
                   ` (24 preceding siblings ...)
  2014-09-01 12:49 ` trippels at gcc dot gnu.org
@ 2014-09-01 13:03 ` trippels at gcc dot gnu.org
  2014-09-01 16:50 ` trippels at gcc dot gnu.org
                   ` (9 subsequent siblings)
  35 siblings, 0 replies; 37+ messages in thread
From: trippels at gcc dot gnu.org @ 2014-09-01 13:03 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61659

--- Comment #26 from Markus Trippelsdorf <trippels at gcc dot gnu.org> ---
§14.7.3/12 says:
An explicit specialization of a function template is inline only if it is
declared with the inline specifier or defined as deleted, and independently of
whether its function template is inline.
>From gcc-bugs-return-460298-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org Mon Sep 01 13:11:20 2014
Return-Path: <gcc-bugs-return-460298-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org>
Delivered-To: listarch-gcc-bugs@gcc.gnu.org
Received: (qmail 9984 invoked by alias); 1 Sep 2014 13:11:19 -0000
Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm
Precedence: bulk
List-Id: <gcc-bugs.gcc.gnu.org>
List-Archive: <http://gcc.gnu.org/ml/gcc-bugs/>
List-Post: <mailto:gcc-bugs@gcc.gnu.org>
List-Help: <mailto:gcc-bugs-help@gcc.gnu.org>
Sender: gcc-bugs-owner@gcc.gnu.org
Delivered-To: mailing list gcc-bugs@gcc.gnu.org
Received: (qmail 9898 invoked by uid 48); 1 Sep 2014 13:11:09 -0000
From: "ro at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug rtl-optimization/62265] [4.8/4.9/5 regression] FAIL: gcc.dg/20111227-2.c scan-rtl-dump ree "Elimination opportunities = 3 realized = 3"
Date: Mon, 01 Sep 2014 13:11:00 -0000
X-Bugzilla-Reason: CC
X-Bugzilla-Type: changed
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: gcc
X-Bugzilla-Component: rtl-optimization
X-Bugzilla-Version: 5.0
X-Bugzilla-Keywords:
X-Bugzilla-Severity: normal
X-Bugzilla-Who: ro at gcc dot gnu.org
X-Bugzilla-Status: NEW
X-Bugzilla-Priority: P3
X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org
X-Bugzilla-Target-Milestone: 4.8.4
X-Bugzilla-Flags:
X-Bugzilla-Changed-Fields: cf_gcctarget cc
Message-ID: <bug-62265-4-LeCgISCktD@http.gcc.gnu.org/bugzilla/>
In-Reply-To: <bug-62265-4@http.gcc.gnu.org/bugzilla/>
References: <bug-62265-4@http.gcc.gnu.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 7bit
X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-SW-Source: 2014-09/txt/msg00132.txt.bz2
Content-length: 591

https://gcc.gnu.org/bugzilla/show_bug.cgi?idb265

Rainer Orth <ro at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Target|ia64-*-*, m68k-*-*,         |ia64-*-*, m68k-*-*,
                   |s390x-*-*, powerpc64-*-*,   |s390x-*-*, powerpc64-*-*,
                   |avr-*-*                     |avr-*-*. sparc*-*-*
                 CC|                            |ro at gcc dot gnu.org

--- Comment #2 from Rainer Orth <ro at gcc dot gnu.org> ---
Same on SPARC.


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

* [Bug ipa/61659] [4.9 Regression] Extra undefined symbol because of devirtualization
  2014-06-30 15:01 [Bug c++/61659] New: Extra undefined symbol because of devirtualization rafael.espindola at gmail dot com
                   ` (25 preceding siblings ...)
  2014-09-01 13:03 ` trippels at gcc dot gnu.org
@ 2014-09-01 16:50 ` trippels at gcc dot gnu.org
  2014-09-02 15:48 ` jason at gcc dot gnu.org
                   ` (8 subsequent siblings)
  35 siblings, 0 replies; 37+ messages in thread
From: trippels at gcc dot gnu.org @ 2014-09-01 16:50 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61659

--- Comment #27 from Markus Trippelsdorf <trippels at gcc dot gnu.org> ---
Possible fix:

diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index d03f8a4707e5..d8fb35e21237 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -2215,7 +2215,7 @@ duplicate_decls (tree newdecl, tree olddecl, bool
newdecl_is_friend)
                      olddecl);

          SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
-         DECL_COMDAT (newdecl) = DECL_DECLARED_INLINE_P (olddecl);
+         DECL_COMDAT (newdecl) = DECL_DECLARED_INLINE_P (newdecl);

          /* Don't propagate visibility from the template to the
             specialization here.  We'll do that in determine_visibility if


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

* [Bug ipa/61659] [4.9 Regression] Extra undefined symbol because of devirtualization
  2014-06-30 15:01 [Bug c++/61659] New: Extra undefined symbol because of devirtualization rafael.espindola at gmail dot com
                   ` (26 preceding siblings ...)
  2014-09-01 16:50 ` trippels at gcc dot gnu.org
@ 2014-09-02 15:48 ` jason at gcc dot gnu.org
  2014-09-04  7:26 ` trippels at gcc dot gnu.org
                   ` (7 subsequent siblings)
  35 siblings, 0 replies; 37+ messages in thread
From: jason at gcc dot gnu.org @ 2014-09-02 15:48 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61659

--- Comment #28 from Jason Merrill <jason at gcc dot gnu.org> ---
(In reply to Markus Trippelsdorf from comment #27)
> Possible fix:

Applied to trunk, thanks.


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

* [Bug ipa/61659] [4.9 Regression] Extra undefined symbol because of devirtualization
  2014-06-30 15:01 [Bug c++/61659] New: Extra undefined symbol because of devirtualization rafael.espindola at gmail dot com
                   ` (27 preceding siblings ...)
  2014-09-02 15:48 ` jason at gcc dot gnu.org
@ 2014-09-04  7:26 ` trippels at gcc dot gnu.org
  2014-09-04 12:37 ` jason at gcc dot gnu.org
                   ` (6 subsequent siblings)
  35 siblings, 0 replies; 37+ messages in thread
From: trippels at gcc dot gnu.org @ 2014-09-04  7:26 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61659

--- Comment #29 from Markus Trippelsdorf <trippels at gcc dot gnu.org> ---
(In reply to Jason Merrill from comment #28)
> (In reply to Markus Trippelsdorf from comment #27)
> > Possible fix:
> 
> Applied to trunk, thanks.

The fix isn't in trunk yet. Forgot to push?


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

* [Bug ipa/61659] [4.9 Regression] Extra undefined symbol because of devirtualization
  2014-06-30 15:01 [Bug c++/61659] New: Extra undefined symbol because of devirtualization rafael.espindola at gmail dot com
                   ` (28 preceding siblings ...)
  2014-09-04  7:26 ` trippels at gcc dot gnu.org
@ 2014-09-04 12:37 ` jason at gcc dot gnu.org
  2014-09-04 12:39 ` jason at gcc dot gnu.org
                   ` (5 subsequent siblings)
  35 siblings, 0 replies; 37+ messages in thread
From: jason at gcc dot gnu.org @ 2014-09-04 12:37 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61659

--- Comment #30 from Jason Merrill <jason at gcc dot gnu.org> ---
Author: jason
Date: Thu Sep  4 12:37:05 2014
New Revision: 214900

URL: https://gcc.gnu.org/viewcvs?rev=214900&root=gcc&view=rev
Log:
    PR ipa/61659
    * decl.c (duplicate_decls): Check DECL_DECLARED_INLINE_P on
    newdecl, not olddecl.

Added:
    trunk/gcc/testsuite/g++.dg/template/spec38.C
Modified:
    trunk/gcc/cp/ChangeLog
    trunk/gcc/cp/decl.c


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

* [Bug ipa/61659] [4.9 Regression] Extra undefined symbol because of devirtualization
  2014-06-30 15:01 [Bug c++/61659] New: Extra undefined symbol because of devirtualization rafael.espindola at gmail dot com
                   ` (29 preceding siblings ...)
  2014-09-04 12:37 ` jason at gcc dot gnu.org
@ 2014-09-04 12:39 ` jason at gcc dot gnu.org
  2014-09-05  2:13 ` danglin at gcc dot gnu.org
                   ` (4 subsequent siblings)
  35 siblings, 0 replies; 37+ messages in thread
From: jason at gcc dot gnu.org @ 2014-09-04 12:39 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61659

Jason Merrill <jason at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|jason at redhat dot com            |

--- Comment #31 from Jason Merrill <jason at gcc dot gnu.org> ---
Apparently so.  Really applied now. :)


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

* [Bug ipa/61659] [4.9 Regression] Extra undefined symbol because of devirtualization
  2014-06-30 15:01 [Bug c++/61659] New: Extra undefined symbol because of devirtualization rafael.espindola at gmail dot com
                   ` (30 preceding siblings ...)
  2014-09-04 12:39 ` jason at gcc dot gnu.org
@ 2014-09-05  2:13 ` danglin at gcc dot gnu.org
  2014-09-09 15:26 ` danglin at gcc dot gnu.org
                   ` (3 subsequent siblings)
  35 siblings, 0 replies; 37+ messages in thread
From: danglin at gcc dot gnu.org @ 2014-09-05  2:13 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61659

John David Anglin <danglin at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |danglin at gcc dot gnu.org

--- Comment #32 from John David Anglin <danglin at gcc dot gnu.org> ---
At r214748, GCC build fails on hppa1.1-hp-hpux10.20:

/xxx/gnu/gcc/objdir/./prev-gcc/xg++ -B/xxx/gnu/gcc/objdir/./prev-gcc/
-B/opt/gnu/gcc/gcc-5.0/hppa1.1-hp-hpux10.20/bin/ -nostdinc++
-B/xxx/gnu/gcc/objdir/prev-hp
pa1.1-hp-hpux10.20/libstdc++-v3/src/.libs
-B/xxx/gnu/gcc/objdir/prev-hppa1.1-hp-hpux10.20/libstdc++-v3/libsupc++/.libs 
-isystem /xxx/gnu/gcc/objdir/prev-hppa1.
1-hp-hpux10.20/libstdc++-v3/include/hppa1.1-hp-hpux10.20  -isystem
/xxx/gnu/gcc/objdir/prev-hppa1.1-hp-hpux10.20/libstdc++-v3/include  -isystem
/xxx/gnu/gcc/gcc
/libstdc++-v3/libsupc++
-L/xxx/gnu/gcc/objdir/prev-hppa1.1-hp-hpux10.20/libstdc++-v3/src/.libs
-L/xxx/gnu/gcc/objdir/prev-hppa1.1-hp-hpux10.20/libstdc++-v3/libs
upc++/.libs   -g -O2 -DIN_GCC    -fno-exceptions -fno-rtti
-fasynchronous-unwind
-tables -W -Wall -Wno-narrowing -Wwrite-strings -Wcast-qual
-Wmissing-format-att
ribute -Woverloaded-virtual -pedantic -Wno-long-long -Wno-variadic-macros
-Wno-o
verlength-strings -Werror -fno-common  -DHAVE_CONFIG_H -static-libstdc++
-static
-libgcc  -o cc1 c/c-lang.o c-family/stub-objc.o attribs.o c/c-errors.o
c/c-decl.
o c/c-typeck.o c/c-convert.o c/c-aux-info.o c/c-objc-common.o c/c-parser.o
c/c-a
rray-notation.o c-family/c-common.o c-family/c-cppbuiltin.o c-family/c-dump.o
c-
family/c-format.o c-family/c-gimplify.o c-family/c-lex.o c-family/c-omp.o
c-fami
ly/c-opts.o c-family/c-pch.o c-family/c-ppoutput.o c-family/c-pragma.o
c-family/
c-pretty-print.o c-family/c-semantics.o c-family/c-ada-spec.o
c-family/c-cilkplu
s.o c-family/array-notation-common.o c-family/cilk.o c-family/c-ubsan.o
default-c.o \
  cc1-checksum.o libbackend.a main.o tree-browser.o libcommon-target.a
libcommon.a ../libcpp/libcpp.a ../libdecnumber/libdecnumber.a libcommon.a
../libcpp/libcpp.a   ../libbacktrace/.libs/libbacktrace.a
../libiberty/libiberty.a ../libdecnumber/libdecnumber.a   
-L/opt/gnu/gcc/gmp/lib -lmpc -lmpfr -lgmp   -L../zlib -lz
/usr/ccs/bin/ld: Duplicate symbol "sd_iterator_start(rtx_def*, int)::null_link"
in files libbackend.a(sched-rgn.o) and libbackend.a(ddg.o)
/usr/ccs/bin/ld: Duplicate symbol "sd_iterator_start(rtx_def*, int)::null_link"
in files libbackend.a(sched-rgn.o) and libbackend.a(haifa-sched.o)
/usr/ccs/bin/ld: Duplicate symbol "sd_iterator_start(rtx_def*, int)::null_link"
in files libbackend.a(sched-rgn.o) and libbackend.a(sched-deps.o)
/usr/ccs/bin/ld: Duplicate symbol "sd_iterator_start(rtx_def*, int)::null_link"
in files libbackend.a(sched-rgn.o) and libbackend.a(sched-ebb.o)
/usr/ccs/bin/ld: Found 4 duplicate symbol(s)


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

* [Bug ipa/61659] [4.9 Regression] Extra undefined symbol because of devirtualization
  2014-06-30 15:01 [Bug c++/61659] New: Extra undefined symbol because of devirtualization rafael.espindola at gmail dot com
                   ` (31 preceding siblings ...)
  2014-09-05  2:13 ` danglin at gcc dot gnu.org
@ 2014-09-09 15:26 ` danglin at gcc dot gnu.org
  2014-09-10 14:28 ` jason at gcc dot gnu.org
                   ` (2 subsequent siblings)
  35 siblings, 0 replies; 37+ messages in thread
From: danglin at gcc dot gnu.org @ 2014-09-09 15:26 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61659

--- Comment #33 from John David Anglin <danglin at gcc dot gnu.org> ---
The issue in comment 32 was introduced in revision 214177
.


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

* [Bug ipa/61659] [4.9 Regression] Extra undefined symbol because of devirtualization
  2014-06-30 15:01 [Bug c++/61659] New: Extra undefined symbol because of devirtualization rafael.espindola at gmail dot com
                   ` (32 preceding siblings ...)
  2014-09-09 15:26 ` danglin at gcc dot gnu.org
@ 2014-09-10 14:28 ` jason at gcc dot gnu.org
  2014-09-10 15:43 ` trippels at gcc dot gnu.org
  2014-09-10 17:29 ` jason at gcc dot gnu.org
  35 siblings, 0 replies; 37+ messages in thread
From: jason at gcc dot gnu.org @ 2014-09-10 14:28 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61659

--- Comment #34 from Jason Merrill <jason at gcc dot gnu.org> ---
Author: jason
Date: Wed Sep 10 14:27:40 2014
New Revision: 215131

URL: https://gcc.gnu.org/viewcvs?rev=215131&root=gcc&view=rev
Log:
    PR lto/53808
    PR c++/61659
    * decl2.c (note_comdat_fn): New.
    (set_comdat): New.
    (cp_write_global_declarations): Call set_comdat.
    * method.c (implicitly_declare_fn): Call note_comdat_fn.
    * pt.c (tsubst_decl) [FUNCTION_DECL]: Likewise.
    * decl2.c (mark_needed): Mark clones.
    (import_export_decl): Not here.

Added:
    branches/gcc-4_9-branch/gcc/testsuite/g++.dg/abi/no-weak1.C
    branches/gcc-4_9-branch/gcc/testsuite/g++.dg/abi/spec1.C
    branches/gcc-4_9-branch/gcc/testsuite/g++.dg/opt/devirt5.C
    branches/gcc-4_9-branch/gcc/testsuite/g++.dg/template/friend56.C
    branches/gcc-4_9-branch/gcc/testsuite/g++.dg/template/spec38.C
Modified:
    branches/gcc-4_9-branch/gcc/cp/ChangeLog
    branches/gcc-4_9-branch/gcc/cp/cp-tree.h
    branches/gcc-4_9-branch/gcc/cp/decl2.c
    branches/gcc-4_9-branch/gcc/cp/method.c
    branches/gcc-4_9-branch/gcc/cp/pt.c
    branches/gcc-4_9-branch/gcc/testsuite/g++.dg/opt/devirt4.C


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

* [Bug ipa/61659] [4.9 Regression] Extra undefined symbol because of devirtualization
  2014-06-30 15:01 [Bug c++/61659] New: Extra undefined symbol because of devirtualization rafael.espindola at gmail dot com
                   ` (33 preceding siblings ...)
  2014-09-10 14:28 ` jason at gcc dot gnu.org
@ 2014-09-10 15:43 ` trippels at gcc dot gnu.org
  2014-09-10 17:29 ` jason at gcc dot gnu.org
  35 siblings, 0 replies; 37+ messages in thread
From: trippels at gcc dot gnu.org @ 2014-09-10 15:43 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61659

Markus Trippelsdorf <trippels at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|ASSIGNED                    |RESOLVED
         Resolution|---                         |FIXED

--- Comment #35 from Markus Trippelsdorf <trippels at gcc dot gnu.org> ---
Fixed.


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

* [Bug ipa/61659] [4.9 Regression] Extra undefined symbol because of devirtualization
  2014-06-30 15:01 [Bug c++/61659] New: Extra undefined symbol because of devirtualization rafael.espindola at gmail dot com
                   ` (34 preceding siblings ...)
  2014-09-10 15:43 ` trippels at gcc dot gnu.org
@ 2014-09-10 17:29 ` jason at gcc dot gnu.org
  35 siblings, 0 replies; 37+ messages in thread
From: jason at gcc dot gnu.org @ 2014-09-10 17:29 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61659

--- Comment #36 from Jason Merrill <jason at gcc dot gnu.org> ---
Author: jason
Date: Wed Sep 10 17:28:59 2014
New Revision: 215134

URL: https://gcc.gnu.org/viewcvs?rev=215134&root=gcc&view=rev
Log:
    PR c++/61659
    * decl.c (grokfndecl): Don't set DECL_COMDAT on static inlines.
    (duplicate_decls, start_decl): Likewise.
    * pt.c (check_explicit_specialization): Likewise.
    (push_template_decl_real): Or static templates.

Added:
    trunk/gcc/testsuite/g++.dg/abi/no-weak1.C
Modified:
    trunk/gcc/cp/ChangeLog
    trunk/gcc/cp/decl.c
    trunk/gcc/cp/pt.c


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

end of thread, other threads:[~2014-09-10 17:29 UTC | newest]

Thread overview: 37+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-06-30 15:01 [Bug c++/61659] New: Extra undefined symbol because of devirtualization rafael.espindola at gmail dot com
2014-06-30 15:06 ` [Bug c++/61659] " rafael.espindola at gmail dot com
2014-06-30 15:15 ` pinskia at gcc dot gnu.org
2014-06-30 15:20 ` pinskia at gcc dot gnu.org
2014-06-30 15:22 ` [Bug ipa/61659] [4.9/4.10 Regression] " trippels at gcc dot gnu.org
2014-06-30 15:26 ` rafael.espindola at gmail dot com
2014-06-30 16:20 ` jakub at gcc dot gnu.org
2014-06-30 16:42 ` hubicka at gcc dot gnu.org
2014-06-30 17:15 ` hubicka at gcc dot gnu.org
2014-06-30 20:21 ` jason at gcc dot gnu.org
2014-06-30 22:05 ` trippels at gcc dot gnu.org
2014-06-30 23:24 ` pinskia at gcc dot gnu.org
2014-07-01  5:59 ` trippels at gcc dot gnu.org
2014-07-01  7:20 ` trippels at gcc dot gnu.org
2014-07-01  8:55 ` jason at gcc dot gnu.org
2014-07-01 12:58 ` rafael.espindola at gmail dot com
2014-07-10 19:30 ` jason at gcc dot gnu.org
2014-07-16 13:29 ` jakub at gcc dot gnu.org
2014-07-30 17:27 ` jason at gcc dot gnu.org
2014-07-30 17:27 ` jason at gcc dot gnu.org
2014-07-30 17:28 ` jason at gcc dot gnu.org
2014-07-30 21:30 ` jason at gcc dot gnu.org
2014-08-12  6:14 ` amker.cheng at gmail dot com
2014-08-19 17:30 ` [Bug ipa/61659] [4.9/5 " jason at gcc dot gnu.org
2014-08-27 15:54 ` [Bug ipa/61659] [4.9 " trippels at gcc dot gnu.org
2014-09-01 12:49 ` trippels at gcc dot gnu.org
2014-09-01 13:03 ` trippels at gcc dot gnu.org
2014-09-01 16:50 ` trippels at gcc dot gnu.org
2014-09-02 15:48 ` jason at gcc dot gnu.org
2014-09-04  7:26 ` trippels at gcc dot gnu.org
2014-09-04 12:37 ` jason at gcc dot gnu.org
2014-09-04 12:39 ` jason at gcc dot gnu.org
2014-09-05  2:13 ` danglin at gcc dot gnu.org
2014-09-09 15:26 ` danglin at gcc dot gnu.org
2014-09-10 14:28 ` jason at gcc dot gnu.org
2014-09-10 15:43 ` trippels at gcc dot gnu.org
2014-09-10 17:29 ` jason at gcc dot gnu.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).