re PR c++/60955 (Erroneous warning about taking address of register with std=c++1y)
/cp 2014-12-18 Paolo Carlini <paolo.carlini@oracle.com> PR c++/60955 * pt.c (struct warning_sentinel): Move it... * cp-tree.h: ... here. * semantics.c (force_paren_expr): Use it. /testsuite 2014-12-18 Paolo Carlini <paolo.carlini@oracle.com> PR c++/60955 * g++.dg/warn/register-parm-1.C: New. From-SVN: r218871
This commit is contained in:
parent
fbe575b652
commit
6e4992ca78
|
@ -1,3 +1,10 @@
|
|||
2014-12-18 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR c++/60955
|
||||
* pt.c (struct warning_sentinel): Move it...
|
||||
* cp-tree.h: ... here.
|
||||
* semantics.c (force_paren_expr): Use it.
|
||||
|
||||
2014-12-17 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/64333
|
||||
|
|
|
@ -1149,6 +1149,18 @@ struct processing_template_decl_sentinel
|
|||
}
|
||||
};
|
||||
|
||||
/* RAII sentinel to disable certain warnings during template substitution
|
||||
and elsewhere. */
|
||||
|
||||
struct warning_sentinel
|
||||
{
|
||||
int &flag;
|
||||
int val;
|
||||
warning_sentinel(int& flag, bool suppress=true)
|
||||
: flag(flag), val(flag) { if (suppress) flag = 0; }
|
||||
~warning_sentinel() { flag = val; }
|
||||
};
|
||||
|
||||
/* The cached class binding level, from the most recently exited
|
||||
class, or NULL if none. */
|
||||
|
||||
|
|
10
gcc/cp/pt.c
10
gcc/cp/pt.c
|
@ -14438,16 +14438,6 @@ tsubst_non_call_postfix_expression (tree t, tree args,
|
|||
return t;
|
||||
}
|
||||
|
||||
/* Sentinel to disable certain warnings during template substitution. */
|
||||
|
||||
struct warning_sentinel {
|
||||
int &flag;
|
||||
int val;
|
||||
warning_sentinel(int& flag, bool suppress=true)
|
||||
: flag(flag), val(flag) { if (suppress) flag = 0; }
|
||||
~warning_sentinel() { flag = val; }
|
||||
};
|
||||
|
||||
/* Like tsubst but deals with expressions and performs semantic
|
||||
analysis. FUNCTION_P is true if T is the "F" in "F (ARGS)". */
|
||||
|
||||
|
|
|
@ -1660,6 +1660,9 @@ force_paren_expr (tree expr)
|
|||
tree type = unlowered_expr_type (expr);
|
||||
bool rval = !!(kind & clk_rvalueref);
|
||||
type = cp_build_reference_type (type, rval);
|
||||
/* This inhibits warnings in, eg, cxx_mark_addressable
|
||||
(c++/60955). */
|
||||
warning_sentinel s (extra_warnings);
|
||||
expr = build_static_cast (type, expr, tf_error);
|
||||
if (expr != error_mark_node)
|
||||
REF_PARENTHESIZED_P (expr) = true;
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2014-12-18 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR c++/60955
|
||||
* g++.dg/warn/register-parm-1.C: New.
|
||||
|
||||
2014-12-18 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* gcc.target/i386/amd64-abi-7.c: New tests.
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
// PR c++/60955
|
||||
// { dg-options "-Wextra" }
|
||||
|
||||
unsigned int erroneous_warning(register int a) {
|
||||
if ((a) & 0xff) return 1; else return 0;
|
||||
}
|
||||
unsigned int no_erroneous_warning(register int a) {
|
||||
if (a & 0xff) return 1; else return 0;
|
||||
}
|
Loading…
Reference in New Issue