[Bug c++/83050] New: Please provide shortcircuit attribute for || and && operators
bugzilla@poradnik-webmastera.com
gcc-bugzilla@gcc.gnu.org
Sun Nov 19 14:38:00 GMT 2017
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83050
Bug ID: 83050
Summary: Please provide shortcircuit attribute for || and &&
operators
Product: gcc
Version: 7.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: bugzilla@poradnik-webmastera.com
Target Milestone: ---
Built-int || and && operators are shortcircuiting, i.e. they may skip
evaluation of 2nd argument in some cases. However overloaded || and &&
operators do not work in this way, they always evaluate both arguments.
Sometimes it would be handy if they also could support shortcircuiting. I
propose to add new shortcircuit attribute, which could be attached to
overloaded operator:
__attribute__((shortcircuit)) T1 operator||(T2 a, T3 b);
__attribute__((shortcircuit)) T1 operator&&(T2 a, T3 b);
With such attribute gcc would generate a bit different code, e.g. something
like this:
|| operator:
if ((bool)a)
(T1)a;
else
operator||(a, b);
&& operator:
if ((bool)a)
operator&&(a, b);
else
(T1)a;
This new attribute potentially could also be attached to other overloaded
operators (+, -, ...), but I have doubts if gcc should accept this - probably
it would be better to prohibit this.
More information about the Gcc-bugs
mailing list