diff --git a/SConstruct b/SConstruct
index 607dd5f..0d55b12 100644
--- a/SConstruct
+++ b/SConstruct
@@ -20,7 +20,7 @@
 
 CCFLAGS = []
 if int(debug):
-  CCFLAGS.append(ARGUMENTS.get('CXXFLAGS', '-g -Wall -Werror'))
+  CCFLAGS.append(ARGUMENTS.get('CXXFLAGS', '-g -Wall -Wshadow -Werror'))
 if int(optimize):
   CCFLAGS.append(ARGUMENTS.get('CXXFLAGS', '-O3'))
 
diff --git a/src/diy-fp.h b/src/diy-fp.h
index 9dcf8fb..2edf346 100644
--- a/src/diy-fp.h
+++ b/src/diy-fp.h
@@ -42,7 +42,7 @@
   static const int kSignificandSize = 64;
 
   DiyFp() : f_(0), e_(0) {}
-  DiyFp(uint64_t f, int e) : f_(f), e_(e) {}
+  DiyFp(uint64_t significand, int exponent) : f_(significand), e_(exponent) {}
 
   // this = this - other.
   // The exponents of both numbers must be the same and the significand of this
@@ -76,22 +76,22 @@
 
   void Normalize() {
     ASSERT(f_ != 0);
-    uint64_t f = f_;
-    int e = e_;
+    uint64_t significand = f_;
+    int exponent = e_;
 
     // This method is mainly called for normalizing boundaries. In general
     // boundaries need to be shifted by 10 bits. We thus optimize for this case.
     const uint64_t k10MSBits = UINT64_2PART_C(0xFFC00000, 00000000);
-    while ((f & k10MSBits) == 0) {
-      f <<= 10;
-      e -= 10;
+    while ((significand & k10MSBits) == 0) {
+      significand <<= 10;
+      exponent -= 10;
     }
-    while ((f & kUint64MSB) == 0) {
-      f <<= 1;
-      e--;
+    while ((significand & kUint64MSB) == 0) {
+      significand <<= 1;
+      exponent--;
     }
-    f_ = f;
-    e_ = e;
+    f_ = significand;
+    e_ = exponent;
   }
 
   static DiyFp Normalize(const DiyFp& a) {
diff --git a/src/double-conversion.cc b/src/double-conversion.cc
index 909985b..b962b3b 100644
--- a/src/double-conversion.cc
+++ b/src/double-conversion.cc
@@ -852,9 +852,9 @@
         return junk_string_value_;
       }
     }
-    char sign = '+';
+    char exponen_sign = '+';
     if (*current == '+' || *current == '-') {
-      sign = static_cast<char>(*current);
+      exponen_sign = static_cast<char>(*current);
       ++current;
       if (current == end) {
         if (allow_trailing_junk) {
@@ -888,7 +888,7 @@
       ++current;
     } while (current != end && *current >= '0' && *current <= '9');
 
-    exponent += (sign == '-' ? -num : num);
+    exponent += (exponen_sign == '-' ? -num : num);
   }
 
   if (!(allow_trailing_spaces || allow_trailing_junk) && (current != end)) {
diff --git a/src/utils.h b/src/utils.h
index d8e03d4..f52a519 100644
--- a/src/utils.h
+++ b/src/utils.h
@@ -167,8 +167,8 @@
 class Vector {
  public:
   Vector() : start_(NULL), length_(0) {}
-  Vector(T* data, int length) : start_(data), length_(length) {
-    ASSERT(length == 0 || (length > 0 && data != NULL));
+  Vector(T* data, int len) : start_(data), length_(len) {
+    ASSERT(len == 0 || (len > 0 && data != NULL));
   }
 
   // Returns a vector using the same backing storage as this one,
@@ -210,8 +210,8 @@
 // buffer bounds on all operations in debug mode.
 class StringBuilder {
  public:
-  StringBuilder(char* buffer, int size)
-      : buffer_(buffer, size), position_(0) { }
+  StringBuilder(char* buffer, int buffer_size)
+      : buffer_(buffer, buffer_size), position_(0) { }
 
   ~StringBuilder() { if (!is_finalized()) Finalize(); }
 
diff --git a/test/cctest/cctest.cc b/test/cctest/cctest.cc
index 4de4c00..6d85bfd 100644
--- a/test/cctest/cctest.cc
+++ b/test/cctest/cctest.cc
@@ -34,16 +34,18 @@
 CcTest* CcTest::last_ = NULL;
 
 
-CcTest::CcTest(TestFunction* callback, const char* file, const char* name,
-               const char* dependency, bool enabled)
-    : callback_(callback), name_(name), dependency_(dependency), prev_(last_) {
+CcTest::CcTest(TestFunction* callback, const char* test_file,
+               const char* test_name, const char* test_dependency,
+               bool test_is_enabled)
+    : callback_(callback), name_(test_name), dependency_(test_dependency),
+      prev_(last_) {
   // Find the base name of this test (const_cast required on Windows).
-  char *basename = strrchr(const_cast<char *>(file), '/');
+  char *basename = strrchr(const_cast<char *>(test_file), '/');
   if (!basename) {
-    basename = strrchr(const_cast<char *>(file), '\\');
+    basename = strrchr(const_cast<char *>(test_file), '\\');
   }
   if (!basename) {
-    basename = strdup(file);
+    basename = strdup(test_file);
   } else {
     basename = strdup(basename + 1);
   }
@@ -52,7 +54,7 @@
   if (extension) *extension = 0;
   // Install this test in the list of tests
   file_ = basename;
-  enabled_ = enabled;
+  enabled_ = test_is_enabled;
   prev_ = last_;
   last_ = this;
 }
