Skip to content

[clang-tidy] bugprone-exception-escape behaves weird in language versions before C++17 #165766

@ledror

Description

@ledror

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();

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions