Index: tools/clang/include/clang/Sema/Sema.h
===================================================================
--- tools/clang/include/clang/Sema/Sema.h	(revision 157508)
+++ tools/clang/include/clang/Sema/Sema.h	(working copy)
@@ -5462,11 +5462,8 @@
 
       case PriorTemplateArgumentSubstitution:
       case DefaultTemplateArgumentChecking:
-        if (X.Template != Y.Template)
-          return false;
+        return (X.Template == Y.Template) && (X.TemplateArgs == Y.TemplateArgs);
 
-        // Fall through
-
       case DefaultTemplateArgumentInstantiation:
       case ExplicitTemplateArgumentSubstitution:
       case DeducedTemplateArgumentSubstitution:
Index: tools/clang/lib/Sema/SemaDeclAttr.cpp
===================================================================
--- tools/clang/lib/Sema/SemaDeclAttr.cpp	(revision 157508)
+++ tools/clang/lib/Sema/SemaDeclAttr.cpp	(working copy)
@@ -3342,6 +3342,7 @@
     }
 
     D->addAttr(::new (S.Context) PcsAttr(Attr.getRange(), S.Context, PCS));
+    return;
   }
   default:
     llvm_unreachable("unexpected attribute kind");
Index: tools/clang/lib/Lex/PPExpressions.cpp
===================================================================
--- tools/clang/lib/Lex/PPExpressions.cpp	(revision 157508)
+++ tools/clang/lib/Lex/PPExpressions.cpp	(working copy)
@@ -252,9 +252,9 @@
     return false;
   }
   case tok::char_constant:          // 'x'
-  case tok::wide_char_constant: {   // L'x'
+  case tok::wide_char_constant:     // L'x'
   case tok::utf16_char_constant:    // u'x'
-  case tok::utf32_char_constant:    // U'x'
+  case tok::utf32_char_constant: {  // U'x'
     // Complain about, and drop, any ud-suffix.
     if (PeekTok.hasUDSuffix())
       PP.Diag(PeekTok, diag::err_pp_invalid_udl) << /*character*/0;
