aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>2003-06-12 17:22:29 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>2003-06-12 17:22:29 +0000
commit79b59cc3d3896f109992cee1bbba17ee255c334d (patch)
tree473bd45b721ac8ae4a803c92a8fb1569c7cea49f
parent54da776f2d3c23bea5223a1c6449660dfd3e803c (diff)
downloadgcc-79b59cc3d3896f109992cee1bbba17ee255c334d.zip
gcc-79b59cc3d3896f109992cee1bbba17ee255c334d.tar.gz
gcc-79b59cc3d3896f109992cee1bbba17ee255c334d.tar.bz2
re PR c++/10635 (ICE (segfault) when dereferencing an incomplete type casted from a void pointer)
PR c++/10635 * typeck.c (build_c_cast): Check that the destination type is complete. PR c++/10635 * g++.dg/expr/cast1.C: New test. [[Split portion of a mixed commit.]] From-SVN: r67840.2
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/typeck.c4
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/expr/cast1.C3
4 files changed, 18 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 7e74f47..787643c 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2003-06-12 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/10635
+ * typeck.c (build_c_cast): Check that the destination type is
+ complete.
+
2003-06-11 Mark Mitchell <mark@codesourcery.com>
PR c++/10432
diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c
index 21068b3..051d9bc 100644
--- a/gcc/cp/typeck.c
+++ b/gcc/cp/typeck.c
@@ -5189,6 +5189,10 @@ build_c_cast (type, expr)
value = convert_to_void (value, /*implicit=*/NULL);
return value;
}
+
+ if (!complete_type_or_else (type, NULL_TREE))
+ return error_mark_node;
+
/* Convert functions and arrays to pointers and
convert references to their expanded types,
but don't convert any other types. If, however, we are
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 704694a..2dcfe14 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2003-06-12 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/10635
+ * g++.dg/expr/cast1.C: New test.
+
2003-06-12 Roger Sayle <roger@eyesopen.com>
* gcc.dg/builtins-21.c: New test case.
diff --git a/gcc/testsuite/g++.dg/expr/cast1.C b/gcc/testsuite/g++.dg/expr/cast1.C
new file mode 100644
index 0000000..ee1adcc
--- /dev/null
+++ b/gcc/testsuite/g++.dg/expr/cast1.C
@@ -0,0 +1,3 @@
+struct S; // { dg-error "forward" }
+
+void f(S* p) { ((S) (*p)); } // { dg-error "" }