-
Notifications
You must be signed in to change notification settings - Fork 265
Open
Labels
bugSomething isn't workingSomething isn't working
Description
If an automatic return statement is generated, e.g. for multiple return values, and the last statement is a for if loop. Then some analyzers will complain about the generated return. It is on the same line as the closing for if bracket.
The cpp2 code:
f: (x: std::vector<double>) -> (a:double, b: double) = {
a = 0.0;
b = 0.0;
for x do (cur)
if cur != 0.0 {
a += cur;
b += cur;
}
}
Is translated to:
//=== Cpp2 type declarations ====================================================
#include "cpp2util.h"
#line 1 "bug.cpp2"
//=== Cpp2 type definitions and function declarations ===========================
#line 1 "bug.cpp2"
struct f_ret { double a; double b; };
[[nodiscard]] auto f(cpp2::impl::in<std::vector<double>> x) -> f_ret;
//=== Cpp2 function definitions =================================================
#line 1 "bug.cpp2"
[[nodiscard]] auto f(cpp2::impl::in<std::vector<double>> x) -> f_ret{
cpp2::impl::deferred_init<double> a;
cpp2::impl::deferred_init<double> b;
#line 2 "bug.cpp2"
a.construct(0.0);
b.construct(0.0);
for ( auto const& cur : x )
if (cur != 0.0) {
a.value() += cur;
b.value() += cur;
}return { std::move(a.value()), std::move(b.value()) };
}
With clang++ -Wall -pedantic -Werror -std=c++23 bug.cpp -Iinclude/ -c the error is generated:
bug.cpp2:8:4: warning: misleading indentation; statement is not part of the previous 'for' [-Wmisleading-indentation]
8 | }return { std::move(a.value()), std::move(b.value()) };
| ^
bug.cpp2:4:3: note: previous statement is here
4 | for ( auto const& cur : x )
| ^
1 warning generated.
Press ENTER or type command to continue
bug.cpp2:8:4: error: misleading indentation; statement is not part of the previous 'for' [-Werror,-Wmisleading-indentation]
8 | }return { std::move(a.value()), std::move(b.value()) };
| ^
bug.cpp2:4:3: note: previous statement is here
4 | for ( auto const& cur : x )
| ^
1 error generated.
Solution
The simplest solution might be to add the omitted brackets to the for.
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working