2008/6/12 Jonathan Wakely:
> 2008/6/11 Volker Reichelt:
>> * Scopes in for-loops:
>>
>> void foo()
>> {
>> for (int i=0; i<10; ++i) {}
>> i = 0;
>> }
>>
>> warn.cc: In function 'void foo()':
>> warn.cc:4: warning: name lookup of 'i' changed for new ISO 'for' scoping
>> warn.cc:3: warning: using obsolete binding at 'i'
>
> I suggest making this a permerror and changing the text slightly, see
> http://gcc.gnu.org/ml/gcc/2008-01/msg00192.html
>
>> * Declaration with no type:
>>
>> foo() {}
>>
>> warn.cc:1: warning: ISO C++ forbids declaration of 'foo' with no type
>
> See the part about special handling of 'main' in
> http://gcc.gnu.org/ml/gcc/2008-01/msg00189.html
>
>
>> * Invalid use of 'template':
>> * Using 'struct' for a union:
>
> These two can both be fixed by changes in cp/parser.c - all cases of
> pedwarn that are not guarded by testing 'pedantic' should be
> permerrors.
Could a C++ maintainer please review this patch to turn most pedwarns
into permerrors.
This restores the previous behaviour without any switches: most
diagnostics are errors. The permerrors can be relaxed with
-fpermissive. When a warning was guarded by a test for the 'pedantic'
flag I left it as a pedwarn.
The interesting cases are:
* when 'main' is declared without a return type. I split one case into
a permerror and pedwarn.
* 'for' scoping. I removed the "new" from "new ISO 'for' scoping"
since the ISO standard is not new, and when C++0x arrives it would be
misleading.
* Should it really be a hard error for a class to declare itself as a
friend? I don't think it's expressly forbidden
e.g. class A { friend class A; };
I changed this to a permerror, restoring the old behaviour.
* I don't think the pedwarn in joust() in cp/call.c should be a
permerror, is this a GNU extension?
if (warn)
{
pedwarn ("\
ISO C++ says that these are ambiguous, even \
though the worst conversion for the first is better than \
the worst conversion for the second:");
print_z_candidate (_("candidate 1:"), w);
print_z_candidate (_("candidate 2:"), l);
}
* I don't know if these in cp/typeck.c should be permerrors, DTRT
implies not, but should tf_error be changed to tf_warning?
/* DTRT if one side is an overloaded function, but complain about it. */
if (type_unknown_p (op0))
{
tree t = instantiate_type (TREE_TYPE (op1), op0, tf_none);
if (t != error_mark_node)
{
if (complain & tf_error)
pedwarn ("assuming cast to type %qT from overloaded function",
TREE_TYPE (t));
op0 = t;
}
}
if (type_unknown_p (op1))
{
tree t = instantiate_type (TREE_TYPE (op0), op1, tf_none);
if (t != error_mark_node)
{
if (complain & tf_error)
pedwarn ("assuming cast to type %qT from overloaded function",
TREE_TYPE (t));
op1 = t;
}
}
tested linux/x86-64
Jon
permerrors.patch
Description: Binary data
