Compile error specific only for my Mac

Hi, I have a problem with compiling a project on my Mac. I’m experiencing the problem through all branches that were originally executable and no changes were made to them. Suddenly everything stopped working and I honestly have no idea what action could have caused this problem.

== Compilation error in file lib/my_app_web/controllers/user_switch_role_controller.ex ==
** (ArgumentError) defdelegate function is calling itself, which will lead to an infinite loop. You should either change the value of the :to option or specify the :as option
  (elixir 1.14.3) lib/kernel/utils.ex:32: Kernel.Utils.defdelegate_all/3
  /Users/username/Documents/Folder1/my_app/lib/my_app_web/controllers/user_switch_role_controller.ex:1: (file)
  (stdlib 4.2) erl_eval.erl:748: :erl_eval.do_apply/7
  (stdlib 4.2) erl_eval.erl:492: :erl_eval.expr/6
  (stdlib 4.2) erl_eval.erl:136: :erl_eval.exprs/6
  (filterable 0.7.4) /Users/username/Documents/Folder1/my_app/lib/my_app_web/controllers/user_switch_role_controller.ex:1: Filterable.__before_compile__/1

On my friend’s Mac everything is working fine. We both have a Mac M1 with OS Ventura 13.2.1. I can compile the same project on a Linux virtual machine without any problem.

Tool versions:
erlang 25.2.3
elixir 1.13.4-otp-25
nodejs 12.22.12
Steps I tried.

  • Uninstalling Elixir, Elrang and NodeJS, then the whole asdf. And then installing asdf and reinstalling Elixir, Erlang and NodeJS via asdf.
  • Reinstalling xcode.
  • Clone the project to a new folder

This is code from controller. Only def action.

defmodule MyAppWeb.UserSwitchRoleController do
 use MyAppWeb, :controller
 use Filterable.Phoenix.Controller

 alias MyApp.Users
 alias MyApp.Users.User

 def edit(conn, current_user, %{"id" => id}) do
  user = Users.get_user!(id)

  live_render(conn, MyAppWeb.UserLive.EditOwnRole, session: %{"user" => user})
 end

 def update(conn, current_user, %{"id" => id, "user" => user_params}) do
  user = Users.get_user!(id)

  case Users.update_user(user, user_params) do
   {:ok, user} ->
    conn
    |> put_flash(:info, gettext("User updated successfully."))
    |> redirect(to: Routes.user_switch_role_path(conn, :edit, user))

   {:error, %Ecto.Changeset{} = changeset} ->
    render(conn, "edit_own_role.html", user: user, changeset: changeset)
  end
 end

 def action(conn, _) do
  args = [conn, conn.assigns.current_user, conn.params]
  apply(__MODULE__, action_name(conn), args)
 end
end

I have defdelegate elsewhere in the app, but when I went through them, none of them even refer to the controller.
If it was explicitly a code error, wouldn’t it show up on a second Mac with the same setup?

Error def is here:

Anyone got any ideas? I would be glad for any help. :slightly_smiling_face:
Thanks.

mix clean && mix compile

The commit message doesn’t have much explanation, but I think this commit is related:

It adds an as: to the defdelegate in Filterable, which is brought in by Filterable.Phoenix.Controller.

2 Likes