brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.2 KiB · b18734b Raw
198 lines · plain
1// Temporarily disabling the test, it failes the "system is over-constrained" (part of expensive checks)2// assertion in *non* optimized builds.3// REQUIRES: rdar449921704// RUN: %clang_analyze_cc1 -fblocks -analyzer-checker=core,nullability,apiModeling,debug.ExprInspection -verify %s5 6#include "Inputs/system-header-simulator-for-nullability.h"7 8void clang_analyzer_warnIfReached(void);9 10NSString* _Nonnull trust_nonnull_framework_annotation(void) {11  NSString* out = [NSString generateString];12  if (out) {}13  return out; // no-warning14}15 16NSString* _Nonnull trust_instancemsg_annotation(NSString* _Nonnull param) {17  NSString* out = [param stringByAppendingString:@"string"];18  if (out) {}19  return out; // no-warning20}21 22NSString* _Nonnull distrust_instancemsg_noannotation(NSString* param) {23  if (param) {}24  NSString* out = [param stringByAppendingString:@"string"];25  if (out) {}26  return out; // expected-warning{{}}27}28 29NSString* _Nonnull trust_analyzer_knowledge(NSString* param) {30  if (!param)31    return @"";32  NSString* out = [param stringByAppendingString:@"string"];33  if (out) {}34  return out; // no-warning35}36 37NSString* _Nonnull trust_assume_nonnull_macro(void) {38  NSString* out = [NSString generateImplicitlyNonnullString];39  if (out) {}40  return out; // no-warning41}42 43NSString* _Nonnull distrust_without_annotation(void) {44  NSString* out = [NSString generatePossiblyNullString];45  if (out) {}46  return out; // expected-warning{{}}47}48 49NSString* _Nonnull nonnull_please_trust_me(void);50 51NSString* _Nonnull distrust_local_nonnull_annotation(void) {52  NSString* out = nonnull_please_trust_me();53  if (out) {}54  return out; // expected-warning{{}}55}56 57NSString* _Nonnull trust_c_function(void) {58  NSString* out = getString();59  if (out) {};60  return out; // no-warning61}62 63NSString* _Nonnull distrust_unannoted_function(void) {64  NSString* out = getPossiblyNullString();65  if (out) {};66  return out; // expected-warning{{}}67}68 69NSString * _Nonnull distrustProtocol(id<MyProtocol> o) {70  NSString* out = [o getString];71  if (out) {};72  return out; // expected-warning{{}}73}74 75// If the return value is non-nil, the index is non-nil.76NSString *_Nonnull retImpliesIndex(NSString *s,77                                   NSDictionary *dic) {78  id obj = dic[s];79  if (s) {}80  if (obj)81    return s; // no-warning82  return @"foo";83}84 85NSString *_Nonnull retImpliesIndexOtherMethod(NSString *s,86                                   NSDictionary *dic) {87  id obj = [dic objectForKey:s];88  if (s) {}89  if (obj)90    return s; // no-warning91  return @"foo";92}93 94NSString *_Nonnull retImpliesIndexOnRHS(NSString *s,95                                        NSDictionary *dic) {96  id obj = dic[s];97  if (s) {}98  if (nil != obj)99    return s; // no-warning100  return @"foo";101}102 103NSString *_Nonnull retImpliesIndexReverseCheck(NSString *s,104                                               NSDictionary *dic) {105  id obj = dic[s];106  if (s) {}107  if (!obj)108    return @"foo";109  return s; // no-warning110}111 112NSString *_Nonnull retImpliesIndexReverseCheckOnRHS(NSString *s,113                                                    NSDictionary *dic) {114  id obj = dic[s];115  if (s) {}116  if (nil == obj)117    return @"foo";118  return s; // no-warning119}120 121NSString *_Nonnull retImpliesIndexWrongBranch(NSString *s,122                                              NSDictionary *dic) {123  id obj = dic[s];124  if (s) {}125  if (!obj)126    return s; // expected-warning{{}}127  return @"foo";128}129 130NSString *_Nonnull retImpliesIndexWrongBranchOnRHS(NSString *s,131                                                   NSDictionary *dic) {132  id obj = dic[s];133  if (s) {}134  if (nil == obj)135    return s; // expected-warning{{}}136  return @"foo";137}138 139// The return value could still be nil for a non-nil index.140NSDictionary *_Nonnull indexDoesNotImplyRet(NSString *s,141                                            NSDictionary *dic) {142  id obj = dic[s];143  if (obj) {}144  if (s)145    return obj; // expected-warning{{}}146  return [[NSDictionary alloc] init];147}148 149// The return value could still be nil for a non-nil index.150NSDictionary *_Nonnull notIndexImpliesNotRet(NSString *s,151                                             NSDictionary *dic) {152  id obj = dic[s];153  if (!s) {154    if (obj != nil) {155      clang_analyzer_warnIfReached(); // no-warning156    }157  }158  return [[NSDictionary alloc] init];159}160 161NSString *_Nonnull checkAssumeOnMutableDictionary(NSMutableDictionary *d,162                                                  NSString *k,163                                                  NSString *val) {164  d[k] = val;165  if (k) {}166  return k; // no-warning167}168 169NSString *_Nonnull checkAssumeOnMutableDictionaryOtherMethod(NSMutableDictionary *d,170                                                             NSString *k,171                                                             NSString *val) {172  [d setObject:val forKey:k];173  if (k) {}174  return k; // no-warning175}176 177// Check that we don't crash when the added assumption is enough178// to make the state unfeasible.179@class DummyClass;180@interface DictionarySubclass : NSDictionary {181  DummyClass *g;182  DictionarySubclass *d;183}184@end185@implementation DictionarySubclass186- (id) objectForKey:(id)e {187  if (e) {}188  return d;189}190- (void) coder {191  for (id e in g) {192    id f = [self objectForKey:e];193    if (f)194      (void)e;195  }196}197@end198