-
Notifications
You must be signed in to change notification settings - Fork 15.2k
Closed
Labels
Description
clang-tidy's bugprone-exception-escape check doesn't work as expected on windows builds.
Consider the following file:
class Foo {};
Foo func() {
throw 1;
}
class Bar {
public:
~Bar();
};
Bar::~Bar() {
func()
}When running clang-tidy with bugprone-exception-escape, we get, as expected, the following report:
> clang-tidy -checks="bugprone-exception-escape" good.cpp
...
good.cpp:12:6: warning: an exception may be thrown in function '~Bar' which should not throw exceptions [bugprone-exception-escape]
12 | Bar::~Bar() {
Now consider the following file:
class Foo {};
Foo func() {
throw 1;
}
class Bar {
public:
~Bar();
};
Bar::~Bar() {
Foo foo = func();
(void)foo;
}When running the same command on windows we don't get any diagnostic.
On the other hand, with a macOS build we do get the expected message:
> clang-tidy -checks="bugprone-exception-escape" bad.cpp
...
bad.cpp:12:6: warning: an exception may be thrown in function '~Bar' which should not throw exceptions [bugprone-exception-escape]
12 | Bar::~Bar() {
A weird case is that if the return type of func is an integral type (e.g int) and not a class, we do get the diagnostic on windows as well:
> clang-tidy -checks="bugprone-exception-escape" bad.cpp
...
bad.cpp:10:6: warning: an exception may be thrown in function '~Bar' which should not throw exceptions [bugprone-exception-escape]
10 | Bar::~Bar() {
| ^
bad.cpp:2:5: note: frame #0: unhandled exception of type 'int' may be thrown in function 'func' here
2 | throw 1;
| ^
bad.cpp:11:15: note: frame #1: function '~Bar' calls function 'func' here
11 | int foo = func();