From: Mark Mitchell Date: Fri, 30 Apr 1999 12:17:10 +0000 (+0000) Subject: typeck.c (build_const_cast): Disallow use of const_cast to anything but a pointer... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b2ef49c88b09762a9bb560fec6ea0ce0d3ab879f;p=gcc.git typeck.c (build_const_cast): Disallow use of const_cast to anything but a pointer or reference type. * typeck.c (build_const_cast): Disallow use of const_cast to anything but a pointer or reference type. From-SVN: r26708 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index a6dec3a88fb..3bb29de5a56 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +1999-04-30 Mark Mitchell + + * typeck.c (build_const_cast): Disallow use of const_cast to + anything but a pointer or reference type. + 1999-04-30 Nathan Sidwell * decl.c (cp_finish_decl): Don't permit arrays of abstract or diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index 0053f1d9504..c01131adec3 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -5633,6 +5633,14 @@ build_const_cast (type, expr) if (type == error_mark_node || expr == error_mark_node) return error_mark_node; + if (!POINTER_TYPE_P (type) && !TYPE_PTRMEMFUNC_P (type)) + { + cp_error ("`%T' is not a pointer, reference, or pointer-to-member type", + type); + cp_error ("as required by const_cast"); + return error_mark_node; + } + if (TREE_CODE (expr) == OFFSET_REF) expr = resolve_offset_ref (expr); diff --git a/gcc/testsuite/g++.old-deja/g++.other/cast2.C b/gcc/testsuite/g++.old-deja/g++.other/cast2.C new file mode 100644 index 00000000000..cd496405c53 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.other/cast2.C @@ -0,0 +1,11 @@ +// Build don't link: +// Origin: Mark Mitchell + +struct A { +}; + +int main() +{ + A a; + const_cast(a); // ERROR - const_cast requires pointer/ref types +}