Fix a nasty order of evaluation bug that Gabor Greif ran into. Here's an

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
This commit is contained in:
Chris Lattner 2005-03-02 03:54:43 +00:00
parent e4666594d0
commit ded3613fef

View File

@ -291,7 +291,8 @@ static const std::string &getOrCreateDesc(std::map<const Type*,std::string>&Map,
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;
}