diff --git a/samplecode/OverView.cpp b/samplecode/OverView.cpp
index d0c387b..9858608 100644
--- a/samplecode/OverView.cpp
+++ b/samplecode/OverView.cpp
@@ -69,10 +69,14 @@
     typedef SkView INHERITED;
 };
 
+// FIXME: this should be in a header
+SkView* create_overview(int count, const SkViewFactory* factories[]);
 SkView* create_overview(int count, const SkViewFactory* factories[]) {
     return SkNEW_ARGS(OverView, (count, factories));
 }
 
+// FIXME: this should be in a header
+bool is_overview(SkView* view);
 bool is_overview(SkView* view) {
     SkEvent isOverview(gIsOverview);
     return view->doQuery(&isOverview);
diff --git a/samplecode/SampleAARectModes.cpp b/samplecode/SampleAARectModes.cpp
index 7b9e7d5..a1004a3 100644
--- a/samplecode/SampleAARectModes.cpp
+++ b/samplecode/SampleAARectModes.cpp
@@ -12,18 +12,6 @@
 #include "SkColorPriv.h"
 #include "SkShader.h"
 
-static SkCanvas* create_canvas(int w, int h) {
-    SkBitmap bm;
-    bm.setConfig(SkBitmap::kARGB_8888_Config, w, h);
-    bm.allocPixels();
-    bm.eraseColor(0);
-    return new SkCanvas(bm);
-}
-
-static const SkBitmap& extract_bitmap(SkCanvas* canvas) {
-    return canvas->getDevice()->accessBitmap(false);
-}
-
 static const struct {
     SkXfermode::Mode  fMode;
     const char*         fLabel;
diff --git a/samplecode/SampleAll.cpp b/samplecode/SampleAll.cpp
index 4ab3b0e..201dfe7 100644
--- a/samplecode/SampleAll.cpp
+++ b/samplecode/SampleAll.cpp
@@ -323,8 +323,8 @@
         path.addCircle(SkIntToScalar(20), SkIntToScalar(20), SkIntToScalar(20),
             SkPath::kCCW_Direction);
         for (int index = 0; index < 10; index++) {
-            SkScalar x = SkFloatToScalar(cos(index / 10.0f * 2 * 3.1415925358f));
-            SkScalar y = SkFloatToScalar(sin(index / 10.0f * 2 * 3.1415925358f));
+            SkScalar x = SkFloatToScalar((float) cos(index / 10.0f * 2 * 3.1415925358f));
+            SkScalar y = SkFloatToScalar((float) sin(index / 10.0f * 2 * 3.1415925358f));
             x *= index & 1 ? 7 : 14;
             y *= index & 1 ? 7 : 14;
             x += SkIntToScalar(20);
diff --git a/samplecode/SampleApp.cpp b/samplecode/SampleApp.cpp
index fd19e89..5d3296d 100644
--- a/samplecode/SampleApp.cpp
+++ b/samplecode/SampleApp.cpp
@@ -406,7 +406,7 @@
 // registers GMs as Samples
 // This can't be performed during static initialization because it could be
 // run before GMRegistry has been fully built.
-void SkGMRegistyToSampleRegistry() {
+static void SkGMRegistyToSampleRegistry() {
     static bool gOnce;
     static AutoUnrefArray fRegisters; 
 
@@ -599,6 +599,8 @@
 
 // some GMs rely on having a skiagm::GetGr function defined
 namespace skiagm {
+    // FIXME: this should be moved into a header
+    GrContext* GetGr();
     GrContext* GetGr() { return SampleCode::GetGr(); }
 }
 
@@ -1173,6 +1175,7 @@
 
 #include "SkColorPriv.h"
 
+#if 0 // UNUSED
 static void reverseRedAndBlue(const SkBitmap& bm) {
     SkASSERT(bm.config() == SkBitmap::kARGB_8888_Config);
     uint8_t* p = (uint8_t*)bm.getPixels();
@@ -1188,6 +1191,7 @@
         p += 4;
     }
 }
+#endif
 
 void SampleWindow::saveToPdf()
 {
@@ -1631,6 +1635,7 @@
     return this->INHERITED::onQuery(query);
 }
 
+#if 0 // UNUSED
 static void cleanup_for_filename(SkString* name) {
     char* str = name->writable_str();
     for (size_t i = 0; i < name->size(); i++) {
@@ -1642,6 +1647,7 @@
         }
     }
 }
+#endif
 
 bool SampleWindow::onHandleChar(SkUnichar uni) {
     {
@@ -2329,11 +2335,17 @@
     }
 }
 
+// FIXME: this should be in a header
+SkOSWindow* create_sk_window(void* hwnd, int argc, char** argv);
 SkOSWindow* create_sk_window(void* hwnd, int argc, char** argv) {
-//    test();
+    if (false) { // avoid bit rot, suppress warning
+        test();
+    }
     return new SampleWindow(hwnd, argc, argv, NULL);
 }
 
+// FIXME: this should be in a header
+void get_preferred_size(int* x, int* y, int* width, int* height);
 void get_preferred_size(int* x, int* y, int* width, int* height) {
     *x = 10;
     *y = 50;
@@ -2341,6 +2353,8 @@
     *height = 480;
 }
 
+// FIXME: this should be in a header
+void application_init();
 void application_init() {
 //    setenv("ANDROID_ROOT", "../../../data", 0);
 #ifdef SK_BUILD_FOR_MAC
@@ -2350,6 +2364,8 @@
     SkEvent::Init();
 }
 
+// FIXME: this should be in a header
+void application_term();
 void application_term() {
     SkEvent::Term();
     SkGraphics::Term();
diff --git a/samplecode/SampleArc.cpp b/samplecode/SampleArc.cpp
index d418a4b..43660a3 100644
--- a/samplecode/SampleArc.cpp
+++ b/samplecode/SampleArc.cpp
@@ -25,7 +25,7 @@
 #include "SkParsePath.h"
 static void testparse() {
     SkRect r;
-    r.set(0, 0, SkFloatToScalar(10), SkFloatToScalar(10.5));
+    r.set(0, 0, SkFloatToScalar(10), SkFloatToScalar(10.5f));
     SkPath p, p2;
     SkString str, str2;
 
diff --git a/samplecode/SampleBlur.cpp b/samplecode/SampleBlur.cpp
index aa92343..f49d96e 100644
--- a/samplecode/SampleBlur.cpp
+++ b/samplecode/SampleBlur.cpp
@@ -52,6 +52,9 @@
     SkBitmap    fBM;
 public:
 	BlurView() {
+        if (false) { // avoid bit rot, suppress warning
+            fBM = make_bitmap();
+        }
     }
 
 protected:
diff --git a/samplecode/SampleCircle.cpp b/samplecode/SampleCircle.cpp
index c3f986d..def90ad 100644
--- a/samplecode/SampleCircle.cpp
+++ b/samplecode/SampleCircle.cpp
@@ -57,6 +57,9 @@
             paint.setStrokeWidth(SkIntToScalar(width));
         }
         canvas->drawCircle(0, 0, SkIntToScalar(9) + fRAD, paint);
+        if (false) { // avoid bit rot, suppress warning
+            test_circlebounds(canvas);
+        }
     }
     
     void drawSix(SkCanvas* canvas, SkScalar dx, SkScalar dy) {
diff --git a/samplecode/SampleClip.cpp b/samplecode/SampleClip.cpp
index fd3f1fd..6695c62 100644
--- a/samplecode/SampleClip.cpp
+++ b/samplecode/SampleClip.cpp
@@ -31,10 +31,6 @@
     }
 }
 
-static bool valid(int i) {
-    return i < 15 && i > 7;
-}
-
 static void show_fill(SkCanvas* canvas, bool doAA) {
     SkRandom rand;
     SkPaint paint;
diff --git a/samplecode/SampleColorFilter.cpp b/samplecode/SampleColorFilter.cpp
index 52bf950..3e1dbb1 100644
--- a/samplecode/SampleColorFilter.cpp
+++ b/samplecode/SampleColorFilter.cpp
@@ -133,7 +133,9 @@
         fBitmap = createBitmap(N);
         fShader = createChecker();
       
-//        test_5bits();
+        if (false) { // avoid bit rot, suppress warning
+            test_5bits();
+        }
     }
 
     virtual ~ColorFilterView() {
diff --git a/samplecode/SampleGradients.cpp b/samplecode/SampleGradients.cpp
index 18536cf..661c20a 100644
--- a/samplecode/SampleGradients.cpp
+++ b/samplecode/SampleGradients.cpp
@@ -168,7 +168,9 @@
         canvas->restore();
         
         canvas->translate(0, SkIntToScalar(370));
-     //   test_alphagradients(canvas);
+        if (false) { // avoid bit rot, suppress warning
+            test_alphagradients(canvas);
+        }
         this->inval(NULL);
     }
     
diff --git a/samplecode/SampleHairModes.cpp b/samplecode/SampleHairModes.cpp
index cc22b17..4780476 100644
--- a/samplecode/SampleHairModes.cpp
+++ b/samplecode/SampleHairModes.cpp
@@ -12,18 +12,6 @@
 #include "SkColorPriv.h"
 #include "SkShader.h"
 
-static SkCanvas* create_canvas(int w, int h) {
-    SkBitmap bm;
-    bm.setConfig(SkBitmap::kARGB_8888_Config, w, h);
-    bm.allocPixels();
-    bm.eraseColor(0);
-    return new SkCanvas(bm);
-}
-
-static const SkBitmap& extract_bitmap(SkCanvas* canvas) {
-    return canvas->getDevice()->accessBitmap(false);
-}
-
 static const struct {
     SkXfermode::Mode  fMode;
     const char*         fLabel;
diff --git a/samplecode/SampleLineClipper.cpp b/samplecode/SampleLineClipper.cpp
index 94374b5..24eae4c 100644
--- a/samplecode/SampleLineClipper.cpp
+++ b/samplecode/SampleLineClipper.cpp
@@ -209,7 +209,9 @@
             this->inval(NULL);
         }
 
-     //   fProcIndex = test0(fPts, &fClip);
+        if (false) { // avoid bit rot, suppress warning
+            fProcIndex = test0(fPts, &fClip);
+        }
 
         SkPaint paint, paint1;
         
diff --git a/samplecode/SampleOverflow.cpp b/samplecode/SampleOverflow.cpp
index 05b28eb..e8a1196 100644
--- a/samplecode/SampleOverflow.cpp
+++ b/samplecode/SampleOverflow.cpp
@@ -56,6 +56,7 @@
 #endif
 }
 
+#ifdef SK_SCALAR_IS_FLOATx // FIXME: unclear when if ever this can be enabled
 static bool HitTestPath(const SkPath& path, SkScalar x, SkScalar y) {
     SkRegion    rgn, clip;
     
@@ -67,11 +68,12 @@
     bool contains = rgn.setPath(path, clip);
     return contains;
 }
+#endif
 
 static void TestOverflowHitTest() {
     SkPath path;
     
-#ifdef SK_SCALAR_IS_FLOATx
+#ifdef SK_SCALAR_IS_FLOATx // FIXME: unclear when if ever this can be enabled
     path.addCircle(0, 0, 70000, SkPath::kCCW_Direction);
     SkASSERT(HitTestPath(path, 40000, 40000));
 #endif
diff --git a/samplecode/SamplePatch.cpp b/samplecode/SamplePatch.cpp
index edc7804..4c3721b 100644
--- a/samplecode/SamplePatch.cpp
+++ b/samplecode/SamplePatch.cpp
@@ -27,17 +27,6 @@
 
 #include "SkGeometry.h" // private include :(
 
-static void drawtriangle(SkCanvas* canvas, const SkPaint& paint,
-                         const SkPoint pts[3]) {
-    SkPath path;
-
-    path.moveTo(pts[0]);
-    path.lineTo(pts[1]);
-    path.lineTo(pts[2]);
-
-    canvas->drawPath(path, paint);
-}
-
 static SkShader* make_shader0(SkIPoint* size) {
     SkBitmap    bm;
 
diff --git a/samplecode/SamplePathClip.cpp b/samplecode/SamplePathClip.cpp
index 5ca39e8..aa392da 100644
--- a/samplecode/SamplePathClip.cpp
+++ b/samplecode/SamplePathClip.cpp
@@ -77,7 +77,7 @@
     virtual bool onClick(Click* click) {
         fCenter.set(click->fCurr.fX, click->fCurr.fY);
         this->inval(NULL);
-        return NULL;
+        return false;
     }
     
 private:
diff --git a/samplecode/SampleRegion.cpp b/samplecode/SampleRegion.cpp
index b4d540c..5eed81e 100644
--- a/samplecode/SampleRegion.cpp
+++ b/samplecode/SampleRegion.cpp
@@ -323,8 +323,14 @@
     }
     
     virtual void onDrawContent(SkCanvas* canvas) {
-//        test_strokerect(canvas); return;
-//        test_text(canvas); return;
+        if (false) { // avoid bit rot, suppress warning
+            test_strokerect(canvas);
+            return;
+        }
+        if (false) { // avoid bit rot, suppress warning
+            test_text(canvas);
+            return;
+        }
 #ifdef SK_DEBUG
         if (true) {
             SkRegion a, b, c;
diff --git a/samplecode/SampleShaderText.cpp b/samplecode/SampleShaderText.cpp
index bed4835..eb92efd 100644
--- a/samplecode/SampleShaderText.cpp
+++ b/samplecode/SampleShaderText.cpp
@@ -35,7 +35,7 @@
     canvas.drawPaint(paint);
 }
 
-SkShader* MakeBitmapShader(SkShader::TileMode tx, SkShader::TileMode ty,
+static SkShader* MakeBitmapShader(SkShader::TileMode tx, SkShader::TileMode ty,
                            int w, int h) {
     static SkBitmap bmp;
     if (bmp.isNull()) {
diff --git a/samplecode/SampleSlides.cpp b/samplecode/SampleSlides.cpp
index f800f43..91f6eb6 100644
--- a/samplecode/SampleSlides.cpp
+++ b/samplecode/SampleSlides.cpp
@@ -343,7 +343,7 @@
     ~Rec() { delete[] fVerts; delete[] fTexs; }
 };
 
-void make_tris(Rec* rec) {
+static void make_tris(Rec* rec) {
     int n = 10;
     SkRandom    rand;
     
@@ -359,7 +359,7 @@
     }
 }
 
-void make_fan(Rec* rec, int texWidth, int texHeight) {
+static void make_fan(Rec* rec, int texWidth, int texHeight) {
     const SkScalar tx = SkIntToScalar(texWidth);
     const SkScalar ty = SkIntToScalar(texHeight);
     const int n = 24;
@@ -389,7 +389,7 @@
     m.mapPoints(v, rec->fCount);
 }
 
-void make_strip(Rec* rec, int texWidth, int texHeight) {
+static void make_strip(Rec* rec, int texWidth, int texHeight) {
     const SkScalar tx = SkIntToScalar(texWidth);
     const SkScalar ty = SkIntToScalar(texHeight);
     const int n = 24;
diff --git a/samplecode/SampleStrokeText.cpp b/samplecode/SampleStrokeText.cpp
index f90dc55..94b227c 100644
--- a/samplecode/SampleStrokeText.cpp
+++ b/samplecode/SampleStrokeText.cpp
@@ -131,7 +131,9 @@
 //        paint.setTypeface(Typeface.DEFAULT_BOLD);
         
         lettersToBitmap(&bm, "Test Case", paint, SkBitmap::kARGB_4444_Config);
-        
+        if (false) { // avoid bit rot, suppress warning
+            lettersToBitmap2(&bm, "Test Case", paint, SkBitmap::kARGB_4444_Config);
+        }
         canvas->drawBitmap(bm, 0, 0);
     }
     
diff --git a/samplecode/SampleTextAlpha.cpp b/samplecode/SampleTextAlpha.cpp
index 09134c4..de1461f 100644
--- a/samplecode/SampleTextAlpha.cpp
+++ b/samplecode/SampleTextAlpha.cpp
@@ -9,6 +9,7 @@
 #include "SkView.h"
 #include "SkBlurMaskFilter.h"
 #include "SkCanvas.h"
+#include "SkDevice.h"
 #include "SkGradientShader.h"
 #include "SkGraphics.h"
 #include "SkImageDecoder.h"
@@ -82,8 +83,10 @@
             canvas->drawText(str, strlen(str), x, y, paint);
             y += paint.getFontMetrics(NULL);
         }
-        //check_for_nonwhite(canvas->getDevice()->accessBitmap(), fByte);
-        //SkDebugf("------ byte %x\n", fByte);
+        if (false) { // avoid bit rot, suppress warning
+            check_for_nonwhite(canvas->getDevice()->accessBitmap(false), fByte);
+            SkDebugf("------ byte %x\n", fByte);
+        }
 
         if (false) {
             fByte += 1;
diff --git a/samplecode/SampleXfermodesBlur.cpp b/samplecode/SampleXfermodesBlur.cpp
index 11b1268..feccf44 100644
--- a/samplecode/SampleXfermodesBlur.cpp
+++ b/samplecode/SampleXfermodesBlur.cpp
@@ -76,7 +76,7 @@
 
 #ifdef SK_BUILD_FOR_MAC
         static const char* gNames[] = { "Arial", "Times", "Courier", "Lucida" };
-        for (int j = 0; j < SK_ARRAY_COUNT(gNames); ++j) {
+        for (size_t j = 0; j < SK_ARRAY_COUNT(gNames); ++j) {
             CFStringRef name = CFStringCreateWithCString(NULL, gNames[j], kCFStringEncodingUTF8);
             CTFontRef font = CTFontCreateWithName(name, 0, NULL);
             SkTypeface* face = SkCreateTypefaceFromCTFont(font);
@@ -99,9 +99,6 @@
     const static int W = 64;
     const static int H = 64;
     XfermodesBlurView() {
-        const int W = 64;
-        const int H = 64;
-
         fBG.setConfig(SkBitmap::kARGB_4444_Config, 2, 2, 4);
         fBG.setPixels(gBG);
         fBG.setIsOpaque(true);
diff --git a/samplecode/TransitionView.cpp b/samplecode/TransitionView.cpp
index 5e45e37..9650a8b 100644
--- a/samplecode/TransitionView.cpp
+++ b/samplecode/TransitionView.cpp
@@ -15,7 +15,7 @@
 static const char gIsTransitionQuery[] = "is-transition";
 static const char gReplaceTransitionEvt[] = "replace-transition-view";
 
-bool is_transition(SkView* view) {
+static bool is_transition(SkView* view) {
     SkEvent isTransition(gIsTransitionQuery);
     return view->doQuery(&isTransition);
 }
@@ -182,6 +182,9 @@
     typedef SampleView INHERITED;
 };
 
+// FIXME: this should go in a header
+SkView* create_transition(SkView* prev, SkView* next, int direction);
+
 SkView* create_transition(SkView* prev, SkView* next, int direction) {
     return SkNEW_ARGS(TransitionView, (prev, next, direction));
-};
\ No newline at end of file
+};
