mirror of git://gcc.gnu.org/git/gcc.git
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>
|
2014-12-17 Jason Merrill <jason@redhat.com>
|
||||||
|
|
||||||
PR c++/64333
|
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
|
/* The cached class binding level, from the most recently exited
|
||||||
class, or NULL if none. */
|
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;
|
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
|
/* Like tsubst but deals with expressions and performs semantic
|
||||||
analysis. FUNCTION_P is true if T is the "F" in "F (ARGS)". */
|
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);
|
tree type = unlowered_expr_type (expr);
|
||||||
bool rval = !!(kind & clk_rvalueref);
|
bool rval = !!(kind & clk_rvalueref);
|
||||||
type = cp_build_reference_type (type, rval);
|
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);
|
expr = build_static_cast (type, expr, tf_error);
|
||||||
if (expr != error_mark_node)
|
if (expr != error_mark_node)
|
||||||
REF_PARENTHESIZED_P (expr) = true;
|
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>
|
2014-12-18 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
* gcc.target/i386/amd64-abi-7.c: New tests.
|
* 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