Chromium Code Reviews| Index: tools/clang/value_cleanup/tests/list-value-append-original.cc |
| diff --git a/tools/clang/value_cleanup/tests/list-value-append-original.cc b/tools/clang/value_cleanup/tests/list-value-append-original.cc |
| index 988a288ac4020f02c8994d1da4be176339b46b9f..d2b39f98ee1dd228ee97dba2d460d33a654512ac 100644 |
| --- a/tools/clang/value_cleanup/tests/list-value-append-original.cc |
| +++ b/tools/clang/value_cleanup/tests/list-value-append-original.cc |
| @@ -8,10 +8,17 @@ |
| #define true true |
| +base::ListValue* ReturnsRawPtr() { |
| + return nullptr; |
| +} |
| + |
| std::unique_ptr<base::Value> ReturnsUniquePtr() { |
| return nullptr; |
| } |
| +// The joy of raw pointers. |
| +void DoesItTakeOwnership(base::Value*) {} |
| + |
| struct Thing { |
| std::unique_ptr<base::Value> ToValue() { return nullptr; } |
| }; |
| @@ -30,3 +37,72 @@ void F() { |
| std::unique_ptr<base::Value> unique_ptr_var; |
| list.Append(unique_ptr_var.release()); |
| } |
| + |
| +void G(base::Value* input) { |
| + base::ListValue list; |
| + |
| + base::ListValue* local = new base::ListValue(); |
| + // Not rewritten, since it often makes more sense to change the function |
| + // prototype. |
| + local->Append(input); |
| + // Should be rewritten: it will only be moved after it's no longer referenced. |
| + list.Append(local); |
| + |
| + // Not rewritten, since it would be used after it's moved. In theory, we could |
| + // automatically handle this too, but the risk of accidentally breaking |
| + // something is much higher. |
| + base::ListValue* clever_list = new base::ListValue; |
| + list.Append(clever_list); |
| + clever_list->AppendInteger(2); |
| + |
| + // Not rewritten, since it often makes more sense to change the function |
| + // prototype. |
| + base::Value* returned_value = ReturnsRawPtr(); |
| + list.Append(returned_value); |
| + |
| + // Should be rewritten. The reassignment should be transformed into |
| + // .reset(). |
| + base::ListValue* reused_list = new base::ListValue; |
| + reused_list->AppendInteger(1); |
| + list.Append(reused_list); |
| + reused_list = new base::ListValue; |
| + reused_list->AppendInteger(3); |
| + list.Append(reused_list); |
| + |
| + // This shouldn't be rewritten, since the reassignment is the return |
| + // value of a function. |
| + base::ListValue* reused_list_2 = new base::ListValue; |
| + reused_list_2->AppendInteger(4); |
| + list.Append(reused_list_2); |
| + reused_list_2 = ReturnsRawPtr(); |
| + reused_list_2->AppendInteger(5); |
| + list.Append(reused_list_2); |
| + |
| + // auto should be expanded to a std::unique_ptr containing the deduced type. |
| + auto* auto_list = new base::ListValue; |
| + auto_list->AppendInteger(6); |
| + list.Append(auto_list); |
| + |
| + auto auto_list_2 = new base::ListValue; |
| + auto_list_2->AppendInteger(7); |
| + list.Append(auto_list_2); |
| + |
| + // Shouldn't be rewritten: a raw pointer is passed to a function which may or |
| + // may not take ownership. |
| + base::ListValue* maybe_owned_list = new base::ListValue; |
| + DoesItTakeOwnership(maybe_owned_list); |
| + list.Append(maybe_owned_list); |
| + |
| + // Should be rewritten, even though it doesn't have an initializer. |
| + base::ListValue* list_with_no_initializer; |
| + list_with_no_initializer = new base::ListValue; |
| + list.Append(list_with_no_initializer); |
| + |
| + // Make sure C++98 style initialization is correctly handled. |
| + base::ListValue* cxx98_list(new base::ListValue); |
| + list.Append(cxx98_list); |
| + |
| + // And C++11 style initialization as well. |
| + base::ListValue* cxx11_list(new base::ListValue); |
|
danakj
2016/06/10 21:59:55
This is the same as cxx98?
dcheng
2016/06/10 22:39:43
Done.
|
| + list.Append(cxx11_list); |
| +} |