diff options
author | Chris Lattner <sabre@nondot.org> | 2005-03-02 03:54:43 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2005-03-02 03:54:43 +0000 |
commit | ded3613fef825e45f0fcadbefc60df151d72abc9 (patch) | |
tree | 7e3c0f3b16db0be7e5499003d045f33237ddbf31 | |
parent | e4666594d091e8fb540071ed52a33fc182fc525c (diff) |
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
-rw-r--r-- | lib/VMCore/Type.cpp | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/lib/VMCore/Type.cpp b/lib/VMCore/Type.cpp index d2d6a2a943..875de4b635 100644 --- a/lib/VMCore/Type.cpp +++ b/lib/VMCore/Type.cpp @@ -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; } |