<div dir="ltr">Of course, apologies for this.  Reverted in r271291 and recommitted in r271292.<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, May 31, 2016 at 10:18 AM, David Blaikie <span dir="ltr"><<a href="mailto:dblaikie@gmail.com" target="_blank">dblaikie@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Burt Wesarg points out on cfe-dev that this commit message doesn't match the patch (nor the description provided in the code review thread that lead to this commit) - this one might be worth reverting and recommitting with a more accurate commit message (I don't usually suggest this for most commits that are missing a commit message, but this one is actively misleading so might be trickier when people are doing archaeology)?<div class="gmail_extra"><br><div class="gmail_quote">On Mon, Nov 23, 2015 at 11:56 AM, Ehsan Akhgari via cfe-commits <span dir="ltr"><<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: ehsan<br>
Date: Mon Nov 23 13:56:46 2015<br>
New Revision: 253909<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=253909&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=253909&view=rev</a><br>
Log:<br>
Make clang_Cursor_getMangling not mangle if the declaration isn't mangled<br>
<br>
Right now clang_Cursor_getMangling will attempt to mangle any<br>
declaration, even if the declaration isn't mangled (extern C).  This<br>
results in a partially mangled name which isn't useful for much. This<br>
patch makes clang_Cursor_getMangling return an empty string if the<br>
declaration isn't mangled.<br>
<br>
Patch by Michael Wu <<a href="mailto:mwu@mozilla.com" target="_blank">mwu@mozilla.com</a>>.<br>
<br>
Added:<br>
    cfe/trunk/test/Index/symbol-visibility.c<br>
Modified:<br>
    cfe/trunk/include/clang-c/Index.h<br>
    cfe/trunk/tools/c-index-test/c-index-test.c<br>
    cfe/trunk/tools/libclang/CIndex.cpp<br>
    cfe/trunk/tools/libclang/libclang.exports<br>
<br>
Modified: cfe/trunk/include/clang-c/Index.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang-c/Index.h?rev=253909&r1=253908&r2=253909&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang-c/Index.h?rev=253909&r1=253908&r2=253909&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/include/clang-c/Index.h (original)<br>
+++ cfe/trunk/include/clang-c/Index.h Mon Nov 23 13:56:46 2015<br>
@@ -2461,6 +2461,32 @@ enum CXLinkageKind {<br>
 CINDEX_LINKAGE enum CXLinkageKind clang_getCursorLinkage(CXCursor cursor);<br>
<br>
 /**<br>
+ * \brief Describe the visibility of the entity referred to by a cursor.<br>
+ *<br>
+ * This returns the default visibility if not explicitly specified by<br>
+ * a visibility attribute. The default visibility may be changed by<br>
+ * commandline arguments.<br>
+ *<br>
+ * \param cursor The cursor to query.<br>
+ *<br>
+ * \returns The visibility of the cursor.<br>
+ */<br>
+enum CXVisibilityKind {<br>
+  /** \brief This value indicates that no visibility information is available<br>
+   * for a provided CXCursor. */<br>
+  CXVisibility_Invalid,<br>
+<br>
+  /** \brief Symbol not seen by the linker. */<br>
+  CXVisibility_Hidden,<br>
+  /** \brief Symbol seen by the linker but resolves to a symbol inside this object. */<br>
+  CXVisibility_Protected,<br>
+  /** \brief Symbol seen by the linker and acts like a normal symbol. */<br>
+  CXVisibility_Default,<br>
+};<br>
+<br>
+CINDEX_LINKAGE enum CXVisibilityKind clang_getCursorVisibility(CXCursor cursor);<br>
+<br>
+/**<br>
  * \brief Determine the availability of the entity that this cursor refers to,<br>
  * taking the current target platform into account.<br>
  *<br>
<br>
Added: cfe/trunk/test/Index/symbol-visibility.c<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Index/symbol-visibility.c?rev=253909&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Index/symbol-visibility.c?rev=253909&view=auto</a><br>
==============================================================================<br>
--- cfe/trunk/test/Index/symbol-visibility.c (added)<br>
+++ cfe/trunk/test/Index/symbol-visibility.c Mon Nov 23 13:56:46 2015<br>
@@ -0,0 +1,7 @@<br>
+// RUN: c-index-test -test-print-visibility %s | FileCheck %s<br>
+<br>
+__attribute__ ((visibility ("default"))) void foo1();<br>
+__attribute__ ((visibility ("hidden"))) void foo2();<br>
+<br>
+// CHECK: FunctionDecl=foo1:3:47visibility=Default<br>
+// CHECK: FunctionDecl=foo2:4:46visibility=Hidden<br>
<br>
Modified: cfe/trunk/tools/c-index-test/c-index-test.c<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/c-index-test/c-index-test.c?rev=253909&r1=253908&r2=253909&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/c-index-test/c-index-test.c?rev=253909&r1=253908&r2=253909&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/tools/c-index-test/c-index-test.c (original)<br>
+++ cfe/trunk/tools/c-index-test/c-index-test.c Mon Nov 23 13:56:46 2015<br>
@@ -1248,6 +1248,32 @@ static enum CXChildVisitResult PrintLink<br>
 }<br>
<br>
 /******************************************************************************/<br>
+/* Visibility testing.                                                        */<br>
+/******************************************************************************/<br>
+<br>
+static enum CXChildVisitResult PrintVisibility(CXCursor cursor, CXCursor p,<br>
+                                               CXClientData d) {<br>
+  const char *visibility = 0;<br>
+<br>
+  if (clang_isInvalid(clang_getCursorKind(cursor)))<br>
+    return CXChildVisit_Recurse;<br>
+<br>
+  switch (clang_getCursorVisibility(cursor)) {<br>
+    case CXVisibility_Invalid: break;<br>
+    case CXVisibility_Hidden: visibility = "Hidden"; break;<br>
+    case CXVisibility_Protected: visibility = "Protected"; break;<br>
+    case CXVisibility_Default: visibility = "Default"; break;<br>
+  }<br>
+<br>
+  if (visibility) {<br>
+    PrintCursor(cursor, NULL);<br>
+    printf("visibility=%s\n", visibility);<br>
+  }<br>
+<br>
+  return CXChildVisit_Recurse;<br>
+}<br>
+<br>
+/******************************************************************************/<br>
 /* Typekind testing.                                                          */<br>
 /******************************************************************************/<br>
<br>
@@ -4084,6 +4110,7 @@ static void print_usage(void) {<br>
     "       c-index-test -test-inclusion-stack-tu <AST file>\n");<br>
   fprintf(stderr,<br>
     "       c-index-test -test-print-linkage-source {<args>}*\n"<br>
+    "       c-index-test -test-print-visibility {<args>}*\n"<br>
     "       c-index-test -test-print-type {<args>}*\n"<br>
     "       c-index-test -test-print-type-size {<args>}*\n"<br>
     "       c-index-test -test-print-bitwidth {<args>}*\n"<br>
@@ -4171,6 +4198,9 @@ int cindextest_main(int argc, const char<br>
   else if (argc > 2 && strcmp(argv[1], "-test-print-linkage-source") == 0)<br>
     return perform_test_load_source(argc - 2, argv + 2, "all", PrintLinkage,<br>
                                     NULL);<br>
+  else if (argc > 2 && strcmp(argv[1], "-test-print-visibility") == 0)<br>
+    return perform_test_load_source(argc - 2, argv + 2, "all", PrintVisibility,<br>
+                                    NULL);<br>
   else if (argc > 2 && strcmp(argv[1], "-test-print-type") == 0)<br>
     return perform_test_load_source(argc - 2, argv + 2, "all",<br>
                                     PrintType, 0);<br>
<br>
Modified: cfe/trunk/tools/libclang/CIndex.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/CIndex.cpp?rev=253909&r1=253908&r2=253909&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/CIndex.cpp?rev=253909&r1=253908&r2=253909&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/tools/libclang/CIndex.cpp (original)<br>
+++ cfe/trunk/tools/libclang/CIndex.cpp Mon Nov 23 13:56:46 2015<br>
@@ -6451,6 +6451,27 @@ CXLinkageKind clang_getCursorLinkage(CXC<br>
 } // end: extern "C"<br>
<br>
 //===----------------------------------------------------------------------===//<br>
+// Operations for querying visibility of a cursor.<br>
+//===----------------------------------------------------------------------===//<br>
+<br>
+extern "C" {<br>
+CXVisibilityKind clang_getCursorVisibility(CXCursor cursor) {<br>
+  if (!clang_isDeclaration(cursor.kind))<br>
+    return CXVisibility_Invalid;<br>
+<br>
+  const Decl *D = cxcursor::getCursorDecl(cursor);<br>
+  if (const NamedDecl *ND = dyn_cast_or_null<NamedDecl>(D))<br>
+    switch (ND->getVisibility()) {<br>
+      case HiddenVisibility: return CXVisibility_Hidden;<br>
+      case ProtectedVisibility: return CXVisibility_Protected;<br>
+      case DefaultVisibility: return CXVisibility_Default;<br>
+    };<br>
+<br>
+  return CXVisibility_Invalid;<br>
+}<br>
+} // end: extern "C"<br>
+<br>
+//===----------------------------------------------------------------------===//<br>
 // Operations for querying language of a cursor.<br>
 //===----------------------------------------------------------------------===//<br>
<br>
<br>
Modified: cfe/trunk/tools/libclang/libclang.exports<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/libclang.exports?rev=253909&r1=253908&r2=253909&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/libclang.exports?rev=253909&r1=253908&r2=253909&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/tools/libclang/libclang.exports (original)<br>
+++ cfe/trunk/tools/libclang/libclang.exports Mon Nov 23 13:56:46 2015<br>
@@ -176,6 +176,7 @@ clang_getCursorSemanticParent<br>
 clang_getCursorSpelling<br>
 clang_getCursorType<br>
 clang_getCursorUSR<br>
+clang_getCursorVisibility<br>
 clang_getDeclObjCTypeEncoding<br>
 clang_getDefinitionSpellingAndExtent<br>
 clang_getDiagnostic<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br></div></div>
</blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr">Ehsan<br></div></div>
</div>