Skip to content
This repository was 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.

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

Successfully merging this pull request may close these issues.

2 participants