Hi,

the suggestions are cool and they obviously can't be always correct.
I guess it matches this against different valid identifiers and somehow
counting a score for these and showing the identifier with the highest
score. I did not found anything about the "how" in the GCC annotation.


But I do wonder if the following is the ideal:

/media/dev/gnu-cobol-2.0/cobc/cobc.c: In function 'process_command_line':
/media/dev/gnu-cobol-2.0/cobc/cobc.c:3010:6: error: 'cb_fatal_error'
undeclared (first use in this function); did you mean 'cob_fatal_error'?
  if (cb_fatal_error) {
      ^~~~~~~~~~~~~~
      cob_fatal_error

OK, so we used a wrong variable name. But GCC suggests a function
address...
The definition of cob_fatal_error is

void
cob_fatal_error(const int fatal_error)

declared in an included header file as

extern void     cob_fatal_error (const int) __attribute__((noreturn));


changing it as suggested raises


/media/dev/gnu-cobol-2.0/cobc/cobc.c: In function 'process_command_line':
/media/dev/gnu-cobol-2.0/cobc/cobc.c:3010:6: warning: the address of
'cob_fatal_error' will always evaluate as 'true' [-Waddress]
  if (cob_fatal_error) {
      ^~~~~~~~~~~~~~~

(I first thought this warning was wrong, too as
__attribute__((noreturn)) explicit tells the compiler that this function
will never return, but it is actually using the function address...)


The correct version is

  if (fatal_error) {

and the definition of fatal_error, local to cobc.c is:

int                     fatal_error = 0;


Suggestions for this hard to always guess right area:

* document how the suggestion is calculated, link this in places where
this feature is referenced like https://gcc.gnu.org/gcc-7/changes.html
* don't suggest a function address if any other possible candidates exist
* give local variables a higher score

Thank you for this wonderful and evolving compiler!

Simon


I'm not subscribed to the list, please answer directly (CCing the list
of course), otherwise I can't read your response.
Thank you.

Reply via email to