I have written a contract that has the mapping storage variable A & B. These variables get initialized with some values in constructor. A method getBalance returns the balance from mapping A & B.

In the method I declared another mapping - thinking that it would give a compilation error (since mapping allowed for storage only). Instead it lead to a strange behavior - appears that the new local mapping overwrites mappingA.

Result without local mapping (100, 200) as expected
Result with local mapping (500, 200) <<< Why?

/** Tested in Truffle/TestRPC **/

    contract Mapping {
    
      mapping(address => uint)  balancesA;
      mapping(address => uint)  balancesB;
    
      function Mapping() {
        // constructor
        balancesA[msg.sender] = 100;
        balancesB[msg.sender] = 200;
      }
    
      function getBalance(address addr) returns(uint balanceA, uint balanceB) {
    
        // If these 2 lines are commented then behavior is as expected
        mapping(address => uint)  balancers;
        balancers[msg.sender] = 500;
    
        return (balancesA[addr], balancesB[addr]);
    
      }
    }