[Bug c++/68586] [6 Regression] Enum template parameter wrongly rejected
mpolacek at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Fri Jan 15 12:59:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68586
--- Comment #5 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
GCC6 uses a cache for evaluated constant expressions:
4019 tree
4020 maybe_constant_value (tree t, tree decl)
4021 {
4022 tree ret = cv_cache.get (t);
The CONST_DECL x is in the cache, associated with 1 of INTEGER_TYPE. It got
there when we were processing the LSHIFT_EXPR (x << 1) of the enum in
cp_build_binary_op. At that point, x had INTEGER_TYPE (I guess because enum E
wasn't complete yet).
Later on, when we're in convert_nontype_argument, this function gets CONST_DECL
x already of the enum E type, but we pull out 1 of INTEGER_TYPE from the cache,
and I think this discrepancy might be the problem here.
More information about the Gcc-bugs
mailing list