diff options
author | Dodji Seketeli <dodji@redhat.com> | 2009-10-30 07:08:36 +0000 |
---|---|---|
committer | Dodji Seketeli <dodji@gcc.gnu.org> | 2009-10-30 08:08:36 +0100 |
commit | 649fb657d597922f0e0fa7647c22292a705e9859 (patch) | |
tree | b69cfae84705540c6c89b59c7c2d7c1cbe4e185d /gcc | |
parent | 1e43a145b1aa22f00f519a0096a38de8ff81e423 (diff) | |
download | gcc-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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/pt.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/sizeof12.C | 19 |
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; + } +}; |