* call.c (perform_implicit_conversion_flags): Remove earlier kludge.
* parser.c (cp_parser_omp_for_loop): Use cp_parser_omp_for_incr
in templates even if decl isn't type-dependent.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@182175
138bc75d-0d04-0410-961f-
82ee72b054a4
+2011-12-09 Jason Merrill <jason@redhat.com>
+
+ PR c++/51151
+ * call.c (perform_implicit_conversion_flags): Remove earlier kludge.
+ * parser.c (cp_parser_omp_for_loop): Use cp_parser_omp_for_incr
+ in templates even if decl isn't type-dependent.
+
2011-12-09 Dodji Seketeli <dodji@redhat.com>
PR c++/51289
}
expr = error_mark_node;
}
- else if (processing_template_decl
- /* As a kludge, we always perform conversions between scalar
- types, as IMPLICIT_CONV_EXPR confuses c_finish_omp_for. */
- && !(SCALAR_TYPE_P (type) && SCALAR_TYPE_P (TREE_TYPE (expr))))
+ else if (processing_template_decl && conv->kind != ck_identity)
{
/* In a template, we are only concerned about determining the
type of non-dependent expressions, so we do not have to
/* If decl is an iterator, preserve the operator on decl
until finish_omp_for. */
if (decl
- && ((type_dependent_expression_p (decl)
+ && ((processing_template_decl
&& !POINTER_TYPE_P (TREE_TYPE (decl)))
|| CLASS_TYPE_P (TREE_TYPE (decl))))
incr = cp_parser_omp_for_incr (parser, decl);
+2011-12-09 Jason Merrill <jason@redhat.com>
+
+ PR c++/51151
+ * g++.dg/warn/Woverflow-4.C: New.
+
2011-12-09 Dodji Seketeli <dodji@redhat.com>
PR c++/51289
--- /dev/null
+// PR c++/51151
+// { dg-options "-Wshadow" }
+
+template<typename T> class C {
+public:
+ void f() {
+ m = c2 + 1;
+ }
+ static const long unsigned int c1 = 7;
+ static const int c2 = c1 - 1;
+ int m;
+};
+template class C<int>;