Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(339)

Issue 1943443002: If an if or do statement always exits, following statements are dead. (Closed)

Created:
4 years, 7 months ago by srawlins
Modified:
4 years, 7 months ago
CC:
reviews_dartlang.org
Base URL:
git@github.com:dart-lang/sdk.git@master
Target Ref:
refs/heads/master
Visibility:
Public.

Description

If an if or do statement always exits, following statements are dead. BUG=https://github.com/dart-lang/sdk/issues/16420 R=brianwilkerson@google.com Committed: https://github.com/dart-lang/sdk/commit/d7833e1c1f418bf602d0b9faec7bc868daa55cde

Patch Set 1 #

Patch Set 2 : Add tests #

Total comments: 4

Patch Set 3 : Use ExitDetector better #

Patch Set 4 : Fix comment #

Total comments: 2

Patch Set 5 : test_ prefixes #

Unified diffs Side-by-side diffs Delta from patch set Stats (+41 lines, -10 lines) Patch
M pkg/analyzer/lib/src/generated/resolver.dart View 1 2 3 1 chunk +11 lines, -8 lines 0 comments Download
M pkg/analyzer/test/generated/hint_code_test.dart View 1 2 3 4 3 chunks +17 lines, -2 lines 0 comments Download
M pkg/analyzer/test/generated/non_hint_code_test.dart View 1 2 1 chunk +13 lines, -0 lines 0 comments Download

Messages

Total messages: 13 (3 generated)
srawlins
4 years, 7 months ago (2016-05-04 17:00:54 UTC) #2
srawlins
I've performed a small performance analysis. This does not seem to slow down warning analysis. ...
4 years, 7 months ago (2016-05-04 17:01:22 UTC) #3
Brian Wilkerson
I'm open to counter arguments if you disagree with me. https://codereview.chromium.org/1943443002/diff/20001/pkg/analyzer/lib/src/generated/resolver.dart File pkg/analyzer/lib/src/generated/resolver.dart (right): https://codereview.chromium.org/1943443002/diff/20001/pkg/analyzer/lib/src/generated/resolver.dart#newcode2071 ...
4 years, 7 months ago (2016-05-04 17:28:19 UTC) #4
srawlins
Thanks Brian! Simplified, and two failing_ tests are now not failing! https://codereview.chromium.org/1943443002/diff/20001/pkg/analyzer/lib/src/generated/resolver.dart File pkg/analyzer/lib/src/generated/resolver.dart (right): ...
4 years, 7 months ago (2016-05-19 18:36:44 UTC) #5
Brian Wilkerson
lgtm after test method names are fixed https://codereview.chromium.org/1943443002/diff/60001/pkg/analyzer/test/generated/hint_code_test.dart File pkg/analyzer/test/generated/hint_code_test.dart (right): https://codereview.chromium.org/1943443002/diff/60001/pkg/analyzer/test/generated/hint_code_test.dart#newcode24 pkg/analyzer/test/generated/hint_code_test.dart:24: void deadCode_statementAfterRethrow() ...
4 years, 7 months ago (2016-05-20 18:04:28 UTC) #6
srawlins
https://codereview.chromium.org/1943443002/diff/60001/pkg/analyzer/test/generated/hint_code_test.dart File pkg/analyzer/test/generated/hint_code_test.dart (right): https://codereview.chromium.org/1943443002/diff/60001/pkg/analyzer/test/generated/hint_code_test.dart#newcode24 pkg/analyzer/test/generated/hint_code_test.dart:24: void deadCode_statementAfterRethrow() { On 2016/05/20 18:04:28, Brian Wilkerson wrote: ...
4 years, 7 months ago (2016-05-23 20:07:53 UTC) #7
Brian Wilkerson
lgtm
4 years, 7 months ago (2016-05-23 20:09:21 UTC) #8
srawlins
Committed patchset #5 (id:80001) manually as d7833e1c1f418bf602d0b9faec7bc868daa55cde (presubmit successful).
4 years, 7 months ago (2016-05-23 20:20:55 UTC) #10
sra1
This CL causes false positives in DDC's presumbit. Can it be reverted until it is ...
4 years, 7 months ago (2016-05-23 21:40:47 UTC) #12
srawlins
4 years, 7 months ago (2016-05-24 13:57:27 UTC) #13
Message was sent while issue was closed.
On 2016/05/23 21:40:47, sra1 wrote:
> This CL causes false positives in DDC's presumbit.
> Can it be reverted until it is fixed?
> 
> Example: the 'if' after the loop at [A] is flagged as dead.
> 
> 
>   JS.Expression _emitNullSafe(Expression node) {
>     // Desugar ?. sequence by passing a sequence of callbacks that applies
>     // each operation in sequence:
>     //
>     //     obj?.foo()?.bar
>     // -->
>     //     nullSafe(obj, _ => _.foo(), _ => _.bar);
>     //
>     // This pattern has the benefit of preserving order, as well as minimizing
>     // code expansion: each `?.` becomes `, _ => _`, plus one helper call.
>     //
>     // TODO(jmesserly): we could desugar with MetaLet instead, which may
>     // lead to higher performing code, but at the cost of readability.
>     var tail = <JS.Expression>[];
>     for (;;) {
>       var op = _getOperator(node);
>       if (op != null && op.lexeme == '?.') {
>         var nodeTarget = _getTarget(node);
>         if (!isNullable(nodeTarget)) {
>           node = _stripNullAwareOp(node, nodeTarget);
>           break;
>         }
> 
>         var param =
>             _createTemporary('_', nodeTarget.staticType, nullable: false);
>         var baseNode = _stripNullAwareOp(node, param);
>         tail.add(new JS.ArrowFun([_visit(param)], _visit(baseNode)));
>         node = nodeTarget;
>       } else {
>         break;
>       }
>     }
>     if (tail.isEmpty) return _visit(node);  // [A]
>     return js.call('dart.nullSafe(#, #)', [_visit(node), tail.reversed]);
>   }

Sorry, Stephen! This has been reverted.

The bug you caught was landed in: https://codereview.chromium.org/2002353003/

I intend to land this CL again today, in:
https://codereview.chromium.org/2007933002/

Powered by Google App Engine
This is Rietveld 408576698