Only filter out names reserved for the implementation (e.g., __blah or

_Foo) from code-completion results when they come from a system
header.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@108338 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Douglas Gregor 2010-07-14 17:44:04 +00:00
parent 9ccd725104
commit 797efb51ce
3 changed files with 15 additions and 6 deletions

View File

@ -407,13 +407,16 @@ bool ResultBuilder::isInterestingDecl(NamedDecl *ND,
return false;
// Filter out names reserved for the implementation (C99 7.1.3,
// C++ [lib.global.names]). Users don't need to see those.
// C++ [lib.global.names]) if they come from a system header.
//
// FIXME: Add predicate for this.
if (Id->getLength() >= 2) {
const char *Name = Id->getNameStart();
if (Name[0] == '_' &&
(Name[1] == '_' || (Name[1] >= 'A' && Name[1] <= 'Z')))
(Name[1] == '_' || (Name[1] >= 'A' && Name[1] <= 'Z')) &&
(ND->getLocation().isInvalid() ||
SemaRef.SourceMgr.isInSystemHeader(
SemaRef.SourceMgr.getSpellingLoc(ND->getLocation()))))
return false;
}
}

View File

@ -0,0 +1,2 @@
typedef int _INTEGER_TYPE;
typedef float FLOATING_TYPE;

View File

@ -1,10 +1,14 @@
#include <reserved.h>
struct X { int x; };
typedef struct t TYPEDEF;
typedef struct t _TYPEDEF;
void foo() {
int y;
// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:6:9 %s -o - | FileCheck -check-prefix=CHECK-CC1 %s
// RUN: %clang_cc1 -isystem %S/Inputs -fsyntax-only -code-completion-at=%s:6:9 %s -o - | FileCheck -check-prefix=CHECK-CC1 %s
// CHECK-CC1: _Imaginary
// CHECK-CC1-NOT: _INTEGER_TYPE;
// CHECK-CC1: _TYPEDEF
// CHECK-CC1: FLOATING_TYPE
// CHECK-CC1: foo
// CHECK-CC1: y
// CHECK-CC1: TYPEDEF
// CHECK-CC1: y