aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>1999-04-30 16:07:03 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>1999-04-30 16:07:03 +0000
commit3fd91cbd4fe2bcfb7d2db25fe2c2cc2ec2d271b2 (patch)
tree7ae92029391dc88c026aeb51b4391e6c90048e32
parentb694131f2148f12620e266ab692e484132479dd9 (diff)
downloadgcc-3fd91cbd4fe2bcfb7d2db25fe2c2cc2ec2d271b2.zip
gcc-3fd91cbd4fe2bcfb7d2db25fe2c2cc2ec2d271b2.tar.gz
gcc-3fd91cbd4fe2bcfb7d2db25fe2c2cc2ec2d271b2.tar.bz2
typeck.c (build_const_cast): Tweak last change to handle templates correctly.
* typeck.c (build_const_cast): Tweak last change to handle templates correctly. From-SVN: r26712
-rw-r--r--gcc/cp/ChangeLog3
-rw-r--r--gcc/cp/typeck.c16
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/cast1.C7
3 files changed, 18 insertions, 8 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 3bb29de..584c971 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,8 @@
1999-04-30 Mark Mitchell <mark@codesourcery.com>
+ * typeck.c (build_const_cast): Tweak last change to handle
+ templates correctly.
+
* typeck.c (build_const_cast): Disallow use of const_cast to
anything but a pointer or reference type.
diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c
index c01131a..ad7f552 100644
--- a/gcc/cp/typeck.c
+++ b/gcc/cp/typeck.c
@@ -5633,14 +5633,6 @@ 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);
@@ -5651,6 +5643,14 @@ build_const_cast (type, expr)
return t;
}
+ 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 (type) != REFERENCE_TYPE)
{
expr = decay_conversion (expr);
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/cast1.C b/gcc/testsuite/g++.old-deja/g++.pt/cast1.C
new file mode 100644
index 0000000..e37b169
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.pt/cast1.C
@@ -0,0 +1,7 @@
+// Build don't link:
+// Origin: Mark Mitchell <mark@codesourcery.com>
+
+template <class T>
+void f (T t) {
+ const_cast<T>(t);
+}