re PR c++/31449 ([4.1] static_cast can remove const-ness)
PR c++/31449 * class.c (build_base_path): Ensure that the converted pointer has the same cv-qualification as the input. PR c++/31449 * g++.dg/init/const5.C: New test. From-SVN: r123679
This commit is contained in:
parent
80ae8e8ad2
commit
a607b96e80
@ -1,3 +1,9 @@
|
||||
2007-04-09 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
PR c++/31449
|
||||
* class.c (build_base_path): Ensure that the converted pointer has
|
||||
the same cv-qualification as the input.
|
||||
|
||||
2007-04-09 Paolo Carlini <pcarlini@suse.de>
|
||||
|
||||
* tree.c (cp_tree_equal): Deal with TRAIT_EXPR.
|
||||
|
@ -303,7 +303,18 @@ build_base_path (enum tree_code code,
|
||||
field, because other parts of the compiler know that such
|
||||
expressions are always non-NULL. */
|
||||
if (!virtual_access && integer_zerop (offset))
|
||||
return build_nop (build_pointer_type (target_type), expr);
|
||||
{
|
||||
tree class_type;
|
||||
/* TARGET_TYPE has been extracted from BINFO, and, is
|
||||
therefore always cv-unqualified. Extract the
|
||||
cv-qualifiers from EXPR so that the expression returned
|
||||
matches the input. */
|
||||
class_type = TREE_TYPE (TREE_TYPE (expr));
|
||||
target_type
|
||||
= cp_build_qualified_type (target_type,
|
||||
cp_type_quals (class_type));
|
||||
return build_nop (build_pointer_type (target_type), expr);
|
||||
}
|
||||
null_test = error_mark_node;
|
||||
}
|
||||
|
||||
|
@ -1,3 +1,8 @@
|
||||
2007-04-09 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
PR c++/31449
|
||||
* g++.dg/init/const5.C: New test.
|
||||
|
||||
2007-04-09 Jan Hubicka <jh@suse.cz>
|
||||
|
||||
* gcc.dg/tree-ssa/foldaddr-3.c: New file.
|
||||
|
11
gcc/testsuite/g++.dg/init/const5.C
Normal file
11
gcc/testsuite/g++.dg/init/const5.C
Normal file
@ -0,0 +1,11 @@
|
||||
// PR c++/31449
|
||||
|
||||
class Foo {};
|
||||
class Bar : public Foo {};
|
||||
static const Foo *foo = 0;
|
||||
|
||||
static Bar *bar = static_cast<const Bar*>(foo); // { dg-error "conversion" }
|
||||
|
||||
void func(const Foo *foo) {
|
||||
Bar *bar = static_cast<const Bar*>(foo); // { dg-error "conversion" }
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user