rspec/rules/S839/cfamily/rule.adoc

58 lines
1.4 KiB
Plaintext
Raw Normal View History

== Why is this an issue?
2021-04-28 16:49:39 +02:00
It is implementation-defined behaviour whether the reference parameter is a temporary object or a reference to the parameter. If the implementation uses a local copy (temporary object), this will be destroyed when the function returns. Any attempt to use such an object after its destruction will lead to undefined behaviour.
=== Noncompliant code example
2021-04-28 16:49:39 +02:00
2022-02-04 17:28:24 +01:00
[source,cpp]
2021-04-28 16:49:39 +02:00
----
int32_t * fn1 ( int32_t & x )
{
return &x ; // Noncompliant
}
const int32_t * fn3 ( const int32_t & x )
{
return &x ; // Noncompliant
}
int32_t & fn4 ( int32_t & x )
{
return x ; // Noncompliant
}
const int32_t & fn5 ( const int32_t & x )
{
return x ; // Noncompliant
}
----
== Resources
2021-04-28 16:49:39 +02:00
* MISRA {cpp}:2008, 7-5-3
ifdef::env-github,rspecator-view[]
'''
== Implementation Specification
(visible only on this page)
=== Message
The returned value is a [pointer||reference] to a parameter that is passed by reference.
'''
== Comments And Links
(visible only on this page)
=== relates to: S946
=== on 16 Oct 2014, 14:37:12 Ann Campbell wrote:
\[~samuel.mercier]
* need a See section
* I think you missed the mark on the message. The title makes clear that the param being returned was initially received as a reference, so advice to refactor to a reference param doesn't make a lot of sense to me. Instead, I'd advise switching to a ``++void++`` return.
endif::env-github,rspecator-view[]