Skip to content

Commit 662d55f

Browse files
committed
C++: Add tests for qualified names
1 parent 98657eb commit 662d55f

File tree

5 files changed

+160
-0
lines changed

5 files changed

+160
-0
lines changed
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
2+
3+
void overloadedFunction(int);
4+
void overloadedFunction(void *);
5+
6+
enum Enum { enumConstant };
7+
enum class EnumClass { classEnumConstant };
8+
9+
class C {
10+
void privateFunction();
11+
public:
12+
void publicFunction();
13+
14+
enum Enum { enumConstant };
15+
enum class EnumClass { classEnumConstant };
16+
17+
class Nested {
18+
friend class FriendOfNested;
19+
Nested();
20+
21+
enum Enum { enumConstant };
22+
};
23+
};
24+
25+
int main() {
26+
class LocalClass {
27+
int localClassField;
28+
};
29+
return 0;
30+
}
31+
32+
namespace ns {
33+
int f();
34+
class C;
35+
}
36+
37+
typedef struct {
38+
int structField;
39+
} typedefStructName, *ptypedefStructName;
40+
41+
typedef C typedefC;
42+
43+
namespace templates {
44+
template<typename T>
45+
struct TemplateClass {
46+
T x;
47+
48+
template<typename Ignored>
49+
const T &getMember(Ignored ignored) const { return x; }
50+
};
51+
52+
template<typename T, typename Ignored>
53+
const T &getMember(TemplateClass<T> &tc, Ignored ignored) {
54+
return tc.getMember(ignored);
55+
}
56+
57+
long use() {
58+
TemplateClass<unsigned long> tc = { 22 };
59+
return getMember(tc, typedefC());
60+
}
61+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
| file://:0:0:0:0 | __va_list_tag | __va_list_tag | | | __va_list_tag | __va_list_tag |
2+
| file://:0:0:0:0 | fp_offset | __va_list_tag::fp_offset | | __va_list_tag | fp_offset | (not global) |
3+
| file://:0:0:0:0 | gp_offset | __va_list_tag::gp_offset | | __va_list_tag | gp_offset | (not global) |
4+
| file://:0:0:0:0 | operator= | __va_list_tag::operator= | | __va_list_tag | operator= | (not global) |
5+
| file://:0:0:0:0 | operator= | __va_list_tag::operator= | | __va_list_tag | operator= | (not global) |
6+
| file://:0:0:0:0 | overflow_arg_area | __va_list_tag::overflow_arg_area | | __va_list_tag | overflow_arg_area | (not global) |
7+
| file://:0:0:0:0 | reg_save_area | __va_list_tag::reg_save_area | | __va_list_tag | reg_save_area | (not global) |
8+
| qualifiedNames.cpp:3:6:3:23 | overloadedFunction | overloadedFunction | | | overloadedFunction | overloadedFunction |
9+
| qualifiedNames.cpp:4:6:4:23 | overloadedFunction | overloadedFunction | | | overloadedFunction | overloadedFunction |
10+
| qualifiedNames.cpp:6:6:6:9 | Enum | Enum | | | Enum | Enum |
11+
| qualifiedNames.cpp:6:13:6:24 | enumConstant | Enum::enumConstant | | Enum | enumConstant | (not global) |
12+
| qualifiedNames.cpp:7:12:7:20 | EnumClass | EnumClass | | | EnumClass | EnumClass |
13+
| qualifiedNames.cpp:7:24:7:40 | classEnumConstant | EnumClass::classEnumConstant | | EnumClass | classEnumConstant | (not global) |
14+
| qualifiedNames.cpp:9:7:9:7 | C | C | | | C | C |
15+
| qualifiedNames.cpp:9:7:9:7 | operator= | C::operator= | | C | operator= | (not global) |
16+
| qualifiedNames.cpp:9:7:9:7 | operator= | C::operator= | | C | operator= | (not global) |
17+
| qualifiedNames.cpp:10:8:10:22 | privateFunction | C::privateFunction | | C | privateFunction | (not global) |
18+
| qualifiedNames.cpp:12:8:12:21 | publicFunction | C::publicFunction | | C | publicFunction | (not global) |
19+
| qualifiedNames.cpp:14:8:14:11 | Enum | C::Enum | | C | Enum | (not global) |
20+
| qualifiedNames.cpp:14:15:14:26 | enumConstant | C::Enum::enumConstant | | C::Enum | enumConstant | (not global) |
21+
| qualifiedNames.cpp:15:14:15:22 | EnumClass | C::EnumClass | | C | EnumClass | (not global) |
22+
| qualifiedNames.cpp:15:26:15:42 | classEnumConstant | C::EnumClass::classEnumConstant | | C::EnumClass | classEnumConstant | (not global) |
23+
| qualifiedNames.cpp:17:9:17:9 | Nested | C::Nested::Nested | | C::Nested | Nested | (not global) |
24+
| qualifiedNames.cpp:17:9:17:9 | Nested | C::Nested::Nested | | C::Nested | Nested | (not global) |
25+
| qualifiedNames.cpp:17:9:17:9 | operator= | C::Nested::operator= | | C::Nested | operator= | (not global) |
26+
| qualifiedNames.cpp:17:9:17:9 | operator= | C::Nested::operator= | | C::Nested | operator= | (not global) |
27+
| qualifiedNames.cpp:17:9:17:14 | Nested | C::Nested | | C | Nested | (not global) |
28+
| qualifiedNames.cpp:18:18:18:31 | FriendOfNested | FriendOfNested | | | FriendOfNested | FriendOfNested |
29+
| qualifiedNames.cpp:19:5:19:10 | Nested | C::Nested::Nested | | C::Nested | Nested | (not global) |
30+
| qualifiedNames.cpp:21:10:21:13 | Enum | C::Nested::Enum | | C::Nested | Enum | (not global) |
31+
| qualifiedNames.cpp:21:17:21:28 | enumConstant | C::Nested::Enum::enumConstant | | C::Nested::Enum | enumConstant | (not global) |
32+
| qualifiedNames.cpp:25:5:25:8 | main | main | | | main | main |
33+
| qualifiedNames.cpp:33:7:33:7 | f | ns::f | ns | | f | (not global) |
34+
| qualifiedNames.cpp:34:9:34:9 | C | ns::C | ns | | C | (not global) |
35+
| qualifiedNames.cpp:37:16:37:16 | operator= | typedefStructName::operator= | | typedefStructName | operator= | (not global) |
36+
| qualifiedNames.cpp:37:16:37:16 | operator= | typedefStructName::operator= | | typedefStructName | operator= | (not global) |
37+
| qualifiedNames.cpp:37:16:37:32 | typedefStructName | typedefStructName | | | typedefStructName | typedefStructName |
38+
| qualifiedNames.cpp:38:7:38:17 | structField | typedefStructName::structField | | typedefStructName | structField | (not global) |
39+
| qualifiedNames.cpp:39:3:39:19 | typedefStructName | typedefStructName | | | typedefStructName | typedefStructName |
40+
| qualifiedNames.cpp:39:23:39:40 | ptypedefStructName | ptypedefStructName | | | ptypedefStructName | ptypedefStructName |
41+
| qualifiedNames.cpp:41:11:41:18 | typedefC | typedefC | | | typedefC | typedefC |
42+
| qualifiedNames.cpp:45:10:45:10 | operator= | templates::TemplateClass<unsigned long>::operator= | templates | TemplateClass | operator= | (not global) |
43+
| qualifiedNames.cpp:45:10:45:10 | operator= | templates::TemplateClass<unsigned long>::operator= | templates | TemplateClass | operator= | (not global) |
44+
| qualifiedNames.cpp:45:10:45:22 | TemplateClass<T> | templates::TemplateClass<T> | templates | | TemplateClass | (not global) |
45+
| qualifiedNames.cpp:45:10:45:22 | TemplateClass<T> | templates::TemplateClass<T> | templates | | TemplateClass | (not global) |
46+
| qualifiedNames.cpp:45:10:45:22 | TemplateClass<unsigned long> | templates::TemplateClass<unsigned long> | templates | | TemplateClass | (not global) |
47+
| qualifiedNames.cpp:46:7:46:7 | x | templates::TemplateClass<T>::x | templates | TemplateClass | x | (not global) |
48+
| qualifiedNames.cpp:46:7:46:7 | x | templates::TemplateClass<unsigned long>::x | templates | TemplateClass | x | (not global) |
49+
| qualifiedNames.cpp:49:14:49:14 | getMember | templates::TemplateClass<unsigned long>::getMember | templates | TemplateClass | getMember | (not global) |
50+
| qualifiedNames.cpp:49:14:49:22 | getMember | templates::TemplateClass<T>::getMember | templates | TemplateClass | getMember | (not global) |
51+
| qualifiedNames.cpp:49:14:49:22 | getMember | templates::TemplateClass<unsigned long>::getMember | templates | TemplateClass | getMember | (not global) |
52+
| qualifiedNames.cpp:53:12:53:12 | getMember | templates::getMember | templates | | getMember | (not global) |
53+
| qualifiedNames.cpp:53:12:53:20 | getMember | templates::getMember | templates | | getMember | (not global) |
54+
| qualifiedNames.cpp:57:8:57:10 | use | templates::use | templates | | use | (not global) |
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import cpp
2+
3+
from
4+
Declaration d, string namespaceQualifier, string typeQualifier, string baseName, string globalName
5+
where
6+
d.hasQualifiedName(namespaceQualifier, typeQualifier, baseName) and
7+
(
8+
d.hasGlobalName(globalName)
9+
or
10+
not d.hasGlobalName(_) and
11+
globalName = "(not global)"
12+
)
13+
select d, d.getQualifiedName(), namespaceQualifier, typeQualifier, baseName, globalName
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
| qualifiedNames.cpp:3:25:3:27 | p#0 |
2+
| qualifiedNames.cpp:4:25:4:28 | p#0 |
3+
| qualifiedNames.cpp:18:18:18:31 | Nested's friend |
4+
| qualifiedNames.cpp:26:9:26:9 | operator= |
5+
| qualifiedNames.cpp:26:9:26:9 | operator= |
6+
| qualifiedNames.cpp:26:9:26:18 | LocalClass |
7+
| qualifiedNames.cpp:27:9:27:23 | localClassField |
8+
| qualifiedNames.cpp:44:21:44:21 | T |
9+
| qualifiedNames.cpp:48:23:48:29 | Ignored |
10+
| qualifiedNames.cpp:49:32:49:38 | ignored |
11+
| qualifiedNames.cpp:49:32:49:38 | ignored |
12+
| qualifiedNames.cpp:49:32:49:38 | ignored |
13+
| qualifiedNames.cpp:52:21:52:21 | T |
14+
| qualifiedNames.cpp:52:33:52:39 | Ignored |
15+
| qualifiedNames.cpp:53:40:53:41 | tc |
16+
| qualifiedNames.cpp:53:40:53:41 | tc |
17+
| qualifiedNames.cpp:53:52:53:58 | ignored |
18+
| qualifiedNames.cpp:53:52:53:58 | ignored |
19+
| qualifiedNames.cpp:58:34:58:35 | tc |
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// This query lists the declarations that don't have a qualified name
2+
3+
import cpp
4+
5+
from Declaration d
6+
where
7+
(
8+
not exists(d.getQualifiedName())
9+
or
10+
not d.hasQualifiedName(_, _, _)
11+
) and
12+
exists(d.getFile().getRelativePath())
13+
select d

0 commit comments

Comments
 (0)