This patch fixes PR18964. In linkage computation, assertion fails when
an old invalid declaration's linkage mismatches with the current
decl's one.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@203168
91177308-0d34-0410-b5e6-
96231b3b80d8
// We have just computed the linkage for this decl. By induction we know
// that all other computed linkages match, check that the one we just
- // computed
- // also does.
+ // computed also does.
NamedDecl *Old = NULL;
for (NamedDecl::redecl_iterator I = D->redecls_begin(),
E = D->redecls_end();
NamedDecl *T = cast<NamedDecl>(*I);
if (T == D)
continue;
- if (T->hasCachedLinkage()) {
+ if (!T->isInvalidDecl() && T->hasCachedLinkage()) {
Old = T;
break;
}
void pr16247_bar(int) {}
void pr16247_bar(double) {}
}
+namespace PR18964 {
+ unsigned &*foo; //expected-error{{'foo' declared as a pointer to a reference of type}}
+ extern struct {} *foo; // don't assert
+}