commit 77291d4ac23a6b0cf8fa8adaba8458af03c558c7
Author: Jason Merrill <jason@redhat.com>
Date: Fri Jan 8 17:31:33 2016 -0500
PR c++/69158
* constexpr.c (cxx_fold_indirect_ref): Handle array type differing
in completion.
@@ -2382,7 +2382,15 @@ cxx_fold_indirect_ref (location_t loc, tree type, tree op0, bool *empty_base)
if (TREE_CODE (op) == CONST_DECL)
return DECL_INITIAL (op);
/* *&p => p; make sure to handle *&"str"[cst] here. */
- if (same_type_ignoring_top_level_qualifiers_p (optype, type))
+ if (same_type_ignoring_top_level_qualifiers_p (optype, type)
+ /* Also handle the case where the desired type is an array of unknown
+ bounds because the variable has had its bounds deduced since the
+ ADDR_EXPR was created. */
+ || (TREE_CODE (type) == ARRAY_TYPE
+ && TREE_CODE (optype) == ARRAY_TYPE
+ && TYPE_DOMAIN (type) == NULL_TREE
+ && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (optype),
+ TREE_TYPE (type))))
{
tree fop = fold_read_from_constant_string (op);
if (fop)
new file mode 100644
@@ -0,0 +1,2 @@
+// PR c++/69158
+char IdHdr[] = { (IdHdr)[0] };