This does not fix any current BZ (or anything latent AFAIK) it is
just a cleanup that is in my stack. Tested on x86_64-darwin,
x86_64, powerpc64le-linux, OK for trunk/when ?
thanks
Iain
--- 8< ---
We need to view class pointers as const, which we do by wrapping
them in a view convert expression. However, we do not need to do
this if the original is already const-qualified.
gcc/cp/ChangeLog:
* parser.cc (cp_parser_late_contract_condition): Check
for const-qualified class pointer before wrapping it.
(cp_parser_contract_assert): Likewise.
(cp_parser_function_contract_specifier): Likewise.
Signed-off-by: Iain Sandoe <[email protected]>
---
gcc/cp/parser.cc | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc
index e5157cd7386..a159e9b8520 100644
--- a/gcc/cp/parser.cc
+++ b/gcc/cp/parser.cc
@@ -33574,8 +33574,8 @@ cp_parser_late_contract_condition (cp_parser *parser,
tree fn, tree contract)
/* If we have a current class object, we need to consider
it const when processing the contract condition. */
tree current_class_ref_copy = current_class_ref;
- if (flag_contracts && current_class_ref_copy)
- current_class_ref = view_as_const (current_class_ref_copy);
+ if (current_class_ref && !CP_TYPE_CONST_P (TREE_TYPE (current_class_ref)))
+ current_class_ref = view_as_const (current_class_ref);
/* Parse the condition, ensuring that parameters or the return variable
aren't flagged for use outside the body of a function. */
@@ -33682,8 +33682,8 @@ cp_parser_contract_assert (cp_parser *parser, cp_token
*token)
/* If we have a current class object, see if we need to consider
it const when processing the contract condition. */
tree current_class_ref_copy = current_class_ref;
- if (current_class_ref_copy)
- current_class_ref = view_as_const (current_class_ref_copy);
+ if (current_class_ref && !CP_TYPE_CONST_P (TREE_TYPE (current_class_ref)))
+ current_class_ref = view_as_const (current_class_ref);
/* Parse the condition. */
begin_scope (sk_contract, current_function_decl);
@@ -33848,8 +33848,8 @@ cp_parser_function_contract_specifier (cp_parser
*parser)
/* If we have a current class object, see if we need to consider
it const when processing the contract condition. */
tree current_class_ref_copy = current_class_ref;
- if (current_class_ref_copy)
- current_class_ref = view_as_const (current_class_ref_copy);
+ if (current_class_ref && !CP_TYPE_CONST_P (TREE_TYPE
(current_class_ref)))
+ current_class_ref = view_as_const (current_class_ref);
/* Parse the condition, ensuring that parameters or the return variable
aren't flagged for use outside the body of a function. */
--
2.50.1 (Apple Git-155)