@@ -2571,8 +2571,10 @@ modref_eaf_analysis::analyze_ssa_name (tree name, bool deferred)
int call_flags = deref_flags
(gimple_call_arg_flags (call, i), ignore_stores);
if (!ignore_retval && !(call_flags & EAF_UNUSED)
- && !(call_flags & EAF_NOT_RETURNED_DIRECTLY)
- && !(call_flags & EAF_NOT_RETURNED_INDIRECTLY))
+ && (call_flags & (EAF_NOT_RETURNED_DIRECTLY
+ | EAF_NOT_RETURNED_INDIRECTLY))
+ != (EAF_NOT_RETURNED_DIRECTLY
+ | EAF_NOT_RETURNED_INDIRECTLY))
merge_call_lhs_flags (call, i, name, false, true);
if (ecf_flags & (ECF_CONST | ECF_NOVOPS))
m_lattice[index].merge_direct_load ();
new file mode 100644
@@ -0,0 +1,35 @@
+
+typedef struct func
+{
+ int *a;
+}func;
+__attribute__((noinline))
+void ff(struct func *t)
+{
+ *(t->a) = 0;
+}
+
+
+typedef struct mapped_iterator {
+ func F;
+}mapped_iterator;
+
+__attribute__((noinline))
+mapped_iterator map_iterator(func F) {
+ mapped_iterator t = {F};
+ return t;
+}
+
+void map_to_vector(func *F) {
+ mapped_iterator t = map_iterator(*F);
+ ff(&t.F);
+}
+int main() {
+ int resultIsStatic = 1;
+ func t ={&resultIsStatic};
+ map_to_vector(&t);
+
+ if (resultIsStatic)
+ __builtin_trap();
+ __builtin_exit(0);
+}