[cfe-commits] r168410 - /cfe/trunk/lib/AST/Decl.cpp

Enea Zaffanella zaffanella at cs.unipr.it
Mon Dec 17 07:13:53 PST 2012


On 12/16/2012 05:54 PM, Rafael EspĂ­ndola wrote:
> In the c++ case the difference is that we use the canonical decl, so we
> will need a different way to test this.
>
> I think I have a fix, but it depends on the patch I posted yesterday
> fixing tentative definitions. I also need a testcase I can include in
> the clang test suite. A file that currently has an incorrect error or
> warning would be ideal, but a unit test will do.
>
> Would you mind making a test out of your visitor?

Not a viable alternative.

I tried to produce a -Wunused-variable warning with the following code:
======================
static int y;

int* inner() {
   extern int y;
   return &y;
}
======================

and a failing run-time testcase as follows
======================
static int y;

int* outer() {
   return &y;
}

int* inner() {
   extern int y;
   return &y;
}

int main() {
   return (outer() == inner()) ? 0 : 1;
}
======================

but in both cases clang behaves "correctly" (just because the second 
declaration of y has the first one as its canonical decl).

So, we have a canonical declaration having internal linkage and a later 
redeclaration of the same entity having external linkage.
Shouldn't this be *always* wrong? I mean, would it be possible to add an 
assertion in clang checking that, when a redeclaration is chained to 
previous ones, the corresponding linkages are "compatible"?

Enea.




More information about the cfe-commits mailing list