Skip to content

Commit c54c1cc

Browse files
committed
A2-10-5: Failing test for variable templates
Variable templates generate multiple Variable's for each instantiation and the uninstantiated template, causing false positives.
1 parent cc527b1 commit c54c1cc

File tree

3 files changed

+68
-0
lines changed

3 files changed

+68
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,38 @@
11
| test1a.cpp:6:12:6:13 | g3 | Identifier name of non-member object $@ reuses the identifier name of non-member object $@. | test1a.cpp:6:12:6:13 | g3 | g3 | test1b.cpp:7:12:7:13 | g3 | g3 |
2+
| test1a.cpp:11:31:11:31 | number_one | Identifier name of non-member object $@ reuses the identifier name of non-member object $@. | test1a.cpp:11:31:11:31 | number_one | number_one | test1a.cpp:11:31:11:31 | number_one | number_one |
3+
| test1a.cpp:11:31:11:31 | number_one | Identifier name of non-member object $@ reuses the identifier name of non-member object $@. | test1a.cpp:11:31:11:31 | number_one | number_one | test1a.cpp:11:31:11:31 | number_one | number_one |
4+
| test1a.cpp:11:31:11:31 | number_one | Identifier name of non-member object $@ reuses the identifier name of non-member object $@. | test1a.cpp:11:31:11:31 | number_one | number_one | test1a.cpp:11:42:11:42 | number_one | number_one |
5+
| test1a.cpp:11:31:11:31 | number_one | Identifier name of non-member object $@ reuses the identifier name of non-member object $@. | test1a.cpp:11:31:11:31 | number_one | number_one | test1a.cpp:11:42:11:42 | number_one | number_one |
6+
| test1a.cpp:11:42:11:42 | number_one | Identifier name of non-member object $@ reuses the identifier name of non-member object $@. | test1a.cpp:11:42:11:42 | number_one | number_one | test1a.cpp:11:31:11:31 | number_one | number_one |
7+
| test1a.cpp:11:42:11:42 | number_one | Identifier name of non-member object $@ reuses the identifier name of non-member object $@. | test1a.cpp:11:42:11:42 | number_one | number_one | test1a.cpp:11:31:11:31 | number_one | number_one |
8+
| test1a.cpp:21:31:21:31 | number_two | Identifier name of non-member object $@ reuses the identifier name of non-member object $@. | test1a.cpp:21:31:21:31 | number_two | number_two | test1a.cpp:21:31:21:31 | number_two | number_two |
9+
| test1a.cpp:21:31:21:31 | number_two | Identifier name of non-member object $@ reuses the identifier name of non-member object $@. | test1a.cpp:21:31:21:31 | number_two | number_two | test1a.cpp:21:31:21:31 | number_two | number_two |
10+
| test1a.cpp:21:31:21:31 | number_two | Identifier name of non-member object $@ reuses the identifier name of non-member object $@. | test1a.cpp:21:31:21:31 | number_two | number_two | test1a.cpp:21:42:21:42 | number_two | number_two |
11+
| test1a.cpp:21:31:21:31 | number_two | Identifier name of non-member object $@ reuses the identifier name of non-member object $@. | test1a.cpp:21:31:21:31 | number_two | number_two | test1a.cpp:21:42:21:42 | number_two | number_two |
12+
| test1a.cpp:21:31:21:31 | number_two | Identifier name of non-member object $@ reuses the identifier name of non-member object $@. | test1a.cpp:21:31:21:31 | number_two | number_two | test1b.cpp:12:31:12:31 | number_two | number_two |
13+
| test1a.cpp:21:31:21:31 | number_two | Identifier name of non-member object $@ reuses the identifier name of non-member object $@. | test1a.cpp:21:31:21:31 | number_two | number_two | test1b.cpp:12:31:12:31 | number_two | number_two |
14+
| test1a.cpp:21:31:21:31 | number_two | Identifier name of non-member object $@ reuses the identifier name of non-member object $@. | test1a.cpp:21:31:21:31 | number_two | number_two | test1b.cpp:12:31:12:31 | number_two | number_two |
15+
| test1a.cpp:21:31:21:31 | number_two | Identifier name of non-member object $@ reuses the identifier name of non-member object $@. | test1a.cpp:21:31:21:31 | number_two | number_two | test1b.cpp:12:31:12:31 | number_two | number_two |
16+
| test1a.cpp:21:31:21:31 | number_two | Identifier name of non-member object $@ reuses the identifier name of non-member object $@. | test1a.cpp:21:31:21:31 | number_two | number_two | test1b.cpp:12:42:12:42 | number_two | number_two |
17+
| test1a.cpp:21:31:21:31 | number_two | Identifier name of non-member object $@ reuses the identifier name of non-member object $@. | test1a.cpp:21:31:21:31 | number_two | number_two | test1b.cpp:12:42:12:42 | number_two | number_two |
18+
| test1a.cpp:21:42:21:42 | number_two | Identifier name of non-member object $@ reuses the identifier name of non-member object $@. | test1a.cpp:21:42:21:42 | number_two | number_two | test1a.cpp:21:31:21:31 | number_two | number_two |
19+
| test1a.cpp:21:42:21:42 | number_two | Identifier name of non-member object $@ reuses the identifier name of non-member object $@. | test1a.cpp:21:42:21:42 | number_two | number_two | test1a.cpp:21:31:21:31 | number_two | number_two |
20+
| test1a.cpp:21:42:21:42 | number_two | Identifier name of non-member object $@ reuses the identifier name of non-member object $@. | test1a.cpp:21:42:21:42 | number_two | number_two | test1b.cpp:12:31:12:31 | number_two | number_two |
21+
| test1a.cpp:21:42:21:42 | number_two | Identifier name of non-member object $@ reuses the identifier name of non-member object $@. | test1a.cpp:21:42:21:42 | number_two | number_two | test1b.cpp:12:31:12:31 | number_two | number_two |
22+
| test1a.cpp:21:42:21:42 | number_two | Identifier name of non-member object $@ reuses the identifier name of non-member object $@. | test1a.cpp:21:42:21:42 | number_two | number_two | test1b.cpp:12:42:12:42 | number_two | number_two |
223
| test1b.cpp:7:12:7:13 | g3 | Identifier name of non-member object $@ reuses the identifier name of non-member object $@. | test1b.cpp:7:12:7:13 | g3 | g3 | test1a.cpp:6:12:6:13 | g3 | g3 |
24+
| test1b.cpp:12:31:12:31 | number_two | Identifier name of non-member object $@ reuses the identifier name of non-member object $@. | test1b.cpp:12:31:12:31 | number_two | number_two | test1a.cpp:21:31:21:31 | number_two | number_two |
25+
| test1b.cpp:12:31:12:31 | number_two | Identifier name of non-member object $@ reuses the identifier name of non-member object $@. | test1b.cpp:12:31:12:31 | number_two | number_two | test1a.cpp:21:31:21:31 | number_two | number_two |
26+
| test1b.cpp:12:31:12:31 | number_two | Identifier name of non-member object $@ reuses the identifier name of non-member object $@. | test1b.cpp:12:31:12:31 | number_two | number_two | test1a.cpp:21:31:21:31 | number_two | number_two |
27+
| test1b.cpp:12:31:12:31 | number_two | Identifier name of non-member object $@ reuses the identifier name of non-member object $@. | test1b.cpp:12:31:12:31 | number_two | number_two | test1a.cpp:21:31:21:31 | number_two | number_two |
28+
| test1b.cpp:12:31:12:31 | number_two | Identifier name of non-member object $@ reuses the identifier name of non-member object $@. | test1b.cpp:12:31:12:31 | number_two | number_two | test1a.cpp:21:42:21:42 | number_two | number_two |
29+
| test1b.cpp:12:31:12:31 | number_two | Identifier name of non-member object $@ reuses the identifier name of non-member object $@. | test1b.cpp:12:31:12:31 | number_two | number_two | test1a.cpp:21:42:21:42 | number_two | number_two |
30+
| test1b.cpp:12:31:12:31 | number_two | Identifier name of non-member object $@ reuses the identifier name of non-member object $@. | test1b.cpp:12:31:12:31 | number_two | number_two | test1b.cpp:12:31:12:31 | number_two | number_two |
31+
| test1b.cpp:12:31:12:31 | number_two | Identifier name of non-member object $@ reuses the identifier name of non-member object $@. | test1b.cpp:12:31:12:31 | number_two | number_two | test1b.cpp:12:31:12:31 | number_two | number_two |
32+
| test1b.cpp:12:31:12:31 | number_two | Identifier name of non-member object $@ reuses the identifier name of non-member object $@. | test1b.cpp:12:31:12:31 | number_two | number_two | test1b.cpp:12:42:12:42 | number_two | number_two |
33+
| test1b.cpp:12:31:12:31 | number_two | Identifier name of non-member object $@ reuses the identifier name of non-member object $@. | test1b.cpp:12:31:12:31 | number_two | number_two | test1b.cpp:12:42:12:42 | number_two | number_two |
34+
| test1b.cpp:12:42:12:42 | number_two | Identifier name of non-member object $@ reuses the identifier name of non-member object $@. | test1b.cpp:12:42:12:42 | number_two | number_two | test1a.cpp:21:31:21:31 | number_two | number_two |
35+
| test1b.cpp:12:42:12:42 | number_two | Identifier name of non-member object $@ reuses the identifier name of non-member object $@. | test1b.cpp:12:42:12:42 | number_two | number_two | test1a.cpp:21:31:21:31 | number_two | number_two |
36+
| test1b.cpp:12:42:12:42 | number_two | Identifier name of non-member object $@ reuses the identifier name of non-member object $@. | test1b.cpp:12:42:12:42 | number_two | number_two | test1a.cpp:21:42:21:42 | number_two | number_two |
37+
| test1b.cpp:12:42:12:42 | number_two | Identifier name of non-member object $@ reuses the identifier name of non-member object $@. | test1b.cpp:12:42:12:42 | number_two | number_two | test1b.cpp:12:31:12:31 | number_two | number_two |
38+
| test1b.cpp:12:42:12:42 | number_two | Identifier name of non-member object $@ reuses the identifier name of non-member object $@. | test1b.cpp:12:42:12:42 | number_two | number_two | test1b.cpp:12:31:12:31 | number_two | number_two |

cpp/autosar/test/rules/A2-10-5/test1a.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,25 @@ static int g1 = 0;
55
static int g2; // COMPLIANT
66
static int g3 = 1; // NON_COMPLIANT
77
static void f1(){}; // NON_COMPLIANT
8+
9+
// Variable template has multiple declarations: one for the uninstantiated template and one for each
10+
// instantiation
11+
template<class T> constexpr T number_one = T(1); // COMPLIANT
12+
13+
int test() {
14+
return number_one<int>;
15+
}
16+
17+
long test2() {
18+
return number_one<long>;
19+
}
20+
21+
template<class T> constexpr T number_two = T(1); // NON_COMPLIANT
22+
23+
int test3() {
24+
return number_two<int>;
25+
}
26+
27+
long test4() {
28+
return number_two<long>;
29+
}

cpp/autosar/test/rules/A2-10-5/test1b.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,13 @@ static int g3 = 0; // NON_COMPLIANT
88
}
99

1010
static void f1() {} // NON_COMPLIANT
11+
12+
template<class T> constexpr T number_two = T(1); // NON_COMPLIANT
13+
14+
int test3() {
15+
return number_two<int>;
16+
}
17+
18+
long test4() {
19+
return number_two<long>;
20+
}

0 commit comments

Comments
 (0)