Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Incorrect detection of missing returns in frog. #827

Closed
DartBot opened this issue Dec 12, 2011 · 4 comments
Closed

Incorrect detection of missing returns in frog. #827

DartBot opened this issue Dec 12, 2011 · 4 comments
Labels
closed-invalid Closed as we don't believe the reported issue is generally actionable

Comments

@DartBot
Copy link

DartBot commented Dec 12, 2011

This issue was originally filed by dnljms...@gmail.com


I noticed a couple of small errors in the recent type checker change (http://code.google.com/p/dart/source/detail?r=2340).

For this code:

    int doWhileLoop() { do { return 10; } while(false); }

It claims that there might be a missing return, but the loop body of a do..while loop always runs, so there isn't one. 'visitDoWhile' could just return the bodyType. It could possibly warn about unreachable code since the 'while' clause will never be reached.

For this:

    int maybeFirst(x,y) {
      if (x) {
        if (y) {
          return 10;
        }
      }
      else {
        return 20;
      }
    }

I think it should give the warning MAYBE_MISSING_RETURN, but 'join' doesn't account for the case 'this === MAYBE_RETURNING' which should always return MAYBE_RETURNING. It seems that join could just be:

    StatementType join(StatementType other) =>
      this === other ? this : MAYBE_RETURNING;

@DartBot
Copy link
Author

DartBot commented Dec 13, 2011

This comment was originally written by drfibonacci@google.com


Added Area-Frog, Triaged labels.

@DartBot
Copy link
Author

DartBot commented Dec 15, 2011

This comment was originally written by jimhug@google.com


Set owner to jimhug@google.com.
Added Started label.

@DartBot
Copy link
Author

DartBot commented Jan 4, 2012

This comment was originally written by jimhug@google.com


Thanks for what turned out to be a very interesting bug!

I'm marking this as "Invalid" because it is not a bug in the frog compiler (and the one part that was a bug has been fixed - but not in the way you expected).

Neither of these examples will produce an error. According to the dart language spec, "If the last statement of a function is not a return statement, the statement return null; is implicitly appended to the function body." In addition, in Dart, all types are nullable so it is legal to return null from a method typed to return int. As a result, neither of these will generate any errors or warnings. The issue that you were seeing before warning about a missing return was fixed by implementing this rule and assuming a null return.

Please, feel free to open a language issue if this part of the specification still feels like a bug to you.

Thanks - Jim


Added Invalid label.

@DartBot
Copy link
Author

DartBot commented Jan 4, 2012

This comment was originally written by dnl...@gmail.com


Sorry, I should have explained that the change that I linked to doesn't check for compliance with the specification, but looks for potential problems such as unreachable code. The unit tests it introduced start with the comment, '/** Tests analysis of returns (not required by the specification). */'. So this report isn't about matching the specification, so a specification issue would be incorrect.

I've attached a patch which adds two new tests, one passes and the other fails with an unreachable code warning. Even if my interpretation is wrong, I'm pretty sure that they indicate a genuine problem because the tests are for equivalent code but get different results.


Attachment:
typechecker_test.patch (888 Bytes)

@DartBot DartBot added Type-Defect closed-invalid Closed as we don't believe the reported issue is generally actionable labels Jan 4, 2012
copybara-service bot pushed a commit that referenced this issue Nov 28, 2022
Revisions updated by `dart tools/rev_sdk_deps.dart`.

ffi (https://github.com/dart-lang/ffi/compare/3ede231..17a8142):
  17a8142  2022-11-21  Daco Harkes  Add links to API reference and examples to README (#167)

fixnum (https://github.com/dart-lang/fixnum/compare/bca3816..62916f2):
  62916f2  2022-11-24  Lasse R.H. Nielsen  Split into separate libraries instead of using parts. (#97)
  14d4827  2022-11-23  Lasse R.H. Nielsen  Add `tryParse` methods. (#96)

http (https://github.com/dart-lang/http/compare/d56141d..047d6ed):
  047d6ed  2022-11-22  Brian Quinlan  Fixes a bug where requests made in different Clients would fail (#827)
  9dbbafb  2022-11-17  Brian Quinlan  Add tests for compressed responses (#823)

markdown (https://github.com/dart-lang/markdown/compare/37951d1..ee3f4e9):
  ee3f4e9  2022-11-24  Zhiguang Chen  Fix a blockquote issue (#496)
  c9048c0  2022-11-16  Zhiguang Chen  Optimise DelimiterSyntax (#492)

protobuf (https://github.com/dart-lang/protobuf/compare/ae90e53..c181573):
  c181573  2022-11-23  Kevin Moore  [api_benchmark] migrate to null-safety (#776)
  648deaf  2022-11-23  Kevin Moore  Standardize and fix lints (#775)
  bfa4c0d  2022-11-23  Kevin Moore  Fix `///` at the top of generated Dart files (#774)
  ed68426  2022-11-17  Devon Carew  Remove duplicate consts (#773)

sse (https://github.com/dart-lang/sse/compare/283568d..8d018dd):
  8d018dd  2022-11-23  Elliott Brooks (she/her)  Format markdown files (#68)
  2f6f151  2022-11-23  Elliott Brooks (she/her)  Add optional `debugKey` parameter to SSE client (#67)
  eaee6a8  2022-11-23  Elliott Brooks (she/her)  Use Fetch API in SSE Client (#66)

test (https://github.com/dart-lang/test/compare/7756833..b25dac9):
  b25dac99  2022-11-21  Kevin Moore  checks: finish async tests (#1793)
  3166163e  2022-11-18  Devon Carew  Update scorecards-analysis.yml (#1792)
  d930d5b0  2022-11-18  Nate Bosch  Add support for async soft checks (#1789)
  b1411a21  2022-11-18  Devon Carew  blast_repo fixes (#1788)
  a6aa04e0  2022-11-18  Jacob MacDonald  disable wasm tests for now as they are failing (#1791)
  8b5174c1  2022-11-17  Kevin Moore  Starting on async tests (#1787)

Change-Id: Ic361fce7753d08d43fc827f13cb1bfa1738cc16e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/272343
Auto-Submit: Devon Carew <devoncarew@google.com>
Reviewed-by: Kevin Moore <kevmoo@google.com>
Commit-Queue: Devon Carew <devoncarew@google.com>
copybara-service bot pushed a commit that referenced this issue May 3, 2023
…, html, http, lints, markdown, matcher, mockito, path, protobuf, shelf, source_maps, source_span, sync_http, test, test_reflective_loader, tools, usage, vector_math, webdriver, webkit_inspection_protocol, yaml_edit

Revisions updated by `dart tools/rev_sdk_deps.dart`.

args (https://github.com/dart-lang/args/compare/5ac2ba1..1864048):
  1864048  2023-05-03  Devon Carew  added package topics to the pubspec file (#242)
  db229fb  2023-05-02  dependabot[bot]  Bump actions/checkout from 3.5.0 to 3.5.2 (#241)

bazel_worker (https://github.com/dart-lang/bazel_worker/compare/d5f8837..1b86d3c):
  1b86d3c  2023-05-02  dependabot[bot]  Bump actions/checkout from 3.5.0 to 3.5.2 (#72)

characters (https://github.com/dart-lang/characters/compare/b306414..2af6783):
  2af6783  2023-05-01  dependabot[bot]  Bump actions/checkout from 3.5.0 to 3.5.2 (#81)

cli_util (https://github.com/dart-lang/cli_util/compare/6c318c2..7234f17):
  7234f17  2023-05-01  dependabot[bot]  Bump actions/checkout from 3.5.0 to 3.5.2 (#82)

collection (https://github.com/dart-lang/collection/compare/9db854d..26e3e67):
  26e3e67  2023-05-03  Lasse R.H. Nielsen  Accept SDK version above 3.0. (#281)

file (https://github.com/google/file.dart/compare/72a67c3..b905180):
  b905180  2023-05-01  dependabot[bot]  Bump dart-lang/setup-dart from 1.4.0 to 1.5.0 (#212)
  8158a35  2023-05-01  dependabot[bot]  Bump actions/checkout from 3.3.0 to 3.5.2 (#218)

html (https://github.com/dart-lang/html/compare/0438b26..5d87dc8):
  5d87dc8  2023-05-03  Devon Carew  added package topics to the pubspec file (#215)

http (https://github.com/dart-lang/http/compare/877f134..f581ff7):
  f581ff7  2023-05-01  Nate Bosch  Prepare to publish (#914)
  fa53651  2023-05-01  Brian Quinlan  Document that RetryClient may consume a lot of memory (#915)

lints (https://github.com/dart-lang/lints/compare/ba7d75e..17276ec):
  17276ec  2023-05-01  dependabot[bot]  Bump actions/checkout from 3.5.0 to 3.5.2 (#116)

markdown (https://github.com/dart-lang/markdown/compare/82b050d..6db8fc1):
  6db8fc1  2023-05-02  Jonas Finnemann Jensen  Prepare 7.1.0 (#538)

matcher (https://github.com/dart-lang/matcher/compare/7228c26..5890f2b):
  5890f2b  2023-05-01  Nate Bosch  Expand bound for `test_api` dependency (#219)

mockito (https://github.com/dart-lang/mockito/compare/beb45ba..56173fa):
  56173fa  2023-05-01  dependabot[bot]  Bump actions/checkout from 3.5.0 to 3.5.2 (#626)

path (https://github.com/dart-lang/path/compare/23e3319..1552cfd):
  1552cfd  2023-05-01  dependabot[bot]  Bump actions/checkout from 3.5.0 to 3.5.2 (#142)
  82ddc60  2023-05-01  Jonathan  fixed mistake in split method doc comment (#141)

protobuf (https://github.com/dart-lang/protobuf/compare/b90a4c4..9d7cf0d):
  9d7cf0d  2023-05-01  Kevin Moore  Update Github Actions (#827)

shelf (https://github.com/dart-lang/shelf/compare/9a792b4..79e3cee):
  79e3cee  2023-05-03  Devon Carew  add package topics for package:shelf_router_generator (#346)
  25861e5  2023-05-03  Devon Carew  add topics to the pubspec files (#345)

source_maps (https://github.com/dart-lang/source_maps/compare/0a4b030..f0a8506):
  f0a8506  2023-05-01  dependabot[bot]  Bump actions/checkout from 3.5.0 to 3.5.2 (#77)

source_span (https://github.com/dart-lang/source_span/compare/905a167..69fa991):
  69fa991  2023-05-01  dependabot[bot]  Bump actions/checkout from 3.5.0 to 3.5.2 (#97)

sync_http (https://github.com/dart-lang/sync_http/compare/660ad87..c3d6ad4):
  c3d6ad4  2023-05-01  dependabot[bot]  Bump actions/checkout from 3.5.0 to 3.5.2 (#36)

test (https://github.com/dart-lang/test/compare/b252463..9484592):
  9484592a  2023-05-02  Nate Bosch  Prepare to publish checks (#2005)

test_reflective_loader (https://github.com/dart-lang/test_reflective_loader/compare/a85a930..d1b763f):
  d1b763f  2023-05-01  dependabot[bot]  Bump actions/checkout from 3.5.0 to 3.5.2 (#48)

tools (https://github.com/dart-lang/tools/compare/516995e..b55f0d4):
  b55f0d4  2023-05-02  Elias Yishak  `pddFlag` removal + tests for pdd restricted instance of `Analytics` (#86)

usage (https://github.com/dart-lang/usage/compare/f97752f..929a4e3):
  929a4e3  2023-05-02  dependabot[bot]  Bump actions/checkout from 3.5.0 to 3.5.2 (#193)

vector_math (https://github.com/google/vector_math.dart/compare/7dec984..e3de8da):
  e3de8da  2023-05-01  dependabot[bot]  Bump dart-lang/setup-dart from 1.4.0 to 1.5.0 (#291)

webdriver (https://github.com/google/webdriver.dart/compare/562aa06..d0f78d0):
  d0f78d0  2023-05-01  dependabot[bot]  Bump dart-lang/setup-dart from 1.4.0 to 1.5.0 (#273)
  1ef3348  2023-05-01  dependabot[bot]  Bump actions/checkout from 3.3.0 to 3.5.2 (#275)

webkit_inspection_protocol (https://github.com/google/webkit_inspection_protocol.dart/compare/8401098..39a3c29):
  39a3c29  2023-05-01  dependabot[bot]  Bump dart-lang/setup-dart from 1.4.0 to 1.5.0 (#102)
  5555c53  2023-05-01  dependabot[bot]  Bump nanasess/setup-chromedriver from 1.1.0 to 2.0.0 (#101)
  9adce2a  2023-05-01  dependabot[bot]  Bump actions/checkout from 3.3.0 to 3.5.2 (#103)

yaml_edit (https://github.com/dart-lang/yaml_edit/compare/5f392a1..e05282b):
  e05282b  2023-05-02  Jonas Finnemann Jensen  Prepare 2.1.1 release (#52)

Change-Id: Iee7fd84d32ae37b76147d62c2268df19cf8db95b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/300863
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Auto-Submit: Devon Carew <devoncarew@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
This issue was closed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
closed-invalid Closed as we don't believe the reported issue is generally actionable
Projects
None yet
Development

No branches or pull requests

1 participant