[Bug c++/85125] New: constant expression with const_cast UB does not emit error
john at mcfarlane dot name
gcc-bugzilla@gcc.gnu.org
Thu Mar 29 21:29:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85125
Bug ID: 85125
Summary: constant expression with const_cast UB does not emit
error
Product: gcc
Version: 5.1.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: john at mcfarlane dot name
Target Milestone: ---
Tested in godbolt.org ([example](https://godbolt.org/g/dhtXmH)) with x86-64
versions from 5.1 to 7.3 and trunk. Options are `-Wall -Wextra` but can be
reproduced without.
The following code compiles:
constexpr int f() {
int const i = 77;
const_cast<int&>(i) = 88;
return i;
}
static_assert(f()==77, "");
>From reading of http://eel.is/c++draft/dcl.type.cv#4 the `const_cast` line
above results in UB and from http://eel.is/c++draft/expr.const#2.6 an
expression causing UB cannot be a constant expression.
Expected: an error is emitted on the `const_cast` line explaining that a
constant value is being written to.
Actual: code compiles without warnings or errors and the `const_cast` line
appears to be ignored. (When `constexpr` is removed, produces code for a
function that returns 77.)
More information about the Gcc-bugs
mailing list