Richard pointed out on IRC that the patch should look at the
redeclaration context to avoid problems with one of the functions
being in a extern "C++". Implementing that found some interesting
problems. Consider

extern "C" {
  static void foo(int x);
  static void foo() {
  }
  void foo(int x) {
  }
}

This should be valid, since both functions have internal linkage and
therefore none of them has C language linkage. Commenting the first
declaration makes the code invalid as now the last one is extern C and
[dcl.link] p6 kicks in. This means we have to do "normal" overload
resolution first to see if the last decl we are looking at has C
language linkage or not.

Implementing this without doing two passes over the loopkup result is
not trivial. The check of two function overloading has 3 possibilities
* It is a redeclaration
* it is an overload
* it is a redeclaration if the last one has C language linkage.

The attached patch implements it, but I really hope there is a better
way to implement this :-(

Cheers,
Rafael

Attachment: t.patch
Description: Binary data

_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to