Reintroduced bug regarding spurious "variable declared but not used" warnings?

The Inform Technical Manual section 13.4(iv) ("Changes made between v6.04 and v6.05") lists among the fixed bugs:

Spurious "variable declared but not used" warnings appearing for a variable
    used only as a store destination in assembly language.

However, the behavior described as fixed can be seen when using Inform 6.34 (and 6.35). Some example code:

Constant Story "Demonstration of unexpected compiler warning";
Constant Headline   "^cf. ITM 13.4(iv)^";

Include "Parser";
Include "VerbLib";
Include "Grammar";

Class Room
    has light;

Room Start "Starting Place"
    with    description
                "An uninteresting place.";

Global read_char_result;

[ WaitForKey ;
    @read_char 1 -> read_char_result;
];

[ Initialise ;

    WaitForKey();
    location = Start;
];

Messages seen when compiling the above:

Inform 6.34 (21st May 2020)
line 17: Warning:  Global variable "read_char_result" declared but not used
Compiled with 1 warning

Inform 6.35 (in development)
line 17: Warning:  Global variable "read_char_result" declared but not used
Compiled with 1 warning

Was this bug reintroduced at some point? Or perhaps is it that the original correction in v6.05 didn’t cover this case?

In symbols.c function issue_unused_warnings(), the following block seems immediately responsible:

for (i=0;i<no_symbols;i++)
{   if (((sflags[i]
         & (SYSTEM_SFLAG + UNKNOWN_SFLAG + EXPORT_SFLAG
            + INSF_SFLAG + USED_SFLAG + REPLACE_SFLAG)) == 0)
         && (stypes[i] != OBJECT_T))
        dbnu_warning(typename(stypes[i]), (char *) symbs[i], slines[i]); // call to "declared but not used" warning message routine
}

Perhaps USED_SFLAG is not being set appropriately for the global variable in question?

There are several places where that flag can be set in the compiler code, but there doesn’t seem to be any such direct assignment in asm.c. There is activity within an array variable_usage[], which seems to be intended to track the same information. Within assemblez_instruction():

/* 4. Assemble a Store destination, if needed */

if ((AI->store_variable_number) != -1)
{   if (AI->store_variable_number >= MAX_LOCAL_VARIABLES+MAX_GLOBAL_VARIABLES) {
        goto OpcodeSyntaxError;
    }
    o1.type = VARIABLE_OT;
    o1.value = AI->store_variable_number;
    variable_usage[o1.value] = TRUE;     // records usage of the store variable?
    o1.marker = 0;

    /*  Note that variable numbers 249 to 255 (i.e. globals 233 to 239)
        are used as scratch workspace, so need no mapping between
        modules and story files: nor do local variables 0 to 15  */

    if ((o1.value >= MAX_LOCAL_VARIABLES) && (o1.value < 249))
        o1.marker = VARIABLE_MV;
    write_operand(o1);
}

However, it’s not clear to me where the information in variable_usage[] would be transferred to USED_SFLAG. The only place that I see it being checked for its contents is in asm.c function assemble_routine_end():

for (i=1; i<=routine_locals; i++)
    if (!(variable_usage[i]))
        dbnu_warning("Local variable", variable_name(i),
            routine_starts_line);

which emits a warning message if a local variable has not been used.

Should the second block above [from assemblez_instruction()] be setting USED_SFLAG for global variables?