Open
Description
In this example, we'd like to save some work by having the itypes rewritten to the definition:
static int compare (int* a : itype(_Ptr<int>), int* b : itype(_Ptr<int>));
static int compare (int* a, int* b)
{
a = 1;
b = 1;
return 1;
}
Internally, a and b are itypes in both prototypes, because clang merges them. The problem is that 3C avoids rewriting prototypes that don't change, and there's nothing to trigger the change. Make one of them safe, and you'll see that the other itype shows up as well.
It's possible that, because of clang's merge, 3C can't tell that there's a needed rewrite without reading the source during the rewrite phase.