All the following statements are grammatically correct. And these examples are very, very frequently handled incorrectly in print these days. You may have to read this several times: there is no simple way to explain everything at once, for those that have forgotten transitive and intransitive verbs and what takes objects and what can’t. But once you realize WHAT the subject of the who-clause is—you’ve got it. Also note: who/whose/whom/which/of which AND the substitute ‘that’ are ALL the word ‘who’ in various permutations.

Ilisidi had adjusted her schedule. She did not say who she had moved.
She did not say whose meeting she had moved.
She did not say who was coming.
Who shall I say is calling?
Whom do you wish to see?
To whom should I address this question?

The trick in figuring out who-whom is at once simple and difficult: but first let’s understand the who-clause. It’s called a RELATIVE clause because it uses a ‘relative pronoun’—ie, who/whose/whom or which or even ‘that’.

Note that it is a CLAUSE, and not a Phrase. The difference between clause and phrase is simple: a clause could easily be a whole sentence: a phrase is just a group of words. There are dependent and independent clauses. A Relative Clause is by nature a variety of Dependent Clause, because it begins with a connective word—in this case not ‘and’ or ‘but’, but ‘who’, a ‘relative pronoun’, so named because it ‘relates’ [carries-back/connects] to something outside the clause. Ergo—dependent.

Got it? All Relative Clauses are dependent, just because they contain that connection and are not fully independent. [Should you wonder what is an independent clause, your typical short sentence is an independent clause.]

But let’s get back to our simple and confusing little who-clause, at issue above.

How to tell whether to use Who, or Whom…
The secret? Find the subject in the who-clause.

Look at example #1: She did not say who she had moved. What’s the subject of the little clause? The answer is: SHE. SHE had moved. So what the heck is WHO? The trick is—words are left out, or ‘understood’ to be there. [The technical word for a dropout is an ‘ellipsis.’]

The full clause would be: who [it was that] she had moved. It’s, in other words, a complex little bitch of an expression, two little clauses pasted together with words missing. The word WHO is the [God help us!] the Predicate Noun of an Intransitive Verb [this means it’s equivalent to a subject, and is always in Subject [Nominative] Case] of the first little clause; and SHE is the subject of the second. This nasty little trick of expression happens a lot with WHO, just by the nature of what it does for a living.

Bitchy trick #2—the verb IS [am, is, are, was, were, be, been] is ‘intransitive’, meaning a ‘forceless’ verb. It doesn’t ever take an object, so WHO could not possibly be in the Objective case [whom]. [ “I am I, Don Quixote!”] So though HAD MOVED is a transitive [force] verb and CAN take an object, in this case—there’s no object in its clause for it to take.

#2: She did not say whose meeting she had moved. Again, SHE is still the subject. But the first little clause has changed: The full expression is: She did not say WHOSE [possessive] meeting [ellipsis: it was that] she had moved. MEETING is the antecedent [word described] for the ‘it was’. This very nasty little combo is TWO who-clauses pasted together with words left out: thus: she did not say whose meeting it was that [=which] she had moved….MEETING belongs to the first one, its subject being IT. She had moved: subject is she and the object of ‘moved’ is the neuter who, ie, WHICH or THAT, a relative pronoun describing ‘meeting’.

#3: She did not say who was coming. In this case it’s straightforward: the only available subject for the forceless verb ‘was coming’ is WHO. It’s in subject form. You could still expand it out to ‘She did not say who it was that was coming,’ but because the verb is the intransitive ‘is’ there’s no chance of it needing to be ‘whom’.

#4: A trio of little sentences now: memorize these, as THE most commonly screwed-up high English currently in issue.
a: Who shall I say is calling? This is CORRECT. “I” is the subject of ‘shall say’. “Who” is the subject of “is calling”. There is, again, a fallout. The full expression is: Who [is it/ that] I shall say is calling? So it’s exactly the same as sentence #1. ON THE OTHER HAND: you can argue that “I shall say” is parenthetical. This one has been driven around the block by various grammarians with various arguments…justly so.
b: Whom do you wish to see? The OTHER most screwed-up question. “YOU” is the subject of “wish”. But now you have that rascally “who-word” as the OBJECT of the OBJECT. The object of wish is TO SEE. [This is an infinitive: an ‘infinite’ verb, that can act like a noun—WHILE taking its own object.] And yep, WHOM is the OBJECT of that infinitive TO SEE. In this case you have a choice, and could justify ‘who’ by saying there is an elliptical ‘who is it whom’ I shall say is calling? —but this is needlessly convolute, and sometimes you just throw up your hands and shorten the damn thing.
c. To whom should I address this question? “I” is the subject of SHOULD ADDRESS, “this question” is its object, and “TO WHOM” is a simple prepositional phrase belonging [adverbially] to the verb “I should address.”

Note: English is so confusingly bitchy to sort, because it has eighteen tense-forms [most languages get by with 6], and constructs all of them out of spare parts. In Latin, for instance, “he will be arriving” is simply one word: adveniet. The base of the verb is ADVENI- The ending has an slight shift for the future-ness of it and the -t is the “he, she, it” form. English goes berserk when it has to break up that verb to insert other information. Will he actually be arriving late? Latin just says: Tarde enim advenietne. -ne is the question mark. Enim means actually/you’re kidding.

Well, English borrowed all its who-rules from Latin, which neatly packages things, as above, and turned it into a nightmare due to its eighteen-tense diced-up verbs. Small wonder we get confused!