diff options
author | mmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-10-28 21:37:21 +0000 |
---|---|---|
committer | mmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4> | 2000-10-28 21:37:21 +0000 |
commit | 0d2ee68b2534e7ab8a3fa9eaec045779bd9cd4b0 (patch) | |
tree | f9b766c10d56911ec3d339018173bc602fa170fb /gcc | |
parent | 0f23ed1d75cda49b50f255533c50589a079c99a7 (diff) | |
download | gcc-0d2ee68b2534e7ab8a3fa9eaec045779bd9cd4b0.tar.gz |
* pt.c (instantiate_decl): Always instantiate static data members
initialized in-class.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@37107 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/pt.c | 11 | ||||
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.other/instan1.C | 24 |
3 files changed, 34 insertions, 6 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 7cd501f9541..21d670c7663 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2000-10-28 Mark Mitchell <mark@codesourcery.com> + + * pt.c (instantiate_decl): Always instantiate static data members + initialized in-class. + 2000-10-27 Zack Weinberg <zack@wolery.stanford.edu> * Make-lang.in: Move all build rules here from Makefile.in, diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index f7e27ce5d02..8ca2468a0b2 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -9614,12 +9614,6 @@ instantiate_decl (d, defer_ok) import_export_decl (d); } - /* Reject all external templates except inline functions. */ - if (DECL_INTERFACE_KNOWN (d) - && ! DECL_NOT_REALLY_EXTERN (d) - && ! (TREE_CODE (d) == FUNCTION_DECL && DECL_INLINE (d))) - goto out; - /* We need to set up DECL_INITIAL regardless of pattern_defined if the variable is a static const initialized in the class body. */ if (TREE_CODE (d) == VAR_DECL @@ -9627,6 +9621,11 @@ instantiate_decl (d, defer_ok) && DECL_INITIAL (d) == NULL_TREE && DECL_INITIAL (code_pattern) != NULL_TREE) ; + /* Reject all external templates except inline functions. */ + else if (DECL_INTERFACE_KNOWN (d) + && ! DECL_NOT_REALLY_EXTERN (d) + && ! (TREE_CODE (d) == FUNCTION_DECL && DECL_INLINE (d))) + goto out; /* Defer all other templates, unless we have been explicitly forbidden from doing so. We restore the source position here because it's used by add_pending_template. */ diff --git a/gcc/testsuite/g++.old-deja/g++.other/instan1.C b/gcc/testsuite/g++.old-deja/g++.other/instan1.C new file mode 100644 index 00000000000..87c966d1cd0 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.other/instan1.C @@ -0,0 +1,24 @@ +// Build don't run: +// Origin: Mark Mitchell <mark@codesourcery.com> +// Special g++ Options: -fno-implicit-templates + +template <class T> +struct U { + static int j; +}; + +template <class T> +struct S { + static const int i = 7; +}; + +template <class T> +const int S<T>::i; + +template <class T> +int U<T>::j = S<T>::i + 5; + +template int U<double>::j; + +int main () { +} |