diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index 1d8f9b7d203c..af5fdc95c909 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -12121,12 +12121,10 @@ Decl *Sema::ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK, // 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. diff --git a/clang/test/Modules/Inputs/elaborated-type-structs.h b/clang/test/Modules/Inputs/elaborated-type-structs.h deleted file mode 100644 index da3940998fd5..000000000000 --- a/clang/test/Modules/Inputs/elaborated-type-structs.h +++ /dev/null @@ -1,3 +0,0 @@ -struct S1; -struct S2 { int x; }; -struct S3 { int x; }; diff --git a/clang/test/Modules/Inputs/module.map b/clang/test/Modules/Inputs/module.map index 632517dd363f..226d45fdf44b 100644 --- a/clang/test/Modules/Inputs/module.map +++ b/clang/test/Modules/Inputs/module.map @@ -386,10 +386,3 @@ module TypedefTag { header "typedef-tag-hidden.h" } } - -module ElaboratedTypeStructs { - module Empty {} - module Structs { - header "elaborated-type-structs.h" - } -} diff --git a/clang/test/Modules/elaborated-type-specifier-from-hidden-module.m b/clang/test/Modules/elaborated-type-specifier-from-hidden-module.m deleted file mode 100644 index 0ca1c24bba00..000000000000 --- a/clang/test/Modules/elaborated-type-specifier-from-hidden-module.m +++ /dev/null @@ -1,18 +0,0 @@ -// 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);