Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitce5b364

Browse files
authored
Merge pull request#825 from rak3-sh/rp/fix-824
#824 [Partial Fix] : A15-4-4 - Dont report on functions having a noexcept specification with a complex expression
2 parentsdb71d1b +f5394d0 commitce5b364

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
- `A15-4-4` - `MissingNoExcept.ql`:
2+
- Reduce false positives by not reporting on functions that have a noexcept specification with a complex expression or call other such functions.

‎cpp/autosar/src/rules/A15-4-4/MissingNoExcept.ql‎

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,36 @@ import codingstandards.cpp.autosar
1919
import codingstandards.cpp.exceptions.ExceptionSpecifications
2020
import codingstandards.cpp.exceptions.ExceptionFlow
2121

22+
// These functions have a noexcept specification that could not be resolved
23+
// to noexcept(true). So either, they are noexcept(false) functions which
24+
// means, they can throw an exception OR they have an expression which
25+
// could not be resolved to "true" or "false". Even in this case, lets
26+
// be more conservative and assume they may thrown an exception.
27+
classFunctionWithUnknownNoExceptextendsFunction{
28+
FunctionWithUnknownNoExcept(){
29+
// Exists a noexcept specification but not noexcept(true)
30+
exists(this.getADeclarationEntry().getNoExceptExpr())and
31+
notisNoExceptTrue(this)
32+
}
33+
}
34+
35+
// This predicate checks if a function can call to other functions
36+
// that may have a noexcept specification which cannot be resolved to
37+
// noexcept(true).
38+
predicatemayCallThrowingFunctions(Functionf){
39+
// Exists a call in this function
40+
exists(Callfc|
41+
fc.getEnclosingFunction()=fand
42+
(
43+
// Either this call is to a function with an unknown noexcept OR
44+
fc.getTarget()instanceofFunctionWithUnknownNoExcept
45+
or
46+
// That function can further have calls to unknown noexcept functions.
47+
mayCallThrowingFunctions(fc.getTarget())
48+
)
49+
)
50+
}
51+
2252
fromFunctionf
2353
where
2454
notisExcluded(f, Exceptions1Package::missingNoExceptQuery())and
@@ -28,6 +58,12 @@ where
2858
notisNoExceptTrue(f)and
2959
// Not explicitly marked noexcept(false)
3060
notisNoExceptExplicitlyFalse(f)and
61+
// Not having a noexcept specification that
62+
// could not be computed as true or false above.
63+
notexists(f.getADeclarationEntry().getNoExceptExpr())and
64+
// Not calling function(s) which have a noexcept specification that
65+
// could not be computed as true.
66+
notmayCallThrowingFunctions(f)and
3167
// Not compiler generated
3268
notf.isCompilerGenerated()and
3369
// The function is defined in this database

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp