summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang/lib/Sema/SemaDecl.cpp10
-rw-r--r--clang/test/Modules/Inputs/elaborated-type-structs.h3
-rw-r--r--clang/test/Modules/Inputs/module.map7
-rw-r--r--clang/test/Modules/elaborated-type-specifier-from-hidden-module.m18
4 files changed, 4 insertions, 34 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index 1d8f9b7d203..af5fdc95c90 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 da3940998fd..00000000000
--- 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 632517dd363..226d45fdf44 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 0ca1c24bba0..00000000000
--- 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);
OpenPOWER on IntegriCloud