ariccio created this revision.
ariccio added subscribers: llvm-commits, cfe-commits.
Herald added a reviewer: tstellarAMD.
Herald added subscribers: joker.eph, dsanders, arsenm, MatzeB.

Currently, the "potentially uninitialized local variable" & "potentially 
uninitialized local pointer variable" warnings are turned off. At some point we 
should probably turn them back on, because they can find serious problems. This 
patch eliminates the most obviously benign offenders. 


This leaves about ~33 not-so-obviously benign offenders. which I'll include 
here for convenience:



|Severity| Code | Description | Project | File | Line | Category | Source | 
Suppression |
 --------   -----   ------------     -----      ----  -----   --------      
------     -------------
|Warning|       C4703| potentially uninitialized local pointer variable 
'ExprOffset' used | LLVMMipsAsmParser | 
c:\llvm\llvm\lib\target\mips\asmparser\mipsasmparser.cpp | 2668 |
|Warning|       C4701| potentially uninitialized local variable 'Encoding' used 
| clangCodeGen | c:\llvm\llvm\tools\clang\lib\codegen\cgdebuginfo.cpp | 573 |
|Warning|       C4701| potentially uninitialized local variable 'result' used | 
clangCodeGen | c:\llvm\llvm\tools\clang\lib\codegen\cgobjc.cpp | 2675 |
|Warning|       C4701| potentially uninitialized local variable 'Nullability' 
used | clangParse | c:\llvm\llvm\tools\clang\lib\parse\parseobjc.cpp | 1202 |
|Warning|       C4701| potentially uninitialized local variable 
'RepresentationMethod' used | clangParse | 
c:\llvm\llvm\tools\clang\lib\parse\parsepragma.cpp | 1582 |
|Warning|       C4701| potentially uninitialized local variable 'FirstOpKind' 
used | clangSema | c:\llvm\llvm\tools\clang\lib\sema\sematemplate.cpp | 4464 |
|Warning|       C4701| potentially uninitialized local variable 
'FnEntry8BitAbbrev' used | LLVMBitWriter | 
c:\llvm\llvm\lib\bitcode\writer\bitcodewriter.cpp | 2353 |
|Warning|       C4701| potentially uninitialized local variable 
'FnEntry7BitAbbrev' used | LLVMBitWriter | 
c:\llvm\llvm\lib\bitcode\writer\bitcodewriter.cpp | 2357 |
|Warning|       C4701| potentially uninitialized local variable 
'FnEntry6BitAbbrev' used | LLVMBitWriter | 
c:\llvm\llvm\lib\bitcode\writer\bitcodewriter.cpp | 2355 |
|Warning|       C4701| potentially uninitialized local variable 'OutIt' used | 
LLVMCodeGen | c:\llvm\llvm\lib\codegen\liveinterval.cpp | 876 |
|Warning|       C4701| potentially uninitialized local variable 'mid' used | 
LLVMHexagonCodeGen | c:\llvm\build\lib\target\hexagon\hexagongeninstrinfo.inc | 
9722 |
|Warning|       C4701| potentially uninitialized local variable 
'RealEightBitCounterArray' used | LLVMInstrumentation | 
c:\llvm\llvm\lib\transforms\instrumentation\sanitizercoverage.cpp | 294 |
|Warning|       C4701| potentially uninitialized local variable 'LoOffset' used 
| LLVMMipsAsmParser | c:\llvm\llvm\lib\target\mips\asmparser\mipsasmparser.cpp 
| 2668 |
|Warning|       C4701| potentially uninitialized local variable 'HiOffset' used 
| LLVMMipsAsmParser | c:\llvm\llvm\lib\target\mips\asmparser\mipsasmparser.cpp 
| 2659 |
|Warning|       C4701| potentially uninitialized local variable 'ExprOffset' 
used | LLVMMipsAsmParser | 
c:\llvm\llvm\lib\target\mips\asmparser\mipsasmparser.cpp | 2668 |
|Warning|       C4701| potentially uninitialized local variable 
'BranchTargetNoTraps' used | LLVMMipsAsmParser | 
c:\llvm\llvm\lib\target\mips\asmparser\mipsasmparser.cpp | 3072 |
Warning|        C4701| potentially uninitialized local variable 'MatImm' used | 
LLVMPowerPCCodeGen | c:\llvm\llvm\lib\target\powerpc\ppciseldagtodag.cpp | 808 |
|Warning|       C4701| potentially uninitialized local variable 'MaskEnd' used 
| LLVMPowerPCCodeGen | c:\llvm\llvm\lib\target\powerpc\ppciseldagtodag.cpp | 
809 |
|Warning|       C4701| potentially uninitialized local variable 'FirstLP' used 
| LLVMScalarOpts | c:\llvm\llvm\lib\transforms\scalar\loadcombine.cpp | 198 |
|Warning|       C4701| potentially uninitialized local variable 'CC' used | 
LLVMSelectionDAG | c:\llvm\llvm\lib\codegen\selectiondag\dagcombiner.cpp | 
13889 |
|Warning|       C4701| potentially uninitialized local variable 'Operation' 
used | llvm-ar | c:\llvm\llvm\tools\llvm-ar\llvm-ar.cpp | 287 |
|Warning|       C4701| potentially uninitialized local variable 'Kind' used | 
llvm-ar | c:\llvm\llvm\tools\llvm-ar\llvm-ar.cpp | 602 |
|Warning|       C4701| potentially uninitialized local variable 'CurSegAddress' 
used | llvm-objdump | c:\llvm\llvm\tools\llvm-objdump\machodump.cpp | 8548 |
|Warning|       C4701| potentially uninitialized local variable 'objc_class' 
used | llvm-objdump | c:\llvm\llvm\tools\llvm-objdump\machodump.cpp | 5435 |
|Warning|       C4701| potentially uninitialized local variable 'r_type' used | 
llvm-objdump | c:\llvm\llvm\tools\llvm-objdump\machodump.cpp | 1781 |
|Warning|       C4701| potentially uninitialized local variable 'r_value' used 
| llvm-objdump | c:\llvm\llvm\tools\llvm-objdump\machodump.cpp | 1783 |
|Warning|       C4701| potentially uninitialized local variable 'pair_r_value' 
used | llvm-objdump | c:\llvm\llvm\tools\llvm-objdump\machodump.cpp | 1784 |
|Warning|       C4701| potentially uninitialized local variable 'r_value' used 
| llvm-objdump | c:\llvm\llvm\tools\llvm-objdump\machodump.cpp | 1970 |
|Warning|       C4701| potentially uninitialized local variable 'other_half' 
used | llvm-objdump | c:\llvm\llvm\tools\llvm-objdump\machodump.cpp | 1940 |
|Warning|       C4701| potentially uninitialized local variable 'pair_r_value' 
used | llvm-objdump | c:\llvm\llvm\tools\llvm-objdump\machodump.cpp | 1980 |
|Warning|       C4703| potentially uninitialized local pointer variable 
'result' used | clangCodeGen | c:\llvm\llvm\tools\clang\lib\codegen\cgobjc.cpp 
| 2675 |
|Warning|       C4703| potentially uninitialized local pointer variable 'OutIt' 
used | LLVMCodeGen | c:\llvm\llvm\lib\codegen\liveinterval.cpp | 876 |
|Warning|       C4703| potentially uninitialized local pointer variable 
'RealEightBitCounterArray' used | LLVMInstrumentation | 
c:\llvm\llvm\lib\transforms\instrumentation\sanitizercoverage.cpp | 294 |



http://reviews.llvm.org/D17983

Files:
  llvm/lib/Analysis/CFLAliasAnalysis.cpp
  llvm/lib/Analysis/DependenceAnalysis.cpp
  llvm/lib/Analysis/InstructionSimplify.cpp
  llvm/lib/AsmParser/LLParser.cpp
  llvm/lib/Bitcode/Reader/BitcodeReader.cpp
  llvm/lib/CodeGen/AtomicExpandPass.cpp
  llvm/lib/CodeGen/LiveInterval.cpp
  llvm/lib/CodeGen/MIRParser/MIRParser.cpp
  llvm/lib/DebugInfo/DWARF/DWARFDebugFrame.cpp
  llvm/lib/IR/Core.cpp
  llvm/lib/LTO/LTOCodeGenerator.cpp
  llvm/lib/MC/MCAsmStreamer.cpp
  llvm/lib/MC/MachObjectWriter.cpp
  llvm/lib/Support/Windows/Path.inc
  llvm/lib/Support/YAMLParser.cpp
  llvm/lib/Target/AArch64/AArch64AdvSIMDScalarPass.cpp
  llvm/lib/Target/AArch64/AArch64FastISel.cpp
  llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
  llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
  llvm/lib/Target/AMDGPU/AMDILCFGStructurizer.cpp
  llvm/lib/Target/AMDGPU/R600InstrInfo.cpp
  llvm/lib/Target/ARM/ARMFastISel.cpp
  llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
  llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp
  llvm/lib/Target/Hexagon/HexagonBitSimplify.cpp
  llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCShuffler.cpp
  llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
  llvm/lib/Target/Mips/MipsAsmPrinter.cpp
  llvm/lib/Target/TargetRecip.cpp
  llvm/lib/Target/X86/X86FastISel.cpp
  llvm/lib/Target/X86/X86FixupLEAs.cpp
  llvm/lib/Target/X86/X86ISelLowering.cpp
  llvm/lib/Target/X86/X86InstrInfo.cpp
  llvm/lib/Target/X86/X86WinEHState.cpp
  llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp
  llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp
  llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp
  llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp
  llvm/lib/Transforms/Scalar/SROA.cpp
  llvm/lib/Transforms/Utils/MemorySSA.cpp
  llvm/tools/clang/include/clang/Sema/Lookup.h
  llvm/tools/clang/lib/AST/ExprConstant.cpp
  llvm/tools/clang/lib/AST/MicrosoftMangle.cpp
  llvm/tools/clang/lib/CodeGen/CGClass.cpp
  llvm/tools/clang/lib/CodeGen/CGCleanup.h
  llvm/tools/clang/lib/CodeGen/CGExprScalar.cpp
  llvm/tools/clang/lib/CodeGen/CGOpenMPRuntime.cpp
  llvm/tools/clang/lib/CodeGen/CGRecordLayoutBuilder.cpp
  llvm/tools/clang/lib/CodeGen/CGStmtOpenMP.cpp
  llvm/tools/clang/lib/CodeGen/CodeGenAction.cpp
  llvm/tools/clang/lib/CodeGen/TargetInfo.cpp
  llvm/tools/clang/lib/Driver/ToolChain.cpp
  llvm/tools/clang/lib/Lex/Preprocessor.cpp
  llvm/tools/clang/lib/Parse/ParseObjc.cpp
  llvm/tools/clang/lib/Sema/SemaDecl.cpp
  llvm/tools/clang/lib/Sema/SemaDeclAttr.cpp
  llvm/tools/clang/lib/Sema/SemaDeclCXX.cpp
  llvm/tools/clang/lib/Sema/SemaInit.cpp
  llvm/tools/clang/lib/Sema/SemaLambda.cpp
  llvm/tools/clang/lib/Sema/SemaLookup.cpp
  llvm/tools/clang/lib/Sema/SemaStmtAttr.cpp
  llvm/tools/clang/lib/Serialization/ASTReader.cpp
  llvm/tools/clang/lib/Serialization/ASTReaderStmt.cpp
  llvm/tools/clang/lib/StaticAnalyzer/Checkers/ObjCContainersASTChecker.cpp
  llvm/tools/clang/lib/StaticAnalyzer/Core/CheckerManager.cpp
  llvm/tools/clang/lib/StaticAnalyzer/Core/SymbolManager.cpp

Index: llvm/lib/MC/MCAsmStreamer.cpp
===================================================================
--- llvm/lib/MC/MCAsmStreamer.cpp
+++ llvm/lib/MC/MCAsmStreamer.cpp
@@ -990,7 +990,7 @@
   if (PrologueEnd)
     OS << " prologue_end";
 
-  unsigned OldIsStmt = getContext().getCurrentCVLoc().isStmt();
+  bool OldIsStmt = getContext().getCurrentCVLoc().isStmt();
   if (IsStmt != OldIsStmt) {
     OS << " is_stmt ";
 
Index: llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
===================================================================
--- llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
+++ llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
@@ -2712,7 +2712,10 @@
   unsigned ZeroSrcOpcode, ZeroTrgOpcode;
   bool ReverseOrderSLT, IsUnsigned, IsLikely, AcceptsEquality;
 
-  unsigned TrgReg;
+  // TrgReg should never normally be assigned NUM_TARGET_REGS.
+  // If you end up with NUM_TARGET_REGS, you have a bug.
+  // FIXME: is there a better way to ensure TrgReg is assigned something?
+  unsigned TrgReg = Mips::NUM_TARGET_REGS;
   if (TrgOp.isReg())
     TrgReg = TrgOp.getReg();
   else if (TrgOp.isImm()) {
Index: llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCShuffler.cpp
===================================================================
--- llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCShuffler.cpp
+++ llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCShuffler.cpp
@@ -170,7 +170,7 @@
   }
 
   bool doneShuffling = false;
-  unsigned shuffleError;
+  unsigned shuffleError = HexagonShuffler::SHUFFLE_ERROR_UNKNOWN;
   while (possibleDuplexes.size() > 0 && (!doneShuffling)) {
     // case of Duplex Found
     DuplexCandidate duplexToTry = possibleDuplexes.pop_back_val();
Index: llvm/lib/Target/Hexagon/HexagonBitSimplify.cpp
===================================================================
--- llvm/lib/Target/Hexagon/HexagonBitSimplify.cpp
+++ llvm/lib/Target/Hexagon/HexagonBitSimplify.cpp
@@ -1896,6 +1896,8 @@
     case Hexagon::S2_storeri_io:
       V = int32_t(U);
       break;
+    default:
+      llvm_unreachable("Unexpected opcode, V not initialized!");
   }
   if (!isInt<8>(V))
     return false;
Index: llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp
===================================================================
--- llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp
+++ llvm/lib/Transforms/InstCombine/InstCombineAndOrXor.cpp
@@ -930,7 +930,7 @@
   if (LHSCC == ICmpInst::ICMP_EQ && LHSCC == RHSCC &&
       LHS->hasOneUse() && RHS->hasOneUse()) {
     Value *V;
-    ConstantInt *AndCst, *SmallCst = nullptr, *BigCst = nullptr;
+    ConstantInt *AndCst = nullptr, *SmallCst = nullptr, *BigCst = nullptr;
 
     // (trunc x) == C1 & (and x, CA) == C2
     // (and x, CA) == C2 & (trunc x) == C1
Index: llvm/lib/Target/Mips/MipsAsmPrinter.cpp
===================================================================
--- llvm/lib/Target/Mips/MipsAsmPrinter.cpp
+++ llvm/lib/Target/Mips/MipsAsmPrinter.cpp
@@ -886,7 +886,7 @@
   // .global xxxx
   //
   OutStreamer->EmitSymbolAttribute(MSymbol, MCSA_Global);
-  const char *RetType;
+  const char *RetType = "";
   //
   // make the comment field identifying the return and parameter
   // types of the floating point stub
@@ -908,8 +908,10 @@
   case NoFPRet:
     RetType = "";
     break;
+  default:
+    llvm_unreachable("Unexpected FPReturnVariant!");
   }
-  const char *Parms;
+  const char *Parms = "";
   switch (Signature->ParamSig) {
   case FSig:
     Parms = "float";
@@ -932,6 +934,8 @@
   case NoSig:
     Parms = "";
     break;
+  default:
+    llvm_unreachable("Unexpected FPParamVariant!");
   }
   OutStreamer->AddComment("\t# Stub function to call " + Twine(RetType) + " " +
                           Twine(Symbol) + " (" + Twine(Parms) + ")");
Index: llvm/tools/clang/lib/CodeGen/CodeGenAction.cpp
===================================================================
--- llvm/tools/clang/lib/CodeGen/CodeGenAction.cpp
+++ llvm/tools/clang/lib/CodeGen/CodeGenAction.cpp
@@ -307,7 +307,7 @@
   if (D.getLoc() != SMLoc())
     Loc = ConvertBackendLocation(D, Context->getSourceManager());
 
-  unsigned DiagID;
+  unsigned DiagID = 0;
   switch (D.getKind()) {
   case llvm::SourceMgr::DK_Error:
     DiagID = diag::err_fe_inline_asm;
@@ -318,6 +318,8 @@
   case llvm::SourceMgr::DK_Note:
     DiagID = diag::note_fe_inline_asm;
     break;
+  default:
+    llvm_unreachable("Unexpected DiagKind!");
   }
   // If this problem has clang-level source location information, report the
   // issue in the source with a note showing the instantiated
@@ -382,7 +384,7 @@
 
 bool
 BackendConsumer::InlineAsmDiagHandler(const llvm::DiagnosticInfoInlineAsm &D) {
-  unsigned DiagID;
+  unsigned DiagID = 0;
   ComputeDiagID(D.getSeverity(), inline_asm, DiagID);
   std::string Message = D.getMsgStr().str();
 
Index: llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp
===================================================================
--- llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp
+++ llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp
@@ -545,9 +545,9 @@
   {
     unsigned BitWidth = DL.getTypeSizeInBits(TrueVal->getType());
     APInt MinSignedValue = APInt::getSignBit(BitWidth);
-    Value *X;
-    const APInt *Y, *C;
-    bool TrueWhenUnset;
+    Value *X = nullptr;
+    const APInt *Y = nullptr, *C;
+    bool TrueWhenUnset = false;
     bool IsBitTest = false;
     if (ICmpInst::isEquality(Pred) &&
         match(CmpLHS, m_And(m_Value(X), m_Power2(Y))) &&
Index: llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp
===================================================================
--- llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp
+++ llvm/lib/Transforms/InstCombine/InstCombineAddSub.cpp
@@ -1176,8 +1176,8 @@
 
   if (ConstantInt *CRHS = dyn_cast<ConstantInt>(RHS)) {
     // (X & FF00) + xx00  -> (X+xx00) & FF00
-    Value *X;
-    ConstantInt *C2;
+    Value *X = nullptr;
+    ConstantInt *C2 = nullptr;
     if (LHS->hasOneUse() &&
         match(LHS, m_And(m_Value(X), m_ConstantInt(C2))) &&
         CRHS->getValue() == (CRHS->getValue() & C2->getValue())) {
@@ -1400,7 +1400,7 @@
         match(RHS, m_Select(m_Value(C2), m_Value(A2), m_Value(B2)))) {
       if (C1 == C2) {
         Constant *Z1=nullptr, *Z2=nullptr;
-        Value *A, *B, *C=C1;
+        Value *A = nullptr, *B = nullptr, *C=C1;
         if (match(A1, m_AnyZero()) && match(B2, m_AnyZero())) {
             Z1 = dyn_cast<Constant>(A1); A = A2;
             Z2 = dyn_cast<Constant>(B2); B = B1;
Index: llvm/lib/LTO/LTOCodeGenerator.cpp
===================================================================
--- llvm/lib/LTO/LTOCodeGenerator.cpp
+++ llvm/lib/LTO/LTOCodeGenerator.cpp
@@ -601,6 +601,8 @@
   case DS_Note:
     Severity = LTO_DS_NOTE;
     break;
+  default:
+    llvm_unreachable("Unexpected DiagnosticSeverity!");
   }
   // Create the string that will be reported to the external diagnostic handler.
   std::string MsgStorage;
Index: llvm/tools/clang/lib/CodeGen/TargetInfo.cpp
===================================================================
--- llvm/tools/clang/lib/CodeGen/TargetInfo.cpp
+++ llvm/tools/clang/lib/CodeGen/TargetInfo.cpp
@@ -4953,14 +4953,16 @@
     if (!Attr)
       return;
 
-    const char *Kind;
+    const char *Kind = "";
     switch (Attr->getInterrupt()) {
     case ARMInterruptAttr::Generic: Kind = ""; break;
     case ARMInterruptAttr::IRQ:     Kind = "IRQ"; break;
     case ARMInterruptAttr::FIQ:     Kind = "FIQ"; break;
     case ARMInterruptAttr::SWI:     Kind = "SWI"; break;
     case ARMInterruptAttr::ABORT:   Kind = "ABORT"; break;
     case ARMInterruptAttr::UNDEF:   Kind = "UNDEF"; break;
+    default:
+      llvm_unreachable("Unexpected InterruptType!");
     }
 
     llvm::Function *Fn = cast<llvm::Function>(GV);
@@ -6062,7 +6064,7 @@
     if (!Attr)
       return;
 
-    const char *Kind;
+    const char *Kind = "";
     switch (Attr->getInterrupt()) {
     case MipsInterruptAttr::eic:     Kind = "eic"; break;
     case MipsInterruptAttr::sw0:     Kind = "sw0"; break;
@@ -6073,6 +6075,8 @@
     case MipsInterruptAttr::hw3:     Kind = "hw3"; break;
     case MipsInterruptAttr::hw4:     Kind = "hw4"; break;
     case MipsInterruptAttr::hw5:     Kind = "hw5"; break;
+    default:
+      llvm_unreachable("Unexpected InterruptType!");
     }
 
     Fn->addFnAttr("interrupt", Kind);
Index: llvm/tools/clang/lib/CodeGen/CGStmtOpenMP.cpp
===================================================================
--- llvm/tools/clang/lib/CodeGen/CGStmtOpenMP.cpp
+++ llvm/tools/clang/lib/CodeGen/CGStmtOpenMP.cpp
@@ -2411,6 +2411,8 @@
   case BO_ShrAssign:
   case BO_Comma:
     llvm_unreachable("Unsupported atomic update operation");
+  default:
+    llvm_unreachable("Unexpected BinaryOperatorKind!");
   }
   auto *UpdateVal = Update.getScalarVal();
   if (auto *IC = dyn_cast<llvm::ConstantInt>(UpdateVal)) {
Index: llvm/tools/clang/lib/CodeGen/CGOpenMPRuntime.cpp
===================================================================
--- llvm/tools/clang/lib/CodeGen/CGOpenMPRuntime.cpp
+++ llvm/tools/clang/lib/CodeGen/CGOpenMPRuntime.cpp
@@ -2323,6 +2323,8 @@
     break;
   case OMPC_PROC_BIND_unknown:
     llvm_unreachable("Unsupported proc_bind value.");
+  default:
+    llvm_unreachable("Unexpected OpenMPProcBindClauseKind!");
   }
   // Build call __kmpc_push_proc_bind(&loc, global_tid, proc_bind)
   llvm::Value *Args[] = {
Index: llvm/tools/clang/lib/CodeGen/CGRecordLayoutBuilder.cpp
===================================================================
--- llvm/tools/clang/lib/CodeGen/CGRecordLayoutBuilder.cpp
+++ llvm/tools/clang/lib/CodeGen/CGRecordLayoutBuilder.cpp
@@ -375,7 +375,7 @@
   // Tail is the offset of the first bit off the end of the current run.  It's
   // used to determine if the ASTRecordLayout is treating these two bitfields as
   // contiguous.  StartBitOffset is offset of the beginning of the Run.
-  uint64_t StartBitOffset, Tail = 0;
+  uint64_t StartBitOffset = 0, Tail = 0;
   if (isDiscreteBitFieldABI()) {
     for (; Field != FieldEnd; ++Field) {
       uint64_t BitOffset = getFieldBitOffset(*Field);
Index: llvm/tools/clang/lib/CodeGen/CGExprScalar.cpp
===================================================================
--- llvm/tools/clang/lib/CodeGen/CGExprScalar.cpp
+++ llvm/tools/clang/lib/CodeGen/CGExprScalar.cpp
@@ -2979,10 +2979,12 @@
 Value *ScalarExprEmitter::VisitBinAssign(const BinaryOperator *E) {
   bool Ignore = TestAndClearIgnoreResultAssign();
 
-  Value *RHS;
+  Value *RHS = nullptr;
   LValue LHS;
 
   switch (E->getLHS()->getType().getObjCLifetime()) {
+  default:
+    llvm_unreachable("Unexpected ObjCLifetime!");
   case Qualifiers::OCL_Strong:
     std::tie(LHS, RHS) = CGF.EmitARCStoreStrong(E, Ignore);
     break;
Index: llvm/tools/clang/lib/CodeGen/CGClass.cpp
===================================================================
--- llvm/tools/clang/lib/CodeGen/CGClass.cpp
+++ llvm/tools/clang/lib/CodeGen/CGClass.cpp
@@ -2585,6 +2585,8 @@
     break;
   case CFITCK_ICall:
     llvm_unreachable("not expecting CFITCK_ICall");
+  default:
+    llvm_unreachable("Unexpected CFITypeCheckKind!");
   }
   EmitSanitizerStatReport(SSK);
 
Index: llvm/tools/clang/lib/CodeGen/CGCleanup.h
===================================================================
--- llvm/tools/clang/lib/CodeGen/CGCleanup.h
+++ llvm/tools/clang/lib/CodeGen/CGCleanup.h
@@ -516,7 +516,7 @@
   EHScope &operator*() const { return *get(); }
 
   iterator &operator++() {
-    size_t Size;
+    size_t Size = 0;
     switch (get()->getKind()) {
     case EHScope::Catch:
       Size = EHCatchScope::getSizeForNumHandlers(
@@ -539,6 +539,8 @@
     case EHScope::PadEnd:
       Size = EHPadEndScope::getSize();
       break;
+    default:
+      llvm_unreachable("Unexpected Kind!");
     }
     Ptr += llvm::alignTo(Size, ScopeStackAlignment);
     return *this;
Index: llvm/lib/CodeGen/MIRParser/MIRParser.cpp
===================================================================
--- llvm/lib/CodeGen/MIRParser/MIRParser.cpp
+++ llvm/lib/CodeGen/MIRParser/MIRParser.cpp
@@ -195,6 +195,8 @@
   case SourceMgr::DK_Note:
     Kind = DS_Note;
     break;
+  default:
+    llvm_unreachable("Unexpected DiagKind!");
   }
   Context.diagnose(DiagnosticInfoMIRParser(Kind, Diag));
 }
Index: llvm/lib/DebugInfo/DWARF/DWARFDebugFrame.cpp
===================================================================
--- llvm/lib/DebugInfo/DWARF/DWARFDebugFrame.cpp
+++ llvm/lib/DebugInfo/DWARF/DWARFDebugFrame.cpp
@@ -569,8 +569,8 @@
         Optional<uint64_t> Personality;
 
         Optional<uint64_t> AugmentationLength;
-        uint32_t StartAugmentationOffset;
-        uint32_t EndAugmentationOffset;
+        uint32_t StartAugmentationOffset = 0;
+        uint32_t EndAugmentationOffset = 0;
 
         // Walk the augmentation string to get all the augmentation data.
         for (unsigned i = 0, e = AugmentationString.size(); i != e; ++i) {
Index: llvm/lib/Transforms/Utils/MemorySSA.cpp
===================================================================
--- llvm/lib/Transforms/Utils/MemorySSA.cpp
+++ llvm/lib/Transforms/Utils/MemorySSA.cpp
@@ -518,7 +518,7 @@
     // Phi nodes are attached to basic blocks
     if (MemoryPhi *MP = getMemoryAccess(&B)) {
       for (User *U : MP->users()) {
-        BasicBlock *UseBlock;
+        BasicBlock *UseBlock = nullptr;
         // Phi operands are used on edges, we simulate the right domination by
         // acting as if the use occurred at the end of the predecessor block.
         if (MemoryPhi *P = dyn_cast<MemoryPhi>(U)) {
@@ -543,7 +543,7 @@
         continue;
 
       for (User *U : MD->users()) {
-        BasicBlock *UseBlock;
+        BasicBlock *UseBlock = nullptr;
         // Things are allowed to flow to phi nodes over their predecessor edge.
         if (auto *P = dyn_cast<MemoryPhi>(U)) {
           for (const auto &Arg : P->operands()) {
Index: llvm/lib/Target/TargetRecip.cpp
===================================================================
--- llvm/lib/Target/TargetRecip.cpp
+++ llvm/lib/Target/TargetRecip.cpp
@@ -79,7 +79,7 @@
     RefStepString = ArgSub.substr(RefPos + 1);
     ArgSub = ArgSub.substr(0, RefPos);
   }
-  bool Enable;
+  bool Enable = false;
   bool UseDefaults;
   if (ArgSub == "all") {
     UseDefaults = false;
Index: llvm/lib/Transforms/Scalar/SROA.cpp
===================================================================
--- llvm/lib/Transforms/Scalar/SROA.cpp
+++ llvm/lib/Transforms/Scalar/SROA.cpp
@@ -1512,7 +1512,7 @@
   // never are able to compute one directly that has the correct type, we'll
   // fall back to it, so keep it and the base it was computed from around here.
   Value *OffsetPtr = nullptr;
-  Value *OffsetBasePtr;
+  Value *OffsetBasePtr = nullptr;
 
   // Remember any i8 pointer we come across to re-use if we need to do a raw
   // byte offset.
Index: llvm/lib/MC/MachObjectWriter.cpp
===================================================================
--- llvm/lib/MC/MachObjectWriter.cpp
+++ llvm/lib/MC/MachObjectWriter.cpp
@@ -328,7 +328,7 @@
   bool IsAlias = Symbol != AliasedSymbol;
 
   const MCSymbol &OrigSymbol = *Symbol;
-  MachSymbolData *AliaseeInfo;
+  MachSymbolData *AliaseeInfo = nullptr;
   if (IsAlias) {
     AliaseeInfo = findSymbolData(*AliasedSymbol);
     if (AliaseeInfo)
@@ -829,6 +829,8 @@
     case MCVM_WatchOSVersionMin:
       LCType = MachO::LC_VERSION_MIN_WATCHOS;
       break;
+    default:
+      llvm_unreachable("Unexpected MCVersionMinType!");
     }
     write32(LCType);
     write32(sizeof(MachO::version_min_command));
Index: llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp
===================================================================
--- llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp
+++ llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp
@@ -2829,8 +2829,10 @@
           AK = AK_Memory;
         if (AK == AK_FloatingPoint && FpOffset >= AMD64FpEndOffset)
           AK = AK_Memory;
-        Value *Base;
+        Value *Base = nullptr;
         switch (AK) {
+          default:
+            llvm_unreachable("Unexpected ArgKind!");
           case AK_GeneralPurpose:
             Base = getShadowPtrForVAArgument(A->getType(), IRB, GpOffset);
             GpOffset += 8;
@@ -3099,8 +3101,10 @@
         AK = AK_Memory;
       if (AK == AK_FloatingPoint && VrOffset >= AArch64VrEndOffset)
         AK = AK_Memory;
-      Value *Base;
+      Value *Base = nullptr;
       switch (AK) {
+        default:
+          llvm_unreachable("Unexpected ArgKind!");
         case AK_GeneralPurpose:
           Base = getShadowPtrForVAArgument(A->getType(), IRB, GrOffset);
           GrOffset += 8;
@@ -3114,6 +3118,7 @@
           Base = getShadowPtrForVAArgument(A->getType(), IRB, OverflowOffset);
           OverflowOffset += alignTo(ArgSize, 8);
           break;
+
       }
       IRB.CreateAlignedStore(MSV.getShadow(A), Base, kShadowTLSAlignment);
     }
Index: llvm/lib/IR/Core.cpp
===================================================================
--- llvm/lib/IR/Core.cpp
+++ llvm/lib/IR/Core.cpp
@@ -2891,7 +2891,7 @@
                                LLVMValueRef PTR, LLVMValueRef Val,
                                LLVMAtomicOrdering ordering,
                                LLVMBool singleThread) {
-  AtomicRMWInst::BinOp intop;
+  AtomicRMWInst::BinOp intop = AtomicRMWInst::BAD_BINOP;
   switch (op) {
     case LLVMAtomicRMWBinOpXchg: intop = AtomicRMWInst::Xchg; break;
     case LLVMAtomicRMWBinOpAdd: intop = AtomicRMWInst::Add; break;
@@ -2904,6 +2904,7 @@
     case LLVMAtomicRMWBinOpMin: intop = AtomicRMWInst::Min; break;
     case LLVMAtomicRMWBinOpUMax: intop = AtomicRMWInst::UMax; break;
     case LLVMAtomicRMWBinOpUMin: intop = AtomicRMWInst::UMin; break;
+    default: llvm_unreachable("Unexpected LLVMAtomicRMWBinOp!");
   }
   return wrap(unwrap(B)->CreateAtomicRMW(intop, unwrap(PTR), unwrap(Val),
     mapFromLLVMOrdering(ordering), singleThread ? SingleThread : CrossThread));
Index: llvm/lib/CodeGen/LiveInterval.cpp
===================================================================
--- llvm/lib/CodeGen/LiveInterval.cpp
+++ llvm/lib/CodeGen/LiveInterval.cpp
@@ -990,7 +990,7 @@
       // Start a new segment if necessary.
       if (!ConstructingSegment) {
         // Determine value number for the segment.
-        VNInfo *VNI;
+        VNInfo *VNI = nullptr;
         if (IsDef) {
           VNI = getNextValue(Pos, VNIAllocator);
         } else {
Index: llvm/lib/CodeGen/AtomicExpandPass.cpp
===================================================================
--- llvm/lib/CodeGen/AtomicExpandPass.cpp
+++ llvm/lib/CodeGen/AtomicExpandPass.cpp
@@ -102,7 +102,7 @@
 
     if (TLI->getInsertFencesForAtomic()) {
       auto FenceOrdering = Monotonic;
-      bool IsStore, IsLoad;
+      bool IsStore = false, IsLoad = false;
       if (LI && isAtLeastAcquire(LI->getOrdering())) {
         FenceOrdering = LI->getOrdering();
         LI->setOrdering(Monotonic);
@@ -632,7 +632,7 @@
                        CI->isWeak() ? FailureBB : RetryBB);
 
   Builder.SetInsertPoint(ReleasedLoadBB);
-  Value *SecondLoad;
+  Value *SecondLoad = false;
   if (HasReleasedLoadBB) {
     SecondLoad = TLI->emitLoadLinked(Builder, Addr, MemOpOrder);
     ShouldStore = Builder.CreateICmpEQ(SecondLoad, CI->getCompareOperand(),
Index: llvm/lib/Bitcode/Reader/BitcodeReader.cpp
===================================================================
--- llvm/lib/Bitcode/Reader/BitcodeReader.cpp
+++ llvm/lib/Bitcode/Reader/BitcodeReader.cpp
@@ -1730,7 +1730,7 @@
 /// Parse the value symbol table at either the current parsing location or
 /// at the given bit offset if provided.
 std::error_code BitcodeReader::parseValueSymbolTable(uint64_t Offset) {
-  uint64_t CurrentBit;
+  uint64_t CurrentBit = 0;
   // Pass in the Offset to distinguish between calling for the module-level
   // VST (where we want to jump to the VST offset) and the function-level
   // VST (where we don't).
@@ -1778,6 +1778,8 @@
     BitstreamEntry Entry = Stream.advanceSkippingSubblocks();
 
     switch (Entry.Kind) {
+    default:
+      llvm_unreachable("Unexpected Kind!");
     case BitstreamEntry::SubBlock: // Handled for us already.
     case BitstreamEntry::Error:
       return error("Malformed block");
Index: llvm/lib/AsmParser/LLParser.cpp
===================================================================
--- llvm/lib/AsmParser/LLParser.cpp
+++ llvm/lib/AsmParser/LLParser.cpp
@@ -2982,7 +2982,7 @@
     unsigned Opc = Lex.getUIntVal();
     SmallVector<Constant*, 16> Elts;
     bool InBounds = false;
-    Type *Ty;
+    Type *Ty = nullptr;
     Lex.Lex();
 
     if (Opc == Instruction::GetElementPtr)
Index: llvm/lib/Analysis/InstructionSimplify.cpp
===================================================================
--- llvm/lib/Analysis/InstructionSimplify.cpp
+++ llvm/lib/Analysis/InstructionSimplify.cpp
@@ -1774,7 +1774,7 @@
       // If we have: ((V + N) & C1) | (V & C2)
       // .. and C2 = ~C1 and C2 is 0+1+ and (N & C2) == 0
       // replace with V+N.
-      Value *V1, *V2;
+      Value *V1 = nullptr, *V2 = nullptr;
       if ((C2->getValue() & (C2->getValue() + 1)) == 0 && // C2 == 0+1+
           match(A, m_Add(m_Value(V1), m_Value(V2)))) {
         // Add commutes, try both ways.
@@ -2809,8 +2809,13 @@
   // Simplify comparisons involving max/min.
   Value *A, *B;
   CmpInst::Predicate P = CmpInst::BAD_ICMP_PREDICATE;
-  CmpInst::Predicate EqP; // Chosen so that "A == max/min(A,B)" iff "A EqP B".
 
+  // Initialized to BAD_ICMP_PREDICATE so we don't use garbage in the
+  // next switch statement.
+  // Chosen so that "A == max/min(A,B)" iff "A EqP B".
+  CmpInst::Predicate EqP = CmpInst::BAD_ICMP_PREDICATE;
+
+
   // Signed variants on "max(a,b)>=a -> true".
   if (match(LHS, m_SMax(m_Value(A), m_Value(B))) && (A == RHS || B == RHS)) {
     if (A != RHS) std::swap(A, B); // smax(A, B) pred A.
@@ -3305,9 +3310,9 @@
     Value *CmpLHS = ICI->getOperand(0);
     Value *CmpRHS = ICI->getOperand(1);
     APInt MinSignedValue = APInt::getSignBit(BitWidth);
-    Value *X;
-    const APInt *Y;
-    bool TrueWhenUnset;
+    Value *X = nullptr;
+    const APInt *Y = nullptr;
+    bool TrueWhenUnset = false;
     bool IsBitTest = false;
     if (ICmpInst::isEquality(Pred) &&
         match(CmpLHS, m_And(m_Value(X), m_APInt(Y))) &&
Index: llvm/lib/Analysis/DependenceAnalysis.cpp
===================================================================
--- llvm/lib/Analysis/DependenceAnalysis.cpp
+++ llvm/lib/Analysis/DependenceAnalysis.cpp
@@ -782,7 +782,7 @@
 void DependenceAnalysis::unifySubscriptType(ArrayRef<Subscript *> Pairs) {
 
   unsigned widestWidthSeen = 0;
-  Type *widestType;
+  Type *widestType = nullptr;
 
   // Go through each pair and find the widest bit to which we need
   // to extend all of them.
Index: llvm/lib/Analysis/CFLAliasAnalysis.cpp
===================================================================
--- llvm/lib/Analysis/CFLAliasAnalysis.cpp
+++ llvm/lib/Analysis/CFLAliasAnalysis.cpp
@@ -962,6 +962,8 @@
         case Level::Same:
           Added = Builder.addWith(CurValue, OtherValue);
           break;
+        default:
+          llvm_unreachable("Unexpected Level!");
         }
 
         auto Aliasing = Weight.second;
Index: llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp
===================================================================
--- llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp
+++ llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp
@@ -827,7 +827,7 @@
   assert(Offset + NumBytes <= DataSize && "Invalid fixup offset!");
 
   // Used to point to big endian bytes.
-  unsigned FullSizeBytes;
+  unsigned FullSizeBytes = 0;
   if (!IsLittleEndian) {
     FullSizeBytes = getFixupKindContainerSizeBytes(Fixup.getKind());
     assert((Offset + FullSizeBytes) <= DataSize && "Invalid fixup size!");
Index: llvm/lib/Target/ARM/ARMFastISel.cpp
===================================================================
--- llvm/lib/Target/ARM/ARMFastISel.cpp
+++ llvm/lib/Target/ARM/ARMFastISel.cpp
@@ -2689,7 +2689,13 @@
   // 16-bit Thumb instructions always set CPSR (unless they're in an IT block).
   bool setsCPSR = &ARM::tGPRRegClass == RC;
   unsigned LSLOpc = isThumb2 ? ARM::tLSLri : ARM::MOVsi;
-  unsigned ResultReg;
+
+  // 0 is treated as a failure code all the way up. We intialize ResultReg
+  // to 0, so that if the forthcoming loop does not execute, we're already
+  // returning a failure code. This will trigger an assertion in several
+  // places, which is much better than returning garbage.
+  unsigned ResultReg = 0;
+
   // MOVsi encodes shift and immediate in shift operand addressing mode.
   // The following condition has the same value when emitting two
   // instruction sequences: both are shifts.
@@ -2764,7 +2770,7 @@
     return false;
 
   unsigned Opc = ARM::MOVsr;
-  unsigned ShiftImm;
+  unsigned ShiftImm = 0;
   Value *Src2Value = I->getOperand(1);
   if (const ConstantInt *CI = dyn_cast<ConstantInt>(Src2Value)) {
     ShiftImm = CI->getZExtValue();
@@ -2916,7 +2922,7 @@
   const uint64_t Imm = MI->getOperand(2).getImm();
 
   bool Found = false;
-  bool isZExt;
+  bool isZExt = false;
   for (unsigned i = 0, e = array_lengthof(FoldableLoadExtends);
        i != e; ++i) {
     if (FoldableLoadExtends[i].Opc[isThumb2] == MI->getOpcode() &&
Index: llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
===================================================================
--- llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
+++ llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
@@ -5270,7 +5270,8 @@
     return true;
   }
 
-  uint8_t CurrentFormat;
+  // (~Prefix->SupportedFormats & 255) should always fail?
+  uint8_t CurrentFormat = 255;
   switch (getContext().getObjectFileInfo()->getObjectFileType()) {
   case MCObjectFileInfo::IsMachO:
     CurrentFormat = MACHO;
@@ -5281,6 +5282,8 @@
   case MCObjectFileInfo::IsCOFF:
     CurrentFormat = COFF;
     break;
+  default:
+    llvm_unreachable("Unexpected Environment!");
   }
 
   if (~Prefix->SupportedFormats & CurrentFormat) {
Index: llvm/lib/Target/AMDGPU/R600InstrInfo.cpp
===================================================================
--- llvm/lib/Target/AMDGPU/R600InstrInfo.cpp
+++ llvm/lib/Target/AMDGPU/R600InstrInfo.cpp
@@ -554,7 +554,7 @@
 
   std::vector<std::vector<std::pair<int, unsigned> > > IGSrcs;
   ValidSwizzle.clear();
-  unsigned ConstCount;
+  unsigned ConstCount = 0;
   BankSwizzle TransBS = ALU_VEC_012_SCL_210;
   for (unsigned i = 0, e = IG.size(); i < e; ++i) {
     IGSrcs.push_back(ExtractSrcs(IG[i], PV, ConstCount));
Index: llvm/lib/Target/AMDGPU/AMDILCFGStructurizer.cpp
===================================================================
--- llvm/lib/Target/AMDGPU/AMDILCFGStructurizer.cpp
+++ llvm/lib/Target/AMDGPU/AMDILCFGStructurizer.cpp
@@ -825,7 +825,7 @@
     MachineBasicBlock *SccBeginMBB = nullptr;
     int SccNumBlk = 0;  // The number of active blocks, init to a
                         // maximum possible number.
-    int SccNumIter;     // Number of iteration in this SCC.
+    int SccNumIter = 0;     // Number of iteration in this SCC.
 
     while (It != E) {
       MBB = *It;
Index: llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
===================================================================
--- llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
+++ llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
@@ -1555,7 +1555,7 @@
     }
   }
   SDValue Cmp;
-  AArch64CC::CondCode AArch64CC;
+  AArch64CC::CondCode AArch64CC = AArch64CC::Invalid;
   if ((CC == ISD::SETEQ || CC == ISD::SETNE) && isa<ConstantSDNode>(RHS)) {
     const ConstantSDNode *RHSC = cast<ConstantSDNode>(RHS);
 
Index: llvm/lib/Target/AArch64/AArch64FastISel.cpp
===================================================================
--- llvm/lib/Target/AArch64/AArch64FastISel.cpp
+++ llvm/lib/Target/AArch64/AArch64FastISel.cpp
@@ -2498,7 +2498,7 @@
   if (!SI->getType()->isIntegerTy(1))
     return false;
 
-  const Value *Src1Val, *Src2Val;
+  const Value *Src1Val = nullptr, *Src2Val = nullptr;
   unsigned Opc = 0;
   bool NeedExtraOp = false;
   if (auto *CI = dyn_cast<ConstantInt>(SI->getTrueValue())) {
Index: llvm/lib/Target/AArch64/AArch64AdvSIMDScalarPass.cpp
===================================================================
--- llvm/lib/Target/AArch64/AArch64AdvSIMDScalarPass.cpp
+++ llvm/lib/Target/AArch64/AArch64AdvSIMDScalarPass.cpp
@@ -304,8 +304,8 @@
   // Check if we need a copy for the source registers.
   unsigned OrigSrc0 = MI->getOperand(1).getReg();
   unsigned OrigSrc1 = MI->getOperand(2).getReg();
-  unsigned Src0 = 0, SubReg0;
-  unsigned Src1 = 0, SubReg1;
+  unsigned Src0 = 0, SubReg0 = 0;
+  unsigned Src1 = 0, SubReg1 = 0;
   if (!MRI->def_empty(OrigSrc0)) {
     MachineRegisterInfo::def_instr_iterator Def =
         MRI->def_instr_begin(OrigSrc0);
Index: llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
===================================================================
--- llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
+++ llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
@@ -2929,7 +2929,7 @@
 bool AArch64AsmParser::parseSymbolicImmVal(const MCExpr *&ImmVal) {
   MCAsmParser &Parser = getParser();
   bool HasELFModifier = false;
-  AArch64MCExpr::VariantKind RefKind;
+  AArch64MCExpr::VariantKind RefKind = AArch64MCExpr::VK_INVALID;
 
   if (Parser.getTok().is(AsmToken::Colon)) {
     Parser.Lex(); // Eat ':"
Index: llvm/tools/clang/lib/StaticAnalyzer/Core/SymbolManager.cpp
===================================================================
--- llvm/tools/clang/lib/StaticAnalyzer/Core/SymbolManager.cpp
+++ llvm/tools/clang/lib/StaticAnalyzer/Core/SymbolManager.cpp
@@ -455,7 +455,7 @@
     return true;
   }
 
-  bool KnownLive;
+  bool KnownLive = false;
 
   switch (sym->getKind()) {
   case SymExpr::SymbolRegionValueKind:
@@ -489,6 +489,8 @@
   case SymExpr::SymbolCastKind:
     KnownLive = isLive(cast<SymbolCast>(sym)->getOperand());
     break;
+  default:
+    llvm_unreachable("Unexpected symbol kind!");
   }
 
   if (KnownLive)
Index: llvm/tools/clang/lib/StaticAnalyzer/Core/CheckerManager.cpp
===================================================================
--- llvm/tools/clang/lib/StaticAnalyzer/Core/CheckerManager.cpp
+++ llvm/tools/clang/lib/StaticAnalyzer/Core/CheckerManager.cpp
@@ -197,7 +197,7 @@
     void runChecker(CheckerManager::CheckObjCMessageFunc checkFn,
                     NodeBuilder &Bldr, ExplodedNode *Pred) {
 
-      bool IsPreVisit;
+      bool IsPreVisit = false;
 
       switch (Kind) {
         case ObjCMessageVisitKind::Pre:
@@ -207,6 +207,8 @@
         case ObjCMessageVisitKind::Post:
           IsPreVisit = false;
           break;
+        default:
+          llvm_unreachable("Unexpected ObjCMessageVisitKind!");
       }
 
       const ProgramPoint &L = Msg.getProgramPoint(IsPreVisit,checkFn.Checker);
Index: llvm/tools/clang/lib/StaticAnalyzer/Checkers/ObjCContainersASTChecker.cpp
===================================================================
--- llvm/tools/clang/lib/StaticAnalyzer/Checkers/ObjCContainersASTChecker.cpp
+++ llvm/tools/clang/lib/StaticAnalyzer/Checkers/ObjCContainersASTChecker.cpp
@@ -100,7 +100,7 @@
     return;
 
   const Expr *Arg = nullptr;
-  unsigned ArgNum;
+  unsigned ArgNum = 0;
 
   if (Name.equals("CFArrayCreate") || Name.equals("CFSetCreate")) {
     if (CE->getNumArgs() != 4)
Index: llvm/tools/clang/lib/Serialization/ASTReader.cpp
===================================================================
--- llvm/tools/clang/lib/Serialization/ASTReader.cpp
+++ llvm/tools/clang/lib/Serialization/ASTReader.cpp
@@ -963,6 +963,8 @@
   case DeclarationName::CXXUsingDirective:
     Data = 0;
     break;
+  default:
+    llvm_unreachable("Unexpected NameKind!");
   }
 
   return DeclarationNameKey(Kind, Data);
@@ -5044,12 +5046,13 @@
   size_t Count = M.NumPreprocessedEntities;
   size_t Half;
   pp_iterator First = pp_begin;
-  pp_iterator PPI;
+  pp_iterator PPI = nullptr;
 
   if (EndsAfter) {
     PPI = std::upper_bound(pp_begin, pp_end, Loc,
                            PPEntityComp<&PPEntityOffset::Begin>(*this, M));
   } else {
+    assert(Count > 0 && "PPI will not be set if this loop doesn't execute!");
     // Do a binary search manually instead of using std::lower_bound because
     // The end locations of entities may be unordered (when a macro expansion
     // is inside another macro argument), but for this case it is not important
@@ -5062,6 +5065,8 @@
                                               Loc)) {
         First = PPI;
         ++First;
+        assert(Count > Half && "size_t is unsigned, subtracing (Half + 1) from Count"
+                               "will cause unsigned integer wraparound!");
         Count = Count - Half - 1;
       } else
         Count = Half;
Index: llvm/tools/clang/lib/Serialization/ASTReaderStmt.cpp
===================================================================
--- llvm/tools/clang/lib/Serialization/ASTReaderStmt.cpp
+++ llvm/tools/clang/lib/Serialization/ASTReaderStmt.cpp
@@ -1757,7 +1757,7 @@
 }
 
 OMPClause *OMPClauseReader::readClause() {
-  OMPClause *C;
+  OMPClause *C = nullptr;
   switch (Record[Idx++]) {
   case OMPC_if:
     C = new (Context) OMPIfClause();
@@ -1885,6 +1885,8 @@
   case OMPC_defaultmap:
     C = new (Context) OMPDefaultmapClause();
     break;
+  default:
+    llvm_unreachable("Unexpected OpenMP clause!");
   }
   Visit(C);
   C->setLocStart(Reader->ReadSourceLocation(Record, Idx));
Index: llvm/tools/clang/lib/Sema/SemaStmtAttr.cpp
===================================================================
--- llvm/tools/clang/lib/Sema/SemaStmtAttr.cpp
+++ llvm/tools/clang/lib/Sema/SemaStmtAttr.cpp
@@ -165,6 +165,8 @@
     case LoopHintAttr::UnrollCount:
       Category = Unroll;
       break;
+    default:
+      llvm_unreachable("Unexpected OptionType!");
     };
 
     auto &CategoryState = HintAttrs[Category];
Index: llvm/tools/clang/lib/Sema/SemaLookup.cpp
===================================================================
--- llvm/tools/clang/lib/Sema/SemaLookup.cpp
+++ llvm/tools/clang/lib/Sema/SemaLookup.cpp
@@ -2819,7 +2819,7 @@
   CanQualType CanTy = Context.getCanonicalType(Context.getTagDeclType(RD));
   DeclarationName Name;
   Expr *Arg = nullptr;
-  unsigned NumArgs;
+  unsigned NumArgs = 0;
 
   QualType ArgType = CanTy;
   ExprValueKind VK = VK_LValue;
@@ -4954,7 +4954,7 @@
       << (int)MIK << Decl << Modules[0]->getFullModuleName();
   }
 
-  unsigned DiagID;
+  unsigned DiagID = 0;
   switch (MIK) {
   case MissingImportKind::Declaration:
     DiagID = diag::note_previous_declaration;
@@ -4965,6 +4965,8 @@
   case MissingImportKind::DefaultArgument:
     DiagID = diag::note_default_argument_declared_here;
     break;
+  default:
+    llvm_unreachable("Unexpected MissingImportKind!");
   }
   Diag(DeclLoc, DiagID);
 
Index: llvm/tools/clang/lib/Sema/SemaLambda.cpp
===================================================================
--- llvm/tools/clang/lib/Sema/SemaLambda.cpp
+++ llvm/tools/clang/lib/Sema/SemaLambda.cpp
@@ -980,7 +980,7 @@
       if (C->InitCaptureType.get().isNull()) 
         continue;
 
-      unsigned InitStyle;
+      unsigned InitStyle = 0;
       switch (C->InitKind) {
       case LambdaCaptureInitKind::NoInit:
         llvm_unreachable("not an init-capture?");
@@ -993,6 +993,8 @@
       case LambdaCaptureInitKind::ListInit:
         InitStyle = VarDecl::ListInit;
         break;
+      default:
+        llvm_unreachable("Unexpected LambdaCaptureInitKind!");
       }
       Var = createLambdaInitCaptureVarDecl(C->Loc, C->InitCaptureType.get(),
                                            C->Id, InitStyle, C->Init.get());
Index: llvm/tools/clang/lib/Sema/SemaInit.cpp
===================================================================
--- llvm/tools/clang/lib/Sema/SemaInit.cpp
+++ llvm/tools/clang/lib/Sema/SemaInit.cpp
@@ -3461,7 +3461,7 @@
   DeclContext::lookup_result Ctors = S.LookupConstructors(DestRecordDecl);
 
   OverloadingResult Result = OR_No_Viable_Function;
-  OverloadCandidateSet::iterator Best;
+  OverloadCandidateSet::iterator Best = nullptr;
   bool AsInitializerList = false;
 
   // C++11 [over.match.list]p1, per DR1467:
Index: llvm/tools/clang/lib/Sema/SemaDeclCXX.cpp
===================================================================
--- llvm/tools/clang/lib/Sema/SemaDeclCXX.cpp
+++ llvm/tools/clang/lib/Sema/SemaDeclCXX.cpp
@@ -6039,7 +6039,9 @@
   if (!SubRD)
     return true;
 
-  CXXMethodDecl *Selected;
+  // If we had SAL, we might be able to assume that findTrivialSpecialMember
+  // properly initializes the _Outptr_ parameter, but alas, we don't, we can't.
+  CXXMethodDecl *Selected = nullptr;
   if (findTrivialSpecialMember(S, SubRD, CSM, SubType.getCVRQualifiers(),
                                ConstRHS, Diagnose ? &Selected : nullptr))
     return true;
Index: llvm/tools/clang/include/clang/Sema/Lookup.h
===================================================================
--- llvm/tools/clang/include/clang/Sema/Lookup.h
+++ llvm/tools/clang/include/clang/Sema/Lookup.h
@@ -422,7 +422,7 @@
         Paths = nullptr;
       }
     } else {
-      AmbiguityKind SavedAK;
+      AmbiguityKind SavedAK = Ambiguity;
       bool WasAmbiguous = false;
       if (ResultKind == Ambiguous) {
         SavedAK = Ambiguity;
Index: llvm/tools/clang/lib/Sema/SemaDecl.cpp
===================================================================
--- llvm/tools/clang/lib/Sema/SemaDecl.cpp
+++ llvm/tools/clang/lib/Sema/SemaDecl.cpp
@@ -934,7 +934,7 @@
     
     if (!Result.empty()) {
       bool IsFunctionTemplate;
-      bool IsVarTemplate;
+      bool IsVarTemplate = false;
       TemplateName Template;
       if (Result.end() - Result.begin() > 1) {
         IsFunctionTemplate = true;
Index: llvm/tools/clang/lib/Sema/SemaDeclAttr.cpp
===================================================================
--- llvm/tools/clang/lib/Sema/SemaDeclAttr.cpp
+++ llvm/tools/clang/lib/Sema/SemaDeclAttr.cpp
@@ -6041,7 +6041,8 @@
                                       const ObjCPropertyDecl *ObjCProperty,
                                       bool ObjCPropertyAccess) {
   // Diagnostics for deprecated or unavailable.
-  unsigned diag, diag_message, diag_fwdclass_message;
+  // FIXME: What're reasonable defaults for these three?
+  unsigned diag = 0, diag_message = 0, diag_fwdclass_message = 0;
   unsigned diag_available_here = diag::note_availability_specified_here;
 
   // Matches 'diag::note_property_attribute' options.
@@ -6112,6 +6113,8 @@
           flagARCError();
           diag_available_here = diag::note_arc_field_with_ownership;
           break;
+        default:
+          llvm_unreachable("Unexpected UnavailableAttr!");
         }
       }
     }
@@ -6124,6 +6127,8 @@
     property_note_select = /* partial */ 2;
     available_here_select_kind = /* partial */ 3;
     break;
+  default:
+    llvm_unreachable("Unexpected AvailabilityDiagnostic!");
   }
 
   if (!Message.empty()) {
Index: llvm/tools/clang/lib/Parse/ParseObjc.cpp
===================================================================
--- llvm/tools/clang/lib/Parse/ParseObjc.cpp
+++ llvm/tools/clang/lib/Parse/ParseObjc.cpp
@@ -1172,7 +1172,7 @@
       ObjCDeclSpec::ObjCDeclQualifier Qual;
       NullabilityKind Nullability;
       switch (i) {
-      default: llvm_unreachable("Unknown decl qualifier");
+      default: llvm_unreachable("Unknown ObjCTypeQual!");
       case objc_in:     Qual = ObjCDeclSpec::DQ_In; break;
       case objc_out:    Qual = ObjCDeclSpec::DQ_Out; break;
       case objc_inout:  Qual = ObjCDeclSpec::DQ_Inout; break;
Index: llvm/tools/clang/lib/Lex/Preprocessor.cpp
===================================================================
--- llvm/tools/clang/lib/Lex/Preprocessor.cpp
+++ llvm/tools/clang/lib/Lex/Preprocessor.cpp
@@ -718,7 +718,7 @@
 
 void Preprocessor::Lex(Token &Result) {
   // We loop here until a lex function returns a token; this avoids recursion.
-  bool ReturnedToken;
+  bool ReturnedToken = false;
   do {
     switch (CurLexerKind) {
     case CLK_Lexer:
@@ -738,6 +738,8 @@
       LexAfterModuleImport(Result);
       ReturnedToken = true;
       break;
+    default:
+      llvm_unreachable("Unexpected CurLexerKind!");
     }
   } while (!ReturnedToken);
 
Index: llvm/tools/clang/lib/Driver/ToolChain.cpp
===================================================================
--- llvm/tools/clang/lib/Driver/ToolChain.cpp
+++ llvm/tools/clang/lib/Driver/ToolChain.cpp
@@ -546,7 +546,7 @@
 }
 
 ToolChain::CXXStdlibType ToolChain::GetCXXStdlibType(const ArgList &Args) const{
-  ToolChain::CXXStdlibType Type;
+  ToolChain::CXXStdlibType Type = ToolChain::CST_Libcxx;
   bool HasValidType = false;
 
   const Arg *A = Args.getLastArg(options::OPT_stdlib_EQ);
Index: llvm/tools/clang/lib/AST/MicrosoftMangle.cpp
===================================================================
--- llvm/tools/clang/lib/AST/MicrosoftMangle.cpp
+++ llvm/tools/clang/lib/AST/MicrosoftMangle.cpp
@@ -2492,8 +2492,10 @@
                                       raw_ostream &Out) {
   if (!Adjustment.Virtual.isEmpty()) {
     Out << '$';
-    char AccessSpec;
+    char AccessSpec = '\0';
     switch (MD->getAccess()) {
+    default:
+      llvm_unreachable("Unexpected AccessSpecifier!");
     case AS_none:
       llvm_unreachable("Unsupported access specifier");
     case AS_private:
Index: llvm/tools/clang/lib/AST/ExprConstant.cpp
===================================================================
--- llvm/tools/clang/lib/AST/ExprConstant.cpp
+++ llvm/tools/clang/lib/AST/ExprConstant.cpp
@@ -6773,12 +6773,13 @@
     APFloat Val(0.0);
     if (!EvaluateFloat(E->getArg(5), Val, Info))
       return false;
-    unsigned Arg;
+    unsigned Arg = ~0;
     switch (Val.getCategory()) {
     case APFloat::fcNaN: Arg = 0; break;
     case APFloat::fcInfinity: Arg = 1; break;
     case APFloat::fcNormal: Arg = Val.isDenormal() ? 3 : 2; break;
     case APFloat::fcZero: Arg = 4; break;
+    default: llvm_unreachable("Unexpected fltCategory!");
     }
     return Visit(E->getArg(Arg));
   }
Index: llvm/lib/Target/X86/X86FixupLEAs.cpp
===================================================================
--- llvm/lib/Target/X86/X86FixupLEAs.cpp
+++ llvm/lib/Target/X86/X86FixupLEAs.cpp
@@ -261,7 +261,7 @@
     return false;
 
   if (isLEASimpleIncOrDec(MI) && TII->isSafeToClobberEFLAGS(*MFI, I)) {
-    int NewOpcode;
+    int NewOpcode = X86::INSTRUCTION_LIST_END;
     bool isINC = MI->getOperand(4).getImm() == 1;
     switch (Opcode) {
     case X86::LEA16r:
@@ -274,6 +274,8 @@
     case X86::LEA64r:
       NewOpcode = isINC ? X86::INC64r : X86::DEC64r;
       break;
+    default:
+      llvm_unreachable("Unexpected X86 opcode!");
     }
 
     MachineInstr *NewMI =
Index: llvm/lib/Target/X86/X86WinEHState.cpp
===================================================================
--- llvm/lib/Target/X86/X86WinEHState.cpp
+++ llvm/lib/Target/X86/X86WinEHState.cpp
@@ -634,7 +634,7 @@
   // Fill in InitialStates and FinalStates for BasicBlocks with call-sites.
   for (BasicBlock *BB : RPOT) {
     int InitialState = OverdefinedState;
-    int FinalState;
+    int FinalState = 0;
     if (&F.getEntryBlock() == BB)
       InitialState = FinalState = ParentBaseState;
     for (Instruction &I : *BB) {
Index: llvm/lib/Target/X86/X86InstrInfo.cpp
===================================================================
--- llvm/lib/Target/X86/X86InstrInfo.cpp
+++ llvm/lib/Target/X86/X86InstrInfo.cpp
@@ -3565,7 +3565,7 @@
   }
 
   const uint16_t *FoundOpcodesGroup = nullptr;
-  size_t FormIndex;
+  size_t FormIndex = 0;
 
   // Look for the input opcode in the corresponding opcodes table.
   for (size_t GroupIndex = 0; GroupIndex < GroupsNum && !FoundOpcodesGroup;
Index: llvm/lib/Target/X86/X86ISelLowering.cpp
===================================================================
--- llvm/lib/Target/X86/X86ISelLowering.cpp
+++ llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -6516,7 +6516,7 @@
   } else if (VT == MVT::v8i32 || VT == MVT::v16i16) {
     // Try to match an AVX2 horizontal add/sub of signed integers.
     SDValue InVec2, InVec3;
-    unsigned X86Opcode;
+    unsigned X86Opcode = 0;
     bool CanFold = true;
 
     if (isHorizontalBinOp(BV, ISD::ADD, DAG, 0, Half, InVec0, InVec1) &&
@@ -9363,7 +9363,7 @@
     // a half by taking the sum of the half with three inputs and subtracting
     // the sum of the actual three inputs. The difference is the remaining
     // slot.
-    int ADWord, BDWord;
+    int ADWord = 0, BDWord = 0;
     int &TripleDWord = ThreeAInputs ? ADWord : BDWord;
     int &OneInputDWord = ThreeAInputs ? BDWord : ADWord;
     int TripleInputOffset = ThreeAInputs ? AOffset : BOffset;
@@ -15034,7 +15034,7 @@
   unsigned  Opc = 0;
   bool Unsigned = false;
   bool Swap = false;
-  unsigned SSECC;
+  unsigned SSECC = 0;
   switch (SetCCOpcode) {
   default: llvm_unreachable("Unexpected SETCC condition");
   case ISD::SETNE:  SSECC = 4; break;
Index: llvm/lib/Target/X86/X86FastISel.cpp
===================================================================
--- llvm/lib/Target/X86/X86FastISel.cpp
+++ llvm/lib/Target/X86/X86FastISel.cpp
@@ -2595,8 +2595,8 @@
                                 CI->getZExtValue());
     }
 
-    unsigned RHSReg;
-    bool RHSIsKill;
+    unsigned RHSReg = 0;
+    bool RHSIsKill = false;
     if (!ResultReg) {
       RHSReg = getRegForValue(RHS);
       if (RHSReg == 0)
Index: llvm/lib/Support/Windows/Path.inc
===================================================================
--- llvm/lib/Support/Windows/Path.inc
+++ llvm/lib/Support/Windows/Path.inc
@@ -491,11 +491,12 @@
   if (FileHandle == INVALID_HANDLE_VALUE)
     return make_error_code(errc::bad_file_descriptor);
 
-  DWORD flprotect;
+  DWORD flprotect = 0;
   switch (Mode) {
   case readonly:  flprotect = PAGE_READONLY; break;
   case readwrite: flprotect = PAGE_READWRITE; break;
   case priv:      flprotect = PAGE_WRITECOPY; break;
+  default: llvm_unreachable("Unexpected mapmode!");
   }
 
   HANDLE FileMappingHandle =
@@ -508,11 +509,12 @@
     return ec;
   }
 
-  DWORD dwDesiredAccess;
+  DWORD dwDesiredAccess = 0;
   switch (Mode) {
   case readonly:  dwDesiredAccess = FILE_MAP_READ; break;
   case readwrite: dwDesiredAccess = FILE_MAP_WRITE; break;
   case priv:      dwDesiredAccess = FILE_MAP_COPY; break;
+  default: llvm_unreachable("Unexpected mapmode!");
   }
   Mapping = ::MapViewOfFile(FileMappingHandle,
                             dwDesiredAccess,
Index: llvm/lib/Support/YAMLParser.cpp
===================================================================
--- llvm/lib/Support/YAMLParser.cpp
+++ llvm/lib/Support/YAMLParser.cpp
@@ -1508,7 +1508,7 @@
                                     unsigned BlockExitIndent,
                                     unsigned &LineBreaks, bool &IsDone) {
   unsigned MaxAllSpaceLineCharacters = 0;
-  StringRef::iterator LongestAllSpaceLine;
+  StringRef::iterator LongestAllSpaceLine = nullptr;
 
   while (true) {
     advanceWhile(&Scanner::skip_s_space);
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to