Reland "Give NullabilityKind a printing operator<<"
This reverts commit 5326c9e480d70e16c2504cb5143524aff3ee2605. The problem that caused the revert was downstream (missing dep in user of clang).
This commit is contained in:
parent
77bc5cc658
commit
14f0776550
@ -19,6 +19,9 @@
|
||||
#include "llvm/Support/DataTypes.h"
|
||||
#include "llvm/Support/ErrorHandling.h"
|
||||
|
||||
namespace llvm {
|
||||
class raw_ostream;
|
||||
} // namespace llvm
|
||||
namespace clang {
|
||||
|
||||
/// Define the meaning of possible values of the kind in ExplicitSpecifier.
|
||||
@ -333,6 +336,8 @@ namespace clang {
|
||||
// parameters are assumed to only get null on error.
|
||||
NullableResult,
|
||||
};
|
||||
/// Prints human-readable debug representation.
|
||||
llvm::raw_ostream &operator<<(llvm::raw_ostream&, NullabilityKind);
|
||||
|
||||
/// Return true if \p L has a weaker nullability annotation than \p R. The
|
||||
/// ordering is: Unspecified < Nullable < NonNull.
|
||||
|
@ -43,28 +43,12 @@ using namespace clang;
|
||||
|
||||
const StreamingDiagnostic &clang::operator<<(const StreamingDiagnostic &DB,
|
||||
DiagNullabilityKind nullability) {
|
||||
StringRef string;
|
||||
switch (nullability.first) {
|
||||
case NullabilityKind::NonNull:
|
||||
string = nullability.second ? "'nonnull'" : "'_Nonnull'";
|
||||
break;
|
||||
|
||||
case NullabilityKind::Nullable:
|
||||
string = nullability.second ? "'nullable'" : "'_Nullable'";
|
||||
break;
|
||||
|
||||
case NullabilityKind::Unspecified:
|
||||
string = nullability.second ? "'null_unspecified'" : "'_Null_unspecified'";
|
||||
break;
|
||||
|
||||
case NullabilityKind::NullableResult:
|
||||
assert(!nullability.second &&
|
||||
"_Nullable_result isn't supported as context-sensitive keyword");
|
||||
string = "_Nullable_result";
|
||||
break;
|
||||
}
|
||||
|
||||
DB.AddString(string);
|
||||
DB.AddString(
|
||||
("'" +
|
||||
getNullabilitySpelling(nullability.first,
|
||||
/*isContextSensitive=*/nullability.second) +
|
||||
"'")
|
||||
.str());
|
||||
return DB;
|
||||
}
|
||||
|
||||
|
@ -849,6 +849,20 @@ StringRef clang::getNullabilitySpelling(NullabilityKind kind,
|
||||
llvm_unreachable("Unknown nullability kind.");
|
||||
}
|
||||
|
||||
llvm::raw_ostream &operator<<(llvm::raw_ostream &OS, NullabilityKind NK) {
|
||||
switch (NK) {
|
||||
case NullabilityKind::NonNull:
|
||||
return OS << "NonNull";
|
||||
case NullabilityKind::Nullable:
|
||||
return OS << "Nullable";
|
||||
case NullabilityKind::NullableResult:
|
||||
return OS << "NullableResult";
|
||||
case NullabilityKind::Unspecified:
|
||||
return OS << "Unspecified";
|
||||
}
|
||||
llvm_unreachable("Unknown nullability kind.");
|
||||
}
|
||||
|
||||
diag::kind
|
||||
IdentifierTable::getFutureCompatDiagKind(const IdentifierInfo &II,
|
||||
const LangOptions &LangOpts) {
|
||||
|
@ -25,9 +25,9 @@ void test_conversion(void) {
|
||||
}
|
||||
|
||||
void test_dup(void) {
|
||||
id _Nullable_result _Nullable_result a; // expected-warning {{duplicate nullability specifier _Nullable_result}}
|
||||
id _Nullable _Nullable_result b; // expected-error{{nullability specifier _Nullable_result conflicts with existing specifier '_Nullable'}}
|
||||
id _Nullable_result _Nonnull c; // expected-error{{nullability specifier '_Nonnull' conflicts with existing specifier _Nullable_result}}
|
||||
id _Nullable_result _Nullable_result a; // expected-warning {{duplicate nullability specifier '_Nullable_result'}}
|
||||
id _Nullable _Nullable_result b; // expected-error{{nullability specifier '_Nullable_result' conflicts with existing specifier '_Nullable'}}
|
||||
id _Nullable_result _Nonnull c; // expected-error{{nullability specifier '_Nonnull' conflicts with existing specifier '_Nullable_result'}}
|
||||
}
|
||||
|
||||
@interface NoContextSensitive
|
||||
|
Loading…
x
Reference in New Issue
Block a user