From: Ted Kremenek Date: Tue, 19 Jul 2011 20:33:49 +0000 (+0000) Subject: Fix assertion failure in UninitializedValues.cpp where an lvalue to rvalue conversion... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d626ec404fd0f27244363200f1a85a7db219cd11;p=clang Fix assertion failure in UninitializedValues.cpp where an lvalue to rvalue conversion is wrapped in a parenthesis. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@135519 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Analysis/UninitializedValues.cpp b/lib/Analysis/UninitializedValues.cpp index 8dbade1d5f..a64c1db530 100644 --- a/lib/Analysis/UninitializedValues.cpp +++ b/lib/Analysis/UninitializedValues.cpp @@ -462,7 +462,8 @@ void TransferFunctions::VisitDeclStmt(DeclStmt *ds) { // appropriately, but we need to continue to analyze subsequent uses // of the variable. if (init == lastLoad) { - DeclRefExpr *DR = cast(lastLoad->getSubExpr()); + DeclRefExpr *DR = + cast(lastLoad->getSubExpr()->IgnoreParens()); vals[vd] = (DR->getDecl() == vd) ? Uninitialized : Initialized; lastLoad = 0; if (lastDR == DR) @@ -562,7 +563,7 @@ void TransferFunctions::ProcessUses(Stmt *s) { // If we reach here, we have seen a load of an uninitialized value // and it hasn't been casted to void or otherwise handled. In this // situation, report the incident. - DeclRefExpr *DR = cast(lastLoad->getSubExpr()); + DeclRefExpr *DR = cast(lastLoad->getSubExpr()->IgnoreParens()); VarDecl *VD = cast(DR->getDecl()); reportUninit(DR, VD, isAlwaysUninit(vals[VD])); lastLoad = 0; diff --git a/test/Sema/uninit-variables.c b/test/Sema/uninit-variables.c index 0caab3df18..6c3c7c71c8 100644 --- a/test/Sema/uninit-variables.c +++ b/test/Sema/uninit-variables.c @@ -353,6 +353,11 @@ int test52(int a, int b) { return x; // expected-warning {{variable 'x' may be uninitialized when used here}} } +void test53() { + int x; + int y = (x); +} + // This CFG caused the uninitialized values warning to inf-loop. extern int PR10379_g(); void PR10379_f(int *len) {