From ded3613fef825e45f0fcadbefc60df151d72abc9 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Wed, 2 Mar 2005 03:54:43 +0000 Subject: [PATCH] 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 --- lib/VMCore/Type.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/VMCore/Type.cpp b/lib/VMCore/Type.cpp index d2d6a2a9439..875de4b6357 100644 --- a/lib/VMCore/Type.cpp +++ b/lib/VMCore/Type.cpp @@ -291,7 +291,8 @@ static const std::string &getOrCreateDesc(std::map&Map, if (I != Map.end()) return I->second; std::vector TypeStack; - return Map[Ty] = getTypeDescription(Ty, TypeStack); + std::string Result = getTypeDescription(Ty, TypeStack); + return Map[Ty] = Result; } -- 2.34.1