explanation from IRC:
|sabre| I think it's an order of evaluation thing
|sabre| for me, the RHS of the assignment is evaluated first
|sabre| getTypeDescription checks to see if ConcreteTypeDescription[Ty] contains anything
|sabre| since it doesn't, it computes and returns the value
|sabre| this gets put into the map.
|sabre| For you, the LHS is evaluated first.
|sabre| Map[Ty] (aka ConcreteTypeDescriptions[Ty]) inserts an empty string into the map, returning a reference
|sabre| getTypeDesc then sees the empty string in the map
|sabre| and returns it
|sabre| bork :)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@20394
91177308-0d34-0410-b5e6-
96231b3b80d8
if (I != Map.end()) return I->second;
std::vector<const Type *> TypeStack;
- return Map[Ty] = getTypeDescription(Ty, TypeStack);
+ std::string Result = getTypeDescription(Ty, TypeStack);
+ return Map[Ty] = Result;
}