non-null-warning.c 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. // RUN: %clang_cc1 -fsyntax-only -Wnonnull -Wnullability %s -verify
  2. // rdar://19160762
  3. #if __has_feature(nullability)
  4. #else
  5. # error nullability feature should be defined
  6. #endif
  7. int * _Nullable foo(int * _Nonnull x);
  8. int *_Nonnull ret_nonnull();
  9. int *foo(int *x) {
  10. return 0;
  11. }
  12. int * _Nullable foo1(int * _Nonnull x); // expected-note {{previous declaration is here}}
  13. int *foo1(int * _Nullable x) { // expected-warning {{nullability specifier '_Nullable' conflicts with existing specifier '_Nonnull'}}
  14. return 0;
  15. }
  16. int * _Nullable foo2(int * _Nonnull x);
  17. int *foo2(int * _Nonnull x) {
  18. return 0;
  19. }
  20. int * _Nullable foo3(int * _Nullable x); // expected-note {{previous declaration is here}}
  21. int *foo3(int * _Nonnull x) { // expected-warning {{nullability specifier '_Nonnull' conflicts with existing specifier '_Nullable'}}
  22. return 0;
  23. }
  24. int * ret_nonnull() {
  25. return 0; // expected-warning {{null returned from function that requires a non-null return value}}
  26. }
  27. int main () {
  28. foo(0); // expected-warning {{null passed to a callee that requires a non-null argument}}
  29. }