Hi. As mentioned in cover letter this patch was main motivation for the whole series. Currently we have a list of lines (source_info::lines) per a source file. That's changed in the patch, now each functions has: map> source_lines; Thus separate lines for function for each source file the function lives in. Having a group of function starting on a line, we print first summary and then each individual function: -: 1:template -: 2:class Foo -: 3:{ -: 4: public: 3: 5: Foo() -: 6: { 3: 7: b = 123; 3: 8: } ------------------ Foo::Foo(): 1: 5: Foo() -: 6: { 1: 7: b = 123; 1: 8: } ------------------ Foo::Foo(): 2: 5: Foo() -: 6: { 2: 7: b = 123; 2: 8: } ------------------ -: 9: 1*: 10: void test() { if (!b) __builtin_abort (); b = 111; } ------------------ Foo::test(): 1*: 10: void test() { if (!b) __builtin_abort (); b = 111; } 1: 10-block 0 %%%%%: 10-block 1 ------------------ Foo::test(): #####: 10: void test() { if (!b) __builtin_abort (); b = 111; } %%%%%: 10-block 0 %%%%%: 10-block 1 ------------------ -: 11: -: 12: private: -: 13: int b; -: 14:}; -: 15: -: 16:template class Foo; -: 17:template class Foo; -: 18: 1: 19:int main() -: 20:{ 1: 21: Foo xx; 1: 21-block 0 1: 22: Foo yy; 1: 22-block 0 1: 23: Foo zz; 1: 23-block 0 1: 24: xx.test(); 1: 24-block 0 -: 25: 1: 26: return 0; 1: 26-block 0 -: 27:} It's also reflected in intermediate format, where lines are repeated. Currently no summary is done. That patch is work in progress, tests are missing, documentation should be improved significantly and changelog has to be written. However I would like to get a feedback before I'll finish it? Thanks, Martin