Skip to content

Commit

Permalink
Merge branch 'main' into rp/pre32-c-650
Browse files Browse the repository at this point in the history
  • Loading branch information
lcartey authored Jul 30, 2024
2 parents 490a968 + 95f7a1a commit cc72321
Show file tree
Hide file tree
Showing 797 changed files with 10,189 additions and 1,566 deletions.
27 changes: 7 additions & 20 deletions c/cert/src/rules/INT30-C/UnsignedIntegerOperationsWrapAround.ql
Original file line number Diff line number Diff line change
Expand Up @@ -15,24 +15,11 @@

import cpp
import codingstandards.c.cert
import codingstandards.cpp.Overflow
import semmle.code.cpp.controlflow.Guards
import semmle.code.cpp.valuenumbering.GlobalValueNumbering
import codingstandards.cpp.rules.unsignedoperationwithconstantoperandswraps.UnsignedOperationWithConstantOperandsWraps

from InterestingOverflowingOperation op
where
not isExcluded(op, IntegerOverflowPackage::unsignedIntegerOperationsWrapAroundQuery()) and
op.getType().getUnderlyingType().(IntegralType).isUnsigned() and
// Not within a guard condition
not exists(GuardCondition gc | gc.getAChild*() = op) and
// Not guarded by a check, where the check is not an invalid overflow check
not op.hasValidPreCheck() and
// Is not checked after the operation
not op.hasValidPostCheck() and
// Permitted by exception 3
not op instanceof LShiftExpr and
// Permitted by exception 2 - zero case is handled in separate query
not op instanceof DivExpr and
not op instanceof RemExpr
select op,
"Operation " + op.getOperator() + " of type " + op.getType().getUnderlyingType() + " may wrap."
class UnsignedIntegerOperationsWrapAroundQuery extends UnsignedOperationWithConstantOperandsWrapsSharedQuery
{
UnsignedIntegerOperationsWrapAroundQuery() {
this = IntegerOverflowPackage::unsignedIntegerOperationsWrapAroundQuery()
}
}

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
c/common/test/rules/unsignedoperationwithconstantoperandswraps/UnsignedOperationWithConstantOperandsWraps.ql
Original file line number Diff line number Diff line change
@@ -1 +1 @@
cpp/common/test/rules/donotuserandforgeneratingpseudorandomnumbers/DoNotUseRandForGeneratingPseudorandomNumbers.ql
c/common/test/rules/donotuserandforgeneratingpseudorandomnumbers/DoNotUseRandForGeneratingPseudorandomNumbers.ql
4 changes: 0 additions & 4 deletions c/common/src/codingstandards/c/Literals.qll

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
| test.c:4:1:4:41 | #define BAD_MACRO_WITH_ARG(x) (x) + wow ## x | Macro BAD_MACRO_WITH_ARG contains use of parameter x used in multiple contexts. |
| test.c:5:1:5:48 | #define BAD_MACRO_WITH_ARG_TWO(x,y) (x) + wow ## x | Macro BAD_MACRO_WITH_ARG_TWO contains use of parameter x used in multiple contexts. |
| test.c:5:1:5:41 | #define BAD_MACRO_WITH_ARG(x) (x) + wow ## x | Macro BAD_MACRO_WITH_ARG contains use of parameter x used in multiple contexts. |
| test.c:6:1:6:48 | #define BAD_MACRO_WITH_ARG_TWO(x,y) (x) + wow ## x | Macro BAD_MACRO_WITH_ARG_TWO contains use of parameter x used in multiple contexts. |
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
// GENERATED FILE - DO NOT MODIFY
import codingstandards.cpp.rules.amixedusemacroargumentsubjecttoexpansion.AMixedUseMacroArgumentSubjectToExpansion

class TestFileQuery extends AMixedUseMacroArgumentSubjectToExpansionSharedQuery, TestQuery { }
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
// NOTICE: THE TEST CASES BELOW ARE ALSO INCLUDED IN THE C++ TEST CASE AND
// CHANGES SHOULD BE REFLECTED THERE AS WELL.
#define GOOD_MACRO_WITH_ARG(X) ((X)*X##_scale) // COMPLIANT
#define MACRO 1
#define BAD_MACRO_WITH_ARG(x) (x) + wow##x // NON_COMPLIANT
#define BAD_MACRO_WITH_ARG_TWO(x, y) (x) + wow##x // NON_COMPLIANT
#define MACROONE(x) #x // COMPLIANT
#define MACROTWO(x) x *x // COMPLIANT
#define MACROTHREE(x) "##\"\"'" + (x) // COMPLIANT
#define FOO(x) #x MACROONE(x) // COMPLIANT - no further arg expansion

void f() {

int x;
int x_scale;
int y;
int wowMACRO = 0;

y = GOOD_MACRO_WITH_ARG(x);
wowMACRO = BAD_MACRO_WITH_ARG(MACRO);
wowMACRO = BAD_MACRO_WITH_ARG_TWO(MACRO, 1);
char s[] = MACROONE(MACRO);
y = MACROTWO(MACRO);
MACROTHREE(MACRO);
FOO(x);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
| test.c:8:14:8:17 | call to atof | Call to banned function atof. |
| test.c:9:12:9:15 | call to atoi | Call to banned function atoi. |
| test.c:10:13:10:16 | call to atol | Call to banned function atol. |
| test.c:11:18:11:22 | call to atoll | Call to banned function atoll. |
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
// GENERATED FILE - DO NOT MODIFY
import codingstandards.cpp.rules.atofatoiatolandatollused.AtofAtoiAtolAndAtollUsed

class TestFileQuery extends AtofAtoiAtolAndAtollUsedSharedQuery, TestQuery { }
13 changes: 13 additions & 0 deletions c/common/test/rules/atofatoiatolandatollused/test.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
// NOTICE: THE TEST CASES BELOW ARE ALSO INCLUDED IN THE C++ TEST CASE AND
// CHANGES SHOULD BE REFLECTED THERE AS WELL.
#include <float.h>
#include <stdlib.h>
void f2();
void f1() {
char l1[5] = "abcd";
float l2 = atof(l1); // NON_COMLIANT
int l3 = atoi(l1); // NON_COMPLIANT
long l4 = atol(l1); // NON_COMPLIANT
long long l5 = atoll(l1); // NON_COMPLIANT
f2(); // COMPLIANT
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
| test.c:8:7:8:8 | x1 | Bit-field 'x1' is declared on type 'int'. |
| test.c:12:15:12:16 | x5 | Bit-field 'x5' is declared on type 'signed long'. |
| test.c:14:15:14:16 | x6 | Bit-field 'x6' is declared on type 'signed char'. |
| test.c:16:14:16:15 | x7 | Bit-field 'x7' is declared on type 'Color'. |
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
// GENERATED FILE - DO NOT MODIFY
import codingstandards.cpp.rules.bitfieldshallhaveanappropriatetype.BitFieldShallHaveAnAppropriateType

class TestFileQuery extends BitFieldShallHaveAnAppropriateTypeSharedQuery, TestQuery { }
17 changes: 17 additions & 0 deletions c/common/test/rules/bitfieldshallhaveanappropriatetype/test.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
// NOTICE: THE TEST CASES BELOW ARE ALSO INCLUDED IN THE C++ TEST CASE AND
// CHANGES SHOULD BE REFLECTED THERE AS WELL.
typedef unsigned int UINT16;

enum Color { R, G, B };

struct SampleStruct {
int x1 : 2; // NON_COMPLIANT - not explicitly signed or unsigned
unsigned int x2 : 2; // COMPLIANT - explicitly unsigned
signed int x3 : 2; // COMPLIANT - explicitly signed
UINT16 x4 : 2; // COMPLIANT - type alias resolves to a compliant type
signed long x5 : 2; // NON_COMPLIANT - cannot declare bit field for long, even
// if it's signed
signed char x6 : 2; // NON_COMPLIANT - cannot declare bit field for char, even
// if it's signed
enum Color x7 : 3; // NON_COMPLIANT - cannot declare bit field for enum
} sample_struct;
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
problems
| test.c:8:8:8:12 | c_str | test.c:15:16:15:21 | call to getenv | test.c:8:8:8:12 | c_str | The object returned by the function getenv should not be modified. |
| test.c:64:5:64:9 | conv4 | test.c:61:11:61:20 | call to localeconv | test.c:64:5:64:9 | conv4 | The object returned by the function localeconv should not be modified. |
| test.c:73:5:73:8 | conv | test.c:69:25:69:34 | call to localeconv | test.c:73:5:73:8 | conv | The object returned by the function localeconv should not be modified. |
| test.c:11:8:11:12 | c_str | test.c:18:16:18:21 | call to getenv | test.c:11:8:11:12 | c_str | The object returned by the function getenv should not be modified. |
| test.c:67:5:67:9 | conv4 | test.c:64:11:64:20 | call to localeconv | test.c:67:5:67:9 | conv4 | The object returned by the function localeconv should not be modified. |
| test.c:76:5:76:8 | conv | test.c:72:25:72:34 | call to localeconv | test.c:76:5:76:8 | conv | The object returned by the function localeconv should not be modified. |
edges
| test.c:5:18:5:22 | c_str | test.c:8:8:8:12 | c_str |
| test.c:15:16:15:21 | call to getenv | test.c:21:9:21:12 | env1 |
| test.c:21:9:21:12 | env1 | test.c:5:18:5:22 | c_str |
| test.c:61:11:61:20 | call to localeconv | test.c:64:5:64:9 | conv4 |
| test.c:69:25:69:34 | call to localeconv | test.c:73:5:73:8 | conv |
| test.c:8:18:8:22 | c_str | test.c:11:8:11:12 | c_str |
| test.c:18:16:18:21 | call to getenv | test.c:24:9:24:12 | env1 |
| test.c:24:9:24:12 | env1 | test.c:8:18:8:22 | c_str |
| test.c:64:11:64:20 | call to localeconv | test.c:67:5:67:9 | conv4 |
| test.c:72:25:72:34 | call to localeconv | test.c:76:5:76:8 | conv |
nodes
| test.c:5:18:5:22 | c_str | semmle.label | c_str |
| test.c:8:8:8:12 | c_str | semmle.label | c_str |
| test.c:15:16:15:21 | call to getenv | semmle.label | call to getenv |
| test.c:21:9:21:12 | env1 | semmle.label | env1 |
| test.c:61:11:61:20 | call to localeconv | semmle.label | call to localeconv |
| test.c:64:5:64:9 | conv4 | semmle.label | conv4 |
| test.c:69:25:69:34 | call to localeconv | semmle.label | call to localeconv |
| test.c:73:5:73:8 | conv | semmle.label | conv |
| test.c:8:18:8:22 | c_str | semmle.label | c_str |
| test.c:11:8:11:12 | c_str | semmle.label | c_str |
| test.c:18:16:18:21 | call to getenv | semmle.label | call to getenv |
| test.c:24:9:24:12 | env1 | semmle.label | env1 |
| test.c:64:11:64:20 | call to localeconv | semmle.label | call to localeconv |
| test.c:67:5:67:9 | conv4 | semmle.label | conv4 |
| test.c:72:25:72:34 | call to localeconv | semmle.label | call to localeconv |
| test.c:76:5:76:8 | conv | semmle.label | conv |
subpaths
3 changes: 3 additions & 0 deletions c/common/test/rules/constlikereturnvalue/test.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
// NOTICE: THE TEST CASES BELOW ARE ALSO INCLUDED IN THE C++ TEST CASE AND
// CHANGES SHOULD BE REFLECTED THERE AS WELL.
#include <locale.h>
#include <stddef.h>
#include <stdlib.h>
#include <string.h>

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
| test.c:8:1:8:25 | #define MACRO4(x) (x + 1) | Macro used instead of a function. |
| test.c:13:1:13:48 | #define MACRO9() printf_custom("output = %d", 7) | Macro used instead of a function. |
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
// GENERATED FILE - DO NOT MODIFY
import codingstandards.cpp.rules.functionlikemacrosdefined.FunctionLikeMacrosDefined

class TestFileQuery extends FunctionLikeMacrosDefinedSharedQuery, TestQuery { }
42 changes: 42 additions & 0 deletions c/common/test/rules/functionlikemacrosdefined/test.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
// NOTICE: THE TEST CASES BELOW ARE ALSO INCLUDED IN THE C++ TEST CASE AND
// CHANGES SHOULD BE REFLECTED THERE AS WELL.
#include <assert.h>

#define MACRO(OP, L, R) ((L)OP(R)) // COMPLIANT
#define MACRO2(L, R) (L + R) // COMPLIANT
#define MACRO3(L, R) (L " " R " " L) // COMPLIANT
#define MACRO4(x) (x + 1) // NON_COMPLIANT
#define MACRO5(L, LR) (LR + 1) // COMPLIANT
#define MACRO6(x) printf_custom("output = %d", test##x) // COMPLIANT
#define MACRO7(x) #x // COMPLIANT
#define MACRO8(x) "NOP" // COMPLIANT
#define MACRO9() printf_custom("output = %d", 7) // NON_COMPLIANT
#define MACRO10(x) // COMPLIANT
#define MY_ASSERT(X) assert(X) // NON_COMPLIANT[FALSE_NEGATIVE]

char a1[MACRO2(1, 1) + 6];
extern int printf_custom(char *, int);
int test1;

void f() {
int i = MACRO(+, 1, 1);
int i2 = MACRO2(7, 10);

static int i3 = MACRO2(1, 1);

char *i4 = MACRO3("prefix", "suffix");

int i5 = MACRO4(1);

int i6 = MACRO4(MACRO2(1, 1));

int i7 = MACRO5(1, 1);

MACRO6(1);

char *i10 = MACRO7("prefix");

asm(MACRO8(1));

MY_ASSERT(1);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
| test.c:4:3:4:10 | goto ... | The goto statement and its $@ are not declared or enclosed in the same block. | test.c:6:3:6:5 | label ...: | label |
| test.c:42:3:42:10 | goto ... | The goto statement and its $@ are not declared or enclosed in the same block. | test.c:46:3:46:5 | label ...: | label |
| test.c:57:5:57:12 | goto ... | The goto statement and its $@ are not declared or enclosed in the same block. | test.c:60:3:60:5 | label ...: | label |
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
// GENERATED FILE - DO NOT MODIFY
import codingstandards.cpp.rules.gotoreferencealabelinsurroundingblock.GotoReferenceALabelInSurroundingBlock

class TestFileQuery extends GotoReferenceALabelInSurroundingBlockSharedQuery, TestQuery { }
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// NOTICE: THE TEST CASES BELOW ARE ALSO INCLUDED IN THE C++ TEST CASE AND
// CHANGES SHOULD BE REFLECTED THERE AS WELL.
void f1() {
goto L1;
for (int i = 0; i < 100; i++) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
| test.c:5:3:5:10 | goto ... | The $@ statement jumps to a $@ that is not declared later in the same function. | test.c:5:3:5:10 | goto ... | L1 | test.c:2:1:2:3 | label ...: | label ...: |
| test.c:14:3:14:10 | goto ... | The $@ statement jumps to a $@ that is not declared later in the same function. | test.c:14:3:14:10 | goto ... | L2 | test.c:12:1:12:3 | label ...: | label ...: |
| test.c:16:3:16:10 | goto ... | The $@ statement jumps to a $@ that is not declared later in the same function. | test.c:16:3:16:10 | goto ... | L1 | test.c:11:1:11:3 | label ...: | label ...: |
| test.c:9:3:9:10 | goto ... | The $@ statement jumps to a $@ that is not declared later in the same function. | test.c:9:3:9:10 | goto ... | l1 | test.c:5:1:5:3 | label ...: | label ...: |
| test.c:21:3:21:10 | goto ... | The $@ statement jumps to a $@ that is not declared later in the same function. | test.c:21:3:21:10 | goto ... | l2 | test.c:17:1:17:3 | label ...: | label ...: |
| test.c:23:3:23:10 | goto ... | The $@ statement jumps to a $@ that is not declared later in the same function. | test.c:23:3:23:10 | goto ... | l1 | test.c:16:1:16:3 | label ...: | label ...: |
| test.c:28:3:28:10 | goto ... | The $@ statement jumps to a $@ that is not declared later in the same function. | test.c:28:3:28:10 | goto ... | l1 | test.c:27:1:27:3 | label ...: | label ...: |
38 changes: 25 additions & 13 deletions c/common/test/rules/gotostatementcondition/test.c
Original file line number Diff line number Diff line change
@@ -1,17 +1,29 @@
void f1() {
L1:;
goto L2; // COMPLIANT
;
goto L1; // NON_COMPLIANT
// NOTICE: THE TEST CASES BELOW ARE ALSO INCLUDED IN THE C++ TEST CASE AND
// CHANGES SHOULD BE REFLECTED THERE AS WELL.
void f1(int p1) {

L2:;
l1:
if (p1) {
goto l2; // COMPLIANT
}
goto l1; // NON_COMPLIANT

l2:;
}

void f2() {
L1:;
L2:
goto L3; // COMPLIANT
goto L2; // NON_COMPLIANT
L3:
goto L1; // NON_COMPLIANT
void f2(int p1) {

l1:;
l2:
if (p1) {
goto l3; // COMPLIANT
}
goto l2; // NON_COMPLIANT
l3:
goto l1; // NON_COMPLIANT
}

void f3() {
l1:
goto l1; // NON_COMPLIANT
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
| test.c:6:3:6:14 | goto ... | Use of goto. |
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
// GENERATED FILE - DO NOT MODIFY
import codingstandards.cpp.rules.gotostatementshouldnotbeused.GotoStatementShouldNotBeUsed

class TestFileQuery extends GotoStatementShouldNotBeUsedSharedQuery, TestQuery { }
11 changes: 11 additions & 0 deletions c/common/test/rules/gotostatementshouldnotbeused/test.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
// NOTICE: THE TEST CASES BELOW ARE ALSO INCLUDED IN THE C++ TEST CASE AND
// CHANGES SHOULD BE REFLECTED THERE AS WELL.
void test_goto() {
int x = 1;

goto label1; // NON_COMPLIANT

label1:

x = 2;
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
| test.c:19:14:19:19 | tmpvar | This pointer was returned by a $@ and may have been overwritten by the susequent $@. | test.c:11:12:11:17 | call to getenv | call to getenv | test.c:15:13:15:18 | call to getenv | call to getenv |
| test.c:132:14:132:17 | temp | This pointer was returned by a $@ and may have been overwritten by the susequent $@. | test.c:128:12:128:17 | call to getenv | call to getenv | test.c:129:11:129:16 | call to getenv | call to getenv |
| test.c:132:20:132:22 | tmp | This pointer was returned by a $@ and may have been overwritten by the susequent $@. | test.c:129:11:129:16 | call to getenv | call to getenv | test.c:128:12:128:17 | call to getenv | call to getenv |
| test.c:163:14:163:26 | tmpvar_global | This pointer was returned by a $@ and may have been overwritten by the susequent $@. | test.c:155:19:155:24 | call to getenv | call to getenv | test.c:159:20:159:25 | call to getenv | call to getenv |
| test.c:186:18:186:18 | r | This pointer was returned by a $@ and may have been overwritten by the susequent $@. | test.c:183:7:183:15 | call to setlocale | call to setlocale | test.c:185:8:185:17 | call to localeconv | call to localeconv |
| test.c:206:10:206:15 | tmpvar | This pointer was returned by a $@ and may have been overwritten by the susequent $@. | test.c:200:12:200:17 | call to getenv | call to getenv | test.c:204:3:204:8 | call to f11fun | call to f11fun |
| test.c:21:14:21:19 | tmpvar | This pointer was returned by a $@ and may have been overwritten by the susequent $@. | test.c:13:12:13:17 | call to getenv | call to getenv | test.c:17:13:17:18 | call to getenv | call to getenv |
| test.c:134:14:134:17 | temp | This pointer was returned by a $@ and may have been overwritten by the susequent $@. | test.c:130:12:130:17 | call to getenv | call to getenv | test.c:131:11:131:16 | call to getenv | call to getenv |
| test.c:134:20:134:22 | tmp | This pointer was returned by a $@ and may have been overwritten by the susequent $@. | test.c:131:11:131:16 | call to getenv | call to getenv | test.c:130:12:130:17 | call to getenv | call to getenv |
| test.c:165:14:165:26 | tmpvar_global | This pointer was returned by a $@ and may have been overwritten by the susequent $@. | test.c:157:19:157:24 | call to getenv | call to getenv | test.c:161:20:161:25 | call to getenv | call to getenv |
| test.c:188:18:188:18 | r | This pointer was returned by a $@ and may have been overwritten by the susequent $@. | test.c:185:7:185:15 | call to setlocale | call to setlocale | test.c:187:8:187:17 | call to localeconv | call to localeconv |
| test.c:208:10:208:15 | tmpvar | This pointer was returned by a $@ and may have been overwritten by the susequent $@. | test.c:202:12:202:17 | call to getenv | call to getenv | test.c:206:3:206:8 | call to f11fun | call to f11fun |
2 changes: 2 additions & 0 deletions c/common/test/rules/invalidatedenvstringpointers/test.c
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// NOTICE: THE TEST CASES BELOW ARE ALSO INCLUDED IN THE C++ TEST CASE AND
// CHANGES SHOULD BE REFLECTED THERE AS WELL.
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
| test.c:13:19:13:24 | call to getenv | The value of variable $@ might become invalid after a subsequent call to function `getenv`. | test.c:10:7:10:19 | tmpvar_global | tmpvar_global |
| test.c:16:20:16:25 | call to getenv | The value of variable $@ might become invalid after a subsequent call to function `getenv`. | test.c:7:9:7:20 | tmpvar_field | tmpvar_field |
| test.c:15:19:15:24 | call to getenv | The value of variable $@ might become invalid after a subsequent call to function `getenv`. | test.c:12:7:12:19 | tmpvar_global | tmpvar_global |
| test.c:18:20:18:25 | call to getenv | The value of variable $@ might become invalid after a subsequent call to function `getenv`. | test.c:9:9:9:20 | tmpvar_field | tmpvar_field |
2 changes: 2 additions & 0 deletions c/common/test/rules/invalidatedenvstringpointerswarn/test.c
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
// NOTICE: THE TEST CASES BELOW ARE ALSO INCLUDED IN THE C++ TEST CASE AND
// CHANGES SHOULD BE REFLECTED THERE AS WELL.
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
| test.c:5:10:5:11 | 0 | Lowercase 'l' used as a literal suffix. |
| test.c:6:10:6:12 | 0 | Lowercase 'l' used as a literal suffix. |
| test.c:9:10:9:12 | 0 | Lowercase 'l' used as a literal suffix. |
| test.c:10:10:10:12 | 0 | Lowercase 'l' used as a literal suffix. |
| test.c:15:11:15:12 | 0 | Lowercase 'l' used as a literal suffix. |
| test.c:16:11:16:13 | 0 | Lowercase 'l' used as a literal suffix. |
| test.c:19:11:19:13 | 0 | Lowercase 'l' used as a literal suffix. |
| test.c:20:11:20:13 | 0 | Lowercase 'l' used as a literal suffix. |
| test.c:25:10:25:14 | 1 | Lowercase 'l' used as a literal suffix. |
| test.c:26:10:26:15 | 1 | Lowercase 'l' used as a literal suffix. |
| test.c:29:10:29:15 | 1 | Lowercase 'l' used as a literal suffix. |
| test.c:30:10:30:15 | 1 | Lowercase 'l' used as a literal suffix. |
| test.c:35:11:35:14 | 1 | Lowercase 'l' used as a literal suffix. |
| test.c:36:11:36:15 | 1 | Lowercase 'l' used as a literal suffix. |
| test.c:39:11:39:15 | 1 | Lowercase 'l' used as a literal suffix. |
| test.c:40:11:40:15 | 1 | Lowercase 'l' used as a literal suffix. |
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
// GENERATED FILE - DO NOT MODIFY
import codingstandards.cpp.rules.lowercaselstartsinliteralsuffix.LowercaseLStartsInLiteralSuffix

class TestFileQuery extends LowercaseLStartsInLiteralSuffixSharedQuery, TestQuery { }
Loading

0 comments on commit cc72321

Please sign in to comment.