// In C++, we need to do a redeclaration lookup to properly
// diagnose some problems.
- // FIXME: this lookup is also used (with and without C++) to find a hidden
- // declaration so that we don't get ambiguity errors when using a type
- // declared by an elaborated-type-specifier. In C that is not correct and
- // we should instead merge compatible types found by lookup.
- Previous.setRedeclarationKind(ForRedeclaration);
- LookupQualifiedName(Previous, SearchDC);
+ if (getLangOpts().CPlusPlus) {
+ Previous.setRedeclarationKind(ForRedeclaration);
+ LookupQualifiedName(Previous, SearchDC);
+ }
}
// If we have a known previous declaration to use, then use it.
+++ /dev/null
-// RUN: rm -rf %t
-// RUN: %clang_cc1 -fmodules -fimplicit-module-maps -fmodules-cache-path=%t -I %S/Inputs %s -verify
-
-@import ElaboratedTypeStructs.Empty; // The structs are now hidden.
-struct S1 *x;
-struct S2 *y;
-// FIXME: compatible definition should not be an error.
-struct S2 { int x; }; // expected-error {{redefinition}}
-struct S3 *z;
-// Incompatible definition.
-struct S3 { float y; }; // expected-error {{redefinition}}
-// expected-note@elaborated-type-structs.h:* 2 {{previous definition is here}}
-
-@import ElaboratedTypeStructs.Structs;
-
-void useS1(struct S1 *x);
-void useS2(struct S2 *x);
-void useS2(struct S2 *x);