On Mon, 24 Sep 2018 13:39:03 +0200 Bernhard Reutner-Fischer <rep.dot....@gmail.com> wrote:
> On Mon, 24 Sep 2018 at 13:26, Bernhard Reutner-Fischer > <rep.dot....@gmail.com> wrote: > > > > Hi there. > > > > gfc_sym_mangled_function_id() and gfc_sym_mangled_common_id both have > > (identical, but that's for another patch to maybe factor it out) the > > following code for underscore handling which looks suspicious: > > > > ---8<--- > > static tree > > gfc_sym_mangled_common_id (gfc_common_head *com) > > { > > int has_underscore; > > const char *name; > > > > /* Get the name out of the common block pointer. */ > > name = com->name; > > > > /* If we're supposed to do a bind(c). */ > > if (com->is_bind_c && com->binding_label) > > return maybe_get_identifier (com->binding_label); > > > > if (name == gfc_get_string (BLANK_COMMON_NAME)) > > return maybe_get_identifier (name); > > > > if (flag_underscoring) > > { > > has_underscore = strchr (name, '_') != 0; > > if (flag_second_underscore && has_underscore) > > return gfc_get_identifier("%s__", name); > > else > > return gfc_get_identifier("%s_", name); > > } > > else > > return maybe_get_identifier (name); > > } > > ---8<--- > > > > the strchr looks somewhat suspicious, IMHO: > > Isn't what the code really wants to check the fact whether or not the > > name *already*ends* with an underscore? > > > > b@h:/tmp/o$ printf "common /C/ j,i\nend" | gfortran -x f95-cpp-input - > > -ffree-form -c -o huh.o -DC=foo && readelf -s huh.o | grep foo > > 14: 0000000000000010 8 OBJECT GLOBAL DEFAULT COM foo_ > > b@h:/tmp/o$ printf "common /C/ j,i\nend" | gfortran -x f95-cpp-input - > > -ffree-form -c -o huh.o -DC=foo -fsecond-underscore && readelf -s > > huh.o | grep foo > > 14: 0000000000000010 8 OBJECT GLOBAL DEFAULT COM foo_ > > b@h:/tmp/o$ printf "common /C/ j,i\nend" | gfortran -x f95-cpp-input - > > -ffree-form -c -o huh.o -DC=foo_bar && readelf -s huh.o | grep foo > > 14: 0000000000000010 8 OBJECT GLOBAL DEFAULT COM foo_bar_ > > b@h:/tmp/o$ printf "common /C/ j,i\nend" | gfortran -x f95-cpp-input - > > -ffree-form -c -o huh.o -DC=foo_bar -fsecond-underscore && readelf -s > > huh.o | grep foo > > 14: 0000000000000010 8 OBJECT GLOBAL DEFAULT COM foo_bar__ > > > > I had expected "common /foo/" with -fsecond-underscore to produce a > > "foo__" sym, no? > > What am i missing? > > I should have read the documentation of -fsecond-underscore for > starters and maybe PR51820 > "[doc] underscoring documentation incorrect" . > > sorry for the noise.. :( [i was looking for something different in my outbox but AFAICS the above doc PR is still open, in case anyone wants to tackle it for good anytime "soon"]