diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2011-05-02 12:44:15 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2011-05-02 12:44:15 +0000 |
commit | 9fd15228e24f6f1420437deeac052dd7342444a4 (patch) | |
tree | 8dee4f3319a366216196042d7a4cc15070bd5225 | |
parent | bc0fe8cb2a6ed9db82b4380e9d4b1837e97ea526 (diff) | |
download | gcc-9fd15228e24f6f1420437deeac052dd7342444a4.zip gcc-9fd15228e24f6f1420437deeac052dd7342444a4.tar.gz gcc-9fd15228e24f6f1420437deeac052dd7342444a4.tar.bz2 |
re PR c++/47969 ([C++0x] ICE: SIGSEGV in compute_array_index_type (cp/decl.c:7522))
/cp
2011-05-02 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/47969
* decl.c (compute_array_index_type): Check build_expr_type_conversion
return value for NULL_TREE.
/testsuite
2011-05-02 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/47969
* g++.dg/cpp0x/constexpr-47969.C: New.
From-SVN: r173249
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/decl.c | 11 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/constexpr-47969.C | 11 |
4 files changed, 34 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index a62cce9..d53c4b3 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2011-05-02 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/47969 + * decl.c (compute_array_index_type): Check build_expr_type_conversion + return value for NULL_TREE. + 2011-04-29 Paolo Carlini <paolo.carlini@oracle.com> PR c++/48606 diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 5bf637e..0a2e1dd 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -7609,6 +7609,17 @@ compute_array_index_type (tree name, tree size, tsubst_flags_t complain) && CLASSTYPE_LITERAL_P (type)) { size = build_expr_type_conversion (WANT_INT, size, true); + if (!size) + { + if (!(complain & tf_error)) + return error_mark_node; + if (name) + error ("size of array %qD has non-integral type %qT", + name, type); + else + error ("size of array has non-integral type %qT", type); + size = integer_one_node; + } if (size == error_mark_node) return error_mark_node; type = TREE_TYPE (size); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 02807dc..769d865 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-05-02 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/47969 + * g++.dg/cpp0x/constexpr-47969.C: New. + 2011-05-02 Ira Rosen <ira.rosen@linaro.org> PR testsuite/48498 @@ -7,7 +12,7 @@ vect_no_align targets. 2011-05-01 Xinliang David Li <davidxl@google.com> - + * gcc.dg/tree-ssa/integer-addr.c: New test. * gcc.dg/tree-ssa/alias_bug.c: New test. diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-47969.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-47969.C new file mode 100644 index 0000000..c950a36 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-47969.C @@ -0,0 +1,11 @@ +// PR c++/47969 +// { dg-options -std=c++0x } + +struct A +{ + // constexpr operator int () { return 1; } +}; + +constexpr A a = A(); + +int ar[a]; // { dg-error "has non-integral type" } |