aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPaolo Carlini <paolo.carlini@oracle.com>2011-05-02 12:44:15 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2011-05-02 12:44:15 +0000
commit9fd15228e24f6f1420437deeac052dd7342444a4 (patch)
tree8dee4f3319a366216196042d7a4cc15070bd5225 /gcc
parentbc0fe8cb2a6ed9db82b4380e9d4b1837e97ea526 (diff)
downloadgcc-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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/decl.c11
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-47969.C11
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" }