[cfe-commits] r157206 - in /cfe/trunk: lib/AST/Decl.cpp test/CodeGenCXX/visibility.cpp
Rafael Espindola
rafael.espindola at gmail.com
Mon May 21 13:15:56 PDT 2012
Author: rafael
Date: Mon May 21 15:15:56 2012
New Revision: 157206
URL: http://llvm.org/viewvc/llvm-project?rev=157206&view=rev
Log:
Produce a hidden symbol for zed in
struct HIDDEN foo {
};
template <class P>
struct bar {
};
template <>
struct HIDDEN bar<foo> {
DEFAULT static void zed();
};
void bar<foo>::zed() {
}
Before we would produce a hidden symbol in
struct HIDDEN foo {
};
template <class P>
struct bar {
};
template <>
struct bar<foo> {
DEFAULT static void zed();
};
void bar<foo>::zed() {
}
But adding HIDDEN to the specialization would cause us to produce a default
symbol.
Modified:
cfe/trunk/lib/AST/Decl.cpp
cfe/trunk/test/CodeGenCXX/visibility.cpp
Modified: cfe/trunk/lib/AST/Decl.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/Decl.cpp?rev=157206&r1=157205&r2=157206&view=diff
==============================================================================
--- cfe/trunk/lib/AST/Decl.cpp (original)
+++ cfe/trunk/lib/AST/Decl.cpp Mon May 21 15:15:56 2012
@@ -163,7 +163,7 @@
}
static bool shouldConsiderTemplateLV(const ClassTemplateSpecializationDecl *d) {
- return !d->hasAttr<VisibilityAttr>();
+ return !d->hasAttr<VisibilityAttr>() || d->isExplicitSpecialization();
}
static LinkageInfo getLVForNamespaceScopeDecl(const NamedDecl *D,
Modified: cfe/trunk/test/CodeGenCXX/visibility.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/visibility.cpp?rev=157206&r1=157205&r2=157206&view=diff
==============================================================================
--- cfe/trunk/test/CodeGenCXX/visibility.cpp (original)
+++ cfe/trunk/test/CodeGenCXX/visibility.cpp Mon May 21 15:15:56 2012
@@ -789,3 +789,19 @@
// GCC produces a default for this one. Why?
// CHECK-HIDDEN: define weak_odr hidden void @_ZN6test391AINS_8hidden_tEE1BIS1_E4tempIS1_EEvv
}
+
+namespace test42 {
+ struct HIDDEN foo {
+ };
+ template <class P>
+ struct bar {
+ };
+ template <>
+ struct HIDDEN bar<foo> {
+ DEFAULT static void zed();
+ };
+ void bar<foo>::zed() {
+ }
+ // CHECK: define hidden void @_ZN6test423barINS_3fooEE3zedEv
+ // CHECK-HIDDEN: define hidden void @_ZN6test423barINS_3fooEE3zedEv
+}
More information about the cfe-commits
mailing list