Hi, this is probably on the border to obvious.
The REGEXP_xxx macros in genautomata are invoked recursively, and the local values are all named _regexp and shadow each other. Fixed by using different names _regexp1..6 for each macro. Bootstrapped and reg-tested on x86_64-pc-linux-gnu. Is it OK for trunk? Thanks Bernd.
2019-10-04 Bernd Edlinger <bernd.edlin...@hotmail.de> * genautomata.c (REGEXP_UNIT, REGEXP_RESERV, REGEXP_SEQUENCE, REGEXP_REPEAT, REGEXP_ALLOF, REGEXP_ONEOF): Rename local vars. Index: gcc/genautomata.c =================================================================== --- gcc/genautomata.c (revision 276484) +++ gcc/genautomata.c (working copy) @@ -984,46 +984,46 @@ decl_mode_check_failed (enum decl_mode mode, const #define REGEXP_UNIT(r) __extension__ \ -(({ struct regexp *const _regexp = (r); \ - if (_regexp->mode != rm_unit) \ - regexp_mode_check_failed (_regexp->mode, "rm_unit", \ +(({ struct regexp *const _regex1 = (r); \ + if (_regex1->mode != rm_unit) \ + regexp_mode_check_failed (_regex1->mode, "rm_unit", \ __FILE__, __LINE__, __FUNCTION__); \ - &(_regexp)->regexp.unit; })) + &(_regex1)->regexp.unit; })) #define REGEXP_RESERV(r) __extension__ \ -(({ struct regexp *const _regexp = (r); \ - if (_regexp->mode != rm_reserv) \ - regexp_mode_check_failed (_regexp->mode, "rm_reserv", \ +(({ struct regexp *const _regex2 = (r); \ + if (_regex2->mode != rm_reserv) \ + regexp_mode_check_failed (_regex2->mode, "rm_reserv", \ __FILE__, __LINE__, __FUNCTION__); \ - &(_regexp)->regexp.reserv; })) + &(_regex2)->regexp.reserv; })) #define REGEXP_SEQUENCE(r) __extension__ \ -(({ struct regexp *const _regexp = (r); \ - if (_regexp->mode != rm_sequence) \ - regexp_mode_check_failed (_regexp->mode, "rm_sequence", \ +(({ struct regexp *const _regex3 = (r); \ + if (_regex3->mode != rm_sequence) \ + regexp_mode_check_failed (_regex3->mode, "rm_sequence", \ __FILE__, __LINE__, __FUNCTION__); \ - &(_regexp)->regexp.sequence; })) + &(_regex3)->regexp.sequence; })) #define REGEXP_REPEAT(r) __extension__ \ -(({ struct regexp *const _regexp = (r); \ - if (_regexp->mode != rm_repeat) \ - regexp_mode_check_failed (_regexp->mode, "rm_repeat", \ +(({ struct regexp *const _regex4 = (r); \ + if (_regex4->mode != rm_repeat) \ + regexp_mode_check_failed (_regex4->mode, "rm_repeat", \ __FILE__, __LINE__, __FUNCTION__); \ - &(_regexp)->regexp.repeat; })) + &(_regex4)->regexp.repeat; })) #define REGEXP_ALLOF(r) __extension__ \ -(({ struct regexp *const _regexp = (r); \ - if (_regexp->mode != rm_allof) \ - regexp_mode_check_failed (_regexp->mode, "rm_allof", \ +(({ struct regexp *const _regex5 = (r); \ + if (_regex5->mode != rm_allof) \ + regexp_mode_check_failed (_regex5->mode, "rm_allof", \ __FILE__, __LINE__, __FUNCTION__); \ - &(_regexp)->regexp.allof; })) + &(_regex5)->regexp.allof; })) #define REGEXP_ONEOF(r) __extension__ \ -(({ struct regexp *const _regexp = (r); \ - if (_regexp->mode != rm_oneof) \ - regexp_mode_check_failed (_regexp->mode, "rm_oneof", \ +(({ struct regexp *const _regex6 = (r); \ + if (_regex6->mode != rm_oneof) \ + regexp_mode_check_failed (_regex6->mode, "rm_oneof", \ __FILE__, __LINE__, __FUNCTION__); \ - &(_regexp)->regexp.oneof; })) + &(_regex6)->regexp.oneof; })) static const char *regexp_name (enum regexp_mode); static void regexp_mode_check_failed (enum regexp_mode, const char *,