aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp/repo.c
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2007-12-09 22:26:29 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2007-12-09 22:26:29 +0100
commit23372b3faa69cba81f23504e56a56c9bbdb48166 (patch)
tree2e8a54c441e89ce480be1ab17f54a52611672c65 /gcc/cp/repo.c
parent799a6e360249a55a9b745e5ece49326480072a79 (diff)
downloadgcc-23372b3faa69cba81f23504e56a56c9bbdb48166.zip
gcc-23372b3faa69cba81f23504e56a56c9bbdb48166.tar.gz
gcc-23372b3faa69cba81f23504e56a56c9bbdb48166.tar.bz2
re PR c++/34178 (Compilation using -frepo fails)
PR c++/34178 PR c++/34340 * repo.c (repo_emit_p): Return 2 for DECL_INTEGRAL_CONSTANT_VAR_P in class scope rather than DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P. Return 2 also if DECL_EXPLICIT_INSTANTIATION. * decl2.c (import_export_decl): Don't make VAR_DECLs import_p when flag_use_repository and repo_emit_p returned 2. * g++.dg/template/repo6.C: New test. * g++.dg/template/repo7.C: New test. * g++.dg/template/repo8.C: New test. From-SVN: r130727
Diffstat (limited to 'gcc/cp/repo.c')
-rw-r--r--gcc/cp/repo.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/gcc/cp/repo.c b/gcc/cp/repo.c
index 624d6d7..1fe96a2 100644
--- a/gcc/cp/repo.c
+++ b/gcc/cp/repo.c
@@ -304,16 +304,19 @@ repo_emit_p (tree decl)
&& (!TYPE_LANG_SPECIFIC (type)
|| !CLASSTYPE_TEMPLATE_INSTANTIATION (type)))
return 2;
- /* Static data members initialized by constant expressions must
+ /* Const static data members initialized by constant expressions must
be processed where needed so that their definitions are
available. */
- if (DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl)
+ if (DECL_INTEGRAL_CONSTANT_VAR_P (decl)
&& DECL_CLASS_SCOPE_P (decl))
return 2;
}
else if (!DECL_TEMPLATE_INSTANTIATION (decl))
return 2;
+ if (DECL_EXPLICIT_INSTANTIATION (decl))
+ return 2;
+
/* For constructors and destructors, the repository contains
information about the clones -- not the original function --
because only the clones are emitted in the object file. */