-
Notifications
You must be signed in to change notification settings - Fork 1.6k
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
Comments
This comment was originally written by drfibonacci@google.com |
This comment was originally written by jimhug@google.com Set owner to jimhug@google.com. |
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. |
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: |
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>
…, 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 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;
The text was updated successfully, but these errors were encountered: