Skip to content
This repository has been archived by the owner on Nov 6, 2022. It is now read-only.

MSVC Error C2220: p hides prev. local declaration #439

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

lx-s
Copy link

@lx-s lx-s commented Jul 19, 2018

MSVC build output (with /W4 and TreatWarningsAsErrors=Yes)

2>http_parser.c
2>c:\dev\...\http_parser\http_parser.c(2389,18): error C2220:  warning treated as error - no 'object' file generated
2>c:\dev\...\http_parser\http_parser.c(2389,18): error C2220:     const char* p;
2>c:\dev\...\http_parser\http_parser.c(2389,18): error C2220:                  ^
2>c:\dev\...\http_parser\http_parser.c(2389,18): warning C4456:  declaration of 'p' hides previous local declaration
2>c:\dev\...\http_parser\http_parser.c(2389,18): warning C4456:     const char* p;
2>c:\dev\...\http_parser\http_parser.c(2389,18): warning C4456:                  ^
2>c:\dev\...\http_parser\http_parser.c(2302,15): message :  see declaration of 'p'
2>c:\dev\...\http_parser\http_parser.c(2302,15): message :   const char *p;
2>c:\dev\...\http_parser\http_parser.c(2302,15): message :      

(Line numbers don't match with current master since I've noticed the build-error when using 2.8.1)

To fix this build-error I removed const char* p;-declaration as it is already declared right at

http_parser_parse_url(const char *buf, size_t buflen, int is_connect,
                      struct http_parser_url *u)
{
  enum state s;
  const char *p; // <-----

Since the removed const char* p within the if-statement is first used in line 2420 for (p= buf + off where it gets immediately assigned a new value, the removal should be completely harmless.

MSVC build output (with `/W4` and `TreatWarningsAsErrors=Yes`)
```
2>http_parser.c
2>c:\dev\...\http_parser\http_parser.c(2389,18): error C2220:  warning treated as error - no 'object' file generated
2>c:\dev\...\http_parser\http_parser.c(2389,18): error C2220:     const char* p;
2>c:\dev\...\http_parser\http_parser.c(2389,18): error C2220:                  ^
2>c:\dev\...\http_parser\http_parser.c(2389,18): warning C4456:  declaration of 'p' hides previous local declaration
2>c:\dev\...\http_parser\http_parser.c(2389,18): warning C4456:     const char* p;
2>c:\dev\...\http_parser\http_parser.c(2389,18): warning C4456:                  ^
2>c:\dev\...\http_parser\http_parser.c(2302,15): message :  see declaration of 'p'
2>c:\dev\...\http_parser\http_parser.c(2302,15): message :   const char *p;
2>c:\dev\...\http_parser\http_parser.c(2302,15): message :      
```
(Line numbers don't match with current master since I've noticed the build-error when using 2.8.1)

To fix this build-error I removed `const char* p;`-declaration as it is already declared right at
```c
http_parser_parse_url(const char *buf, size_t buflen, int is_connect,
                      struct http_parser_url *u)
{
  enum state s;
  const char *p;
```
Since the removed `const char* p` within the if-statement is first used in line 2420 `for (p= buf + off` where it gets immediately assigned a new value, the removal should be completely harmless.
@gatzka
Copy link
Contributor

gatzka commented Aug 20, 2018

Would be great to have this merged. I ran into the same problem using gcc with -Wshadow.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants