Following the resolution of DR481, the controlling expression of a generic selection must be lvalue converted. In other words, the qualifiers must be ignored. Reported-by: Marco Elver <elver@xxxxxxxxxx> Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@xxxxxxxxx> --- evaluate.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/evaluate.c b/evaluate.c index cf40eed418b4..d8615a894c0d 100644 --- a/evaluate.c +++ b/evaluate.c @@ -3287,17 +3287,20 @@ static struct symbol *evaluate_generic_selection(struct expression *expr) { struct type_expression *map; struct expression *res; + struct symbol source; struct symbol *ctrl; if (!(ctrl = evaluate_expression(expr->control))) return NULL; + source = *ctrl; + source.ctype.modifiers &= ~(MOD_QUALIFIER|MOD_ATOMIC); for (map = expr->map; map; map = map->next) { struct symbol *stype = map->type; if (!evaluate_symbol(stype)) continue; - if (!type_selection(ctrl, stype)) + if (!type_selection(&source, stype)) continue; res = map->expr; -- 2.27.0