Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

C4702: unreachable code #65

Closed
hanusek opened this issue Feb 27, 2024 · 6 comments
Closed

C4702: unreachable code #65

hanusek opened this issue Feb 27, 2024 · 6 comments

Comments

@hanusek
Copy link

hanusek commented Feb 27, 2024

Hello!
I have a problem:

C:\builds\eprotect-platfrom\auth\client\include\nonstd\expected.hpp(2142) : error C2220: the following warning is treated as an error
C:\builds\eprotect-platfrom\auth\client\include\nonstd\expected.hpp(2142) : warning C4702: unreachable code

OS: Windows 2022
Visual Studio 2022 v17.5.0

https://conan.io/center/recipes/expected-lite?version=0.6.3

@subbota-a
Copy link

Me too

@szaszm
Copy link
Contributor

szaszm commented Apr 23, 2024

How does that work? That line is a comment, there is no code there: https://github.com/martinmoene/expected-lite/blob/v0.6.3/include/nonstd/expected.hpp#L2142
Is it any different in your build directory?

@np-c0mp1ete
Copy link

Hello!

Repro:

#include "expected.hpp"

int main()
{
    nonstd::expected<int, int> ei = 0;
    return ei.value();
}

Compile using cl /O2 /W4 /WX main.cpp. expected-lite version is 0.6.3.

Output:

Microsoft (R) C/C++ Optimizing Compiler Version 19.39.33523 for x64
Copyright (C) Microsoft Corporation.  All rights reserved.

main.cpp
C:\test\expected.hpp(1803) : error C2220: the following warning is treated as an error
C:\test\expected.hpp(1803) : warning C4702: unreachable code

@martinmoene
Copy link
Owner

On Compiler Explorer:

  • MSVC v19.latest: -O2 -W4 -WX -Dnsel_CONFIG_SELECT_EXPECTED=nsel_EXPECTED_NONSTD: C4702: unreachable code.
  • clang 18.1.0: -O2 -Wall -Wunreachable-code-aggressive -Dnsel_CONFIG_SELECT_EXPECTED=nsel_EXPECTED_NONSTD: no warning.

I'm not sure what to think of MSVC's warning.

@szaszm
Copy link
Contributor

szaszm commented May 29, 2024

Ah, at first I thought line 2142 is with the 0.6.3 release branch, but apparently it's on master, so there is actual code there. So the correct reference is

Maybe MSVC doesn't like the value() call next to the comma operator after rethrow, which is actually unreachable. Maybe a random throw expression instead of value() call would silence it, but I can't test this now.

A few other wrong ideas I had:

  • immediately invoked lambda that calls rethrow, and lies about its return type. That would produce another warning about the function not returning anything, because rethrow is not actually throwing.
  • changing rethrow to lie that its return type is value_type&. That would generate a similar warning inside rethrow, because it doesn't return that type, nor does it throw. assert and RaiseException look like normal function calls to the control flow analyzer.
  • change to an if statement. This wouldn't work with C++11 compilers in constexpr context.

@martinmoene
Copy link
Owner

Thanks for your helpful thoughts to advance this issue.

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

No branches or pull requests

5 participants