Skip to content

diags without usable source location after #127338 #128195

Open
@nico

Description

@nico
$ cat repro.cc
class Location {
 public:
  static Location CurrentWithoutFunctionName(
      const char* file_name = __builtin_FILE(),
      int line_number = __builtin_LINE());
};

class NotReachedNoreturnError {
 public:
  explicit NotReachedNoreturnError(
      const Location& location =
          Location::CurrentWithoutFunctionName());

  [[noreturn]] [[clang::nomerge]] [[clang::noinline]] [[clang::not_tail_called]]
      ~NotReachedNoreturnError();
};

#define NOTREACHED() NotReachedNoreturnError()

int f() {
  NOTREACHED();
  return 4;
}

int g() {
  return 4;
  NOTREACHED();
}
$ out/gn/bin/clang -c repro.cc -Wunreachable-code-aggressive
repro.cc:22:10: warning: 'return' will never be executed [-Wunreachable-code-return]
   22 |   return 4;
      |          ^
repro.cc:12:11: warning: code will never be executed [-Wunreachable-code]
   12 |           Location::CurrentWithoutFunctionName());
      |           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2 warnings generated.

The first diag points at the line that has the problem. That's good.

The second diag doesn't point even close to the problem. If the macro is in a header and the diag is in a file that uses the macro 20+ times, it's very hard to see where the problem is.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions