From: Ted Kremenek Date: Wed, 20 Jul 2011 19:49:47 +0000 (+0000) Subject: Fix -Wuninitialized regression involving functions invalidating parameters passed... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=dd4286b5b7b02b8bb962e4b996b8f36cb7935d4f;p=clang Fix -Wuninitialized regression involving functions invalidating parameters passed by reference. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@135610 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Analysis/UninitializedValues.cpp b/lib/Analysis/UninitializedValues.cpp index b84b4309d9..67f0f6740e 100644 --- a/lib/Analysis/UninitializedValues.cpp +++ b/lib/Analysis/UninitializedValues.cpp @@ -441,8 +441,10 @@ void TransferFunctions::VisitDeclRefExpr(DeclRefExpr *dr) { // Record the last DeclRefExpr seen. This is an lvalue computation. // We use this value to later detect if a variable "escapes" the analysis. if (const VarDecl *vd = dyn_cast(dr->getDecl())) - if (isTrackedVar(vd)) + if (isTrackedVar(vd)) { + ProcessUses(); lastDR = dr; + } } void TransferFunctions::VisitDeclStmt(DeclStmt *ds) { diff --git a/test/SemaCXX/uninit-variables.cpp b/test/SemaCXX/uninit-variables.cpp index a0180e3d3a..a850a2f92f 100644 --- a/test/SemaCXX/uninit-variables.cpp +++ b/test/SemaCXX/uninit-variables.cpp @@ -66,6 +66,16 @@ test4_A test4() { return a; // expected-warning{{variable 'a' is uninitialized when used here}} } +// Test variables getting invalidated by function calls with reference arguments +// *AND* there are multiple invalidated arguments. +void test5_aux(int &, int &); + +int test5() { + int x, y; + test5_aux(x, y); + return x + y; // no-warning +} + // This test previously crashed Sema. class Rdar9188004A { public: