aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2003-04-15 12:26:03 -0400
committerJason Merrill <jason@gcc.gnu.org>2003-04-15 12:26:03 -0400
commitac5f3b67630b6d6d70016765d9ad4f1a66815f51 (patch)
treeb76ca17abfd94a33323b572bafa5ec922118b64d
parent7344f3d75bffdd2372e2a24101f7e48de44af2f3 (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/cp/decl2.c7
-rw-r--r--gcc/testsuite/g++.dg/template/sizeof3.C13
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));
+}