diff options
Diffstat (limited to 'gcc/cp/mangle.c')
| -rw-r--r-- | gcc/cp/mangle.c | 19 | 
1 files changed, 10 insertions, 9 deletions
| diff --git a/gcc/cp/mangle.c b/gcc/cp/mangle.c index 623fc3d..a71cc00 100644 --- a/gcc/cp/mangle.c +++ b/gcc/cp/mangle.c @@ -1788,6 +1788,16 @@ write_expression (expr)        code = TREE_CODE (expr);      } +  /* Skip NOP_EXPRs.  They can occur when (say) a pointer argument +     is converted (via qualification conversions) to another +     type.  */ +  while (TREE_CODE (expr) == NOP_EXPR +	 || TREE_CODE (expr) == NON_LVALUE_EXPR) +    { +      expr = TREE_OPERAND (expr, 0); +      code = TREE_CODE (expr); +    } +    /* Handle template parameters. */    if (code == TEMPLATE_TYPE_PARM         || code == TEMPLATE_TEMPLATE_PARM @@ -1807,15 +1817,6 @@ write_expression (expr)      {        int i; -      /* Skip NOP_EXPRs.  They can occur when (say) a pointer argument -	 is converted (via qualification conversions) to another -	 type.  */ -      while (TREE_CODE (expr) == NOP_EXPR) -	{ -	  expr = TREE_OPERAND (expr, 0); -	  code = TREE_CODE (expr); -	} -        /* When we bind a variable or function to a non-type template  	 argument with reference type, we create an ADDR_EXPR to show  	 the fact that the entity's address has been taken.  But, we | 
