aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2000-12-15 11:23:26 -0500
committerJason Merrill <jason@gcc.gnu.org>2000-12-15 11:23:26 -0500
commit8d42565b847d588e6c04e9c3cd5a3157859e2c6a (patch)
tree1e9ff9723405cf4774900bf257364fd0badea45d /gcc
parentfab09a2494224143e42b78a8b4af1c318cc188cb (diff)
downloadgcc-8d42565b847d588e6c04e9c3cd5a3157859e2c6a.zip
gcc-8d42565b847d588e6c04e9c3cd5a3157859e2c6a.tar.gz
gcc-8d42565b847d588e6c04e9c3cd5a3157859e2c6a.tar.bz2
* init.c (build_new_1): Don't strip quals from type.
From-SVN: r38291
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog2
-rw-r--r--gcc/cp/init.c3
-rw-r--r--gcc/testsuite/g++.old-deja/g++.other/new5.C12
3 files changed, 14 insertions, 3 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 3143094..d92e24e 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,7 @@
2000-12-15 Jason Merrill <jason@redhat.com>
+ * init.c (build_new_1): Don't strip quals from type.
+
* decl.c (pushdecl): Don't check for linkage on a non-decl.
* call.c (build_op_delete_call): See through ARRAY_TYPEs.
diff --git a/gcc/cp/init.c b/gcc/cp/init.c
index a9360e5..7a2ce18 100644
--- a/gcc/cp/init.c
+++ b/gcc/cp/init.c
@@ -2268,9 +2268,6 @@ build_new_1 (exp)
code = has_array ? VEC_NEW_EXPR : NEW_EXPR;
- if (CP_TYPE_QUALS (type))
- type = TYPE_MAIN_VARIANT (type);
-
/* If our base type is an array, then make sure we know how many elements
it has. */
while (TREE_CODE (true_type) == ARRAY_TYPE)
diff --git a/gcc/testsuite/g++.old-deja/g++.other/new5.C b/gcc/testsuite/g++.old-deja/g++.other/new5.C
new file mode 100644
index 0000000..99f3b07
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.other/new5.C
@@ -0,0 +1,12 @@
+// Test that const-correctness is observed when using new.
+
+struct A {
+ A() { }
+ int f () { return 1; }
+ int f () const { return 0; }
+};
+
+int main ()
+{
+ return (new const A)->f ();
+}