Author: rsmith Date: Thu Nov 12 23:14:45 2015 New Revision: 253012 URL: http://llvm.org/viewvc/llvm-project?rev=253012&view=rev Log: [modules] When a declaration has non-trivial visibility, check whether it's actually hidden before we check its linkage. This avoids computing the linkage "too early" for an anonymous struct with a typedef name for linkage.
Modified: cfe/trunk/include/clang/Sema/Lookup.h cfe/trunk/test/Modules/submodule-visibility.cpp Modified: cfe/trunk/include/clang/Sema/Lookup.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/Lookup.h?rev=253012&r1=253011&r2=253012&view=diff ============================================================================== --- cfe/trunk/include/clang/Sema/Lookup.h (original) +++ cfe/trunk/include/clang/Sema/Lookup.h Thu Nov 12 23:14:45 2015 @@ -303,8 +303,7 @@ public: if (!D->isInIdentifierNamespace(IDNS)) return nullptr; - if (!D->isHidden() || isHiddenDeclarationVisible(D) || - isVisibleSlow(getSema(), D)) + if (isVisible(getSema(), D) || isHiddenDeclarationVisible(D)) return D; return getAcceptableDeclSlow(D); Modified: cfe/trunk/test/Modules/submodule-visibility.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/submodule-visibility.cpp?rev=253012&r1=253011&r2=253012&view=diff ============================================================================== --- cfe/trunk/test/Modules/submodule-visibility.cpp (original) +++ cfe/trunk/test/Modules/submodule-visibility.cpp Thu Nov 12 23:14:45 2015 @@ -28,3 +28,10 @@ int k = n + m; // OK, a and b are visibl #ifndef B #error B is not defined #endif + +// Ensure we don't compute the linkage of this struct before we find it has a +// typedef name for linkage purposes. +typedef struct { + int p; + void (*f)(int p); +} name_for_linkage; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits