[cfe-commits] r102641 - in /cfe/trunk: test/Index/usrs.m tools/CIndex/CIndexUSRs.cpp

Ted Kremenek kremenek at apple.com
Thu Apr 29 10:43:30 PDT 2010


Author: kremenek
Date: Thu Apr 29 12:43:29 2010
New Revision: 102641

URL: http://llvm.org/viewvc/llvm-project?rev=102641&view=rev
Log:
Add USR support for 'static inline' functions (which can be declared in header files).
Add USR support for 'static' functions and local variables, which can be handy for resolving named variables within a translation unit.

Modified:
    cfe/trunk/test/Index/usrs.m
    cfe/trunk/tools/CIndex/CIndexUSRs.cpp

Modified: cfe/trunk/test/Index/usrs.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Index/usrs.m?rev=102641&r1=102640&r2=102641&view=diff
==============================================================================
--- cfe/trunk/test/Index/usrs.m (original)
+++ cfe/trunk/test/Index/usrs.m Thu Apr 29 12:43:29 2010
@@ -1,5 +1,7 @@
 // RUN: c-index-test -test-load-source-usrs all %s | FileCheck %s
 
+static inline int my_helper(int x, int y) { return x + y; }
+
 enum {
   ABA,
   CADABA
@@ -36,6 +38,7 @@
   return 0;
 }
 + (id) kingkong {
+  int local_var;
   return 0;
 }
 @synthesize d1;
@@ -43,32 +46,42 @@
 
 int z;
 
-// CHECK: usrs.m c:@Ea at usrs.m@3:1 Extent=[3:1 - 6:2]
-// CHECK: usrs.m c:@Ea at usrs.m@3:1 at ABA Extent=[4:3 - 4:6]
-// CHECK: usrs.m c:@Ea at usrs.m@3:1 at CADABA Extent=[5:3 - 5:9]
-// CHECK: usrs.m c:@Ea at usrs.m@8:1 Extent=[8:1 - 11:2]
-// CHECK: usrs.m c:@Ea at usrs.m@8:1 at FOO Extent=[9:3 - 9:6]
-// CHECK: usrs.m c:@Ea at usrs.m@8:1 at BAR Extent=[10:3 - 10:6]
-// CHECK: usrs.m c:@SA at MyStruct Extent=[13:9 - 16:2]
-// CHECK: usrs.m c:@SA at MyStruct@FI at wa Extent=[14:7 - 14:9]
-// CHECK: usrs.m c:@SA at MyStruct@FI at moo Extent=[15:7 - 15:10]
-// CHECK: usrs.m c:@T at usrs.m@16:3 at MyStruct Extent=[16:3 - 16:11]
-// CHECK: usrs.m c:@E at Pizza Extent=[18:1 - 21:2]
-// CHECK: usrs.m c:@E at Pizza@CHEESE Extent=[19:3 - 19:9]
-// CHECK: usrs.m c:@E at Pizza@MUSHROOMS Extent=[20:3 - 20:12]
-// CHECK: usrs.m c:objc(cs)Foo Extent=[23:1 - 30:5]
-// CHECK: usrs.m c:objc(cs)Foo at x Extent=[24:6 - 24:7]
-// CHECK: usrs.m c:objc(cs)Foo at y Extent=[25:6 - 25:7]
-// CHECK: usrs.m c:objc(cs)Foo(py)d1 Extent=[29:15 - 29:17]
-// CHECK: usrs.m c:objc(cs)Foo(im)godzilla Extent=[27:1 - 27:17]
-// CHECK: usrs.m c:objc(cs)Foo(cm)kingkong Extent=[28:1 - 28:17]
-// CHECK: usrs.m c:objc(cs)Foo(im)d1 Extent=[29:15 - 29:17]
-// CHECK: usrs.m c:objc(cs)Foo(im)setD1: Extent=[29:15 - 29:17]
-// CHECK: usrs.m c:objc(cs)Foo Extent=[32:1 - 42:2]
-// CHECK: usrs.m c:objc(cs)Foo(im)godzilla Extent=[33:1 - 37:2]
-// CHECK: usrs.m c:@z Extent=[35:10 - 35:15]
-// CHECK: usrs.m c:objc(cs)Foo(cm)kingkong Extent=[38:1 - 40:2]
-// CHECK: usrs.m c:objc(cs)Foo at d1 Extent=[41:13 - 41:15]
-// CHECK: usrs.m c:objc(cs)Foo(py)d1 Extent=[41:1 - 41:15]
-// CHECK: usrs.m c:@z Extent=[44:1 - 44:6]
+static int local_func(int x) { return x; }
+
+// CHECK: usrs.m c:usrs.m at 3:19 at F@my_helper Extent=[3:19 - 3:60]
+// CHECK: usrs.m c:usrs.m at 3:29 at x Extent=[3:29 - 3:34]
+// CHECK: usrs.m c:usrs.m at 3:36 at y Extent=[3:36 - 3:41]
+// CHECK: usrs.m c:@Ea at usrs.m@5:1 Extent=[5:1 - 8:2]
+// CHECK: usrs.m c:@Ea at usrs.m@5:1 at ABA Extent=[6:3 - 6:6]
+// CHECK: usrs.m c:@Ea at usrs.m@5:1 at CADABA Extent=[7:3 - 7:9]
+// CHECK: usrs.m c:@Ea at usrs.m@10:1 Extent=[10:1 - 13:2]
+// CHECK: usrs.m c:@Ea at usrs.m@10:1 at FOO Extent=[11:3 - 11:6]
+// CHECK: usrs.m c:@Ea at usrs.m@10:1 at BAR Extent=[12:3 - 12:6]
+// CHECK: usrs.m c:@SA at MyStruct Extent=[15:9 - 18:2]
+// CHECK: usrs.m c:@SA at MyStruct@FI at wa Extent=[16:7 - 16:9]
+// CHECK: usrs.m c:@SA at MyStruct@FI at moo Extent=[17:7 - 17:10]
+// CHECK: usrs.m c:@T at usrs.m@18:3 at MyStruct Extent=[18:3 - 18:11]
+// CHECK: usrs.m c:@E at Pizza Extent=[20:1 - 23:2]
+// CHECK: usrs.m c:@E at Pizza@CHEESE Extent=[21:3 - 21:9]
+// CHECK: usrs.m c:@E at Pizza@MUSHROOMS Extent=[22:3 - 22:12]
+// CHECK: usrs.m c:objc(cs)Foo Extent=[25:1 - 32:5]
+// CHECK: usrs.m c:objc(cs)Foo at x Extent=[26:6 - 26:7]
+// CHECK: usrs.m c:objc(cs)Foo at y Extent=[27:6 - 27:7]
+// CHECK: usrs.m c:objc(cs)Foo(py)d1 Extent=[31:15 - 31:17]
+// CHECK: usrs.m c:objc(cs)Foo(im)godzilla Extent=[29:1 - 29:17]
+// CHECK: usrs.m c:objc(cs)Foo(cm)kingkong Extent=[30:1 - 30:17]
+// CHECK: usrs.m c:objc(cs)Foo(im)d1 Extent=[31:15 - 31:17]
+// CHECK: usrs.m c:objc(cs)Foo(im)setD1: Extent=[31:15 - 31:17]
+// CHECK: usrs.m c:usrs.m at 31:15 at d1 Extent=[31:15 - 31:17]
+// CHECK: usrs.m c:objc(cs)Foo Extent=[34:1 - 45:2]
+// CHECK: usrs.m c:objc(cs)Foo(im)godzilla Extent=[35:1 - 39:2]
+// CHECK: usrs.m c:usrs.m at 36:10 at a Extent=[36:10 - 36:19]
+// CHECK: usrs.m c:@z Extent=[37:10 - 37:15]
+// CHECK: usrs.m c:objc(cs)Foo(cm)kingkong Extent=[40:1 - 43:2]
+// CHECK: usrs.m c:usrs.m at 41:3 at local_var Extent=[41:3 - 41:16]
+// CHECK: usrs.m c:objc(cs)Foo at d1 Extent=[44:13 - 44:15]
+// CHECK: usrs.m c:objc(cs)Foo(py)d1 Extent=[44:1 - 44:15]
+// CHECK: usrs.m c:@z Extent=[47:1 - 47:6]
+// CHECK: usrs.m c:usrs.m at 49:12 at F@local_func Extent=[49:12 - 49:43]
+// CHECK: usrs.m c:usrs.m at 49:23 at x Extent=[49:23 - 49:28]
 

Modified: cfe/trunk/tools/CIndex/CIndexUSRs.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/CIndex/CIndexUSRs.cpp?rev=102641&r1=102640&r2=102641&view=diff
==============================================================================
--- cfe/trunk/tools/CIndex/CIndexUSRs.cpp (original)
+++ cfe/trunk/tools/CIndex/CIndexUSRs.cpp Thu Apr 29 12:43:29 2010
@@ -131,7 +131,14 @@
 }
 
 void USRGenerator::VisitFunctionDecl(FunctionDecl *D) {
-  VisitDeclContext(D->getDeclContext());
+  if (D->getLinkage() != ExternalLinkage) {
+    GenLoc(D);
+    if (IgnoreResults)
+      return;
+  }
+  else
+    VisitDeclContext(D->getDeclContext());
+
   Out << "@F@" << D;
 }
 
@@ -152,10 +159,15 @@
   // VarDecls can be declared 'extern' within a function or method body,
   // but their enclosing DeclContext is the function, not the TU.  We need
   // to check the storage class to correctly generate the USR.
-  if (!D->hasExternalStorage())
-    VisitDeclContext(D->getDeclContext());
+  if (D->getLinkage() != ExternalLinkage) {
+    GenLoc(D);
+    if (IgnoreResults)
+      return;
+  }
+
+  // Variables always have simple names.
+  llvm::StringRef s = D->getName();
 
-  const std::string &s = D->getNameAsString();
   // The string can be empty if the declaration has no name; e.g., it is
   // the ParmDecl with no name for declaration of a function pointer type, e.g.:
   //  	void  (*f)(void *);
@@ -377,10 +389,13 @@
         // enums/anonymous structs/etc. defined in a common header file
         // are referred to across multiple translation units.
         if (isa<TagDecl>(ND) || isa<TypedefDecl>(ND) ||
-            isa<EnumConstantDecl>(ND) || isa<FieldDecl>(ND))
+            isa<EnumConstantDecl>(ND) || isa<FieldDecl>(ND) ||
+            isa<VarDecl>(ND))
           break;
         // Fall-through.
       case InternalLinkage:
+        if (isa<FunctionDecl>(ND))
+          break;
       case UniqueExternalLinkage:
         return createCXString("");
     }





More information about the cfe-commits mailing list