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

Fix for crash when methods with default private type params in remote packages are called #4167

Merged
merged 8 commits into from
Aug 2, 2022

Commits on Jul 27, 2022

  1. Fix for crash involving the use of private types used as default values

    This attempts to fix issues ponylang#4130 and ponylang#4153.
    
    The issue was when a private type in another package was used as a default value in a method call.
    
    Fix to ponylang#4130
    Since it has been decided to treat this as a bug instead of a missing error, this PR implements the fix suggested by @ergl, namely using `lookup_try()` instead of lookup() in call.c's `check_partial_function_call()` since it allows to permit private types.
    
    Fix to ponylang#4153
    This is also a simply fix to lookup.c that prevents a potential segfault by a dereferencing of `opt` (`typecheck_t* t = &opt->check;`) *before* `opt != NULL` was checked. As pointed out by @SeanTAllen, opt should not be NULL to begin with when lookup_nominal is called, and instead, an assert should be added and the NULL checks in that function removed.
    stefandd committed Jul 27, 2022
    Configuration menu
    Copy the full SHA
    527864d View commit details
    Browse the repository at this point in the history
  2. Revert "Fix for crash involving the use of private types used as defa…

    …ult values"
    
    This reverts commit 527864d.
    stefandd committed Jul 27, 2022
    Configuration menu
    Copy the full SHA
    0eae6ef View commit details
    Browse the repository at this point in the history
  3. Fix for crash involving the use of private types used as default values

    This attempts to fix ponylang#4130
    
    This crash stems from the use of a private type as defined in another package when it was used as a default value in a method call. Since it has been decided to treat this as a bug instead of a missing error, this PR implements the fix suggested by @ergl, namely using `lookup_try()` instead of lookup() in call.c's `check_partial_function_call()` since the former can be configured to permit private types.
    
    Fix to ponylang#4153
    This is a simply change to `lookup_nominal()` in lookup.c that prevents a potential segfault by a dereferencing of `opt` (`typecheck_t* t = &opt->check;`) *before* `opt != NULL` was checked. As pointed out by @SeanTAllen, opt should not be NULL to begin with when `lookup_nominal()` is called, and instead, an assert should be added and the NULL checks in that function removed.
    
    With this PR, the two examples below that crashed the compiler now both compile:
    
    Original example:
    ```pony
    // inside the "useful" package
    
    primitive _PrivateDefault
    
    actor Useful[A: Any val]
      fun tag config(value: (A | _PrivateDefault) = _PrivateDefault): Useful[A] => this
    
    // inside "main"
    
    use "useful"
    
    primitive This
    primitive That
    
    type Stuff is (This | That)
    
    actor Main
      new create(env: Env) =>
        let u = Useful[Stuff].config()
    ```
    
    Minimal example:
    ```pony
    // In the "lib" pacakge
    
    primitive _Private
    
    primitive Public
      fun apply[T](v: (T | _Private) = _Private): None => None
    
    // In main
    use lib = "lib"
    
    actor Main
      new create(env: Env) =>
        let p = lib.Public.apply[U8]()
        env.out.print(p.string())
    ```
    stefandd committed Jul 27, 2022
    Configuration menu
    Copy the full SHA
    7c18b7f View commit details
    Browse the repository at this point in the history
  4. Adding test runner

    stefandd committed Jul 27, 2022
    Configuration menu
    Copy the full SHA
    6391765 View commit details
    Browse the repository at this point in the history
  5. Create 4167.md

    Adding release notes
    stefandd committed Jul 27, 2022
    Configuration menu
    Copy the full SHA
    5fd6c26 View commit details
    Browse the repository at this point in the history

Commits on Jul 28, 2022

  1. Update test/libponyc-run/private-type-as-default-argument-in-public-f…

    …unction/main.pony
    
    Co-authored-by: Borja o'Cook <ergl@users.noreply.github.com>
    stefandd and ergl authored Jul 28, 2022
    Configuration menu
    Copy the full SHA
    cb3b960 View commit details
    Browse the repository at this point in the history

Commits on Jul 30, 2022

  1. Update 4167.md

    stefandd committed Jul 30, 2022
    Configuration menu
    Copy the full SHA
    323e371 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    08de6f7 View commit details
    Browse the repository at this point in the history