On Wed, 20 Apr 2022 19:20:24 +0200 Bernhard Reutner-Fischer <rep.dot.nop@xxxxxxxxx> wrote: > Hi! > > I'm having a hard time to set the correct location of the result decl of > member functions in C++. Any hint on where to best fix the missing > locus? > TIA for any hint (or a fix :). > > Long version: > ¹) C functions work out fine once fixed to have the correct loc. > C++ functions worked fine once, but i now see that apparently > "int my_main" on line 42 regressed again in the meantime: This is due to decl1 having been ggc_freed here: diff --git a/gcc/cp/decl.cc b/gcc/cp/decl.cc index c136dbbba1a..38874bf1558 100644 --- a/gcc/cp/decl.cc +++ b/gcc/cp/decl.cc @@ -17373,7 +17375,18 @@ start_function (cp_decl_specifier_seq *declspecs, gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)), integer_type_node)); - return start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT); + ret = start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT); + + /* decl1 might be ggc_freed here. */ + //decl1 = current_function_decl; + which is why i previously had to use current_function_decl here. > > > $ XXX=1 ../gcc/xg++ -B../gcc -c -o return-narrow.o return-narrow.cc -fdiagnostics-color=always > return-narrow.cc: In function ‘int my_main(int, char**)’: > return-narrow.cc:42:25: warning: result decl locus sample > 42 | int my_main (int, char**) { return 0; } > | ^ > | the return type