dblaikie added a comment. In D70524#1787566 <https://reviews.llvm.org/D70524#1787566>, @SouraVX wrote:
> > It looks like this implementation is a bit buggy in one way and incomplete > > in another: > > > > 1. even if the auto-returning function is defined, that function definition > > doesn't describe the concrete return type. Compare GCC and Clang's output > > for your example and note that... oh. > > I think that's correct behavior, consider this for a moment -- > > struct foo { > auto foo_func(); > }; > int foo::foo_func(){return 0;} > clang error: -> > error: return type of out-of-line definition of 'foo::foo_func' differs > from that in the declaration > > > So this seems fair to me, regardless of the concrete return type{assuming > this is what this patch is doing}. We should be emitting `auto` in > declaration. AKA in unspecified_type. GCC(trunk) also seems fair here. Sorry, the example I had in mind was this: struct type { auto func(); }; auto type::func() { return 3; } Which GCC produces: DW_TAG_structure_type DW_AT_name ("type") DW_TAG_subprogram DW_AT_name ("func") DW_AT_type (DW_TAG_unspecified_type "auto") ... DW_TAG_subprogram DW_AT_specification (... ^) DW_AT_type (DW_TAG_base_type "int") ... (this should be the same debug info even if the function is defined inline in the class, rather than defined out of line (assuming the function's called - which produces a definition)) >> Hmm, maybe this feature/suggestion is broken or at least not exactly awesome >> when it comes to auto-returning functions that are eventually void-returning >> functions? Now the function definition has no DW_AT_type to override the >> unspecified_type in the declaration... :/ that's unfortunate (@probinson - >> thoughts?) > > I'm a bit confused here, regardless of the concrete return > type{void/int/float} GCC(trunk) is emitting > `DW_TAG_unspecified_type` > `DW_AT_name "auto"` > Are you trying to say we should be emitting `DW_AT_type void/int/float` ?? > That's what functionality of clang is right now, and if we entertain that, > then their is no point of emitting `DW_TAG_unspecifed_type auto` at first > place. As @probinson said - for the definition DIE/DISubprogram the type should be the concrete, deduced type. For the declaration DIE/DISubprogram, the return type should be "auto". CHANGES SINCE LAST ACTION https://reviews.llvm.org/D70524/new/ https://reviews.llvm.org/D70524 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits