[PATCH] D61097: [Sema] Emit warning for visibility attribute on internal-linkage declaration
Scott Linder via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Apr 26 08:04:20 PDT 2019
scott.linder updated this revision to Diff 196853.
scott.linder added a comment.
Clean up use of `auto`
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D61097/new/
https://reviews.llvm.org/D61097
Files:
lib/Sema/SemaDeclAttr.cpp
test/Sema/attr-visibility.c
test/SemaCXX/ast-print.cpp
test/SemaCXX/attr-visibility.cpp
Index: test/SemaCXX/attr-visibility.cpp
===================================================================
--- test/SemaCXX/attr-visibility.cpp
+++ test/SemaCXX/attr-visibility.cpp
@@ -18,3 +18,9 @@
struct x3 {
static int y;
} __attribute((visibility("default"))); // expected-warning {{attribute 'visibility' after definition is ignored}}
+
+const int test4 __attribute__((visibility("default"))) = 0; // expected-warning {{'visibility' attribute ignored}}
+
+namespace {
+ int test5 __attribute__((visibility("default"))); // expected-warning {{'visibility' attribute ignored}}
+};
Index: test/SemaCXX/ast-print.cpp
===================================================================
--- test/SemaCXX/ast-print.cpp
+++ test/SemaCXX/ast-print.cpp
@@ -209,10 +209,8 @@
}
}
-namespace {
// CHECK: struct {{\[\[gnu::visibility\(\"hidden\"\)\]\]}} S;
struct [[gnu::visibility("hidden")]] S;
-}
// CHECK: struct CXXFunctionalCastExprPrint {
// CHECK-NEXT: } fce = CXXFunctionalCastExprPrint{};
Index: test/Sema/attr-visibility.c
===================================================================
--- test/Sema/attr-visibility.c
+++ test/Sema/attr-visibility.c
@@ -26,3 +26,9 @@
int x __attribute__((type_visibility("default"))); // expected-error {{'type_visibility' attribute only applies to types and namespaces}}
int PR17105 __attribute__((visibility(hidden))); // expected-error {{'visibility' attribute requires a string}}
+
+static int test8 __attribute__((visibility("default"))); // expected-warning {{'visibility' attribute ignored}}
+static int test9 __attribute__((visibility("hidden"))); // expected-warning {{'visibility' attribute ignored}}
+static int test10 __attribute__((visibility("internal"))); // expected-warning {{'visibility' attribute ignored}}
+
+static int test11() __attribute__((visibility("default"))); // expected-warning {{'visibility' attribute ignored}}
Index: lib/Sema/SemaDeclAttr.cpp
===================================================================
--- lib/Sema/SemaDeclAttr.cpp
+++ lib/Sema/SemaDeclAttr.cpp
@@ -2615,6 +2615,14 @@
return;
}
+ // Visibility attributes have no effect on symbols with internal linkage.
+ if (const auto *ND = dyn_cast<NamedDecl>(D)) {
+ if (!ND->isExternallyVisible()) {
+ S.Diag(AL.getRange().getBegin(), diag::warn_attribute_ignored) << AL;
+ return;
+ }
+ }
+
// Check that the argument is a string literal.
StringRef TypeStr;
SourceLocation LiteralLoc;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D61097.196853.patch
Type: text/x-patch
Size: 2490 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20190426/198035a7/attachment-0001.bin>
More information about the cfe-commits
mailing list