diff --git a/Library/Homebrew/cli/args.rb b/Library/Homebrew/cli/args.rb
index a951194e7cb9ce08a9625724aa6c8556dd41af11..a32c50b01c0cbaa44f35f73545907f7ccdf489ba 100644
--- a/Library/Homebrew/cli/args.rb
+++ b/Library/Homebrew/cli/args.rb
@@ -5,7 +5,7 @@ require "ostruct"
 module Homebrew
   module CLI
     class Args < OpenStruct
-      attr_accessor :processed_options, :args_parsed
+      attr_reader :processed_options, :args_parsed
       # undefine tap to allow --tap argument
       undef tap
 
@@ -16,6 +16,12 @@ module Homebrew
         @processed_options = []
       end
 
+      def freeze_processed_options!(processed_options)
+        @processed_options += processed_options
+        @processed_options.freeze
+        @args_parsed = true
+      end
+
       def option_to_name(option)
         option.sub(/\A--?/, "")
               .tr("-", "_")
diff --git a/Library/Homebrew/cli/parser.rb b/Library/Homebrew/cli/parser.rb
index 7e9b21cd6f6c4535991e4d58acb812353b986ae3..bda488b0c3f248d45ef55de7c7afd29047e87116 100644
--- a/Library/Homebrew/cli/parser.rb
+++ b/Library/Homebrew/cli/parser.rb
@@ -140,10 +140,10 @@ module Homebrew
         end
         check_constraint_violations
         @args[:remaining] = remaining_args
-        @args.args_parsed = @args_parsed = true
-        @args.processed_options = @processed_options
+        @args.freeze_processed_options!(@processed_options)
         Homebrew.args = @args
         cmdline_args.freeze
+        @args_parsed = true
         @parser
       end