diff --git a/clang/lib/Analysis/UninitializedValues.cpp b/clang/lib/Analysis/UninitializedValues.cpp index b2a68b6c39a7e..bda0856a0b8c8 100644 --- a/clang/lib/Analysis/UninitializedValues.cpp +++ b/clang/lib/Analysis/UninitializedValues.cpp @@ -452,8 +452,7 @@ void ClassifyRefs::VisitCallExpr(CallExpr *CE) { const Expr *Ex = stripCasts(DC->getParentASTContext(), *I); const auto *UO = dyn_cast(Ex); if (UO && UO->getOpcode() == UO_AddrOf) - Ex = UO->getSubExpr(); - classify(Ex, Ignore); + classify(UO->getSubExpr(), Ignore); } } } diff --git a/clang/test/SemaCXX/uninitialized.cpp b/clang/test/SemaCXX/uninitialized.cpp index c7b987e2172e6..3ae24f1faa4ec 100644 --- a/clang/test/SemaCXX/uninitialized.cpp +++ b/clang/test/SemaCXX/uninitialized.cpp @@ -168,6 +168,10 @@ void test_const_ptr() { const int *ptr2; foo(ptr); // expected-warning {{variable 'ptr' is uninitialized when used here}} foobar(&ptr2); + int *ptr3; // expected-note {{initialize the variable 'ptr3' to silence this warning}} + const int *ptr4; // expected-note {{initialize the variable 'ptr4' to silence this warning}} + bar(ptr3); // expected-warning {{variable 'ptr3' is uninitialized when used here}} + bar(ptr4); // expected-warning {{variable 'ptr4' is uninitialized when used here}} } }