brintos

brintos / llvm-project-archived public Read only

0
0
Text · 5.5 KiB · dde0681 Raw
118 lines · cpp
1// RUN: %check_clang_tidy -std=c++11-or-later %s abseil-time-subtraction %t -- -- -I %S/Inputs2 3#include "absl/time/time.h"4 5void g(absl::Duration d);6 7void f() {8  absl::Time t;9  int x, y;10  absl::Duration d;11 12  d = absl::Hours(absl::ToUnixHours(t) - x);13  // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform subtraction in the time domain [abseil-time-subtraction]14  // CHECK-FIXES: d = (t - absl::FromUnixHours(x));15  d = absl::Minutes(absl::ToUnixMinutes(t) - x);16  // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform subtraction in the time domain [abseil-time-subtraction]17  // CHECK-FIXES: d = (t - absl::FromUnixMinutes(x));18  d = absl::Seconds(absl::ToUnixSeconds(t) - x);19  // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform subtraction in the time domain [abseil-time-subtraction]20  // CHECK-FIXES: d = (t - absl::FromUnixSeconds(x));21  d = absl::Milliseconds(absl::ToUnixMillis(t) - x);22  // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform subtraction in the time domain [abseil-time-subtraction]23  // CHECK-FIXES: d = (t - absl::FromUnixMillis(x));24  d = absl::Microseconds(absl::ToUnixMicros(t) - x);25  // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform subtraction in the time domain [abseil-time-subtraction]26  // CHECK-FIXES: d = (t - absl::FromUnixMicros(x));27  d = absl::Nanoseconds(absl::ToUnixNanos(t) - x);28  // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform subtraction in the time domain [abseil-time-subtraction]29  // CHECK-FIXES: d = (t - absl::FromUnixNanos(x));30 31  y = x - absl::ToUnixHours(t);32  // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform subtraction in the time domain [abseil-time-subtraction]33  // CHECK-FIXES: y = absl::ToInt64Hours(absl::FromUnixHours(x) - t);34  y = x - absl::ToUnixMinutes(t);35  // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform subtraction in the time domain [abseil-time-subtraction]36  // CHECK-FIXES: y = absl::ToInt64Minutes(absl::FromUnixMinutes(x) - t);37  y = x - absl::ToUnixSeconds(t);38  // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform subtraction in the time domain [abseil-time-subtraction]39  // CHECK-FIXES: y = absl::ToInt64Seconds(absl::FromUnixSeconds(x) - t);40  y = x - absl::ToUnixMillis(t);41  // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform subtraction in the time domain [abseil-time-subtraction]42  // CHECK-FIXES: y = absl::ToInt64Milliseconds(absl::FromUnixMillis(x) - t);43  y = x - absl::ToUnixMicros(t);44  // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform subtraction in the time domain [abseil-time-subtraction]45  // CHECK-FIXES: y = absl::ToInt64Microseconds(absl::FromUnixMicros(x) - t);46  y = x - absl::ToUnixNanos(t);47  // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform subtraction in the time domain [abseil-time-subtraction]48  // CHECK-FIXES: y = absl::ToInt64Nanoseconds(absl::FromUnixNanos(x) - t);49 50  // Check parenthesis placement51  d = 5 * absl::Seconds(absl::ToUnixSeconds(t) - x);52  // CHECK-MESSAGES: [[@LINE-1]]:11: warning: perform subtraction in the time domain [abseil-time-subtraction]53  // CHECK-FIXES: d = 5 * (t - absl::FromUnixSeconds(x));54  d = absl::Seconds(absl::ToUnixSeconds(t) - x) / 5;55  // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform subtraction in the time domain [abseil-time-subtraction]56  // CHECK-FIXES: d = (t - absl::FromUnixSeconds(x)) / 5;57 58  // No extra parens around arguments59  g(absl::Seconds(absl::ToUnixSeconds(t) - x));60  // CHECK-MESSAGES: [[@LINE-1]]:5: warning: perform subtraction in the time domain [abseil-time-subtraction]61  // CHECK-FIXES: g(t - absl::FromUnixSeconds(x));62  g(absl::Seconds(x - absl::ToUnixSeconds(t)));63  // CHECK-MESSAGES: [[@LINE-1]]:5: warning: perform subtraction in the time domain [abseil-time-subtraction]64  // CHECK-FIXES: g(absl::FromUnixSeconds(x) - t);65 66  // More complex subexpressions67  d = absl::Hours(absl::ToUnixHours(t) - 5 * x);68  // CHECK-MESSAGES: [[@LINE-1]]:7: warning: perform subtraction in the time domain [abseil-time-subtraction]69  // CHECK-FIXES: d = (t - absl::FromUnixHours(5 * x));70 71  // These should not trigger; they are likely bugs72  d = absl::Milliseconds(absl::ToUnixSeconds(t) - x);73  d = absl::Seconds(absl::ToUnixMicros(t) - x);74 75  // Various macro scenarios76#define SUB(z, t1) z - absl::ToUnixSeconds(t1)77  y = SUB(x, t);78#undef SUB79 80#define MILLIS(t1) absl::ToUnixMillis(t1)81  y = x - MILLIS(t);82#undef MILLIS83 84#define HOURS(z) absl::Hours(z)85  d = HOURS(absl::ToUnixHours(t) - x);86#undef HOURS87 88  // This should match the expression inside the macro invocation.89#define SECONDS(z) absl::Seconds(z)90  d = SECONDS(x - absl::ToUnixSeconds(t));91  // CHECK-MESSAGES: [[@LINE-1]]:15: warning: perform subtraction in the time domain [abseil-time-subtraction]92  // CHECK-FIXES: d = SECONDS(absl::ToInt64Seconds(absl::FromUnixSeconds(x) - t));93#undef SECONDS94}95 96template<typename T>97void func(absl::Time t, T x) {98  absl::Duration d = absl::Seconds(absl::ToUnixSeconds(t) - x);99  // CHECK-MESSAGES: [[@LINE-1]]:22: warning: perform subtraction in the time domain [abseil-time-subtraction]100  // CHECK-FIXES: absl::Duration d = t - absl::FromUnixSeconds(x);101}102 103void g() {104  func(absl::Now(), 5);105}106 107absl::Duration parens_in_return() {108  absl::Time t;109  int x;110 111  return absl::Seconds(absl::ToUnixSeconds(t) - x);112  // CHECK-MESSAGES: [[@LINE-1]]:10: warning: perform subtraction in the time domain [abseil-time-subtraction]113  // CHECK-FIXES: return t - absl::FromUnixSeconds(x);114  return absl::Seconds(x - absl::ToUnixSeconds(t));115  // CHECK-MESSAGES: [[@LINE-1]]:10: warning: perform subtraction in the time domain [abseil-time-subtraction]116  // CHECK-FIXES: return absl::FromUnixSeconds(x) - t;117}118