mirror of
https://github.com/github/codeql.git
synced 2026-05-01 11:45:14 +02:00
C++: IR translation for global variable inits
This commit is contained in:
@@ -16,7 +16,7 @@ class IRConfiguration extends TIRConfiguration {
|
||||
/**
|
||||
* Holds if IR should be created for function `func`. By default, holds for all functions.
|
||||
*/
|
||||
predicate shouldCreateIRForFunction(Language::Function func) { any() }
|
||||
predicate shouldCreateIRForFunction(Language::Declaration func) { any() }
|
||||
|
||||
/**
|
||||
* Holds if the strings used as part of an IR dump should be generated for function `func`.
|
||||
@@ -25,7 +25,7 @@ class IRConfiguration extends TIRConfiguration {
|
||||
* of debug strings for IR that will not be dumped. We still generate the actual IR for these
|
||||
* functions, however, to preserve the results of any interprocedural analysis.
|
||||
*/
|
||||
predicate shouldEvaluateDebugStringsForFunction(Language::Function func) { any() }
|
||||
predicate shouldEvaluateDebugStringsForFunction(Language::Declaration func) { any() }
|
||||
}
|
||||
|
||||
private newtype TIREscapeAnalysisConfiguration = MkIREscapeAnalysisConfiguration()
|
||||
|
||||
@@ -97,7 +97,7 @@ class IRBlockBase extends TIRBlock {
|
||||
/**
|
||||
* Gets the `Function` that contains this block.
|
||||
*/
|
||||
final Language::Function getEnclosingFunction() {
|
||||
final Language::Declaration getEnclosingFunction() {
|
||||
result = getFirstInstruction(this).getEnclosingFunction()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -194,7 +194,7 @@ class Instruction extends Construction::TStageInstruction {
|
||||
/**
|
||||
* Gets the function that contains this instruction.
|
||||
*/
|
||||
final Language::Function getEnclosingFunction() {
|
||||
final Language::Declaration getEnclosingFunction() {
|
||||
result = this.getEnclosingIRFunction().getFunction()
|
||||
}
|
||||
|
||||
|
||||
@@ -26,20 +26,20 @@ class PrintIRConfiguration extends TPrintIRConfiguration {
|
||||
* Holds if the IR for `func` should be printed. By default, holds for all
|
||||
* functions.
|
||||
*/
|
||||
predicate shouldPrintFunction(Language::Function func) { any() }
|
||||
predicate shouldPrintFunction(Language::Declaration decl) { any() }
|
||||
}
|
||||
|
||||
/**
|
||||
* Override of `IRConfiguration` to only evaluate debug strings for the functions that are to be dumped.
|
||||
*/
|
||||
private class FilteredIRConfiguration extends IRConfiguration {
|
||||
override predicate shouldEvaluateDebugStringsForFunction(Language::Function func) {
|
||||
override predicate shouldEvaluateDebugStringsForFunction(Language::Declaration func) {
|
||||
shouldPrintFunction(func)
|
||||
}
|
||||
}
|
||||
|
||||
private predicate shouldPrintFunction(Language::Function func) {
|
||||
exists(PrintIRConfiguration config | config.shouldPrintFunction(func))
|
||||
private predicate shouldPrintFunction(Language::Declaration decl) {
|
||||
exists(PrintIRConfiguration config | config.shouldPrintFunction(decl))
|
||||
}
|
||||
|
||||
private string getAdditionalInstructionProperty(Instruction instr, string key) {
|
||||
|
||||
@@ -13,22 +13,20 @@ private newtype TIRFunction =
|
||||
* phases of the IR. Each instantiation of `IRFunction` extends this class.
|
||||
*/
|
||||
class IRFunctionBase extends TIRFunction {
|
||||
//Language::Function func;
|
||||
// IRFunctionBase() { this = TFunctionIRFunction(func) }
|
||||
/** Gets a textual representation of this element. */
|
||||
final string toString() {
|
||||
result = "IR: " + any(Language::Function func | this = TFunctionIRFunction(func)).toString()
|
||||
Language::Declaration decl;
|
||||
|
||||
IRFunctionBase() {
|
||||
this = TFunctionIRFunction(decl)
|
||||
or
|
||||
result = "IR: " + any(Language::GlobalVariable var | this = TVarInitIRFunction(var)).toString()
|
||||
this = TVarInitIRFunction(decl)
|
||||
}
|
||||
|
||||
/** Gets a textual representation of this element. */
|
||||
final string toString() { result = "IR: " + decl.toString() }
|
||||
|
||||
/** Gets the function whose IR is represented. */
|
||||
final Language::Function getFunction() { this = TFunctionIRFunction(result) }
|
||||
final Language::Declaration getFunction() { result = decl }
|
||||
|
||||
/** Gets the location of the function. */
|
||||
final Language::Location getLocation() {
|
||||
result = any(Language::Function func | this = TFunctionIRFunction(func)).getLocation()
|
||||
or
|
||||
result = any(Language::GlobalVariable var | this = TVarInitIRFunction(var)).getLocation()
|
||||
}
|
||||
final Language::Location getLocation() { result = decl.getLocation() }
|
||||
}
|
||||
|
||||
@@ -97,7 +97,7 @@ class IRBlockBase extends TIRBlock {
|
||||
/**
|
||||
* Gets the `Function` that contains this block.
|
||||
*/
|
||||
final Language::Function getEnclosingFunction() {
|
||||
final Language::Declaration getEnclosingFunction() {
|
||||
result = getFirstInstruction(this).getEnclosingFunction()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -194,7 +194,7 @@ class Instruction extends Construction::TStageInstruction {
|
||||
/**
|
||||
* Gets the function that contains this instruction.
|
||||
*/
|
||||
final Language::Function getEnclosingFunction() {
|
||||
final Language::Declaration getEnclosingFunction() {
|
||||
result = this.getEnclosingIRFunction().getFunction()
|
||||
}
|
||||
|
||||
|
||||
@@ -26,20 +26,20 @@ class PrintIRConfiguration extends TPrintIRConfiguration {
|
||||
* Holds if the IR for `func` should be printed. By default, holds for all
|
||||
* functions.
|
||||
*/
|
||||
predicate shouldPrintFunction(Language::Function func) { any() }
|
||||
predicate shouldPrintFunction(Language::Declaration decl) { any() }
|
||||
}
|
||||
|
||||
/**
|
||||
* Override of `IRConfiguration` to only evaluate debug strings for the functions that are to be dumped.
|
||||
*/
|
||||
private class FilteredIRConfiguration extends IRConfiguration {
|
||||
override predicate shouldEvaluateDebugStringsForFunction(Language::Function func) {
|
||||
override predicate shouldEvaluateDebugStringsForFunction(Language::Declaration func) {
|
||||
shouldPrintFunction(func)
|
||||
}
|
||||
}
|
||||
|
||||
private predicate shouldPrintFunction(Language::Function func) {
|
||||
exists(PrintIRConfiguration config | config.shouldPrintFunction(func))
|
||||
private predicate shouldPrintFunction(Language::Declaration decl) {
|
||||
exists(PrintIRConfiguration config | config.shouldPrintFunction(decl))
|
||||
}
|
||||
|
||||
private string getAdditionalInstructionProperty(Instruction instr, string key) {
|
||||
|
||||
@@ -802,7 +802,7 @@ abstract class TranslatedElement extends TTranslatedElement {
|
||||
/**
|
||||
* Gets the `Function` that contains this element.
|
||||
*/
|
||||
abstract Function getFunction();
|
||||
abstract Declaration getFunction();
|
||||
|
||||
/**
|
||||
* Gets the successor instruction of the instruction that was generated by
|
||||
@@ -952,3 +952,11 @@ abstract class TranslatedElement extends TTranslatedElement {
|
||||
*/
|
||||
final TranslatedElement getParent() { result.getAChild() = this }
|
||||
}
|
||||
|
||||
abstract class TranslatedInstructionContainer extends TranslatedElement {
|
||||
TranslatedInstructionContainer() {
|
||||
this instanceof TTranslatedFunction
|
||||
or
|
||||
this instanceof TTranslatedGlobalOrNamespaceVarInit
|
||||
}
|
||||
}
|
||||
@@ -13,6 +13,7 @@ private import TranslatedFunction
|
||||
private import TranslatedInitialization
|
||||
private import TranslatedFunction
|
||||
private import TranslatedStmt
|
||||
private import TranslatedGlobalVar
|
||||
import TranslatedCall
|
||||
|
||||
/**
|
||||
@@ -79,7 +80,10 @@ abstract class TranslatedExpr extends TranslatedElement {
|
||||
/** DEPRECATED: Alias for getAst */
|
||||
deprecated override Locatable getAST() { result = this.getAst() }
|
||||
|
||||
final override Function getFunction() { result = expr.getEnclosingFunction() }
|
||||
final override Declaration getFunction() {
|
||||
result = expr.getEnclosingFunction() or
|
||||
result = expr.getEnclosingVariable().(GlobalOrNamespaceVariable)
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the expression from which this `TranslatedExpr` is generated.
|
||||
@@ -89,8 +93,10 @@ abstract class TranslatedExpr extends TranslatedElement {
|
||||
/**
|
||||
* Gets the `TranslatedFunction` containing this expression.
|
||||
*/
|
||||
final TranslatedFunction getEnclosingFunction() {
|
||||
final TranslatedInstructionContainer getEnclosingFunction() {
|
||||
result = getTranslatedFunction(expr.getEnclosingFunction())
|
||||
or
|
||||
result = getTranslatedVarInit(expr.getEnclosingVariable())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -788,7 +794,7 @@ class TranslatedThisExpr extends TranslatedNonConstantExpr {
|
||||
|
||||
override IRVariable getInstructionVariable(InstructionTag tag) {
|
||||
tag = ThisAddressTag() and
|
||||
result = this.getEnclosingFunction().getThisVariable()
|
||||
result = this.getEnclosingFunction().(TranslatedFunction).getThisVariable()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2523,7 +2529,7 @@ class TranslatedVarArgsStart extends TranslatedNonConstantExpr {
|
||||
|
||||
final override IRVariable getInstructionVariable(InstructionTag tag) {
|
||||
tag = VarArgsStartEllipsisAddressTag() and
|
||||
result = this.getEnclosingFunction().getEllipsisVariable()
|
||||
result = this.getEnclosingFunction().(TranslatedFunction).getEllipsisVariable()
|
||||
}
|
||||
|
||||
final override Instruction getInstructionRegisterOperand(InstructionTag tag, OperandTag operandTag) {
|
||||
|
||||
@@ -58,7 +58,7 @@ predicate hasReturnValue(Function func) { not func.getUnspecifiedType() instance
|
||||
* Represents the IR translation of a function. This is the root elements for
|
||||
* all other elements associated with this function.
|
||||
*/
|
||||
class TranslatedFunction extends TranslatedElement, TTranslatedFunction {
|
||||
class TranslatedFunction extends TranslatedInstructionContainer, TTranslatedFunction {
|
||||
Function func;
|
||||
|
||||
TranslatedFunction() { this = TTranslatedFunction(func) }
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
import semmle.code.cpp.ir.implementation.raw.internal.TranslatedElement
|
||||
private import cpp
|
||||
private import semmle.code.cpp.ir.implementation.IRType
|
||||
private import semmle.code.cpp.ir.implementation.Opcode
|
||||
private import semmle.code.cpp.ir.implementation.internal.OperandTag
|
||||
private import semmle.code.cpp.ir.internal.CppType
|
||||
private import TranslatedInitialization
|
||||
private import InstructionTag
|
||||
|
||||
class TranslatedGlobalOrNamespaceVarInit extends TranslatedInstructionContainer,
|
||||
TTranslatedGlobalOrNamespaceVarInit, InitializationContext {
|
||||
GlobalOrNamespaceVariable var;
|
||||
|
||||
TranslatedGlobalOrNamespaceVarInit() { this = TTranslatedGlobalOrNamespaceVarInit(var) }
|
||||
|
||||
override string toString() { result = var.toString() }
|
||||
|
||||
final override GlobalOrNamespaceVariable getAst() { result = var }
|
||||
|
||||
final override Declaration getFunction() { result = var }
|
||||
|
||||
final Location getLocation() { result = var.getLocation() }
|
||||
|
||||
override Instruction getFirstInstruction() { result = this.getInstruction(EnterFunctionTag()) }
|
||||
|
||||
override TranslatedElement getChild(int n) {
|
||||
n = 1 and result = getTranslatedInitialization(var.getInitializer().getExpr())
|
||||
}
|
||||
|
||||
override predicate hasInstruction(Opcode op, InstructionTag tag, CppType type) {
|
||||
op instanceof Opcode::EnterFunction and
|
||||
tag = EnterFunctionTag() and
|
||||
type = getVoidType()
|
||||
or
|
||||
op instanceof Opcode::VariableAddress and
|
||||
tag = InitializerVariableAddressTag() and
|
||||
type = getTypeForGLValue(var.getType())
|
||||
or
|
||||
op instanceof Opcode::ReturnVoid and
|
||||
tag = ReturnTag() and
|
||||
type = getVoidType()
|
||||
or
|
||||
op instanceof Opcode::ExitFunction and
|
||||
tag = ExitFunctionTag() and
|
||||
type = getVoidType()
|
||||
}
|
||||
|
||||
override Instruction getInstructionSuccessor(InstructionTag tag, EdgeKind kind) {
|
||||
tag = EnterFunctionTag() and
|
||||
kind instanceof GotoEdge and
|
||||
result = getInstruction(InitializerVariableAddressTag())
|
||||
or
|
||||
tag = InitializerVariableAddressTag() and
|
||||
kind instanceof GotoEdge and
|
||||
result = getChild(1).getFirstInstruction()
|
||||
or
|
||||
tag = ReturnTag() and
|
||||
kind instanceof GotoEdge and
|
||||
result = getInstruction(ExitFunctionTag())
|
||||
}
|
||||
|
||||
override Instruction getChildSuccessor(TranslatedElement child) {
|
||||
child = getChild(1) and
|
||||
result = getInstruction(ReturnTag())
|
||||
}
|
||||
|
||||
override IRUserVariable getInstructionVariable(InstructionTag tag) {
|
||||
tag = InitializerVariableAddressTag() and
|
||||
result.getVariable() = var
|
||||
}
|
||||
|
||||
override Instruction getTargetAddress() {
|
||||
result = getInstruction(InitializerVariableAddressTag())
|
||||
}
|
||||
|
||||
override Type getTargetType() { result = var.getType() }
|
||||
}
|
||||
|
||||
TranslatedGlobalOrNamespaceVarInit getTranslatedVarInit(GlobalOrNamespaceVariable var) {
|
||||
result.getAst() = var
|
||||
}
|
||||
@@ -137,7 +137,10 @@ abstract class TranslatedInitialization extends TranslatedElement, TTranslatedIn
|
||||
|
||||
final override string toString() { result = "init: " + expr.toString() }
|
||||
|
||||
final override Function getFunction() { result = expr.getEnclosingFunction() }
|
||||
final override Declaration getFunction() {
|
||||
result = expr.getEnclosingFunction() or
|
||||
result = expr.getEnclosingVariable().(GlobalOrNamespaceVariable)
|
||||
}
|
||||
|
||||
final override Locatable getAst() { result = expr }
|
||||
|
||||
@@ -486,7 +489,10 @@ abstract class TranslatedFieldInitialization extends TranslatedElement {
|
||||
/** DEPRECATED: Alias for getAst */
|
||||
deprecated override Locatable getAST() { result = getAst() }
|
||||
|
||||
final override Function getFunction() { result = ast.getEnclosingFunction() }
|
||||
final override Declaration getFunction() {
|
||||
result = ast.getEnclosingFunction() or
|
||||
result = ast.getEnclosingVariable().(GlobalOrNamespaceVariable)
|
||||
}
|
||||
|
||||
final override Instruction getFirstInstruction() { result = getInstruction(getFieldAddressTag()) }
|
||||
|
||||
|
||||
@@ -97,7 +97,7 @@ class IRBlockBase extends TIRBlock {
|
||||
/**
|
||||
* Gets the `Function` that contains this block.
|
||||
*/
|
||||
final Language::Function getEnclosingFunction() {
|
||||
final Language::Declaration getEnclosingFunction() {
|
||||
result = getFirstInstruction(this).getEnclosingFunction()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -194,7 +194,7 @@ class Instruction extends Construction::TStageInstruction {
|
||||
/**
|
||||
* Gets the function that contains this instruction.
|
||||
*/
|
||||
final Language::Function getEnclosingFunction() {
|
||||
final Language::Declaration getEnclosingFunction() {
|
||||
result = this.getEnclosingIRFunction().getFunction()
|
||||
}
|
||||
|
||||
|
||||
@@ -26,20 +26,20 @@ class PrintIRConfiguration extends TPrintIRConfiguration {
|
||||
* Holds if the IR for `func` should be printed. By default, holds for all
|
||||
* functions.
|
||||
*/
|
||||
predicate shouldPrintFunction(Language::Function func) { any() }
|
||||
predicate shouldPrintFunction(Language::Declaration decl) { any() }
|
||||
}
|
||||
|
||||
/**
|
||||
* Override of `IRConfiguration` to only evaluate debug strings for the functions that are to be dumped.
|
||||
*/
|
||||
private class FilteredIRConfiguration extends IRConfiguration {
|
||||
override predicate shouldEvaluateDebugStringsForFunction(Language::Function func) {
|
||||
override predicate shouldEvaluateDebugStringsForFunction(Language::Declaration func) {
|
||||
shouldPrintFunction(func)
|
||||
}
|
||||
}
|
||||
|
||||
private predicate shouldPrintFunction(Language::Function func) {
|
||||
exists(PrintIRConfiguration config | config.shouldPrintFunction(func))
|
||||
private predicate shouldPrintFunction(Language::Declaration decl) {
|
||||
exists(PrintIRConfiguration config | config.shouldPrintFunction(decl))
|
||||
}
|
||||
|
||||
private string getAdditionalInstructionProperty(Instruction instr, string key) {
|
||||
|
||||
@@ -58,6 +58,8 @@ class Field = Cpp::Field;
|
||||
|
||||
class BuiltInOperation = Cpp::BuiltInOperation;
|
||||
|
||||
class Declaration = Cpp::Declaration;
|
||||
|
||||
// TODO: Remove necessity for these.
|
||||
class Expr = Cpp::Expr;
|
||||
|
||||
|
||||
@@ -3,14 +3,28 @@ unexpectedOperand
|
||||
duplicateOperand
|
||||
missingPhiOperand
|
||||
missingOperandType
|
||||
| ir.cpp:1038:12:1038:18 | ChiTotal | Operand 'ChiTotal' of instruction 'Chi' is missing a type in function '$@'. | ir.cpp:1038:6:1038:8 | (lambda [] type at line 1038, col. 12) lam | (lambda [] type at line 1038, col. 12) lam |
|
||||
| ir.cpp:1674:16:1674:16 | ChiTotal | Operand 'ChiTotal' of instruction 'Chi' is missing a type in function '$@'. | ir.cpp:1674:5:1674:12 | int global_2 | int global_2 |
|
||||
| ir.cpp:1676:22:1676:22 | ChiTotal | Operand 'ChiTotal' of instruction 'Chi' is missing a type in function '$@'. | ir.cpp:1676:11:1676:18 | int const global_3 | int const global_3 |
|
||||
| struct_init.cpp:10:7:10:9 | ChiTotal | Operand 'ChiTotal' of instruction 'Chi' is missing a type in function '$@'. | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] |
|
||||
duplicateChiOperand
|
||||
sideEffectWithoutPrimary
|
||||
instructionWithoutSuccessor
|
||||
| clang.cpp:3:5:3:13 | VariableAddress: globalInt | Instruction 'VariableAddress: globalInt' has no successors in function '$@'. | clang.cpp:3:5:3:13 | int globalInt | int globalInt |
|
||||
| ir.cpp:346:5:346:5 | VariableAddress: g | Instruction 'VariableAddress: g' has no successors in function '$@'. | ir.cpp:346:5:346:5 | int g | int g |
|
||||
| ir.cpp:1672:5:1672:12 | VariableAddress: global_1 | Instruction 'VariableAddress: global_1' has no successors in function '$@'. | ir.cpp:1672:5:1672:12 | int global_1 | int global_1 |
|
||||
| struct_init.cpp:14:7:14:20 | VariableAddress: global_pointer | Instruction 'VariableAddress: global_pointer' has no successors in function '$@'. | struct_init.cpp:14:7:14:20 | Info* global_pointer | Info* global_pointer |
|
||||
ambiguousSuccessors
|
||||
unexplainedLoop
|
||||
unnecessaryPhiInstruction
|
||||
memoryOperandDefinitionIsUnmodeled
|
||||
operandAcrossFunctions
|
||||
| struct_init.cpp:9:13:9:25 | Left | Operand 'Left' is used on instruction 'PointerAdd: {...}' in function '$@', but is defined on instruction 'VariableAddress: infos_in_file' in function '$@'. | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] |
|
||||
| struct_init.cpp:9:13:9:25 | Left | Operand 'Left' is used on instruction 'PointerAdd: {...}' in function '$@', but is defined on instruction 'VariableAddress: infos_in_file' in function '$@'. | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] |
|
||||
| struct_init.cpp:9:31:12:1 | Unary | Operand 'Unary' is used on instruction 'FieldAddress: {...}' in function '$@', but is defined on instruction 'PointerAdd: {...}' in function '$@'. | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> |
|
||||
| struct_init.cpp:9:31:12:1 | Unary | Operand 'Unary' is used on instruction 'FieldAddress: {...}' in function '$@', but is defined on instruction 'PointerAdd: {...}' in function '$@'. | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> |
|
||||
| struct_init.cpp:9:31:12:1 | Unary | Operand 'Unary' is used on instruction 'FieldAddress: {...}' in function '$@', but is defined on instruction 'PointerAdd: {...}' in function '$@'. | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> |
|
||||
| struct_init.cpp:9:31:12:1 | Unary | Operand 'Unary' is used on instruction 'FieldAddress: {...}' in function '$@', but is defined on instruction 'PointerAdd: {...}' in function '$@'. | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> |
|
||||
instructionWithoutUniqueBlock
|
||||
containsLoopOfForwardEdges
|
||||
lostReachability
|
||||
@@ -19,8 +33,20 @@ useNotDominatedByDefinition
|
||||
switchInstructionWithoutDefaultEdge
|
||||
notMarkedAsConflated
|
||||
wronglyMarkedAsConflated
|
||||
| ir.cpp:1038:12:1038:18 | Chi: [...](...){...} | Instruction 'Chi: [...](...){...}' should not be marked as having a conflated result in function '$@'. | ir.cpp:1038:6:1038:8 | (lambda [] type at line 1038, col. 12) lam | (lambda [] type at line 1038, col. 12) lam |
|
||||
| ir.cpp:1038:12:1038:18 | Chi: [...](...){...} | Instruction 'Chi: [...](...){...}' should not be marked as having a conflated result in function '$@'. | ir.cpp:1038:6:1038:8 | (lambda [] type at line 1038, col. 12) lam | (lambda [] type at line 1038, col. 12) lam |
|
||||
| ir.cpp:1674:16:1674:16 | Chi: 1 | Instruction 'Chi: 1' should not be marked as having a conflated result in function '$@'. | ir.cpp:1674:5:1674:12 | int global_2 | int global_2 |
|
||||
| ir.cpp:1676:22:1676:22 | Chi: 2 | Instruction 'Chi: 2' should not be marked as having a conflated result in function '$@'. | ir.cpp:1676:11:1676:18 | int const global_3 | int const global_3 |
|
||||
| struct_init.cpp:10:7:10:9 | Chi: array to pointer conversion | Instruction 'Chi: array to pointer conversion' should not be marked as having a conflated result in function '$@'. | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] |
|
||||
| struct_init.cpp:10:12:10:19 | Chi: handler1 | Instruction 'Chi: handler1' should not be marked as having a conflated result in function '$@'. | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] |
|
||||
| struct_init.cpp:11:7:11:9 | Chi: array to pointer conversion | Instruction 'Chi: array to pointer conversion' should not be marked as having a conflated result in function '$@'. | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] |
|
||||
| struct_init.cpp:11:12:11:20 | Chi: & ... | Instruction 'Chi: & ...' should not be marked as having a conflated result in function '$@'. | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] |
|
||||
invalidOverlap
|
||||
nonUniqueEnclosingIRFunction
|
||||
| struct_init.cpp:9:31:12:1 | Constant: {...} | Instruction 'Constant: {...}' has 0 results for `getEnclosingIRFunction()` in function '$@'. | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> |
|
||||
| struct_init.cpp:9:31:12:1 | Constant: {...} | Instruction 'Constant: {...}' has 0 results for `getEnclosingIRFunction()` in function '$@'. | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> |
|
||||
| struct_init.cpp:9:31:12:1 | PointerAdd: {...} | Instruction 'PointerAdd: {...}' has 0 results for `getEnclosingIRFunction()` in function '$@'. | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> |
|
||||
| struct_init.cpp:9:31:12:1 | PointerAdd: {...} | Instruction 'PointerAdd: {...}' has 0 results for `getEnclosingIRFunction()` in function '$@'. | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> |
|
||||
fieldAddressOnNonPointer
|
||||
thisArgumentIsNonPointer
|
||||
missingCanonicalLanguageType
|
||||
|
||||
@@ -3,14 +3,28 @@ unexpectedOperand
|
||||
duplicateOperand
|
||||
missingPhiOperand
|
||||
missingOperandType
|
||||
| ir.cpp:1038:12:1038:18 | ChiTotal | Operand 'ChiTotal' of instruction 'Chi' is missing a type in function '$@'. | ir.cpp:1038:6:1038:8 | (lambda [] type at line 1038, col. 12) lam | (lambda [] type at line 1038, col. 12) lam |
|
||||
| ir.cpp:1674:16:1674:16 | ChiTotal | Operand 'ChiTotal' of instruction 'Chi' is missing a type in function '$@'. | ir.cpp:1674:5:1674:12 | int global_2 | int global_2 |
|
||||
| ir.cpp:1676:22:1676:22 | ChiTotal | Operand 'ChiTotal' of instruction 'Chi' is missing a type in function '$@'. | ir.cpp:1676:11:1676:18 | int const global_3 | int const global_3 |
|
||||
| struct_init.cpp:10:7:10:9 | ChiTotal | Operand 'ChiTotal' of instruction 'Chi' is missing a type in function '$@'. | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] |
|
||||
duplicateChiOperand
|
||||
sideEffectWithoutPrimary
|
||||
instructionWithoutSuccessor
|
||||
| clang.cpp:3:5:3:13 | VariableAddress: globalInt | Instruction 'VariableAddress: globalInt' has no successors in function '$@'. | clang.cpp:3:5:3:13 | int globalInt | int globalInt |
|
||||
| ir.cpp:346:5:346:5 | VariableAddress: g | Instruction 'VariableAddress: g' has no successors in function '$@'. | ir.cpp:346:5:346:5 | int g | int g |
|
||||
| ir.cpp:1672:5:1672:12 | VariableAddress: global_1 | Instruction 'VariableAddress: global_1' has no successors in function '$@'. | ir.cpp:1672:5:1672:12 | int global_1 | int global_1 |
|
||||
| struct_init.cpp:14:7:14:20 | VariableAddress: global_pointer | Instruction 'VariableAddress: global_pointer' has no successors in function '$@'. | struct_init.cpp:14:7:14:20 | Info* global_pointer | Info* global_pointer |
|
||||
ambiguousSuccessors
|
||||
unexplainedLoop
|
||||
unnecessaryPhiInstruction
|
||||
memoryOperandDefinitionIsUnmodeled
|
||||
operandAcrossFunctions
|
||||
| struct_init.cpp:9:13:9:25 | Left | Operand 'Left' is used on instruction 'PointerAdd: {...}' in function '$@', but is defined on instruction 'VariableAddress: infos_in_file' in function '$@'. | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] |
|
||||
| struct_init.cpp:9:13:9:25 | Left | Operand 'Left' is used on instruction 'PointerAdd: {...}' in function '$@', but is defined on instruction 'VariableAddress: infos_in_file' in function '$@'. | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] |
|
||||
| struct_init.cpp:9:31:12:1 | Unary | Operand 'Unary' is used on instruction 'FieldAddress: {...}' in function '$@', but is defined on instruction 'PointerAdd: {...}' in function '$@'. | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> |
|
||||
| struct_init.cpp:9:31:12:1 | Unary | Operand 'Unary' is used on instruction 'FieldAddress: {...}' in function '$@', but is defined on instruction 'PointerAdd: {...}' in function '$@'. | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> |
|
||||
| struct_init.cpp:9:31:12:1 | Unary | Operand 'Unary' is used on instruction 'FieldAddress: {...}' in function '$@', but is defined on instruction 'PointerAdd: {...}' in function '$@'. | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> |
|
||||
| struct_init.cpp:9:31:12:1 | Unary | Operand 'Unary' is used on instruction 'FieldAddress: {...}' in function '$@', but is defined on instruction 'PointerAdd: {...}' in function '$@'. | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> |
|
||||
instructionWithoutUniqueBlock
|
||||
containsLoopOfForwardEdges
|
||||
lostReachability
|
||||
@@ -19,8 +33,20 @@ useNotDominatedByDefinition
|
||||
switchInstructionWithoutDefaultEdge
|
||||
notMarkedAsConflated
|
||||
wronglyMarkedAsConflated
|
||||
| ir.cpp:1038:12:1038:18 | Chi: [...](...){...} | Instruction 'Chi: [...](...){...}' should not be marked as having a conflated result in function '$@'. | ir.cpp:1038:6:1038:8 | (lambda [] type at line 1038, col. 12) lam | (lambda [] type at line 1038, col. 12) lam |
|
||||
| ir.cpp:1038:12:1038:18 | Chi: [...](...){...} | Instruction 'Chi: [...](...){...}' should not be marked as having a conflated result in function '$@'. | ir.cpp:1038:6:1038:8 | (lambda [] type at line 1038, col. 12) lam | (lambda [] type at line 1038, col. 12) lam |
|
||||
| ir.cpp:1674:16:1674:16 | Chi: 1 | Instruction 'Chi: 1' should not be marked as having a conflated result in function '$@'. | ir.cpp:1674:5:1674:12 | int global_2 | int global_2 |
|
||||
| ir.cpp:1676:22:1676:22 | Chi: 2 | Instruction 'Chi: 2' should not be marked as having a conflated result in function '$@'. | ir.cpp:1676:11:1676:18 | int const global_3 | int const global_3 |
|
||||
| struct_init.cpp:10:7:10:9 | Chi: array to pointer conversion | Instruction 'Chi: array to pointer conversion' should not be marked as having a conflated result in function '$@'. | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] |
|
||||
| struct_init.cpp:10:12:10:19 | Chi: handler1 | Instruction 'Chi: handler1' should not be marked as having a conflated result in function '$@'. | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] |
|
||||
| struct_init.cpp:11:7:11:9 | Chi: array to pointer conversion | Instruction 'Chi: array to pointer conversion' should not be marked as having a conflated result in function '$@'. | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] |
|
||||
| struct_init.cpp:11:12:11:20 | Chi: & ... | Instruction 'Chi: & ...' should not be marked as having a conflated result in function '$@'. | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] |
|
||||
invalidOverlap
|
||||
nonUniqueEnclosingIRFunction
|
||||
| struct_init.cpp:9:31:12:1 | Constant: {...} | Instruction 'Constant: {...}' has 0 results for `getEnclosingIRFunction()` in function '$@'. | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> |
|
||||
| struct_init.cpp:9:31:12:1 | Constant: {...} | Instruction 'Constant: {...}' has 0 results for `getEnclosingIRFunction()` in function '$@'. | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> |
|
||||
| struct_init.cpp:9:31:12:1 | PointerAdd: {...} | Instruction 'PointerAdd: {...}' has 0 results for `getEnclosingIRFunction()` in function '$@'. | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> |
|
||||
| struct_init.cpp:9:31:12:1 | PointerAdd: {...} | Instruction 'PointerAdd: {...}' has 0 results for `getEnclosingIRFunction()` in function '$@'. | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> |
|
||||
fieldAddressOnNonPointer
|
||||
thisArgumentIsNonPointer
|
||||
missingCanonicalLanguageType
|
||||
|
||||
@@ -4658,6 +4658,7 @@
|
||||
| ir.cpp:1034:6:1034:20 | ChiTotal | total:m1034_2 |
|
||||
| ir.cpp:1034:6:1034:20 | SideEffect | m1034_3 |
|
||||
| ir.cpp:1035:15:1035:15 | Address | &:r1035_1 |
|
||||
| ir.cpp:1038:12:1038:18 | ChiTotal | total:~m? |
|
||||
| ir.cpp:1038:14:1038:14 | Address | &:r1038_5 |
|
||||
| ir.cpp:1038:14:1038:14 | Address | &:r1038_5 |
|
||||
| ir.cpp:1038:14:1038:14 | Address | &:r1038_5 |
|
||||
@@ -7436,6 +7437,8 @@
|
||||
| ir.cpp:1668:17:1668:17 | Load | m1661_14 |
|
||||
| ir.cpp:1668:17:1668:17 | Load | ~m1666_6 |
|
||||
| ir.cpp:1668:17:1668:17 | StoreValue | r1668_4 |
|
||||
| ir.cpp:1674:16:1674:16 | ChiTotal | total:~m? |
|
||||
| ir.cpp:1676:22:1676:22 | ChiTotal | total:~m? |
|
||||
| perf-regression.cpp:6:3:6:5 | Address | &:r6_5 |
|
||||
| perf-regression.cpp:6:3:6:5 | Address | &:r6_5 |
|
||||
| perf-regression.cpp:6:3:6:5 | Address | &:r6_7 |
|
||||
@@ -7679,6 +7682,7 @@
|
||||
| smart_ptr.cpp:47:43:47:63 | SideEffect | ~m47_16 |
|
||||
| smart_ptr.cpp:47:43:47:63 | Unary | r47_5 |
|
||||
| smart_ptr.cpp:47:43:47:63 | Unary | r47_6 |
|
||||
| struct_init.cpp:10:7:10:9 | ChiTotal | total:~m? |
|
||||
| struct_init.cpp:16:6:16:20 | ChiPartial | partial:m16_3 |
|
||||
| struct_init.cpp:16:6:16:20 | ChiTotal | total:m16_2 |
|
||||
| struct_init.cpp:16:6:16:20 | SideEffect | ~m17_5 |
|
||||
|
||||
@@ -7,11 +7,21 @@ duplicateChiOperand
|
||||
sideEffectWithoutPrimary
|
||||
instructionWithoutSuccessor
|
||||
| ../../../include/memory.h:68:25:68:33 | CopyValue: (reference to) | Instruction 'CopyValue: (reference to)' has no successors in function '$@'. | ../../../include/memory.h:67:5:67:5 | void std::unique_ptr<int, std::default_delete<int>>::~unique_ptr() | void std::unique_ptr<int, std::default_delete<int>>::~unique_ptr() |
|
||||
| clang.cpp:3:5:3:13 | VariableAddress: globalInt | Instruction 'VariableAddress: globalInt' has no successors in function '$@'. | clang.cpp:3:5:3:13 | int globalInt | int globalInt |
|
||||
| ir.cpp:346:5:346:5 | VariableAddress: g | Instruction 'VariableAddress: g' has no successors in function '$@'. | ir.cpp:346:5:346:5 | int g | int g |
|
||||
| ir.cpp:1672:5:1672:12 | VariableAddress: global_1 | Instruction 'VariableAddress: global_1' has no successors in function '$@'. | ir.cpp:1672:5:1672:12 | int global_1 | int global_1 |
|
||||
| struct_init.cpp:14:7:14:20 | VariableAddress: global_pointer | Instruction 'VariableAddress: global_pointer' has no successors in function '$@'. | struct_init.cpp:14:7:14:20 | Info* global_pointer | Info* global_pointer |
|
||||
ambiguousSuccessors
|
||||
unexplainedLoop
|
||||
unnecessaryPhiInstruction
|
||||
memoryOperandDefinitionIsUnmodeled
|
||||
operandAcrossFunctions
|
||||
| struct_init.cpp:9:13:9:25 | Left | Operand 'Left' is used on instruction 'PointerAdd: {...}' in function '$@', but is defined on instruction 'VariableAddress: infos_in_file' in function '$@'. | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] |
|
||||
| struct_init.cpp:9:13:9:25 | Left | Operand 'Left' is used on instruction 'PointerAdd: {...}' in function '$@', but is defined on instruction 'VariableAddress: infos_in_file' in function '$@'. | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] |
|
||||
| struct_init.cpp:9:31:12:1 | Unary | Operand 'Unary' is used on instruction 'FieldAddress: {...}' in function '$@', but is defined on instruction 'PointerAdd: {...}' in function '$@'. | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> |
|
||||
| struct_init.cpp:9:31:12:1 | Unary | Operand 'Unary' is used on instruction 'FieldAddress: {...}' in function '$@', but is defined on instruction 'PointerAdd: {...}' in function '$@'. | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> |
|
||||
| struct_init.cpp:9:31:12:1 | Unary | Operand 'Unary' is used on instruction 'FieldAddress: {...}' in function '$@', but is defined on instruction 'PointerAdd: {...}' in function '$@'. | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> |
|
||||
| struct_init.cpp:9:31:12:1 | Unary | Operand 'Unary' is used on instruction 'FieldAddress: {...}' in function '$@', but is defined on instruction 'PointerAdd: {...}' in function '$@'. | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> |
|
||||
instructionWithoutUniqueBlock
|
||||
containsLoopOfForwardEdges
|
||||
lostReachability
|
||||
@@ -23,6 +33,10 @@ notMarkedAsConflated
|
||||
wronglyMarkedAsConflated
|
||||
invalidOverlap
|
||||
nonUniqueEnclosingIRFunction
|
||||
| struct_init.cpp:9:31:12:1 | Constant: {...} | Instruction 'Constant: {...}' has 0 results for `getEnclosingIRFunction()` in function '$@'. | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> |
|
||||
| struct_init.cpp:9:31:12:1 | Constant: {...} | Instruction 'Constant: {...}' has 0 results for `getEnclosingIRFunction()` in function '$@'. | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> |
|
||||
| struct_init.cpp:9:31:12:1 | PointerAdd: {...} | Instruction 'PointerAdd: {...}' has 0 results for `getEnclosingIRFunction()` in function '$@'. | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> |
|
||||
| struct_init.cpp:9:31:12:1 | PointerAdd: {...} | Instruction 'PointerAdd: {...}' has 0 results for `getEnclosingIRFunction()` in function '$@'. | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> |
|
||||
fieldAddressOnNonPointer
|
||||
thisArgumentIsNonPointer
|
||||
missingCanonicalLanguageType
|
||||
|
||||
@@ -107,6 +107,15 @@ bad_asts.cpp:
|
||||
# 30| v30_6(void) = ExitFunction :
|
||||
|
||||
clang.cpp:
|
||||
# 3| int globalInt
|
||||
# 3| Block 0
|
||||
# 3| v3_1(void) = EnterFunction :
|
||||
# 3| r3_2(glval<int>) = VariableAddress[globalInt] :
|
||||
|
||||
# 3| Block 1
|
||||
# 3| v3_3(void) = ReturnVoid :
|
||||
# 3| v3_4(void) = ExitFunction :
|
||||
|
||||
# 5| int* globalIntAddress()
|
||||
# 5| Block 0
|
||||
# 5| v5_1(void) = EnterFunction :
|
||||
@@ -2192,6 +2201,15 @@ ir.cpp:
|
||||
# 341| v341_11(void) = AliasedUse : ~m?
|
||||
# 341| v341_12(void) = ExitFunction :
|
||||
|
||||
# 346| int g
|
||||
# 346| Block 0
|
||||
# 346| v346_1(void) = EnterFunction :
|
||||
# 346| r346_2(glval<int>) = VariableAddress[g] :
|
||||
|
||||
# 346| Block 1
|
||||
# 346| v346_3(void) = ReturnVoid :
|
||||
# 346| v346_4(void) = ExitFunction :
|
||||
|
||||
# 348| int* AddressOf()
|
||||
# 348| Block 0
|
||||
# 348| v348_1(void) = EnterFunction :
|
||||
@@ -5616,6 +5634,17 @@ ir.cpp:
|
||||
# 1034| v1034_5(void) = AliasedUse : ~m?
|
||||
# 1034| v1034_6(void) = ExitFunction :
|
||||
|
||||
# 1038| (lambda [] type at line 1038, col. 12) lam
|
||||
# 1038| Block 0
|
||||
# 1038| v1038_1(void) = EnterFunction :
|
||||
# 1038| r1038_2(glval<decltype([...](...){...})>) = VariableAddress :
|
||||
# 1038| r1038_3(glval<decltype([...](...){...})>) = VariableAddress :
|
||||
# 1038| mu1038_4(decltype([...](...){...})) = Uninitialized : &:r1038_3
|
||||
# 1038| r1038_5(decltype([...](...){...})) = Load[?] : &:r1038_3, ~m?
|
||||
# 1038| mu1038_6(decltype([...](...){...})) = Store[?] : &:r1038_2, r1038_5
|
||||
# 1038| v1038_7(void) = ReturnVoid :
|
||||
# 1038| v1038_8(void) = ExitFunction :
|
||||
|
||||
# 1038| void (lambda [] type at line 1038, col. 12)::operator()() const
|
||||
# 1038| Block 0
|
||||
# 1038| v1038_1(void) = EnterFunction :
|
||||
@@ -8664,6 +8693,33 @@ ir.cpp:
|
||||
# 1645| v1645_5(void) = AliasedUse : ~m?
|
||||
# 1645| v1645_6(void) = ExitFunction :
|
||||
|
||||
# 1672| int global_1
|
||||
# 1672| Block 0
|
||||
# 1672| v1672_1(void) = EnterFunction :
|
||||
# 1672| r1672_2(glval<int>) = VariableAddress :
|
||||
|
||||
# 1672| Block 1
|
||||
# 1672| v1672_3(void) = ReturnVoid :
|
||||
# 1672| v1672_4(void) = ExitFunction :
|
||||
|
||||
# 1674| int global_2
|
||||
# 1674| Block 0
|
||||
# 1674| v1674_1(void) = EnterFunction :
|
||||
# 1674| r1674_2(glval<int>) = VariableAddress :
|
||||
# 1674| r1674_3(int) = Constant[1] :
|
||||
# 1674| mu1674_4(int) = Store[?] : &:r1674_2, r1674_3
|
||||
# 1674| v1674_5(void) = ReturnVoid :
|
||||
# 1674| v1674_6(void) = ExitFunction :
|
||||
|
||||
# 1676| int const global_3
|
||||
# 1676| Block 0
|
||||
# 1676| v1676_1(void) = EnterFunction :
|
||||
# 1676| r1676_2(glval<int>) = VariableAddress :
|
||||
# 1676| r1676_3(int) = Constant[2] :
|
||||
# 1676| mu1676_4(int) = Store[?] : &:r1676_2, r1676_3
|
||||
# 1676| v1676_5(void) = ReturnVoid :
|
||||
# 1676| v1676_6(void) = ExitFunction :
|
||||
|
||||
perf-regression.cpp:
|
||||
# 6| void Big::Big()
|
||||
# 6| Block 0
|
||||
@@ -8885,6 +8941,37 @@ smart_ptr.cpp:
|
||||
# 28| v28_6(void) = ExitFunction :
|
||||
|
||||
struct_init.cpp:
|
||||
# 9| Info infos_in_file[]
|
||||
# 9| Block 0
|
||||
# 9| v9_1(void) = EnterFunction :
|
||||
# 9| r9_2(glval<Info[]>) = VariableAddress :
|
||||
# 10| r10_1(glval<char *>) = FieldAddress[name] :
|
||||
# 10| r10_2(glval<char[2]>) = StringConstant :
|
||||
# 10| r10_3(char *) = Convert : r10_2
|
||||
# 10| mu10_4(char *) = Store[?] : &:r10_1, r10_3
|
||||
# 10| r10_5(glval<..(*)(..)>) = FieldAddress[handler] :
|
||||
# 10| r10_6(..(*)(..)) = FunctionAddress[handler1] :
|
||||
# 10| mu10_7(..(*)(..)) = Store[?] : &:r10_5, r10_6
|
||||
# 11| r11_1(glval<char *>) = FieldAddress[name] :
|
||||
# 11| r11_2(glval<char[2]>) = StringConstant :
|
||||
# 11| r11_3(char *) = Convert : r11_2
|
||||
# 11| mu11_4(char *) = Store[?] : &:r11_1, r11_3
|
||||
# 11| r11_5(glval<..(*)(..)>) = FieldAddress[handler] :
|
||||
# 11| r11_6(glval<..()(..)>) = FunctionAddress[handler2] :
|
||||
# 11| r11_7(..(*)(..)) = CopyValue : r11_6
|
||||
# 11| mu11_8(..(*)(..)) = Store[?] : &:r11_5, r11_7
|
||||
# 9| v9_3(void) = ReturnVoid :
|
||||
# 9| v9_4(void) = ExitFunction :
|
||||
|
||||
# 14| Info* global_pointer
|
||||
# 14| Block 0
|
||||
# 14| v14_1(void) = EnterFunction :
|
||||
# 14| r14_2(glval<Info *>) = VariableAddress[global_pointer] :
|
||||
|
||||
# 14| Block 1
|
||||
# 14| v14_3(void) = ReturnVoid :
|
||||
# 14| v14_4(void) = ExitFunction :
|
||||
|
||||
# 16| void let_info_escape(Info*)
|
||||
# 16| Block 0
|
||||
# 16| v16_1(void) = EnterFunction :
|
||||
|
||||
@@ -7,5 +7,7 @@ private import semmle.code.cpp.ir.implementation.raw.PrintIR
|
||||
private import PrintConfig
|
||||
|
||||
private class PrintConfig extends PrintIRConfiguration {
|
||||
override predicate shouldPrintFunction(Function func) { shouldDumpFunction(func) }
|
||||
override predicate shouldPrintFunction(Declaration decl) {
|
||||
shouldDumpFunction(decl) or decl instanceof GlobalOrNamespaceVariable
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,11 +6,21 @@ missingOperandType
|
||||
duplicateChiOperand
|
||||
sideEffectWithoutPrimary
|
||||
instructionWithoutSuccessor
|
||||
| clang.cpp:3:5:3:13 | VariableAddress: globalInt | Instruction 'VariableAddress: globalInt' has no successors in function '$@'. | clang.cpp:3:5:3:13 | int globalInt | int globalInt |
|
||||
| ir.cpp:346:5:346:5 | VariableAddress: g | Instruction 'VariableAddress: g' has no successors in function '$@'. | ir.cpp:346:5:346:5 | int g | int g |
|
||||
| ir.cpp:1672:5:1672:12 | VariableAddress: global_1 | Instruction 'VariableAddress: global_1' has no successors in function '$@'. | ir.cpp:1672:5:1672:12 | int global_1 | int global_1 |
|
||||
| struct_init.cpp:14:7:14:20 | VariableAddress: global_pointer | Instruction 'VariableAddress: global_pointer' has no successors in function '$@'. | struct_init.cpp:14:7:14:20 | Info* global_pointer | Info* global_pointer |
|
||||
ambiguousSuccessors
|
||||
unexplainedLoop
|
||||
unnecessaryPhiInstruction
|
||||
memoryOperandDefinitionIsUnmodeled
|
||||
operandAcrossFunctions
|
||||
| struct_init.cpp:9:13:9:25 | Left | Operand 'Left' is used on instruction 'PointerAdd: {...}' in function '$@', but is defined on instruction 'VariableAddress: infos_in_file' in function '$@'. | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] |
|
||||
| struct_init.cpp:9:13:9:25 | Left | Operand 'Left' is used on instruction 'PointerAdd: {...}' in function '$@', but is defined on instruction 'VariableAddress: infos_in_file' in function '$@'. | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] |
|
||||
| struct_init.cpp:9:31:12:1 | Unary | Operand 'Unary' is used on instruction 'FieldAddress: {...}' in function '$@', but is defined on instruction 'PointerAdd: {...}' in function '$@'. | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> |
|
||||
| struct_init.cpp:9:31:12:1 | Unary | Operand 'Unary' is used on instruction 'FieldAddress: {...}' in function '$@', but is defined on instruction 'PointerAdd: {...}' in function '$@'. | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> |
|
||||
| struct_init.cpp:9:31:12:1 | Unary | Operand 'Unary' is used on instruction 'FieldAddress: {...}' in function '$@', but is defined on instruction 'PointerAdd: {...}' in function '$@'. | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> |
|
||||
| struct_init.cpp:9:31:12:1 | Unary | Operand 'Unary' is used on instruction 'FieldAddress: {...}' in function '$@', but is defined on instruction 'PointerAdd: {...}' in function '$@'. | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> |
|
||||
instructionWithoutUniqueBlock
|
||||
containsLoopOfForwardEdges
|
||||
lostReachability
|
||||
@@ -21,6 +31,10 @@ notMarkedAsConflated
|
||||
wronglyMarkedAsConflated
|
||||
invalidOverlap
|
||||
nonUniqueEnclosingIRFunction
|
||||
| struct_init.cpp:9:31:12:1 | Constant: {...} | Instruction 'Constant: {...}' has 0 results for `getEnclosingIRFunction()` in function '$@'. | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> |
|
||||
| struct_init.cpp:9:31:12:1 | Constant: {...} | Instruction 'Constant: {...}' has 0 results for `getEnclosingIRFunction()` in function '$@'. | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> |
|
||||
| struct_init.cpp:9:31:12:1 | PointerAdd: {...} | Instruction 'PointerAdd: {...}' has 0 results for `getEnclosingIRFunction()` in function '$@'. | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> |
|
||||
| struct_init.cpp:9:31:12:1 | PointerAdd: {...} | Instruction 'PointerAdd: {...}' has 0 results for `getEnclosingIRFunction()` in function '$@'. | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> |
|
||||
fieldAddressOnNonPointer
|
||||
thisArgumentIsNonPointer
|
||||
missingCanonicalLanguageType
|
||||
|
||||
@@ -6,11 +6,21 @@ missingOperandType
|
||||
duplicateChiOperand
|
||||
sideEffectWithoutPrimary
|
||||
instructionWithoutSuccessor
|
||||
| clang.cpp:3:5:3:13 | VariableAddress: globalInt | Instruction 'VariableAddress: globalInt' has no successors in function '$@'. | clang.cpp:3:5:3:13 | int globalInt | int globalInt |
|
||||
| ir.cpp:346:5:346:5 | VariableAddress: g | Instruction 'VariableAddress: g' has no successors in function '$@'. | ir.cpp:346:5:346:5 | int g | int g |
|
||||
| ir.cpp:1672:5:1672:12 | VariableAddress: global_1 | Instruction 'VariableAddress: global_1' has no successors in function '$@'. | ir.cpp:1672:5:1672:12 | int global_1 | int global_1 |
|
||||
| struct_init.cpp:14:7:14:20 | VariableAddress: global_pointer | Instruction 'VariableAddress: global_pointer' has no successors in function '$@'. | struct_init.cpp:14:7:14:20 | Info* global_pointer | Info* global_pointer |
|
||||
ambiguousSuccessors
|
||||
unexplainedLoop
|
||||
unnecessaryPhiInstruction
|
||||
memoryOperandDefinitionIsUnmodeled
|
||||
operandAcrossFunctions
|
||||
| struct_init.cpp:9:13:9:25 | Left | Operand 'Left' is used on instruction 'PointerAdd: {...}' in function '$@', but is defined on instruction 'VariableAddress: infos_in_file' in function '$@'. | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] |
|
||||
| struct_init.cpp:9:13:9:25 | Left | Operand 'Left' is used on instruction 'PointerAdd: {...}' in function '$@', but is defined on instruction 'VariableAddress: infos_in_file' in function '$@'. | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] |
|
||||
| struct_init.cpp:9:31:12:1 | Unary | Operand 'Unary' is used on instruction 'FieldAddress: {...}' in function '$@', but is defined on instruction 'PointerAdd: {...}' in function '$@'. | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> |
|
||||
| struct_init.cpp:9:31:12:1 | Unary | Operand 'Unary' is used on instruction 'FieldAddress: {...}' in function '$@', but is defined on instruction 'PointerAdd: {...}' in function '$@'. | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> |
|
||||
| struct_init.cpp:9:31:12:1 | Unary | Operand 'Unary' is used on instruction 'FieldAddress: {...}' in function '$@', but is defined on instruction 'PointerAdd: {...}' in function '$@'. | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> |
|
||||
| struct_init.cpp:9:31:12:1 | Unary | Operand 'Unary' is used on instruction 'FieldAddress: {...}' in function '$@', but is defined on instruction 'PointerAdd: {...}' in function '$@'. | struct_init.cpp:9:13:9:25 | Info infos_in_file[] | Info infos_in_file[] | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> |
|
||||
instructionWithoutUniqueBlock
|
||||
containsLoopOfForwardEdges
|
||||
lostReachability
|
||||
@@ -21,6 +31,10 @@ notMarkedAsConflated
|
||||
wronglyMarkedAsConflated
|
||||
invalidOverlap
|
||||
nonUniqueEnclosingIRFunction
|
||||
| struct_init.cpp:9:31:12:1 | Constant: {...} | Instruction 'Constant: {...}' has 0 results for `getEnclosingIRFunction()` in function '$@'. | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> |
|
||||
| struct_init.cpp:9:31:12:1 | Constant: {...} | Instruction 'Constant: {...}' has 0 results for `getEnclosingIRFunction()` in function '$@'. | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> |
|
||||
| struct_init.cpp:9:31:12:1 | PointerAdd: {...} | Instruction 'PointerAdd: {...}' has 0 results for `getEnclosingIRFunction()` in function '$@'. | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> |
|
||||
| struct_init.cpp:9:31:12:1 | PointerAdd: {...} | Instruction 'PointerAdd: {...}' has 0 results for `getEnclosingIRFunction()` in function '$@'. | file://:0:0:0:0 | <Missing IRFunction> | <Missing IRFunction> |
|
||||
fieldAddressOnNonPointer
|
||||
thisArgumentIsNonPointer
|
||||
missingCanonicalLanguageType
|
||||
|
||||
Reference in New Issue
Block a user