diff options
author | Jason Merrill <jason@redhat.com> | 2003-04-15 12:26:03 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2003-04-15 12:26:03 -0400 |
commit | ac5f3b67630b6d6d70016765d9ad4f1a66815f51 (patch) | |
tree | b76ca17abfd94a33323b572bafa5ec922118b64d | |
parent | 7344f3d75bffdd2372e2a24101f7e48de44af2f3 (diff) | |
download | gcc-ac5f3b67630b6d6d70016765d9ad4f1a66815f51.zip gcc-ac5f3b67630b6d6d70016765d9ad4f1a66815f51.tar.gz gcc-ac5f3b67630b6d6d70016765d9ad4f1a66815f51.tar.bz2 |
decl2.c (mark_used): Don't instantiate anything if skip_evaluation.
* decl2.c (mark_used): Don't instantiate anything if
skip_evaluation.
From-SVN: r65642
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/decl2.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/sizeof3.C | 13 |
3 files changed, 21 insertions, 4 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 281f83a..3c1055b 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2003-04-15 Jason Merrill <jason@redhat.com> + + * decl2.c (mark_used): Don't instantiate anything if + skip_evaluation. + 2003-04-14 Ziemowit Laski <zlaski@apple.com> * tree.c (build_cplus_array_type_1): Do not call diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index 57050d7..80c7561 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -4536,16 +4536,15 @@ void mark_used (tree decl) { TREE_USED (decl) = 1; - if (processing_template_decl) + if (processing_template_decl || skip_evaluation) return; if (TREE_CODE (decl) == FUNCTION_DECL && DECL_DECLARED_INLINE_P (decl) && !TREE_ASM_WRITTEN (decl)) /* Remember it, so we can check it was defined. */ defer_fn (decl); - - if (!skip_evaluation) - assemble_external (decl); + + assemble_external (decl); /* Is it a synthesized method that needs to be synthesized? */ if (TREE_CODE (decl) == FUNCTION_DECL diff --git a/gcc/testsuite/g++.dg/template/sizeof3.C b/gcc/testsuite/g++.dg/template/sizeof3.C new file mode 100644 index 0000000..a98bbc3 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/sizeof3.C @@ -0,0 +1,13 @@ +// The call to f is not potentially evaluated (3.2), so f<int> is not used, +// so it should not be instantiated. + +template <class T> +T f (T) +{ + typename T::X x; +} + +int main() +{ + int i = sizeof (f(0)); +} |