blob: 685cbdd61731407d0887e911cbdfa0c33c715467 [file] [edit]
// RUN: %clang_cc1 -E -DDATETIME_DEFAULT -init-datetime-macros=default %s | FileCheck %s --check-prefix CHECK-INIT-DATETIME-DEFAULT
// RUN: %clang_cc1 -E -DDATETIME_DEFAULT %s | FileCheck %s --check-prefix CHECK-INIT-DATETIME-DEFAULT
// CHECK-INIT-DATETIME-DEFAULT: date: "{{(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)}} {{.*}}"
// CHECK-INIT-DATETIME-DEFAULT: time: "{{[0-9][0-9]:[0-9][0-9]:[0-9][0-9]}}"
// CHECK-INIT-DATETIME-DEFAULT: timestamp: "{{.*}} {{[0-9][0-9]:[0-9][0-9]:[0-9][0-9]}} {{.*}}"
// CHECK-INIT-DATETIME-DEFAULT-NOT: date:
// CHECK-INIT-DATETIME-DEFAULT-NOT: time:
// CHECK-INIT-DATETIME-DEFAULT-NOT: timestamp:
// RUN: %clang_cc1 -E -DDATETIME_LITERALONE -init-datetime-macros=literalone %s | FileCheck %s --check-prefix CHECK-INIT-DATETIME-LITERALONE
// CHECK-INIT-DATETIME-LITERALONE: date: "1"
// CHECK-INIT-DATETIME-LITERALONE: time: "1"
// CHECK-INIT-DATETIME-LITERALONE: timestamp: "1"
// CHECK-INIT-DATETIME-LITERALONE-NOT: date:
// CHECK-INIT-DATETIME-LITERALONE-NOT: time:
// CHECK-INIT-DATETIME-LITERALONE-NOT: timestamp:
// RUN: %clang_cc1 -E -DDATETIME_CUSTOM -init-datetime-macros=literalone -Wno-builtin-macro-redefined -D__DATE__="\"d3\"" -D__TIME__="\"t4\"" -D__TIMESTAMP__="\"ts5\"" %s | FileCheck %s --check-prefix CHECK-INIT-DATETIME-CUSTOM
// RUN: %clang_cc1 -E -DDATETIME_CUSTOM -init-datetime-macros=undefined -D__DATE__="\"d3\"" -D__TIME__="\"t4\"" -D__TIMESTAMP__="\"ts5\"" %s | FileCheck %s --check-prefix CHECK-INIT-DATETIME-CUSTOM
// CHECK-INIT-DATETIME-CUSTOM: date: "d3"
// CHECK-INIT-DATETIME-CUSTOM: time: "t4"
// CHECK-INIT-DATETIME-CUSTOM: timestamp: "ts5"
// RUN: %clang_cc1 -DDATETIME_UNDEFINED -verify -Wall -init-datetime-macros=undefined %s
// clang-cl deterministic options checks:
// /d1nodatetime - undefines __DATE__, __TIME__ and __TIMESTAMP__
// /Brepro - sets __DATE__, __TIME__ and __TIMESTAMP__ to "1"
// RUN: %clang_cl -Xclang -verify /d1nodatetime /DDATETIME_UNDEFINED /Zs -- %s
// RUN: %clang_cl -E /Brepro /DDATETIME_LITERALONE -- %s | FileCheck %s --check-prefix CHECK-INIT-DATETIME-LITERALONE
#if defined(DATETIME_LITERALONE) || defined(DATETIME_DEFAULT) || defined(DATETIME_CUSTOM)
date: __DATE__
time: __TIME__
timestamp: __TIMESTAMP__
#endif
// Check we didn't break literal processing inside of PP macro expansion.
#if defined(DATETIME_DEFAULT)
#define CUST_DATE __DATE__
#define CUST_TIME __TIME__
#define CUST_TIMESTAMP __TIMESTAMP__
const char *s0 = "CD: " CUST_DATE " CT: " CUST_TIME " CTS: " CUST_TIMESTAMP
// CHECK-INIT-DATETIME-DEFAULT: const char *s0 = "CD: " "{{(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)}} {{.*}}" " CT: " "{{[0-9][0-9]:[0-9][0-9]:[0-9][0-9]}}" " CTS: " "{{.*}} {{[0-9][0-9]:[0-9][0-9]:[0-9][0-9]}} {{.*}}"
#endif
#if defined(DATETIME_LITERALONE)
#define CUST_DATE __DATE__
#define CUST_TIME __TIME__
#define CUST_TIMESTAMP __TIMESTAMP__
const char *s0 = "CD: " CUST_DATE " CT: " CUST_TIME " CTS: " CUST_TIMESTAMP
// CHECK-INIT-DATETIME-LITERALONE: const char *s0 = "CD: " "1" " CT: " "1" " CTS: " "1"
#endif
#ifdef DATETIME_UNDEFINED
const char *s1 = __DATE__; // expected-error{{use of undeclared identifier '__DATE__'}}
const char *s2 = __TIME__; // expected-error{{use of undeclared identifier '__TIME__'}}
const char *s3 = __TIMESTAMP__; // expected-error{{use of undeclared identifier '__TIMESTAMP__'}}
#endif