diff options
author | Richard Biener <rguenther@suse.de> | 2015-08-05 10:01:12 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2015-08-05 10:01:12 +0000 |
commit | cd583fe1808bbe2d06cc55b8213e2c39a66f200f (patch) | |
tree | 53511daa81e693968df0d7e86d363655d0df7df2 /gcc | |
parent | f4904740e728f10edfe9fc996cf5dc0178db46a4 (diff) | |
download | gcc-cd583fe1808bbe2d06cc55b8213e2c39a66f200f.zip gcc-cd583fe1808bbe2d06cc55b8213e2c39a66f200f.tar.gz gcc-cd583fe1808bbe2d06cc55b8213e2c39a66f200f.tar.bz2 |
re PR tree-optimization/67055 (Segmentation fault in fold_builtin_alloca_with_align in tree-ssa-ccp.c)
2015-08-05 Richard Biener <rguenther@suse.de>
PR tree-optimization/67055
* tree-ssa-ccp.c (fold_builtin_alloca_with_align): Handle
NULL gimple_block.
* g++.dg/torture/pr67055.C: New testcase.
From-SVN: r226616
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/torture/pr67055.C | 44 | ||||
-rw-r--r-- | gcc/tree-ssa-ccp.c | 1 |
4 files changed, 58 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f6717cd..ff02e19 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2015-08-05 Richard Biener <rguenther@suse.de> + + PR tree-optimization/67055 + * tree-ssa-ccp.c (fold_builtin_alloca_with_align): Handle + NULL gimple_block. + + * g++.dg/torture/pr67055.C: New testcase. + 2015-08-05 Kirill Yukhin <kirill.yukhin@intel.com> * config/i386/i386.md (define_attr "isa"): Addd avx512vl and diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 82aa267..e7e74a3 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2015-08-05 Richard Biener <rguenther@suse.de> + PR tree-optimization/67055 + * g++.dg/torture/pr67055.C: New testcase. + +2015-08-05 Richard Biener <rguenther@suse.de> + PR tree-optimization/67109 * gcc.dg/torture/pr67109.c: New testcase. * gcc.dg/vect/vect-119.c: Adjust. diff --git a/gcc/testsuite/g++.dg/torture/pr67055.C b/gcc/testsuite/g++.dg/torture/pr67055.C new file mode 100644 index 0000000..7cbbca2 --- /dev/null +++ b/gcc/testsuite/g++.dg/torture/pr67055.C @@ -0,0 +1,44 @@ +// { dg-do compile } +// { dg-additional-options "-std=c++14" } + +namespace std { + typedef __SIZE_TYPE__ size_t; + struct nothrow_t; +} +namespace vespamalloc { + void fn1(void *); + template <typename> class A { + public: + static unsigned long fillStack(unsigned long); + }; + template <typename StackRep> + unsigned long A<StackRep>::fillStack(unsigned long p1) { + void *retAddr[p1]; + fn1(retAddr); + } + class B { + protected: + B(void *); + }; + template <int StackTraceLen> class D : B { + public: + D() : B(0) {} + void alloc(int) { A<int>::fillStack(StackTraceLen); } + }; + template <typename, typename> class C { + public: + void *malloc(unsigned long); + }; + template <typename MemBlockPtrT, typename ThreadListT> + void *C<MemBlockPtrT, ThreadListT>::malloc(unsigned long) { + MemBlockPtrT mem; + mem.alloc(0); + } + C<D<16>, int> *_GmemP; +} +void *operator new(std::size_t, std::nothrow_t &) noexcept { + return vespamalloc::_GmemP->malloc(0); +} +void *operator new[](std::size_t, std::nothrow_t &) noexcept { + return vespamalloc::_GmemP->malloc(0); +} diff --git a/gcc/tree-ssa-ccp.c b/gcc/tree-ssa-ccp.c index a18caa1..398ddc1 100644 --- a/gcc/tree-ssa-ccp.c +++ b/gcc/tree-ssa-ccp.c @@ -2107,6 +2107,7 @@ fold_builtin_alloca_with_align (gimple stmt) as a declared array, so we allow a larger size. */ block = gimple_block (stmt); if (!(cfun->after_inlining + && block && TREE_CODE (BLOCK_SUPERCONTEXT (block)) == FUNCTION_DECL)) threshold /= 10; if (size > threshold) |