From: Ted Kremenek Date: Thu, 27 Jan 2011 18:51:39 +0000 (+0000) Subject: Teach -Wuninitialized about indirect goto. Fixes PR 9071. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=96554fd1aa7350498de8911fb6f303a9262e6ec0;p=clang Teach -Wuninitialized about indirect goto. Fixes PR 9071. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@124394 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Analysis/UninitializedValuesV2.cpp b/lib/Analysis/UninitializedValuesV2.cpp index b9a7676e62..0867b5e7f3 100644 --- a/lib/Analysis/UninitializedValuesV2.cpp +++ b/lib/Analysis/UninitializedValuesV2.cpp @@ -158,8 +158,8 @@ static BinaryOperator *getLogicalOperatorInChain(const CFGBlock *block) { llvm::BitVector &CFGBlockValues::getBitVector(const CFGBlock *block, const CFGBlock *dstBlock) { unsigned idx = block->getBlockID(); - if (dstBlock && block->succ_size() == 2 && block->pred_size() == 2) { - assert(block->getTerminator()); + if (dstBlock && block->succ_size() == 2 && block->pred_size() == 2 && + block->getTerminator()) { if (getLogicalOperatorInChain(block)) { if (*block->succ_begin() == dstBlock) return lazyCreate(vals[idx].first); diff --git a/test/Sema/uninit-variables.c b/test/Sema/uninit-variables.c index 513298d9ac..f52c1b5fc2 100644 --- a/test/Sema/uninit-variables.c +++ b/test/Sema/uninit-variables.c @@ -229,3 +229,14 @@ void test35(int x) { ^{ y = (x == 0); }(); } +// Test handling of indirect goto. +void test36() +{ + void **pc; // expected-warning{{use of uninitialized variable 'pc'}} expected-note{{ add initialization to silence this warning}} + void *dummy[] = { &&L1, &&L2 }; + L1: + goto *pc; // expected-note{{variable 'pc' is possibly uninitialized when used here}} + L2: + goto *pc; +} +