Skip to content

Convert more queries to the new dataflow library #922

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 13 commits into from
Jul 8, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions c/cert/src/rules/CON30-C/CleanUpThreadSpecificStorage.ql
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@

import cpp
import codingstandards.c.cert
import codingstandards.cpp.Concurrency
import semmle.code.cpp.dataflow.DataFlow
import codingstandards.cpp.ConcurrencyNew
import semmle.code.cpp.dataflow.new.DataFlow

module TssCreateToTssDeleteConfig implements DataFlow::ConfigSig {
predicate isSource(DataFlow::Node node) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

import cpp
import codingstandards.c.cert
import codingstandards.cpp.Concurrency
import codingstandards.cpp.ConcurrencyNew

from ThreadedCFN node
where
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@
import cpp
import codingstandards.c.cert
import codingstandards.c.Objects
import codingstandards.cpp.Concurrency
import semmle.code.cpp.dataflow.DataFlow
import codingstandards.cpp.ConcurrencyNew
import semmle.code.cpp.dataflow.new.DataFlow
import semmle.code.cpp.commons.Alloc

from C11ThreadCreateCall tcc, Expr arg
Expand Down Expand Up @@ -53,6 +53,7 @@ where
not exists(TSSSetFunctionCall tss, DataFlow::Node src |
// there should be dataflow from somewhere (the same somewhere)
// into each of the first arguments
exists(Expr e | e = src.asDefinition() or e = src.asDefiningArgument()) and
DataFlow::localFlow(src, DataFlow::exprNode(tsg.getArgument(0))) and
DataFlow::localFlow(src, DataFlow::exprNode(tss.getArgument(0)))
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@

import cpp
import codingstandards.c.cert
import codingstandards.cpp.Concurrency
import semmle.code.cpp.dataflow.DataFlow
import codingstandards.cpp.ConcurrencyNew
import semmle.code.cpp.dataflow.new.DataFlow

from TSSGetFunctionCall tsg, ThreadedFunction tf
where
Expand All @@ -31,7 +31,8 @@ where
// however, there does not exist a proper sequencing.
not exists(TSSSetFunctionCall tss, DataFlow::Node src |
// there should be dataflow from somewhere (the same somewhere)
// into each of the first arguments
// into each of the first argument
exists(Expr e | e = src.asDefinition() or e = src.asDefiningArgument()) and
DataFlow::localFlow(src, DataFlow::exprNode(tsg.getArgument(0))) and
DataFlow::localFlow(src, DataFlow::exprNode(tss.getArgument(0)))
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@

import cpp
import codingstandards.c.cert
import codingstandards.cpp.Concurrency
import codingstandards.cpp.ConcurrencyNew

from FunctionCall fc
// This should only be applied in the context of a multi-threaded program (since
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@

import cpp
import codingstandards.c.cert
import codingstandards.cpp.Concurrency
import codingstandards.cpp.ConcurrencyNew

from MacroInvocation mi, Variable v, Locatable whereFound
where
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@

import cpp
import codingstandards.c.cert
import codingstandards.cpp.Concurrency
import codingstandards.cpp.ConcurrencyNew

from AtomicCompareExchange ace
where
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import cpp
import codingstandards.c.cert
import codingstandards.cpp.FgetsErrorManagement
import codingstandards.cpp.Dereferenced
import semmle.code.cpp.dataflow.DataFlow
import semmle.code.cpp.dataflow.new.DataFlow

/*
* CFG nodes that follows a successful call to `fgets`
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
WARNING: module 'DataFlow' has been deprecated and may be removed in future (CleanUpThreadSpecificStorage.ql:25,46-54)
WARNING: module 'DataFlow' has been deprecated and may be removed in future (CleanUpThreadSpecificStorage.ql:26,22-30)
WARNING: module 'DataFlow' has been deprecated and may be removed in future (CleanUpThreadSpecificStorage.ql:35,20-28)
WARNING: module 'DataFlow' has been deprecated and may be removed in future (CleanUpThreadSpecificStorage.ql:45,35-43)
WARNING: module 'DataFlow' has been deprecated and may be removed in future (CleanUpThreadSpecificStorage.ql:53,36-44)
WARNING: module 'DataFlow' has been deprecated and may be removed in future (CleanUpThreadSpecificStorage.ql:55,36-44)
| test.c:27:3:27:12 | call to tss_create | Resources used by thread specific storage may not be cleaned up. |
| test.c:49:3:49:12 | call to tss_create | Resources used by thread specific storage may not be cleaned up. |
| test.c:71:3:71:12 | call to tss_create | Resources used by thread specific storage may not be cleaned up. |
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,3 @@
WARNING: module 'DataFlow' has been deprecated and may be removed in future (AppropriateThreadObjectStorageDurations.ql:35,14-22)
WARNING: module 'DataFlow' has been deprecated and may be removed in future (AppropriateThreadObjectStorageDurations.ql:37,22-30)
WARNING: module 'DataFlow' has been deprecated and may be removed in future (AppropriateThreadObjectStorageDurations.ql:39,22-30)
WARNING: module 'DataFlow' has been deprecated and may be removed in future (AppropriateThreadObjectStorageDurations.ql:42,45-53)
WARNING: module 'DataFlow' has been deprecated and may be removed in future (AppropriateThreadObjectStorageDurations.ql:52,33-41)
WARNING: module 'DataFlow' has been deprecated and may be removed in future (AppropriateThreadObjectStorageDurations.ql:52,58-66)
WARNING: module 'DataFlow' has been deprecated and may be removed in future (AppropriateThreadObjectStorageDurations.ql:53,42-50)
WARNING: module 'DataFlow' has been deprecated and may be removed in future (AppropriateThreadObjectStorageDurations.ql:56,9-17)
WARNING: module 'DataFlow' has been deprecated and may be removed in future (AppropriateThreadObjectStorageDurations.ql:56,34-42)
WARNING: module 'DataFlow' has been deprecated and may be removed in future (AppropriateThreadObjectStorageDurations.ql:57,9-17)
WARNING: module 'DataFlow' has been deprecated and may be removed in future (AppropriateThreadObjectStorageDurations.ql:57,34-42)
WARNING: module 'TaintTracking' has been deprecated and may be removed in future (AppropriateThreadObjectStorageDurations.ql:42,9-22)
WARNING: module 'TaintTracking' has been deprecated and may be removed in future (AppropriateThreadObjectStorageDurations.ql:52,7-20)
| test.c:23:3:23:13 | call to thrd_create | $@ not declared with appropriate storage duration | test.c:23:24:23:29 | & ... | Shared object |
| test.c:74:3:74:13 | call to thrd_create | $@ not declared with appropriate storage duration | test.c:74:24:74:24 | p | Shared object |
| test.c:85:3:85:13 | call to thrd_create | $@ not declared with appropriate storage duration | test.c:85:24:85:24 | p | Shared object |
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1 @@
WARNING: module 'DataFlow' has been deprecated and may be removed in future (ThreadObjectStorageDurationsNotInitialized.ql:32,38-46)
WARNING: module 'DataFlow' has been deprecated and may be removed in future (ThreadObjectStorageDurationsNotInitialized.ql:35,5-13)
WARNING: module 'DataFlow' has been deprecated and may be removed in future (ThreadObjectStorageDurationsNotInitialized.ql:35,30-38)
WARNING: module 'DataFlow' has been deprecated and may be removed in future (ThreadObjectStorageDurationsNotInitialized.ql:36,5-13)
WARNING: module 'DataFlow' has been deprecated and may be removed in future (ThreadObjectStorageDurationsNotInitialized.ql:36,30-38)
| test.c:14:7:14:13 | call to tss_get | Call to a thread specific storage function from within a threaded context on an object that may not be owned by this thread. |
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
WARNING: module 'DataFlow' has been deprecated and may be removed in future (ResetStringsOnFgetsOrFgetwsFailure.ql:47,11-19)
WARNING: module 'DataFlow' has been deprecated and may be removed in future (ResetStringsOnFgetsOrFgetwsFailure.ql:47,31-39)
WARNING: module 'DataFlow' has been deprecated and may be removed in future (ResetStringsOnFgetsOrFgetwsFailure.ql:48,13-21)
| test.c:20:10:20:12 | buf | The buffer is not reset before being referenced following a failed $@. | test.c:15:7:15:11 | call to fgets | call to fgets |
| test.c:57:10:57:12 | buf | The buffer is not reset before being referenced following a failed $@. | test.c:52:7:52:11 | call to fgets | call to fgets |
| test.c:66:18:66:20 | buf | The buffer is not reset before being referenced following a failed $@. | test.c:61:7:61:11 | call to fgets | call to fgets |
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import cpp
import codingstandards.c.Objects
import codingstandards.cpp.Concurrency
import codingstandards.cpp.ConcurrencyNew
import codingstandards.cpp.Type

signature module GlobalInitializationAnalysisConfigSig {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,27 @@ problems
| test.c:13:10:13:11 | p4 | test.c:5:14:5:15 | l2 | test.c:13:10:13:11 | p4 | Subtraction between left operand pointing to array $@ and other operand pointing to array $@. | test.c:3:7:3:8 | l2 | l2 | test.c:2:7:2:8 | l1 | l1 |
| test.c:13:15:13:16 | l1 | test.c:13:15:13:16 | l1 | test.c:13:15:13:16 | l1 | Subtraction between right operand pointing to array $@ and other operand pointing to array $@. | test.c:2:7:2:8 | l1 | l1 | test.c:3:7:3:8 | l2 | l2 |
edges
| test.c:4:14:4:15 | l1 | test.c:4:14:4:18 | access to array | provenance | Config |
| test.c:4:14:4:18 | access to array | test.c:10:10:10:11 | p1 | provenance | |
| test.c:4:14:4:18 | access to array | test.c:12:10:12:11 | p1 | provenance | |
| test.c:5:14:5:15 | l2 | test.c:5:14:5:19 | access to array | provenance | Config |
| test.c:5:14:5:19 | access to array | test.c:11:10:11:11 | p2 | provenance | |
| test.c:5:14:5:19 | access to array | test.c:12:15:12:16 | p2 | provenance | |
| test.c:5:14:5:19 | access to array | test.c:13:10:13:11 | p4 | provenance | |
| test.c:5:14:5:19 | access to array | test.c:14:10:14:11 | p4 | provenance | |
| test.c:4:13:4:18 | & ... | test.c:4:13:4:18 | & ... | provenance | |
| test.c:4:13:4:18 | & ... | test.c:10:10:10:11 | p1 | provenance | |
| test.c:4:13:4:18 | & ... | test.c:12:10:12:11 | p1 | provenance | |
| test.c:4:14:4:15 | l1 | test.c:4:13:4:18 | & ... | provenance | Config |
| test.c:5:13:5:19 | & ... | test.c:5:13:5:19 | & ... | provenance | |
| test.c:5:13:5:19 | & ... | test.c:6:13:6:14 | p2 | provenance | |
| test.c:5:13:5:19 | & ... | test.c:11:10:11:11 | p2 | provenance | |
| test.c:5:13:5:19 | & ... | test.c:12:15:12:16 | p2 | provenance | |
| test.c:5:14:5:15 | l2 | test.c:5:13:5:19 | & ... | provenance | Config |
| test.c:6:13:6:14 | p2 | test.c:7:13:7:14 | p3 | provenance | |
| test.c:7:13:7:14 | p3 | test.c:13:10:13:11 | p4 | provenance | |
| test.c:7:13:7:14 | p3 | test.c:14:10:14:11 | p4 | provenance | |
nodes
| test.c:4:13:4:18 | & ... | semmle.label | & ... |
| test.c:4:13:4:18 | & ... | semmle.label | & ... |
| test.c:4:14:4:15 | l1 | semmle.label | l1 |
| test.c:4:14:4:18 | access to array | semmle.label | access to array |
| test.c:5:13:5:19 | & ... | semmle.label | & ... |
| test.c:5:13:5:19 | & ... | semmle.label | & ... |
| test.c:5:14:5:15 | l2 | semmle.label | l2 |
| test.c:5:14:5:19 | access to array | semmle.label | access to array |
| test.c:6:13:6:14 | p2 | semmle.label | p2 |
| test.c:7:13:7:14 | p3 | semmle.label | p3 |
| test.c:10:10:10:11 | p1 | semmle.label | p1 |
| test.c:10:15:10:16 | l1 | semmle.label | l1 |
| test.c:11:10:11:11 | p2 | semmle.label | p2 |
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import cpp
import codingstandards.c.misra
import codingstandards.c.Objects
import codingstandards.c.SubObjects
import codingstandards.cpp.Concurrency
import codingstandards.cpp.ConcurrencyNew

newtype TNonReentrantOperation =
TReadWrite(SubObject object) {
Expand Down
2 changes: 1 addition & 1 deletion c/misra/src/rules/DIR-5-3/BannedDynamicThreadCreation.ql
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

import cpp
import codingstandards.c.misra
import codingstandards.cpp.Concurrency
import codingstandards.cpp.ConcurrencyNew

from CThreadCreateCall tc, Function enclosingFunction
where
Expand Down
2 changes: 1 addition & 1 deletion c/misra/src/rules/DIR-5-3/ThreadCreatedByThread.ql
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@

import cpp
import codingstandards.c.misra
import codingstandards.cpp.Concurrency
import codingstandards.cpp.ConcurrencyNew

class CThreadRoot extends Function {
CThreadCreateCall threadCreate;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
import cpp
import codingstandards.c.misra
import codingstandards.c.Objects
import codingstandards.cpp.Concurrency
import codingstandards.cpp.ConcurrencyNew

from AssignExpr assignment, Element threadLocal, ObjectIdentity static
where
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

import cpp
import codingstandards.c.misra
import codingstandards.cpp.Concurrency
import codingstandards.cpp.ConcurrencyNew
import codingstandards.cpp.Type

predicate isThreadingObject(Type t) { t instanceof PossiblySpecified<C11ThreadingObjectType>::Type }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
import cpp
import codingstandards.c.misra
import codingstandards.c.Objects
import codingstandards.cpp.Concurrency
import codingstandards.cpp.ConcurrencyNew
import codingstandards.cpp.Type

from ObjectIdentity obj, StorageDuration storageDuration, Type type
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

import cpp
import codingstandards.c.misra
import codingstandards.cpp.Concurrency
import codingstandards.cpp.ConcurrencyNew

predicate isBaseMutexType(EnumConstantAccess access) {
access.getTarget().hasName(["mtx_plain", "mtx_timed"])
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

import cpp
import codingstandards.c.misra
import codingstandards.cpp.Concurrency
import codingstandards.cpp.ConcurrencyNew

from C11MutexSource mutexCreate, ThreadedFunction thread
where
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
import cpp
import codingstandards.c.misra
import codingstandards.c.Objects
import codingstandards.cpp.Concurrency
import codingstandards.cpp.ConcurrencyNew
import codingstandards.cpp.Type
import codingstandards.c.initialization.GlobalInitializationAnalysis

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
import cpp
import codingstandards.c.misra
import codingstandards.c.SubObjects
import codingstandards.cpp.Concurrency
import codingstandards.cpp.ConcurrencyNew

newtype TThreadKind =
TSpawned(C11ThreadCreateCall tcc) or
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,8 @@
import cpp
import codingstandards.c.misra
import codingstandards.c.SubObjects
import codingstandards.cpp.Concurrency
import codingstandards.cpp.ConcurrencyNew
import codingstandards.cpp.dominance.BehavioralSet
import semmle.code.cpp.dataflow.new.DataFlow::DataFlow as NewDF

/* A call to mtx_unlock() or cnd_wait() or cnd_timedwait(), which require a locked mutex */
class RequiresLockOperation extends FunctionCall {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
import cpp
import codingstandards.c.misra
import codingstandards.c.SubObjects
import codingstandards.cpp.Concurrency
import codingstandards.cpp.ConcurrencyNew
import codingstandards.cpp.Type

from
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import cpp
import codeql.util.Boolean
import codingstandards.c.misra
import codingstandards.c.SubObjects
import codingstandards.cpp.Concurrency
import codingstandards.cpp.ConcurrencyNew
import codingstandards.cpp.Type

predicate isTrackableMutex(CMutexFunctionCall lockCall, Boolean recursive) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
import cpp
import codingstandards.c.misra
import codingstandards.c.SubObjects
import codingstandards.cpp.Concurrency
import codingstandards.cpp.ConcurrencyNew

bindingset[cond, mutex]
int countMutexesForConditionVariable(SubObject cond, SubObject mutex) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
import cpp
import codingstandards.c.misra
import codingstandards.c.Objects
import codingstandards.cpp.Concurrency
import codingstandards.cpp.ConcurrencyNew
import codingstandards.cpp.Type
import codingstandards.c.initialization.GlobalInitializationAnalysis

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

import cpp
import codingstandards.c.misra
import codingstandards.cpp.Concurrency
import codingstandards.cpp.ConcurrencyNew

from TSSCreateFunctionCall tssCreate, ThreadedFunction thread
where
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
import cpp
import codingstandards.c.misra
import codingstandards.cpp.standardlibrary.FileAccess
import semmle.code.cpp.dataflow.DataFlow
import semmle.code.cpp.dataflow.new.DataFlow
import semmle.code.cpp.valuenumbering.GlobalValueNumbering
import semmle.code.cpp.controlflow.SubBasicBlocks

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
import cpp
import codingstandards.c.misra
import codingstandards.cpp.standardlibrary.FileAccess
import semmle.code.cpp.dataflow.DataFlow
import semmle.code.cpp.dataflow.new.DataFlow

module FileDFConfig implements DataFlow::ConfigSig {
predicate isSource(DataFlow::Node source) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
WARNING: module 'DataFlow' has been deprecated and may be removed in future (FileOpenForReadAndWriteOnDifferentStreams.ql:39,9-17)
| test.c:6:14:6:18 | call to fopen | The same file was already opened $@. Files should not be read and written at the same time using different streams. | test.c:5:14:5:18 | call to fopen | here |
| test.c:17:14:17:18 | call to fopen | The same file was already opened $@. Files should not be read and written at the same time using different streams. | test.c:16:14:16:18 | call to fopen | here |
| test.c:33:14:33:18 | call to fopen | The same file was already opened $@. Files should not be read and written at the same time using different streams. | test.c:32:14:32:18 | call to fopen | here |
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,2 @@
WARNING: module 'DataFlow' has been deprecated and may be removed in future (AttemptToWriteToAReadOnlyStream.ql:19,32-40)
WARNING: module 'DataFlow' has been deprecated and may be removed in future (AttemptToWriteToAReadOnlyStream.ql:20,22-30)
WARNING: module 'DataFlow' has been deprecated and may be removed in future (AttemptToWriteToAReadOnlyStream.ql:25,20-28)
WARNING: module 'DataFlow' has been deprecated and may be removed in future (AttemptToWriteToAReadOnlyStream.ql:31,21-29)
WARNING: module 'DataFlow' has been deprecated and may be removed in future (AttemptToWriteToAReadOnlyStream.ql:33,6-14)
WARNING: module 'DataFlow' has been deprecated and may be removed in future (AttemptToWriteToAReadOnlyStream.ql:36,28-36)
| test.c:10:3:10:9 | call to fprintf | Attempt to write to a $@ opened as read-only. | test.c:9:14:9:18 | call to fopen | stream |
| test.c:15:3:15:9 | call to fprintf | Attempt to write to a $@ opened as read-only. | test.c:18:14:18:18 | call to fopen | stream |
2 changes: 1 addition & 1 deletion cpp/autosar/src/rules/A7-5-1/InvalidFunctionReturnType.ql
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

import cpp
import codingstandards.cpp.autosar
import semmle.code.cpp.dataflow.DataFlow
import semmle.code.cpp.dataflow.new.DataFlow

from Parameter p, ReturnStmt ret
where
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

import cpp
import codingstandards.cpp.autosar
import semmle.code.cpp.dataflow.DataFlow
import semmle.code.cpp.dataflow.new.DataFlow
import ArrayToPointerDiffOperandFlow::PathGraph

module ArrayToPointerDiffOperandConfig implements DataFlow::ConfigSig {
Expand All @@ -34,6 +34,8 @@ module ArrayToPointerDiffOperandConfig implements DataFlow::ConfigSig {
// Add a flow step from the base to the array expression to track pointers to elements of the array.
exists(ArrayExpr e | e.getArrayBase() = pred.asExpr() and e = succ.asExpr())
}

predicate isBarrierIn(DataFlow::Node node) { isSource(node) }
}

module ArrayToPointerDiffOperandFlow = DataFlow::Global<ArrayToPointerDiffOperandConfig>;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,2 @@
WARNING: module 'DataFlow' has been deprecated and may be removed in future (InvalidFunctionReturnType.ql:27,3-11)
WARNING: module 'DataFlow' has been deprecated and may be removed in future (InvalidFunctionReturnType.ql:27,23-31)
WARNING: module 'DataFlow' has been deprecated and may be removed in future (InvalidFunctionReturnType.ql:27,51-59)
| test.cpp:5:3:5:11 | return ... | Function test_refconst_return returns a reference or a pointer to $@ that is passed by reference to const. | test.cpp:4:44:4:44 | x | parameter |
| test.cpp:8:3:8:14 | return ... | Function test_ptrconst_return returns a reference or a pointer to $@ that is passed by reference to const. | test.cpp:7:44:7:44 | x | parameter |
Loading
Loading