forked from OSchip/llvm-project
Fix pr18174.
Clang outputs LLVM one top level decl at a time. This combined with the visibility computation code looking for the newest NamespaceDecl would cause it to produce different results for nested namespaces. The two options for producing consistent results are * Delay codegen of anything inside a namespace until the end of the file. * Don't look for the newest NamespaceDecl. This patch implements the second option. This matches the gcc behavior too. llvm-svn: 196712
This commit is contained in:
parent
1b3dd3527e
commit
7ab1ce04bb
|
@ -976,7 +976,7 @@ getExplicitVisibilityAux(const NamedDecl *ND,
|
|||
kind);
|
||||
|
||||
// Use the most recent declaration.
|
||||
if (!IsMostRecent) {
|
||||
if (!IsMostRecent && !isa<NamespaceDecl>(ND)) {
|
||||
const NamedDecl *MostRecent = ND->getMostRecentDecl();
|
||||
if (MostRecent != ND)
|
||||
return getExplicitVisibilityAux(MostRecent, kind, true);
|
||||
|
|
|
@ -1295,3 +1295,17 @@ namespace test68 {
|
|||
}
|
||||
// Check lines at top of file.
|
||||
}
|
||||
|
||||
namespace test69 {
|
||||
// PR18174
|
||||
namespace foo {
|
||||
void f();
|
||||
}
|
||||
namespace foo {
|
||||
void f() {};
|
||||
}
|
||||
namespace foo __attribute__((visibility("hidden"))) {
|
||||
}
|
||||
// CHECK-LABEL: define void @_ZN6test693foo1fEv
|
||||
// CHECK-HIDDEN-LABEL: define hidden void @_ZN6test693foo1fEv
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue