[PATCH] D13925: Implement __attribute__((internal_linkage))
Richard Smith via cfe-commits
cfe-commits at lists.llvm.org
Mon Nov 2 13:53:00 PST 2015
rsmith added inline comments.
================
Comment at: include/clang/Basic/Attr.td:2125
@@ +2124,3 @@
+
+def InternalLinkage : InheritableAttr {
+ let Spellings = [GNU<"internal_linkage">, CXX11<"clang", "internal_linkage">];
----------------
`InheritableAttr` doesn't seem right for the case when this is applied to a namespace.
================
Comment at: lib/AST/Decl.cpp:1358-1362
@@ -1346,3 +1357,7 @@
}
- assert(!Old || Old->getCachedLinkage() == D->getCachedLinkage());
+ // Linkages may also differ if one of the declarations has
+ // InternalLinkageAttr.
+ assert(!Old || Old->getCachedLinkage() == D->getCachedLinkage() ||
+ (Old->hasAttr<InternalLinkageAttr>() !=
+ D->hasAttr<InternalLinkageAttr>()));
#endif
----------------
We shouldn't allow the linkage to be changed after the first declaration. What cases cause problems here?
================
Comment at: lib/Sema/Sema.cpp:539
@@ -538,3 +538,3 @@
- if (!ND->isExternallyVisible()) {
+ if (!ND->isExternallyVisible() || ND->hasAttr<InternalLinkageAttr>()) {
S.Diag(ND->getLocation(), diag::warn_undefined_internal)
----------------
Hmm, what should `isExternallyVisible` return for a declaration with this attribute? Presumably it should be `false`...
Repository:
rL LLVM
http://reviews.llvm.org/D13925
More information about the cfe-commits
mailing list