diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2015-11-12 22:19:45 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2015-11-12 22:19:45 +0000 |
commit | 97135cc94a8fcc1ec9b04e4db4ef08c18081b8be (patch) | |
tree | 5fb465525229cfc753453ed288944b51aeb9196b /clang/test/Modules/merge-enumerators.cpp | |
parent | 990668b7d00e598f110eff510ca4681b4211d47f (diff) | |
download | bcm5719-llvm-97135cc94a8fcc1ec9b04e4db4ef08c18081b8be.tar.gz bcm5719-llvm-97135cc94a8fcc1ec9b04e4db4ef08c18081b8be.zip |
[modules] Simplify and generalize the existing rule for finding hidden
declarations in redeclaration lookup. A declaration is now visible to
lookup if:
* It is visible (not in a module, or in an imported module), or
* We're doing redeclaration lookup and it's externally-visible, or
* We're doing typo correction and looking for unimported decls.
We now support multiple modules having different internal-linkage or no-linkage
definitions of the same name for all entities, not just for functions,
variables, and some typedefs. As previously, if multiple such entities are
visible, any attempt to use them will result in an ambiguity error.
This patch fixes the linkage calculation for a number of entities where we
previously didn't need to get it right (using-declarations, namespace aliases,
and so on). It also classifies enumerators as always having no linkage, which
is a slight deviation from the C++ standard's definition, but not an observable
change outside modules (this change is being discussed on the -core reflector
currently).
This also removes the prior special case for tag lookup, which made some cases
of this work, but also led to bizarre, bogus "must use 'struct' to refer to type
'Foo' in this scope" diagnostics in C++.
llvm-svn: 252960
Diffstat (limited to 'clang/test/Modules/merge-enumerators.cpp')
-rw-r--r-- | clang/test/Modules/merge-enumerators.cpp | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/clang/test/Modules/merge-enumerators.cpp b/clang/test/Modules/merge-enumerators.cpp index 5267ac658b8..10e1914bd7b 100644 --- a/clang/test/Modules/merge-enumerators.cpp +++ b/clang/test/Modules/merge-enumerators.cpp @@ -16,11 +16,13 @@ #ifdef MERGE_LATE namespace N { - // FIXME: Should we accept this and reject the usage below due to ambiguity instead? - enum { A } a; // expected-error {{redefinition of enumerator 'A'}} - // expected-note@a.h:1 {{here}} (from module B.b) + enum { A } a; // expected-note {{candidate}} + // expected-note@a.h:1 {{candidate}} (from module B.b) } #include "a.h" #endif N::E e = N::A; +#ifdef MERGE_LATE +// expected-error@-2 {{ambiguous}} +#endif |