diff options
author | Ted Kremenek <kremenek@apple.com> | 2012-11-12 23:03:24 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2012-11-12 23:03:24 +0000 |
commit | 1e0e6a34c3c4deb2df69297af8bcfd90ca1e59c7 (patch) | |
tree | 3ad3c700d52665e5b4678d866b8eb8517635dd1a | |
parent | 0f8d56a41140b434fe9f666f15990daefc8e7e9c (diff) | |
download | clang-1e0e6a34c3c4deb2df69297af8bcfd90ca1e59c7.tar.gz clang-1e0e6a34c3c4deb2df69297af8bcfd90ca1e59c7.tar.bz2 clang-1e0e6a34c3c4deb2df69297af8bcfd90ca1e59c7.tar.xz |
Merge in analyzer fix r167762, which was a recent regression.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_32@167776 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp | 2 | ||||
-rw-r--r-- | test/Analysis/retain-release-inline.m | 16 |
2 files changed, 18 insertions, 0 deletions
diff --git a/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp b/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp index 3c1c412af5..5b88a45495 100644 --- a/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp +++ b/lib/StaticAnalyzer/Core/ExprEngineCallAndReturn.cpp @@ -137,6 +137,8 @@ static SVal adjustReturnValue(SVal V, QualType ExpectedTy, QualType ActualTy, return V; // If the types already match, don't do any unnecessary work. + ExpectedTy = ExpectedTy.getCanonicalType(); + ActualTy = ActualTy.getCanonicalType(); if (ExpectedTy == ActualTy) return V; diff --git a/test/Analysis/retain-release-inline.m b/test/Analysis/retain-release-inline.m index a06b3531fe..6ff9e9a552 100644 --- a/test/Analysis/retain-release-inline.m +++ b/test/Analysis/retain-release-inline.m @@ -343,5 +343,21 @@ void test_test_return_inline_2(char *bytes) { CFRelease(str); } +extern CFStringRef getString(void); +CFStringRef testCovariantReturnType(void) __attribute__((cf_returns_retained)); +void usetestCovariantReturnType() { + CFStringRef S = ((void*)0); + S = testCovariantReturnType(); + if (S) + CFRelease(S); +} +CFStringRef testCovariantReturnType() { + CFStringRef Str = ((void*)0); + Str = getString(); + if (Str) { + CFRetain(Str); + } + return Str; +} |