brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.6 KiB · cc41603 Raw
99 lines · cpp
1// RUN: %check_clang_tidy %s abseil-duration-addition %t -- -- -I%S/Inputs2 3#include "absl/time/time.h"4 5void f() {6  absl::Time t;7  int i;8 9  i = absl::ToUnixHours(t) + 5;10  // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform addition in the duration domain [abseil-duration-addition]11  // CHECK-FIXES: i = absl::ToUnixHours(t + absl::Hours(5));12  i = absl::ToUnixMinutes(t) + 5;13  // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform addition in the duration domain [abseil-duration-addition]14  // CHECK-FIXES: i = absl::ToUnixMinutes(t + absl::Minutes(5));15  i = absl::ToUnixSeconds(t) + 5;16  // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform addition in the duration domain [abseil-duration-addition]17  // CHECK-FIXES: i = absl::ToUnixSeconds(t + absl::Seconds(5));18  i = absl::ToUnixMillis(t) + 5;19  // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform addition in the duration domain [abseil-duration-addition]20  // CHECK-FIXES: i = absl::ToUnixMillis(t + absl::Milliseconds(5));21  i = absl::ToUnixMicros(t) + 5;22  // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform addition in the duration domain [abseil-duration-addition]23  // CHECK-FIXES: i = absl::ToUnixMicros(t + absl::Microseconds(5));24  i = absl::ToUnixNanos(t) + 5;25  // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform addition in the duration domain [abseil-duration-addition]26  // CHECK-FIXES: i = absl::ToUnixNanos(t + absl::Nanoseconds(5));27 28  i = 3 + absl::ToUnixHours(t);29  // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform addition in the duration domain [abseil-duration-addition]30  // CHECK-FIXES: i = absl::ToUnixHours(absl::Hours(3) + t);31  i = 3 + absl::ToUnixMinutes(t);32  // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform addition in the duration domain [abseil-duration-addition]33  // CHECK-FIXES: i = absl::ToUnixMinutes(absl::Minutes(3) + t);34  i = 3 + absl::ToUnixSeconds(t);35  // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform addition in the duration domain [abseil-duration-addition]36  // CHECK-FIXES: i = absl::ToUnixSeconds(absl::Seconds(3) + t);37  i = 3 + absl::ToUnixMillis(t);38  // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform addition in the duration domain [abseil-duration-addition]39  // CHECK-FIXES: i = absl::ToUnixMillis(absl::Milliseconds(3) + t);40  i = 3 + absl::ToUnixMicros(t);41  // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform addition in the duration domain [abseil-duration-addition]42  // CHECK-FIXES: i = absl::ToUnixMicros(absl::Microseconds(3) + t);43  i = 3 + absl::ToUnixNanos(t);44  // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform addition in the duration domain [abseil-duration-addition]45  // CHECK-FIXES: i = absl::ToUnixNanos(absl::Nanoseconds(3) + t);46 47  // Undoing inverse conversions48  i = absl::ToUnixMicros(t) + absl::ToInt64Microseconds(absl::Seconds(1));49  // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform addition in the duration domain [abseil-duration-addition]50  // CHECK-FIXES: i = absl::ToUnixMicros(t + absl::Seconds(1));51 52  // Parens53  i = 3 + (absl::ToUnixHours(t));54  // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform addition in the duration domain [abseil-duration-addition]55  // CHECK-FIXES: i = absl::ToUnixHours(absl::Hours(3) + t);56 57  // Float folding58  i = absl::ToUnixSeconds(t) + 5.0;59  // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform addition in the duration domain [abseil-duration-addition]60  // CHECK-FIXES: i = absl::ToUnixSeconds(t + absl::Seconds(5));61 62  // We can rewrite the argument of the duration conversion63#define THIRTY absl::FromUnixSeconds(30)64  i = absl::ToUnixSeconds(THIRTY) + 1;65  // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform addition in the duration domain [abseil-duration-addition]66  // CHECK-FIXES: i = absl::ToUnixSeconds(THIRTY + absl::Seconds(1));67#undef THIRTY68 69  // Some other contexts70  if (absl::ToUnixSeconds(t) + 1.0 > 10) {}71  // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform addition in the duration domain [abseil-duration-addition]72  // CHECK-FIXES: if (absl::ToUnixSeconds(t + absl::Seconds(1)) > 10) {}73 74  // These should not match75  i = 5 + 6;76  i = absl::ToUnixSeconds(t) - 1.0;77  i = absl::ToUnixSeconds(t) * 1.0;78  i = absl::ToUnixSeconds(t) / 1.0;79  i += absl::ToInt64Microseconds(absl::Seconds(1));80 81#define PLUS_FIVE(z) absl::ToUnixSeconds(z) + 582  i = PLUS_FIVE(t);83#undef PLUS_FIVE84}85 86// Within a templated function87template<typename T>88void foo(absl::Time t) {89  int i = absl::ToUnixNanos(t) + T{};90  // CHECK-MESSAGES: [[@LINE-1]]:11: warning: perform addition in the duration domain [abseil-duration-addition]91  // CHECK-FIXES: int i = absl::ToUnixNanos(t + absl::Nanoseconds(T{}));92}93 94void g() {95  absl::Time t;96  foo<int>(t);97  foo<double>(t);98}99