Skip to content

Spurious -Wreturn-type warning with "pathological" for #38374

@llvmbot

Description

@llvmbot
Bugzilla Link 39026
Version 6.0
OS Linux
Reporter LLVM Bugzilla Contributor
CC @DougGregor

Extended Description

Consider the following code:

int foo()
{
    for (int y = 0; !y;)
        for (/*decl*/; !y; ++y)
            return 1;
}

This generates a -Wreturn-type warning, despite that the inner loop body will always execute. Moreover, with optimization enabled, the compiler does (as expected) successfully remove the loops entirely.

(This is a simplified version of a pre-C++17 with statement. The purpose of this code, which is usually a macro, is to look like the opening statement of a block, where /*decl*/ — omitted in this example — is in scope only until the end of the block. FWIW, the C++17 form, if (/*decl*/; true) does not exhibit the problem.)

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugzillaIssues migrated from bugzillac++clang:diagnosticsNew/improved warning or error message in Clang, but not in clang-tidy or static analyzerconfirmedVerified by a second partyduplicateResolved as duplicatefalse-positiveWarning fires when it should not

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions