re PR c++/64521 (ICE with -frepo)
PR c++/64521 * repo.c (repo_emit_p): It's OK for a clone to be extern at this point. From-SVN: r220251
This commit is contained in:
parent
52d285303c
commit
e1ef8aa939
3 changed files with 42 additions and 1 deletions
|
@ -1,3 +1,9 @@
|
|||
2015-01-29 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/64521
|
||||
* repo.c (repo_emit_p): It's OK for a clone to be extern at this
|
||||
point.
|
||||
|
||||
2015-01-27 Caroline Tice <cmtice@google.com>
|
||||
|
||||
Committing VTV Cywin/Ming patch for Patrick Wollgast
|
||||
|
|
|
@ -302,7 +302,11 @@ repo_emit_p (tree decl)
|
|||
int ret = 0;
|
||||
gcc_assert (TREE_PUBLIC (decl));
|
||||
gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
|
||||
gcc_assert (!DECL_REALLY_EXTERN (decl));
|
||||
gcc_assert (!DECL_REALLY_EXTERN (decl)
|
||||
/* A clone might not have its linkage flags updated yet
|
||||
because we call import_export_decl before
|
||||
maybe_clone_body. */
|
||||
|| DECL_ABSTRACT_ORIGIN (decl));
|
||||
|
||||
/* When not using the repository, emit everything. */
|
||||
if (!flag_use_repository)
|
||||
|
|
31
gcc/testsuite/g++.dg/template/repo11.C
Normal file
31
gcc/testsuite/g++.dg/template/repo11.C
Normal file
|
@ -0,0 +1,31 @@
|
|||
// PR c++/64521
|
||||
// { dg-options "-frepo -std=c++11" }
|
||||
// { dg-require-host-local "" }
|
||||
// { dg-skip-if "dkms are not final links" { vxworks_kernel } }
|
||||
// { dg-final cleanup-repo-files }
|
||||
|
||||
template <typename H> struct J { J(H) {} };
|
||||
template <unsigned long, typename...> struct K;
|
||||
template <unsigned long I> struct K<I> {};
|
||||
template <unsigned long I, typename H, typename... T>
|
||||
struct K<I, H, T...> : K<I + 1, T...>, J<H> {
|
||||
K(const H &p1, const T &... p2) : K<I + 1, T...>(p2...), J<H>(p1) {}
|
||||
};
|
||||
template <typename... E> struct C : K<0, E...> {
|
||||
C(const E &... p1) : K<0, E...>(p1...) {}
|
||||
};
|
||||
template <typename> struct A {
|
||||
A() = default;
|
||||
};
|
||||
struct M;
|
||||
template <typename> struct L {
|
||||
struct B {
|
||||
template <typename> static M *__test(...);
|
||||
typedef A<int> _Del;
|
||||
typedef decltype(__test<_Del>()) type;
|
||||
};
|
||||
C<typename B::type, A<M>> _M_t;
|
||||
L(typename B::type) : _M_t(0, A<M>()) {}
|
||||
};
|
||||
struct M {};
|
||||
int main() { L<int>(new M); }
|
Loading…
Add table
Reference in a new issue