Skip to content

Commit 3d14f97

Browse files
committed
emergent
1 parent 38439e3 commit 3d14f97

File tree

5 files changed

+71
-8
lines changed

5 files changed

+71
-8
lines changed

c/misra/src/rules/RULE-1-4/EmergentLanguageFeaturesUsed.ql

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,9 @@
1313

1414
import cpp
1515
import codingstandards.c.misra
16+
import codingstandards.cpp.Emergent
17+
18+
from C11::EmergentLanguageFeature ef
19+
where not isExcluded(ef, Language2Package::emergentLanguageFeaturesUsedQuery())
20+
select ef, "Usage of emergent language feature."
1621

17-
from
18-
where
19-
not isExcluded(x, Language2Package::emergentLanguageFeaturesUsedQuery()) and
20-
select
Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,15 @@
1-
No expected results have yet been specified
1+
| test.c:1:1:1:21 | #include <stdalign.h> | Usage of emergent language feature. |
2+
| test.c:2:1:2:22 | #include <stdatomic.h> | Usage of emergent language feature. |
3+
| test.c:3:1:3:24 | #include <stdnoreturn.h> | Usage of emergent language feature. |
4+
| test.c:4:1:4:20 | #include <threads.h> | Usage of emergent language feature. |
5+
| test.c:6:1:6:49 | #define MACRO(x) _Generic((x), int : 0, long : 1) | Usage of emergent language feature. |
6+
| test.c:7:1:7:32 | #define __STDC_WANT_LIB_EXT1__ 1 | Usage of emergent language feature. |
7+
| test.c:9:16:9:17 | f0 | Usage of emergent language feature. |
8+
| test.c:12:26:12:40 | atomic_new_type | Usage of emergent language feature. |
9+
| test.c:17:15:17:15 | i | Usage of emergent language feature. |
10+
| test.c:19:3:19:10 | alignas(...) | Usage of emergent language feature. |
11+
| test.c:20:3:20:9 | alignas(...) | Usage of emergent language feature. |
12+
| test.c:21:11:21:23 | alignof(int) | Usage of emergent language feature. |
13+
| test.c:22:12:22:23 | alignof(int) | Usage of emergent language feature. |
14+
| test.c:24:27:24:28 | i3 | Usage of emergent language feature. |
15+
| test.c:25:28:25:29 | i4 | Usage of emergent language feature. |

c/misra/test/rules/RULE-1-4/test.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@
44
#include <threads.h> //NON_COMPLIANT
55

66
#define MACRO(x) _Generic((x), int : 0, long : 1) // NON_COMPLIANT
7-
#define __STDC_WANT_LIB_EXT1__ 0 // COMPLIANT
7+
#define __STDC_WANT_LIB_EXT1__ 1 // NON_COMPLIANT
88

99
_Noreturn void f0(); // NON_COMPLIANT
1010

1111
typedef int new_type; // COMPLIANT
1212
typedef _Atomic new_type atomic_new_type; // NON_COMPLIANT
1313

1414
void f(int p) {
15-
int i0 = _Generic(p, int : 0, long : 1); // NON_COMPLIANT
15+
// int i0 = _Generic(p, int : 0, long : 1); // NON_COMPLIANT[FALSE_NEGATIVE]
1616

1717
_Atomic int i; // NON_COMPLIANT
1818

c/misra/test/rules/RULE-1-4/test1.c

Lines changed: 0 additions & 1 deletion
This file was deleted.
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import cpp
2+
3+
/**
4+
* Namespace for containing emergent language features in C11.
5+
*/
6+
module C11 {
7+
abstract class EmergentLanguageFeature extends Element { }
8+
9+
class AlignAsAttribute extends EmergentLanguageFeature, Attribute {
10+
AlignAsAttribute() { getName() = "_Alignas" }
11+
}
12+
13+
class AtomicVariableSpecifier extends EmergentLanguageFeature, Variable {
14+
AtomicVariableSpecifier() {
15+
getType().(DerivedType).getBaseType*().getASpecifier().getName() = "atomic"
16+
}
17+
}
18+
19+
class AtomicDeclaration extends EmergentLanguageFeature, Declaration {
20+
AtomicDeclaration() { getASpecifier().getName() = "atomic" }
21+
}
22+
23+
class ThreadLocalDeclaration extends EmergentLanguageFeature, Declaration {
24+
ThreadLocalDeclaration() { getASpecifier().getName() = "is_thread_local" }
25+
}
26+
27+
class EmergentHeader extends EmergentLanguageFeature, Include {
28+
EmergentHeader() {
29+
getIncludedFile().getBaseName() = ["stdalign.h", "stdatomic.h", "stdnoreturn.h", "threads.h"]
30+
}
31+
}
32+
33+
class LibExt1Macro extends EmergentLanguageFeature, Macro {
34+
LibExt1Macro() {
35+
getName() = "__STDC_WANT_LIB_EXT1__" and
36+
getBody() = "1"
37+
}
38+
}
39+
40+
class GenericMacro extends EmergentLanguageFeature, Macro {
41+
GenericMacro() { getBody().indexOf("_Generic") = 0 }
42+
}
43+
44+
class NoReturnSpecificer extends EmergentLanguageFeature, Function {
45+
NoReturnSpecificer() { getASpecifier().getName() = "noreturn" }
46+
}
47+
48+
class AlignOf extends EmergentLanguageFeature, AlignofTypeOperator { }
49+
}

0 commit comments

Comments
 (0)