C++: Add test that show that PrintAST is broekn for OverloadedArrayExpr

This commit is contained in:
Jeroen Ketema
2024-12-12 13:40:22 +01:00
parent 066db766ef
commit 0a7ed159a4
4 changed files with 91 additions and 0 deletions

View File

@@ -24086,6 +24086,38 @@ ir.cpp:
# 2717| ValueCategory = prvalue
# 2717| getThen(): [BlockStmt] { ... }
# 2718| getStmt(16): [ReturnStmt] return ...
# 2720| [CopyAssignmentOperator] WithBracketOperator& WithBracketOperator::operator=(WithBracketOperator const&)
# 2720| <params>:
#-----| getParameter(0): [Parameter] (unnamed parameter 0)
#-----| Type = [LValueReferenceType] const WithBracketOperator &
# 2720| [MoveAssignmentOperator] WithBracketOperator& WithBracketOperator::operator=(WithBracketOperator&&)
# 2720| <params>:
#-----| getParameter(0): [Parameter] (unnamed parameter 0)
#-----| Type = [RValueReferenceType] WithBracketOperator &&
# 2721| [ConstMemberFunction] char const& WithBracketOperator::operator[](int) const
# 2721| <params>:
# 2721| getParameter(0): [Parameter] pos
# 2721| Type = [IntType] int
# 2724| [TopLevelFunction] char UseBracketOperator(WithBracketOperator const, int)
# 2724| <params>:
# 2724| getParameter(0): [Parameter] line
# 2724| Type = [SpecifiedType] const WithBracketOperator
# 2724| getParameter(1): [Parameter] indent
# 2724| Type = [IntType] int
# 2724| getEntryPoint(): [BlockStmt] { ... }
# 2725| getStmt(0): [ReturnStmt] return ...
# 2725| getExpr(): [OverloadedArrayExpr] call to operator[]
# 2725| Type = [LValueReferenceType] const char &
# 2725| ValueCategory = prvalue
# 2725| getArrayBase(): [VariableAccess] line
# 2725| Type = [SpecifiedType] const WithBracketOperator
# 2725| ValueCategory = lvalue
# 2725| : [VariableAccess] indent
# 2725| Type = [IntType] int
# 2725| ValueCategory = prvalue(load)
# 2725| getExpr().getFullyConverted(): [ReferenceDereferenceExpr] (reference dereference)
# 2725| Type = [PlainCharType] char
# 2725| ValueCategory = prvalue(load)
many-defs-per-use.cpp:
# 34| [TopLevelFunction] void many_defs_per_use()
# 34| <params>:

View File

@@ -19713,6 +19713,33 @@ ir.cpp:
# 2698| v2698_10(void) = AliasedUse : m2698_3
# 2698| v2698_11(void) = ExitFunction :
# 2724| char UseBracketOperator(WithBracketOperator const, int)
# 2724| Block 0
# 2724| v2724_1(void) = EnterFunction :
# 2724| m2724_2(unknown) = AliasedDefinition :
# 2724| m2724_3(unknown) = InitializeNonLocal :
# 2724| m2724_4(unknown) = Chi : total:m2724_2, partial:m2724_3
# 2724| r2724_5(glval<WithBracketOperator>) = VariableAddress[line] :
# 2724| m2724_6(WithBracketOperator) = InitializeParameter[line] : &:r2724_5
# 2724| m2724_7(unknown) = Chi : total:m2724_4, partial:m2724_6
# 2724| r2724_8(glval<int>) = VariableAddress[indent] :
# 2724| m2724_9(int) = InitializeParameter[indent] : &:r2724_8
# 2725| r2725_1(glval<char>) = VariableAddress[#return] :
# 2725| r2725_2(glval<WithBracketOperator>) = VariableAddress[line] :
# 2725| r2725_3(glval<unknown>) = FunctionAddress[operator[]] :
# 2725| r2725_4(glval<int>) = VariableAddress[indent] :
# 2725| r2725_5(int) = Load[indent] : &:r2725_4, m2724_9
# 2725| r2725_6(char &) = Call[operator[]] : func:r2725_3, this:r2725_2, 0:r2725_5
# 2725| m2725_7(unknown) = ^CallSideEffect : ~m2724_7
# 2725| m2725_8(unknown) = Chi : total:m2724_7, partial:m2725_7
# 2725| v2725_9(void) = ^IndirectReadSideEffect[-1] : &:r2725_2, ~m2725_8
# 2725| r2725_10(char) = Load[?] : &:r2725_6, ~m2725_8
# 2725| m2725_11(char) = Store[#return] : &:r2725_1, r2725_10
# 2724| r2724_10(glval<char>) = VariableAddress[#return] :
# 2724| v2724_11(void) = ReturnValue : &:r2724_10, m2725_11
# 2724| v2724_12(void) = AliasedUse : ~m2725_8
# 2724| v2724_13(void) = ExitFunction :
many-defs-per-use.cpp:
# 34| void many_defs_per_use()
# 34| Block 0

View File

@@ -2717,4 +2717,12 @@ void branch_on_integral_in_cpp(int x1, int x2) {
if(!x_1_and_2) {}
}
struct WithBracketOperator {
const char& operator[](int pos) const;
};
char UseBracketOperator(const WithBracketOperator line, int indent) {
return line[indent];
}
// semmle-extractor-options: -std=c++20 --clang

View File

@@ -18031,6 +18031,30 @@ ir.cpp:
# 2698| v2698_9(void) = AliasedUse : ~m?
# 2698| v2698_10(void) = ExitFunction :
# 2724| char UseBracketOperator(WithBracketOperator const, int)
# 2724| Block 0
# 2724| v2724_1(void) = EnterFunction :
# 2724| mu2724_2(unknown) = AliasedDefinition :
# 2724| mu2724_3(unknown) = InitializeNonLocal :
# 2724| r2724_4(glval<WithBracketOperator>) = VariableAddress[line] :
# 2724| mu2724_5(WithBracketOperator) = InitializeParameter[line] : &:r2724_4
# 2724| r2724_6(glval<int>) = VariableAddress[indent] :
# 2724| mu2724_7(int) = InitializeParameter[indent] : &:r2724_6
# 2725| r2725_1(glval<char>) = VariableAddress[#return] :
# 2725| r2725_2(glval<WithBracketOperator>) = VariableAddress[line] :
# 2725| r2725_3(glval<unknown>) = FunctionAddress[operator[]] :
# 2725| r2725_4(glval<int>) = VariableAddress[indent] :
# 2725| r2725_5(int) = Load[indent] : &:r2725_4, ~m?
# 2725| r2725_6(char &) = Call[operator[]] : func:r2725_3, this:r2725_2, 0:r2725_5
# 2725| mu2725_7(unknown) = ^CallSideEffect : ~m?
# 2725| v2725_8(void) = ^IndirectReadSideEffect[-1] : &:r2725_2, ~m?
# 2725| r2725_9(char) = Load[?] : &:r2725_6, ~m?
# 2725| mu2725_10(char) = Store[#return] : &:r2725_1, r2725_9
# 2724| r2724_8(glval<char>) = VariableAddress[#return] :
# 2724| v2724_9(void) = ReturnValue : &:r2724_8, ~m?
# 2724| v2724_10(void) = AliasedUse : ~m?
# 2724| v2724_11(void) = ExitFunction :
many-defs-per-use.cpp:
# 34| void many_defs_per_use()
# 34| Block 0