https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89616

Michael Kashkarov <fruitclover at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |fruitclover at gmail dot com

--- Comment #1 from Michael Kashkarov <fruitclover at gmail dot com> ---
Created attachment 45954
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=45954&action=edit
patch

Possible fix is attached (bootstraps x86_64), detects the following case:

 1 void foo(int x){
*2    void x();
 3 }

but not sure if the following redefinition is legal (compiles with gcc/clang):

 1 class C {
 2   int x;
 3 public:
 4   C(int);
 5 };
 6 
 7 C::C(int x) try : x(1) {
*8     void x();
 9 } catch (...) {}

from [basic.scope.param]:
... A parameter name shall not be redeclared in the outermost block of the
function definition nor in the outermost block of any handler associated with a
function-try-block.

Reply via email to