re PR c++/52672 (internal compiler error: in cxx_eval_indirect_ref, at cp/semantics.c:6766)

PR c++/52672
	* gcc/cp/semantics.c (cxx_fold_indirect_ref): Don't attempt to fold
	stripped child trees that are not pointer types.

From-SVN: r185989
This commit is contained in:
Meador Inge 2012-03-30 03:48:12 +00:00 committed by Jason Merrill
parent fa2d39ae13
commit 1a59ca6699
4 changed files with 21 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2012-03-29 Meador Inge <meadori@codesourcery.com>
PR c++/52672
* semantics.c (cxx_fold_indirect_ref): Don't attempt to fold
stripped child trees that are not pointer types.
2012-03-29 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/52718

View File

@ -7202,7 +7202,8 @@ cxx_fold_indirect_ref (location_t loc, tree type, tree op0, bool *empty_base)
sub = op0;
STRIP_NOPS (sub);
subtype = TREE_TYPE (sub);
gcc_assert (POINTER_TYPE_P (subtype));
if (!POINTER_TYPE_P (subtype))
return NULL_TREE;
if (TREE_CODE (sub) == ADDR_EXPR)
{

View File

@ -1,3 +1,8 @@
2012-03-29 Meador Inge <meadori@codesourcery.com>
PR c++/52672
* g++.dg/cpp0x/constexpr-52672.C: New testcase.
2012-03-29 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/52718

View File

@ -0,0 +1,8 @@
// PR c++/52672
// { dg-do compile }
// { dg-options "-std=c++11" }
typedef unsigned long * ul_ptr;
constexpr unsigned long a = *((ul_ptr)0x0); // { dg-error "" }
constexpr unsigned long b = *((ul_ptr)(*((ul_ptr)0x0))); // { dg-error "" }
constexpr unsigned long c = *((ul_ptr)*((ul_ptr)(*((ul_ptr)0x0)))); // { dg-error "" }