On Sun, May 22, 2011 at 2:29 PM, Gerald Pfeifer <ger...@pfeifer.com> wrote:
> On Sun, 22 May 2011, Jack Howarth wrote:
>>> 2010-03-18  Janis Johnson  <janis...@us.ibm.com>
>>>
>>> gcc/cp
>>>      PR c++/2288
>>>      PR c++/18770
>>>      * name-lookup.h (enum scope_kind): Add sk_cond.
>>>      * name-lookup.c (pushdecl_maybe_friend): Get scope of shadowed local.
>>>      Detect and report error for redeclaration from for-init or if
>>>      or switch condition.
>>>      (begin_scope): Handle sk_cond.
>>>      * semantics.c (begin_if_stmt): Use sk_cond.
>>>      (begin switch_stmt): Ditto.
>>>
>>> gcc/testsuite/
>>>      PR c++/2288
>>>      PR c++/18770
>>>      * g++.old-deja/g++.jason/cond.C: Remove xfails.
>>>      * g++.dg/parse/pr18770.C: New test.
>> Any chance we can get this committed to gcc trunk while in 4.7 stage 1
>> (since it was already approved for 4.6 stage 1 and never applied...
>> http://gcc.gnu.org/ml/gcc-patches/2010-05/msg00264.html). It would be
>> nice to have in gcc 4.7 so that other open source projects that only
>> build against g++ would be alerted to fix their sources.
>
> It's my understanding that an approved patch can be committed by anyone
> with write access unless it is retracted or there is some other reason
> not to. Customary that is left to the submitter if she has write access,
> of course.
>

FWIW, I tried Janis's patch on 4.6 branch and I got

/export/gnu/import/git/gcc/gcc/testsuite/g++.dg/parse/pr18770.C: In
function 'void e1()':^M
/export/gnu/import/git/gcc/gcc/testsuite/g++.dg/parse/pr18770.C:29:11:
error: redeclaration of 'int k'^M
/export/gnu/import/git/gcc/gcc/testsuite/g++.dg/parse/pr18770.C:27:12:
error: 'int k' previously declared here^M
/export/gnu/import/git/gcc/gcc/testsuite/g++.dg/parse/pr18770.C: In
function 'void e4()':^M
/export/gnu/import/git/gcc/gcc/testsuite/g++.dg/parse/pr18770.C:63:11:
error: redeclaration of 'int i'^M
/export/gnu/import/git/gcc/gcc/testsuite/g++.dg/parse/pr18770.C:61:14:
error: 'int i' previously declared here^M

FAIL: g++.dg/parse/pr18770.C prev (test for errors, line 14)
FAIL: g++.dg/parse/pr18770.C redecl (test for errors, line 17)
PASS: g++.dg/parse/pr18770.C prev (test for errors, line 27)
PASS: g++.dg/parse/pr18770.C redecl (test for errors, line 29)
FAIL: g++.dg/parse/pr18770.C prev (test for errors, line 37)
FAIL: g++.dg/parse/pr18770.C redecl (test for errors, line 39)
FAIL: g++.dg/parse/pr18770.C prev (test for errors, line 47)
FAIL: g++.dg/parse/pr18770.C redecl (test for errors, line 53)
PASS: g++.dg/parse/pr18770.C prev (test for errors, line 61)
PASS: g++.dg/parse/pr18770.C redecl (test for errors, line 63)
FAIL: g++.dg/parse/pr18770.C prev (test for errors, line 71)
FAIL: g++.dg/parse/pr18770.C redecl (test for errors, line 73)
PASS: g++.dg/parse/pr18770.C (test for excess errors)

/export/gnu/import/git/gcc/gcc/testsuite/g++.old-deja/g++.jason/cond.C:
In function 'int main()':^M
/export/gnu/import/git/gcc/gcc/testsuite/g++.old-deja/g++.jason/cond.C:22:11:
error: redeclaration of 'int i'^M
/export/gnu/import/git/gcc/gcc/testsuite/g++.old-deja/g++.jason/cond.C:20:14:
error: 'int i' previously declared here^M
/export/gnu/import/git/gcc/gcc/testsuite/g++.old-deja/g++.jason/cond.C:27:11:
error: redeclaration of 'int i'^M
/export/gnu/import/git/gcc/gcc/testsuite/g++.old-deja/g++.jason/cond.C:25:14:
error: 'int i' previously declared here^M
/export/gnu/import/git/gcc/gcc/testsuite/g++.old-deja/g++.jason/cond.C:36:16:
error: types may not be defined in conditions^M
/export/gnu/import/git/gcc/gcc/testsuite/g++.old-deja/g++.jason/cond.C:39:3:
error: 'A' was not declared in this scope^M
/export/gnu/import/git/gcc/gcc/testsuite/g++.old-deja/g++.jason/cond.C:39:5:
error: expected ';' before 'bar'^M
/export/gnu/import/git/gcc/gcc/testsuite/g++.old-deja/g++.jason/cond.C:42:12:
error: types may not be defined in conditions^M
/export/gnu/import/git/gcc/gcc/testsuite/g++.old-deja/g++.jason/cond.C:42:40:
error: 'one' was not declared in this scope^M
/export/gnu/import/git/gcc/gcc/testsuite/g++.old-deja/g++.jason/cond.C:51:14:
warning: declaration of 'int f()' has 'extern' and is initialized
[enabled by default]^M
/export/gnu/import/git/gcc/gcc/testsuite/g++.old-deja/g++.jason/cond.C:51:18:
error: function 'int f()' is initialized like a variable^M
/export/gnu/import/git/gcc/gcc/testsuite/g++.old-deja/g++.jason/cond.C:55:23:
error: extended initializer lists only available with -std=c++0x or
-std=gnu++0x^M

FAIL: g++.old-deja/g++.jason/cond.C  (test for errors, line 9)
FAIL: g++.old-deja/g++.jason/cond.C  (test for errors, line 11)
FAIL: g++.old-deja/g++.jason/cond.C  (test for errors, line 16)
PASS: g++.old-deja/g++.jason/cond.C  (test for errors, line 20)
PASS: g++.old-deja/g++.jason/cond.C  (test for errors, line 22)
PASS: g++.old-deja/g++.jason/cond.C  (test for errors, line 25)
PASS: g++.old-deja/g++.jason/cond.C  (test for errors, line 27)
FAIL: g++.old-deja/g++.jason/cond.C  (test for errors, line 30)
FAIL: g++.old-deja/g++.jason/cond.C  (test for errors, line 33)
PASS: g++.old-deja/g++.jason/cond.C  (test for errors, line 36)
PASS: g++.old-deja/g++.jason/cond.C decl (test for errors, line 39)
PASS: g++.old-deja/g++.jason/cond.C exp (test for errors, line 39)
PASS: g++.old-deja/g++.jason/cond.C def (test for errors, line 42)
PASS: g++.old-deja/g++.jason/cond.C expected (test for errors, line 42)
PASS: g++.old-deja/g++.jason/cond.C extern (test for warnings, line 51)

The patch no longer catches all problems.


-- 
H.J.

Reply via email to