aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDodji Seketeli <dodji@redhat.com>2009-10-30 07:08:36 +0000
committerDodji Seketeli <dodji@gcc.gnu.org>2009-10-30 08:08:36 +0100
commit649fb657d597922f0e0fa7647c22292a705e9859 (patch)
treeb69cfae84705540c6c89b59c7c2d7c1cbe4e185d
parent1e43a145b1aa22f00f519a0096a38de8ff81e423 (diff)
downloadgcc-649fb657d597922f0e0fa7647c22292a705e9859.zip
gcc-649fb657d597922f0e0fa7647c22292a705e9859.tar.gz
gcc-649fb657d597922f0e0fa7647c22292a705e9859.tar.bz2
re PR c++/41863 (segfault with sizeof in template parameter)
Fix PR c++/41863 gcc/cp/ChangeLog: PR c++/41863 * pt.c (iterative_hash_template_arg): articifial parms don't have DECL_PARM_INDEX set. Do not hash it. gcc/testsuite/ChangeLog: PR c++/41863 * g++.dg/template/sizeof12.C: New test. From-SVN: r153735
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/pt.c3
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/template/sizeof12.C19
4 files changed, 32 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 4aec66a..6367f51 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2009-10-30 Dodji Seketeli <dodji@redhat.com>
+
+ PR c++/41863
+ * pt.c (iterative_hash_template_arg): articifial parms
+ don't have DECL_PARM_INDEX set. Do not hash it.
+
2009-10-28 Jerry Quinn <jlquinn@optonline.net>
* mangle.c (mangle_type_string_for_rtti): Revert r149964.
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index ace340e..9983a95 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -1501,7 +1501,8 @@ iterative_hash_template_arg (tree arg, hashval_t val)
}
case PARM_DECL:
- val = iterative_hash_object (DECL_PARM_INDEX (arg), val);
+ if (!DECL_ARTIFICIAL (arg))
+ val = iterative_hash_object (DECL_PARM_INDEX (arg), val);
return iterative_hash_template_arg (TREE_TYPE (arg), val);
case TARGET_EXPR:
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 044dd74..0df4a2f 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2009-10-30 Dodji Seketeli <dodji@redhat.com>
+
+ PR c++/41863
+ * g++.dg/template/sizeof12.C: New test.
+
2009-10-29 Eric Botcazou <ebotcazou@adacore.com>
* gnat.dg/pack14.adb: New test.
diff --git a/gcc/testsuite/g++.dg/template/sizeof12.C b/gcc/testsuite/g++.dg/template/sizeof12.C
new file mode 100644
index 0000000..e165d2a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/sizeof12.C
@@ -0,0 +1,19 @@
+// Contributed by Dodji Seketeli <dodji@redhat.com>
+// Origin PR c++/41863
+
+template<int X>
+struct Bar
+{
+};
+
+template<typename T>
+class Foo
+{
+ T m_foo;
+
+ void
+ crash()
+ {
+ Bar<sizeof(m_foo)> bar;
+ }
+};