Index: config/auto/alignptrs.pm
===================================================================
--- config/auto/alignptrs.pm	(revision 24497)
+++ config/auto/alignptrs.pm	(working copy)
@@ -36,6 +36,7 @@
         $self->set_result('skipped');
         return 1;
     }
+    my $verbose = $conf->options->get('verbose');
 
     my $result_str = '';
     my $align;
@@ -55,13 +56,26 @@
         # Now really test by compiling some code
         $conf->cc_gen('config/auto/alignptrs/test_c.in');
         $conf->cc_build();
-        for my $try_align ( 64, 32, 16, 8, 4, 2, 1 ) {
+        my $minimum_valid_align;
+        my @aligns = (64, 32, 16, 8, 4, 2, 1);
+        TRY_ALIGN: while ( defined( my $try_align = shift(@aligns) ) ) {
+            print "Trying pointer alignment $try_align\n" if $verbose;
             my $results = $conf->cc_run_capture($try_align);
             $align = _evaluate_results($results, $try_align);
+            if (defined $align) {
+                $minimum_valid_align = $align;
+                next TRY_ALIGN;
+            } else {
+                last TRY_ALIGN;
+            }
         }
         $conf->cc_clean();
 
-        _evaluate_ptr_alignment($conf, $align);
+        _evaluate_ptr_alignment($conf, $minimum_valid_align);
+
+        # If at this point we haven't died, then we can assign
+        # $minimum_valid_align to $align.
+        $align = $minimum_valid_align;
     }
 
     $self->_finalize_result_str($align, $result_str);
@@ -79,9 +93,9 @@
 }
 
 sub _evaluate_ptr_alignment {
-    my ($conf, $align) = @_;
-    die "Can't determine alignment!\n" unless defined $align;
-    $conf->data->set( ptr_alignment => $align );
+    my ($conf, $minimum_valid_align) = @_;
+    die "Can't determine alignment!\n" unless defined $minimum_valid_align;
+    $conf->data->set( ptr_alignment => $minimum_valid_align );
 }
 
 sub _finalize_result_str {
