diff options
Diffstat (limited to 'test/Frontend')
-rw-r--r-- | test/Frontend/Inputs/optimization-remark-with-hotness-sample.proftext | 10 | ||||
-rw-r--r-- | test/Frontend/Inputs/optimization-remark-with-hotness.proftext | 4 | ||||
-rw-r--r-- | test/Frontend/diagnostics-order.c | 12 | ||||
-rw-r--r-- | test/Frontend/float16.cpp | 326 | ||||
-rw-r--r-- | test/Frontend/gnu-mcount.c | 72 | ||||
-rw-r--r-- | test/Frontend/optimization-remark-extra-analysis.c | 11 | ||||
-rw-r--r-- | test/Frontend/optimization-remark-options.c | 2 | ||||
-rw-r--r-- | test/Frontend/optimization-remark-with-hotness.c | 19 | ||||
-rw-r--r-- | test/Frontend/optimization-remark.c | 3 | ||||
-rw-r--r-- | test/Frontend/remove-file-on-signal.c | 7 | ||||
-rw-r--r-- | test/Frontend/system-header-line-directive-ms-lineendings.c | 21 | ||||
-rw-r--r-- | test/Frontend/verify-prefixes.c | 118 | ||||
-rw-r--r-- | test/Frontend/x86-target-cpu.c | 2 |
13 files changed, 549 insertions, 58 deletions
diff --git a/test/Frontend/Inputs/optimization-remark-with-hotness-sample.proftext b/test/Frontend/Inputs/optimization-remark-with-hotness-sample.proftext index 730dc4a0d5b1..0eef9bdc012c 100644 --- a/test/Frontend/Inputs/optimization-remark-with-hotness-sample.proftext +++ b/test/Frontend/Inputs/optimization-remark-with-hotness-sample.proftext @@ -1,7 +1,7 @@ -foo:0:0 - 0: 0 +foo:29:29 + 0: 29 bar:29:29 - 9: foo:0 -main:0:0 - 0: 0 bar:0 + 8: 29 foo:29 +main:29:1 + 3: 29 bar:29 diff --git a/test/Frontend/Inputs/optimization-remark-with-hotness.proftext b/test/Frontend/Inputs/optimization-remark-with-hotness.proftext index af111d6d06bb..4ed20ab21a6f 100644 --- a/test/Frontend/Inputs/optimization-remark-with-hotness.proftext +++ b/test/Frontend/Inputs/optimization-remark-with-hotness.proftext @@ -1,6 +1,6 @@ foo # Func Hash: -0 +24 # Num Counters: 1 # Counter Values: @@ -16,7 +16,7 @@ bar main # Func Hash: -4 +1160280 # Num Counters: 2 # Counter Values: diff --git a/test/Frontend/diagnostics-order.c b/test/Frontend/diagnostics-order.c new file mode 100644 index 000000000000..37c0cd90d15c --- /dev/null +++ b/test/Frontend/diagnostics-order.c @@ -0,0 +1,12 @@ +// Make sure a note stays with its associated command-line argument diagnostic. +// Previously, these diagnostics were grouped by diagnostic level with all +// notes last. +// +// RUN: not %clang_cc1 -O999 -std=bogus -verify=-foo %s 2> %t +// RUN: FileCheck < %t %s +// +// CHECK: error: invalid value '-foo' in '-verify=' +// CHECK-NEXT: note: -verify prefixes must start with a letter and contain only alphanumeric characters, hyphens, and underscores +// CHECK-NEXT: warning: optimization level '-O999' is not supported +// CHECK-NEXT: error: invalid value 'bogus' in '-std=bogus' +// CHECK-NEXT: note: use {{.*}} for {{.*}} standard diff --git a/test/Frontend/float16.cpp b/test/Frontend/float16.cpp new file mode 100644 index 000000000000..febd6b8e36a0 --- /dev/null +++ b/test/Frontend/float16.cpp @@ -0,0 +1,326 @@ +// RUN: %clang_cc1 -std=c++11 -ast-dump %s | FileCheck %s --strict-whitespace +// RUN: %clang_cc1 -std=c++11 -ast-dump -fnative-half-type %s | FileCheck %s --check-prefix=CHECK-NATIVE --strict-whitespace + +/* Various contexts where type _Float16 can appear. */ + +/* Namespace */ +namespace { + _Float16 f1n; + _Float16 f2n = 33.f16; + _Float16 arr1n[10]; + _Float16 arr2n[] = { 1.2, 3.0, 3.e4 }; + const volatile _Float16 func1n(const _Float16 &arg) { + return arg + f2n + arr1n[4] - arr2n[1]; + } +} + +//CHECK: |-NamespaceDecl +//CHECK-NEXT: | |-VarDecl {{.*}} f1n '_Float16' +//CHECK-NEXT: | |-VarDecl {{.*}} f2n '_Float16' cinit +//CHECK-NEXT: | | `-FloatingLiteral {{.*}} '_Float16' 3.300000e+01 +//CHECK-NEXT: | |-VarDecl {{.*}} arr1n '_Float16 [10]' +//CHECK-NEXT: | |-VarDecl {{.*}} arr2n '_Float16 [3]' cinit +//CHECK-NEXT: | | `-InitListExpr {{.*}} '_Float16 [3]' +//CHECK-NEXT: | | |-ImplicitCastExpr {{.*}} '_Float16' <FloatingCast> +//CHECK-NEXT: | | | `-FloatingLiteral {{.*}} 'double' 1.200000e+00 +//CHECK-NEXT: | | |-ImplicitCastExpr {{.*}} '_Float16' <FloatingCast> +//CHECK-NEXT: | | | `-FloatingLiteral {{.*}} 'double' 3.000000e+00 +//CHECK-NEXT: | | `-ImplicitCastExpr {{.*}} '_Float16' <FloatingCast> +//CHECK-NEXT: | | `-FloatingLiteral {{.*}} 'double' 3.000000e+04 +//CHECK-NEXT: | `-FunctionDecl {{.*}} func1n 'const volatile _Float16 (const _Float16 &)' + +/* File */ +_Float16 f1f; +_Float16 f2f = 32.4; +_Float16 arr1f[10]; +_Float16 arr2f[] = { -1.2, -3.0, -3.e4 }; +_Float16 func1f(_Float16 arg); + +//CHECK: |-VarDecl {{.*}} f1f '_Float16' +//CHECK-NEXT: |-VarDecl {{.*}} f2f '_Float16' cinit +//CHECK-NEXT: | `-ImplicitCastExpr {{.*}} '_Float16' <FloatingCast> +//CHECK-NEXT: | `-FloatingLiteral {{.*}} 'double' 3.240000e+01 +//CHECK-NEXT: |-VarDecl {{.*}} arr1f '_Float16 [10]' +//CHECK-NEXT: |-VarDecl {{.*}} arr2f '_Float16 [3]' cinit +//CHECK-NEXT: | `-InitListExpr {{.*}} '_Float16 [3]' +//CHECK-NEXT: | |-ImplicitCastExpr {{.*}} '_Float16' <FloatingCast> +//CHECK-NEXT: | | `-UnaryOperator {{.*}} 'double' prefix '-' +//CHECK-NEXT: | | `-FloatingLiteral {{.*}} 'double' 1.200000e+00 +//CHECK-NEXT: | |-ImplicitCastExpr {{.*}} '_Float16' <FloatingCast> +//CHECK-NEXT: | | `-UnaryOperator {{.*}} 'double' prefix '-' +//CHECK-NEXT: | | `-FloatingLiteral {{.*}} 'double' 3.000000e+00 +//CHECK-NEXT: | `-ImplicitCastExpr {{.*}} '_Float16' <FloatingCast> +//CHECK-NEXT: | `-UnaryOperator {{.*}} 'double' prefix '-' +//CHECK-NEXT: | `-FloatingLiteral {{.*}} 'double' 3.000000e+04 +//CHECK-NEXT: |-FunctionDecl {{.*}} func1f '_Float16 (_Float16)' +//CHECK-NEXT: | `-ParmVarDecl {{.*}} arg '_Float16' + + +// Mixing __fp16 and Float16 types: +// The _Float16 type is first converted to __fp16 type and then the operation +// is completed as if both operands were of __fp16 type. + +__fp16 B = -0.1; +auto C = -1.0f16 + B; + +// When we do *not* have native half types, we expect __fp16 to be promoted to +// float, and consequently also _Float16 promotions to float: + +//CHECK: -VarDecl {{.*}} used B '__fp16' cinit +//CHECK-NEXT: | `-ImplicitCastExpr {{.*}} '__fp16' <FloatingCast> +//CHECK-NEXT: | `-UnaryOperator {{.*}} 'double' prefix '-' +//CHECK-NEXT: | `-FloatingLiteral {{.*}} 'double' 1.000000e-01 +//CHECK-NEXT: |-VarDecl {{.*}} C 'float':'float' cinit +//CHECK-NEXT: | `-BinaryOperator {{.*}} 'float' '+' +//CHECK-NEXT: | |-ImplicitCastExpr {{.*}} 'float' <FloatingCast> +//CHECK-NEXT: | | `-UnaryOperator {{.*}} '_Float16' prefix '-' +//CHECK-NEXT: | | `-FloatingLiteral {{.*}} '_Float16' 1.000000e+00 +//CHECK-NEXT: | `-ImplicitCastExpr {{.*}} 'float' <FloatingCast> +//CHECK-NEXT: | `-ImplicitCastExpr {{.*}} '__fp16' <LValueToRValue> +//CHECK-NEXT: | `-DeclRefExpr {{.*}} '__fp16' lvalue Var 0x{{.*}} 'B' '__fp16' + +// When do have native half types, we expect to see promotions to fp16: + +//CHECK-NATIVE: |-VarDecl {{.*}} used B '__fp16' cinit +//CHECK-NATIVE: | `-ImplicitCastExpr {{.*}} '__fp16' <FloatingCast> +//CHECK-NATIVE: | `-UnaryOperator {{.*}} 'double' prefix '-' +//CHECK-NATIVE: | `-FloatingLiteral {{.*}} 'double' 1.000000e-01 +//CHECK-NATIVE: |-VarDecl {{.*}} C '__fp16':'__fp16' cinit +//CHECK-NATIVE: | `-BinaryOperator {{.*}} '__fp16' '+' +//CHECK-NATIVE: | |-ImplicitCastExpr {{.*}} '__fp16' <FloatingCast> +//CHECK-NATIVE: | | `-UnaryOperator {{.*}} '_Float16' prefix '-' +//CHECK-NATIVE: | | `-FloatingLiteral {{.*}} '_Float16' 1.000000e+00 +//CHECK-NATIVE: | `-ImplicitCastExpr {{.*}} '__fp16' <LValueToRValue> +//CHECK-NATIVE: | `-DeclRefExpr {{.*}} '__fp16' lvalue Var 0x{{.*}} 'B' '__fp16' + + +/* Class */ + +class C1 { + _Float16 f1c; + static const _Float16 f2c; + volatile _Float16 f3c; +public: + C1(_Float16 arg) : f1c(arg), f3c(arg) { } + _Float16 func1c(_Float16 arg ) { + return f1c + arg; + } + static _Float16 func2c(_Float16 arg) { + return arg * C1::f2c; + } +}; + +//CHECK: |-CXXRecordDecl {{.*}} referenced class C1 definition +//CHECK: | |-CXXRecordDecl {{.*}} implicit referenced class C1 +//CHECK-NEXT: | |-FieldDecl {{.*}} referenced f1c '_Float16' +//CHECK-NEXT: | |-VarDecl {{.*}} used f2c 'const _Float16' static +//CHECK-NEXT: | |-FieldDecl {{.*}} f3c 'volatile _Float16' +//CHECK-NEXT: | |-AccessSpecDecl +//CHECK-NEXT: | |-CXXConstructorDecl {{.*}} used C1 'void (_Float16) +//CHECK-NEXT: | | |-ParmVarDecl {{.*}} used arg '_Float16' +//CHECK-NEXT: | | |-CXXCtorInitializer Field {{.*}} 'f1c' '_Float16' +//CHECK-NEXT: | | | `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue> +//CHECK-NEXT: | | | `-DeclRefExpr {{.*}} '_Float16' lvalue ParmVar 0x{{.*}} 'arg' '_Float16' +//CHECK-NEXT: | | |-CXXCtorInitializer Field {{.*}} 'f3c' 'volatile _Float16' +//CHECK-NEXT: | | | `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue> +//CHECK-NEXT: | | | `-DeclRefExpr {{.*}} '_Float16' lvalue ParmVar 0x{{.*}} 'arg' '_Float16' +//CHECK-NEXT: | | `-CompoundStmt +//CHECK-NEXT: | |-CXXMethodDecl {{.*}} used func1c '_Float16 (_Float16) +//CHECK-NEXT: | | |-ParmVarDecl {{.*}} used arg '_Float16' +//CHECK-NEXT: | | `-CompoundStmt +//CHECK-NEXT: | | `-ReturnStmt +//CHECK-NEXT: | | `-BinaryOperator {{.*}} '_Float16' '+' +//CHECK-NEXT: | | |-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue> +//CHECK-NEXT: | | | `-MemberExpr {{.*}} '_Float16' lvalue ->f1c 0x{{.*}} +//CHECK-NEXT: | | | `-CXXThisExpr {{.*}} 'class C1 *' this +//CHECK-NEXT: | | `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue> +//CHECK-NEXT: | | `-DeclRefExpr {{.*}} '_Float16' lvalue ParmVar 0x{{.*}} 'arg' '_Float16' +//CHECK-NEXT: | |-CXXMethodDecl {{.*}} used func2c '_Float16 (_Float16)' static +//CHECK-NEXT: | | |-ParmVarDecl {{.*}} used arg '_Float16' +//CHECK-NEXT: | | `-CompoundStmt +//CHECK-NEXT: | | `-ReturnStmt +//CHECK-NEXT: | | `-BinaryOperator {{.*}} '_Float16' '*' +//CHECK-NEXT: | | |-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue> +//CHECK-NEXT: | | | `-DeclRefExpr {{.*}} '_Float16' lvalue ParmVar 0x{{.*}} 'arg' '_Float16' +//CHECK-NEXT: | | `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue> +//CHECK-NEXT: | | `-DeclRefExpr {{.*}} 'const _Float16' lvalue Var 0x{{.*}} 'f2c' 'const _Float16' + + +/* Template */ + +template <class C> C func1t(C arg) { + return arg * 2.f16; +} + +//CHECK: |-FunctionTemplateDecl {{.*}} func1t +//CHECK-NEXT: | |-TemplateTypeParmDecl {{.*}} C +//CHECK-NEXT: | |-FunctionDecl {{.*}} func1t 'C (C)' +//CHECK-NEXT: | | |-ParmVarDecl {{.*}} referenced arg 'C' +//CHECK-NEXT: | | `-CompoundStmt +//CHECK-NEXT: | | `-ReturnStmt +//CHECK-NEXT: | | `-BinaryOperator {{.*}} '<dependent type>' '*' +//CHECK-NEXT: | | |-DeclRefExpr {{.*}} 'C' lvalue ParmVar {{.*}} 'arg' 'C' +//CHECK-NEXT: | | `-FloatingLiteral {{.*}} '_Float16' 2.000000e+00 +//CHECK-NEXT: | `-FunctionDecl {{.*}} used func1t '_Float16 (_Float16)' +//CHECK-NEXT: | |-TemplateArgument type '_Float16' +//CHECK-NEXT: | |-ParmVarDecl {{.*}} used arg '_Float16':'_Float16' +//CHECK-NEXT: | `-CompoundStmt +//CHECK-NEXT: | `-ReturnStmt +//CHECK-NEXT: | `-BinaryOperator {{.*}} '_Float16' '*' +//CHECK-NEXT: | |-ImplicitCastExpr {{.*}} '_Float16':'_Float16' <LValueToRValue> +//CHECK-NEXT: | | `-DeclRefExpr {{.*}} '_Float16':'_Float16' lvalue ParmVar {{.*}} 'arg' '_Float16':'_Float16' +//CHECK-NEXT: | `-FloatingLiteral {{.*}} '_Float16' 2.000000e+00 + + +template <class C> struct S1 { + C mem1; +}; + +//CHECK: |-ClassTemplateDecl {{.*}} S1 +//CHECK-NEXT: | |-TemplateTypeParmDecl {{.*}} referenced class depth 0 index 0 C +//CHECK-NEXT: | |-CXXRecordDecl {{.*}} struct S1 definition +//CHECK: | | |-CXXRecordDecl {{.*}} implicit struct S1 +//CHECK-NEXT: | | `-FieldDecl {{.*}} mem1 'C' +//CHECK-NEXT: | `-ClassTemplateSpecialization {{.*}} 'S1' + +template <> struct S1<_Float16> { + _Float16 mem2; +}; + + +/* Local */ + +extern int printf (const char *__restrict __format, ...); + +int main(void) { + _Float16 f1l = 1e3f16; +//CHECK: | `-VarDecl {{.*}} used f1l '_Float16' cinit +//CHECK-NEXT: | `-FloatingLiteral {{.*}} '_Float16' 1.000000e+03 + + _Float16 f2l = -0.f16; +//CHECK: | `-VarDecl {{.*}} used f2l '_Float16' cinit +//CHECK-NEXT: | `-UnaryOperator {{.*}} '_Float16' prefix '-' +//CHECK-NEXT: | `-FloatingLiteral {{.*}} '_Float16' 0.000000e+00 + + _Float16 f3l = 1.000976562; +//CHECK: | `-VarDecl {{.*}} used f3l '_Float16' cinit +//CHECK-NEXT: | `-ImplicitCastExpr {{.*}} '_Float16' <FloatingCast> +//CHECK-NEXT: | `-FloatingLiteral {{.*}} 'double' 1.000977e+00 + + C1 c1(f1l); +//CHECK: | `-VarDecl{{.*}} used c1 'class C1' callinit +//CHECK-NEXT: | `-CXXConstructExpr {{.*}} 'class C1' 'void (_Float16) +//CHECK-NEXT: | `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue> +//CHECK-NEXT: | `-DeclRefExpr {{.*}} '_Float16' lvalue Var 0x{{.*}} 'f1l' '_Float16' + + S1<_Float16> s1 = { 132.f16 }; +//CHECK: | `-VarDecl {{.*}} used s1 'S1<_Float16>':'struct S1<_Float16>' cinit +//CHECK-NEXT: | `-InitListExpr {{.*}} 'S1<_Float16>':'struct S1<_Float16>' +//CHECK-NEXT: | `-FloatingLiteral {{.*}} '_Float16' 1.320000e+02 + + _Float16 f4l = func1n(f1l) + func1f(f2l) + c1.func1c(f3l) + c1.func2c(f1l) + + func1t(f1l) + s1.mem2 - f1n + f2n; +//CHECK: | `-VarDecl {{.*}} used f4l '_Float16' cinit +//CHECK-NEXT: | `-BinaryOperator {{.*}} '_Float16' '+' +//CHECK-NEXT: | |-BinaryOperator {{.*}} '_Float16' '-' +//CHECK-NEXT: | | |-BinaryOperator {{.*}} '_Float16' '+' +//CHECK-NEXT: | | | |-BinaryOperator {{.*}} '_Float16' '+' +//CHECK-NEXT: | | | | |-BinaryOperator {{.*}} '_Float16' '+' +//CHECK-NEXT: | | | | | |-BinaryOperator {{.*}} '_Float16' '+' +//CHECK-NEXT: | | | | | | |-BinaryOperator {{.*}} '_Float16' '+' +//CHECK-NEXT: | | | | | | | |-CallExpr {{.*}} '_Float16' +//CHECK-NEXT: | | | | | | | | |-ImplicitCastExpr {{.*}} 'const volatile _Float16 (*)(const _Float16 &)' <FunctionToPointerDecay> +//CHECK-NEXT: | | | | | | | | | `-DeclRefExpr {{.*}} 'const volatile _Float16 (const _Float16 &)' lvalue Function {{.*}} 'func1n' 'const volatile _Float16 (const _Float16 &)' +//CHECK-NEXT: | | | | | | | | `-ImplicitCastExpr {{.*}} 'const _Float16' lvalue <NoOp> +//CHECK-NEXT: | | | | | | | | `-DeclRefExpr {{.*}} '_Float16' lvalue Var {{.*}} 'f1l' '_Float16' +//CHECK-NEXT: | | | | | | | `-CallExpr {{.*}} '_Float16' +//CHECK-NEXT: | | | | | | | |-ImplicitCastExpr {{.*}} '_Float16 (*)(_Float16)' <FunctionToPointerDecay> +//CHECK-NEXT: | | | | | | | | `-DeclRefExpr {{.*}} '_Float16 (_Float16)' lvalue Function {{.*}} 'func1f' '_Float16 (_Float16)' +//CHECK-NEXT: | | | | | | | `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue> +//CHECK-NEXT: | | | | | | | `-DeclRefExpr {{.*}} '_Float16' lvalue Var {{.*}} 'f2l' '_Float16' +//CHECK-NEXT: | | | | | | `-CXXMemberCallExpr {{.*}} '_Float16' +//CHECK-NEXT: | | | | | | |-MemberExpr {{.*}} '<bound member function type>' .func1c {{.*}} +//CHECK-NEXT: | | | | | | | `-DeclRefExpr {{.*}} 'class C1' lvalue Var {{.*}} 'c1' 'class C1' +//CHECK-NEXT: | | | | | | `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue> +//CHECK-NEXT: | | | | | | `-DeclRefExpr {{.*}} '_Float16' lvalue Var {{.*}} 'f3l' '_Float16' +//CHECK-NEXT: | | | | | `-CallExpr {{.*}} '_Float16' +//CHECK-NEXT: | | | | | |-ImplicitCastExpr {{.*}} '_Float16 (*)(_Float16)' <FunctionToPointerDecay> +//CHECK-NEXT: | | | | | | `-MemberExpr {{.*}} '_Float16 (_Float16)' lvalue .func2c {{.*}} +//CHECK-NEXT: | | | | | | `-DeclRefExpr {{.*}} 'class C1' lvalue Var {{.*}} 'c1' 'class C1' +//CHECK-NEXT: | | | | | `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue> +//CHECK-NEXT: | | | | | `-DeclRefExpr {{.*}} '_Float16' lvalue Var {{.*}} 'f1l' '_Float16' +//CHECK-NEXT: | | | | `-CallExpr {{.*}} '_Float16':'_Float16' +//CHECK-NEXT: | | | | |-ImplicitCastExpr {{.*}} '_Float16 (*)(_Float16)' <FunctionToPointerDecay> +//CHECK-NEXT: | | | | | `-DeclRefExpr {{.*}} '_Float16 (_Float16)' lvalue Function {{.*}} 'func1t' '_Float16 (_Float16)' (FunctionTemplate {{.*}} 'func1t') +//CHECK-NEXT: | | | | `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue> +//CHECK-NEXT: | | | | `-DeclRefExpr {{.*}} '_Float16' lvalue Var {{.*}} 'f1l' '_Float16' +//CHECK-NEXT: | | | `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue> +//CHECK-NEXT: | | | `-MemberExpr {{.*}} '_Float16' lvalue .mem2 {{.*}} +//CHECK-NEXT: | | | `-DeclRefExpr {{.*}} 'S1<_Float16>':'struct S1<_Float16>' lvalue Var {{.*}} 's1' 'S1<_Float16>':'struct S1<_Float16>' +//CHECK-NEXT: | | `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue> +//CHECK-NEXT: | | `-DeclRefExpr {{.*}} '_Float16' lvalue Var {{.*}} 'f1n' '_Float16' +//CHECK-NEXT: | `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue> +//CHECK-NEXT: | `-DeclRefExpr {{.*}} '_Float16' lvalue Var {{.*}} 'f2n' '_Float16' + + auto f5l = -1.f16, *f6l = &f2l, f7l = func1t(f3l); +//CHECK: | |-VarDecl {{.*}} f5l '_Float16':'_Float16' cinit +//CHECK-NEXT: | | `-UnaryOperator {{.*}} '_Float16' prefix '-' +//CHECK-NEXT: | | `-FloatingLiteral {{.*}} '_Float16' 1.000000e+00 +//CHECK-NEXT: | |-VarDecl {{.*}} f6l '_Float16 *' cinit +//CHECK-NEXT: | | `-UnaryOperator {{.*}} '_Float16 *' prefix '&' +//CHECK-NEXT: | | `-DeclRefExpr {{.*}} '_Float16' lvalue Var {{.*}} 'f2l' '_Float16' +//CHECK-NEXT: | `-VarDecl {{.*}} f7l '_Float16':'_Float16' cinit +//CHECK-NEXT: | `-CallExpr {{.*}} '_Float16':'_Float16' +//CHECK-NEXT: | |-ImplicitCastExpr {{.*}} '_Float16 (*)(_Float16)' <FunctionToPointerDecay> +//CHECK-NEXT: | | `-DeclRefExpr {{.*}} '_Float16 (_Float16)' lvalue Function {{.*}} 'func1t' '_Float16 (_Float16)' (FunctionTemplate {{.*}} 'func1t') +//CHECK-NEXT: | `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue> +//CHECK-NEXT: | `-DeclRefExpr {{.*}} '_Float16' lvalue Var {{.*}} 'f3l' '_Float16' + + _Float16 f8l = f4l++; +//CHECK: | `-VarDecl {{.*}} f8l '_Float16' cinit +//CHECK-NEXT: | `-UnaryOperator {{.*}} '_Float16' postfix '++' +//CHECK-NEXT: | `-DeclRefExpr {{.*}} '_Float16' lvalue Var {{.*}} 'f4l' '_Float16' + + _Float16 arr1l[] = { -1.f16, -0.f16, -11.f16 }; +//CHECK: `-VarDecl {{.*}} arr1l '_Float16 [3]' cinit +//CHECK-NEXT: `-InitListExpr {{.*}} '_Float16 [3]' +//CHECK-NEXT: |-UnaryOperator {{.*}} '_Float16' prefix '-' +//CHECK-NEXT: | `-FloatingLiteral {{.*}} '_Float16' 1.000000e+00 +//CHECK-NEXT: |-UnaryOperator {{.*}} '_Float16' prefix '-' +//CHECK-NEXT: | `-FloatingLiteral {{.*}} '_Float16' 0.000000e+00 +//CHECK-NEXT: `-UnaryOperator {{.*}} '_Float16' prefix '-' +//CHECK-NEXT: `-FloatingLiteral {{.*}} '_Float16' 1.100000e+01 + + float cvtf = f2n; +//CHECK: `-VarDecl {{.*}} cvtf 'float' cinit +//CHECK-NEXT: `-ImplicitCastExpr {{.*}} 'float' <FloatingCast> +//CHECK-NEXT: `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue> +//CHECK-NEXT: `-DeclRefExpr {{.*}} '_Float16' lvalue Var {{.*}} 'f2n' '_Float16' + + double cvtd = f2n; +//CHECK: `-VarDecl {{.*}} cvtd 'double' cinit +//CHECK-NEXT: `-ImplicitCastExpr {{.*}} 'double' <FloatingCast> +//CHECK-NEXT: `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue> +//CHECK-NEXT: `-DeclRefExpr {{.*}} '_Float16' lvalue Var {{.*}} 'f2n' '_Float16' + + long double cvtld = f2n; +//CHECK: `-VarDecl {{.*}} cvtld 'long double' cinit +//CHECK-NEXT: `-ImplicitCastExpr {{.*}} 'long double' <FloatingCast> +//CHECK-NEXT: `-ImplicitCastExpr {{.*}} '_Float16' <LValueToRValue> +//CHECK-NEXT: `-DeclRefExpr {{.*}} '_Float16' lvalue Var {{.*}} 'f2n' '_Float16' + + _Float16 f2h = 42.0f; +//CHECK: `-VarDecl {{.*}} f2h '_Float16' cinit +//CHECK-NEXT: `-ImplicitCastExpr {{.*}} '_Float16' <FloatingCast> +//CHECK-NEXT: `-FloatingLiteral {{.*}} 'float' 4.200000e+01 + + _Float16 d2h = 42.0; +//CHECK: `-VarDecl {{.*}} d2h '_Float16' cinit +//CHECK-NEXT: `-ImplicitCastExpr {{.*}} '_Float16' <FloatingCast> +//CHECK-NEXT: `-FloatingLiteral {{.*}} 'double' 4.200000e+01 + + _Float16 ld2h = 42.0l; +//CHECK: `-VarDecl {{.*}} ld2h '_Float16' cinit +//CHECK-NEXT: `-ImplicitCastExpr {{.*}} '_Float16' <FloatingCast> +//CHECK-NEXT: `-FloatingLiteral {{.*}} 'long double' 4.200000e+01 +} diff --git a/test/Frontend/gnu-mcount.c b/test/Frontend/gnu-mcount.c index 10baa8a88260..3953d2415382 100644 --- a/test/Frontend/gnu-mcount.c +++ b/test/Frontend/gnu-mcount.c @@ -28,10 +28,6 @@ // RUN: %clang -target armv7-apple-ios -pg -meabi gnu -S -emit-llvm -o - %s | FileCheck %s -check-prefix CHECK -check-prefix CHECK-ARM-IOS // RUN: %clang -target arm64-apple-ios -pg -S -emit-llvm -o - %s | FileCheck %s -check-prefix CHECK -check-prefix CHECK-ARM-IOS // RUN: %clang -target arm64-apple-ios -pg -meabi gnu -S -emit-llvm -o - %s | FileCheck %s -check-prefix CHECK -check-prefix CHECK-ARM-IOS -// RUN: %clang -target armv7-unknown-bitrig-gnueabihf -pg -S -emit-llvm -o - %s | FileCheck %s -check-prefix CHECK -check-prefix CHECK-ARM-EABI-BIGRIG -// RUN: %clang -target armv7-unknown-bitrig-gnueabihf -meabi gnu -pg -S -emit-llvm -o - %s | FileCheck %s -check-prefix CHECK -check-prefix CHECK-ARM-EABI-BIGRIG -// RUN: %clang -target aarch64-unknown-bitrig-gnueabihf -pg -S -emit-llvm -o - %s | FileCheck %s -check-prefix CHECK -check-prefix CHECK-ARM64-EABI-BITRIG -// RUN: %clang -target aarch64-unknown-bitrig-gnueabihf -meabi gnu -pg -S -emit-llvm -o - %s | FileCheck %s -check-prefix CHECK -check-prefix CHECK-ARM64-EABI-BITRIG // RUN: %clang -target armv7-unknown-rtems-gnueabihf -pg -S -emit-llvm -o - %s | FileCheck %s -check-prefix CHECK -check-prefix CHECK-ARM-EABI-RTEMS // RUN: %clang -target armv7-unknown-rtems-gnueabihf -meabi gnu -pg -S -emit-llvm -o - %s | FileCheck %s -check-prefix CHECK -check-prefix CHECK-ARM-EABI-RTEMS // RUN: %clang -target aarch64-unknown-rtems-gnueabihf -pg -S -emit-llvm -o - %s | FileCheck %s -check-prefix CHECK -check-prefix CHECK-ARM64-EABI-RTEMS @@ -47,40 +43,36 @@ int f() { // CHECK-LABEL: f // TODO: add profiling support for arm-baremetal -// CHECK-ARM-BAREMETAL-EABI-NOT: attributes #{{[0-9]+}} = { {{.*}}"counting-function"="\01mcount"{{.*}} } -// CHECK-ARM-BAREMETAL-EABI-NOT: attributes #{{[0-9]+}} = { {{.*}}"counting-function"="\01__gnu_mcount_nc"{{.*}} } -// CHECK-ARM64-BAREMETAL-EABI: attributes #{{[0-9]+}} = { {{.*}}"counting-function"="mcount"{{.*}} } -// CHECK-ARM64-BAREMETAL-EABI-MEABI-GNU: attributes #{{[0-9]+}} = { {{.*}}"counting-function"="\01_mcount"{{.*}} } -// CHECK-ARM-IOS-NOT: attributes #{{[0-9]+}} = { {{.*}}"counting-function"="_mcount"{{.*}} } -// CHECK-ARM-IOS-NOT: attributes #{{[0-9]+}} = { {{.*}}"counting-function"="\01__gnu_mcount_nc"{{.*}} } -// CHECK-ARM-EABI: attributes #{{[0-9]+}} = { {{.*}}"counting-function"="\01mcount"{{.*}} } -// CHECK-ARM-EABI-NOT: attributes #{{[0-9]+}} = { {{.*}}"counting-function"="\01__gnu_mcount_nc"{{.*}} } -// CHECK-ARM64-EABI: attributes #{{[0-9]+}} = { {{.*}}"counting-function"="mcount"{{.*}} } -// CHECK-ARM64-EABI-MEABI-GNU: attributes #{{[0-9]+}} = { {{.*}}"counting-function"="\01_mcount"{{.*}} } -// CHECK-ARM64-EABI-NOT: attributes #{{[0-9]+}} = { {{.*}}"counting-function"="\01__gnu_mcount_nc"{{.*}} } -// CHECK-ARM64-EABI-LINUX: attributes #{{[0-9]+}} = { {{.*}}"counting-function"="\01_mcount"{{.*}} } -// CHECK-ARM-EABI-FREEBSD: attributes #{{[0-9]+}} = { {{.*}}"counting-function"="__mcount"{{.*}} } -// CHECK-ARM-EABI-FREEBSD-NOT: attributes #{{[0-9]+}} = { {{.*}}"counting-function"="\01__gnu_mcount_nc"{{.*}} } -// CHECK-ARM64-EABI-FREEBSD: attributes #{{[0-9]+}} = { {{.*}}"counting-function"=".mcount"{{.*}} } -// CHECK-ARM64-EABI-FREEBSD-NOT: attributes #{{[0-9]+}} = { {{.*}}"counting-function"="\01__gnu_mcount_nc"{{.*}} } -// CHECK-ARM-EABI-NETBSD: attributes #{{[0-9]+}} = { {{.*}}"counting-function"="_mcount"{{.*}} } -// CHECK-ARM-EABI-NETBSD-NOT: attributes #{{[0-9]+}} = { {{.*}}"counting-function"="\01__gnu_mcount_nc"{{.*}} } -// CHECK-ARM-EABI-OPENBSD: attributes #{{[0-9]+}} = { {{.*}}"counting-function"="__mcount"{{.*}} } -// CHECK-ARM-EABI-OPENBSD-NOT: attributes #{{[0-9]+}} = { {{.*}}"counting-function"="\01__gnu_mcount_nc"{{.*}} } -// CHECK-ARM64-EABI-OPENBSD: attributes #{{[0-9]+}} = { {{.*}}"counting-function"="__mcount"{{.*}} } -// CHECK-ARM64-EABI-OPENBSD-NOT: attributes #{{[0-9]+}} = { {{.*}}"counting-function"="\01__gnu_mcount_nc"{{.*}} } -// CHECK-ARM-EABI-MEABI-GNU-NOT: attributes #{{[0-9]+}} = { {{.*}}"counting-function"="mcount"{{.*}} } -// CHECK-ARM-EABI-MEABI-GNU: attributes #{{[0-9]+}} = { {{.*}}"counting-function"="\01__gnu_mcount_nc"{{.*}} } -// CHECK-ARM-EABI-BITRIG: attributes #{{[0-9]+}} = { {{.*}}"counting-function"="__mcount"{{.*}} } -// CHECK-ARM-EABI-BITRIG-NOT: attributes #{{[0-9]+}} = { {{.*}}"counting-function"="\01__gnu_mcount_nc"{{.*}} } -// CHECK-ARM54-EABI-BITRIG: attributes #{{[0-9]+}} = { {{.*}}"counting-function"="mcount"{{.*}} } -// CHECK-ARM54-EABI-BITRIG-NOT: attributes #{{[0-9]+}} = { {{.*}}"counting-function"="\01__gnu_mcount_nc"{{.*}} } -// CHECK-ARM-EABI-RTEMS: attributes #{{[0-9]+}} = { {{.*}}"counting-function"="mcount"{{.*}} } -// CHECK-ARM-EABI-RTEMS-NOT: attributes #{{[0-9]+}} = { {{.*}}"counting-function"="\01__gnu_mcount_nc"{{.*}} } -// CHECK-ARM64-EABI-RTEMS: attributes #{{[0-9]+}} = { {{.*}}"counting-function"="mcount"{{.*}} } -// CHECK-ARM64-EABI-RTEMS-NOT: attributes #{{[0-9]+}} = { {{.*}}"counting-function"="\01__gnu_mcount_nc"{{.*}} } -// CHECK-ARM-EABI-CLOUDABI: attributes #{{[0-9]+}} = { {{.*}}"counting-function"="mcount"{{.*}} } -// CHECK-ARM-EABI-CLOUDABI-NOT: attributes #{{[0-9]+}} = { {{.*}}"counting-function"="\01__gnu_mcount_nc"{{.*}} } -// CHECK-ARM64-EABI-CLOUDABI: attributes #{{[0-9]+}} = { {{.*}}"counting-function"="mcount"{{.*}} } -// CHECK-ARM64-EABI-CLOUDABI-NOT: attributes #{{[0-9]+}} = { {{.*}}"counting-function"="\01__gnu_mcount_nc"{{.*}} } +// CHECK-ARM-BAREMETAL-EABI-NOT: attributes #{{[0-9]+}} = { {{.*}}"instrument-function-entry-inlined"="\01mcount"{{.*}} } +// CHECK-ARM-BAREMETAL-EABI-NOT: attributes #{{[0-9]+}} = { {{.*}}"instrument-function-entry-inlined"="\01__gnu_mcount_nc"{{.*}} } +// CHECK-ARM64-BAREMETAL-EABI: attributes #{{[0-9]+}} = { {{.*}}"instrument-function-entry-inlined"="mcount"{{.*}} } +// CHECK-ARM64-BAREMETAL-EABI-MEABI-GNU: attributes #{{[0-9]+}} = { {{.*}}"instrument-function-entry-inlined"="\01_mcount"{{.*}} } +// CHECK-ARM-IOS-NOT: attributes #{{[0-9]+}} = { {{.*}}"instrument-function-entry-inlined"="_mcount"{{.*}} } +// CHECK-ARM-IOS-NOT: attributes #{{[0-9]+}} = { {{.*}}"instrument-function-entry-inlined"="\01__gnu_mcount_nc"{{.*}} } +// CHECK-ARM-EABI: attributes #{{[0-9]+}} = { {{.*}}"instrument-function-entry-inlined"="\01mcount"{{.*}} } +// CHECK-ARM-EABI-NOT: attributes #{{[0-9]+}} = { {{.*}}"instrument-function-entry-inlined"="\01__gnu_mcount_nc"{{.*}} } +// CHECK-ARM64-EABI: attributes #{{[0-9]+}} = { {{.*}}"instrument-function-entry-inlined"="mcount"{{.*}} } +// CHECK-ARM64-EABI-MEABI-GNU: attributes #{{[0-9]+}} = { {{.*}}"instrument-function-entry-inlined"="\01_mcount"{{.*}} } +// CHECK-ARM64-EABI-NOT: attributes #{{[0-9]+}} = { {{.*}}"instrument-function-entry-inlined"="\01__gnu_mcount_nc"{{.*}} } +// CHECK-ARM64-EABI-LINUX: attributes #{{[0-9]+}} = { {{.*}}"instrument-function-entry-inlined"="\01_mcount"{{.*}} } +// CHECK-ARM-EABI-FREEBSD: attributes #{{[0-9]+}} = { {{.*}}"instrument-function-entry-inlined"="__mcount"{{.*}} } +// CHECK-ARM-EABI-FREEBSD-NOT: attributes #{{[0-9]+}} = { {{.*}}"instrument-function-entry-inlined"="\01__gnu_mcount_nc"{{.*}} } +// CHECK-ARM64-EABI-FREEBSD: attributes #{{[0-9]+}} = { {{.*}}"instrument-function-entry-inlined"=".mcount"{{.*}} } +// CHECK-ARM64-EABI-FREEBSD-NOT: attributes #{{[0-9]+}} = { {{.*}}"instrument-function-entry-inlined"="\01__gnu_mcount_nc"{{.*}} } +// CHECK-ARM-EABI-NETBSD: attributes #{{[0-9]+}} = { {{.*}}"instrument-function-entry-inlined"="_mcount"{{.*}} } +// CHECK-ARM-EABI-NETBSD-NOT: attributes #{{[0-9]+}} = { {{.*}}"instrument-function-entry-inlined"="\01__gnu_mcount_nc"{{.*}} } +// CHECK-ARM-EABI-OPENBSD: attributes #{{[0-9]+}} = { {{.*}}"instrument-function-entry-inlined"="__mcount"{{.*}} } +// CHECK-ARM-EABI-OPENBSD-NOT: attributes #{{[0-9]+}} = { {{.*}}"instrument-function-entry-inlined"="\01__gnu_mcount_nc"{{.*}} } +// CHECK-ARM64-EABI-OPENBSD: attributes #{{[0-9]+}} = { {{.*}}"instrument-function-entry-inlined"="__mcount"{{.*}} } +// CHECK-ARM64-EABI-OPENBSD-NOT: attributes #{{[0-9]+}} = { {{.*}}"instrument-function-entry-inlined"="\01__gnu_mcount_nc"{{.*}} } +// CHECK-ARM-EABI-MEABI-GNU-NOT: attributes #{{[0-9]+}} = { {{.*}}"instrument-function-entry-inlined"="mcount"{{.*}} } +// CHECK-ARM-EABI-MEABI-GNU: attributes #{{[0-9]+}} = { {{.*}}"instrument-function-entry-inlined"="\01__gnu_mcount_nc"{{.*}} } +// CHECK-ARM-EABI-RTEMS: attributes #{{[0-9]+}} = { {{.*}}"instrument-function-entry-inlined"="mcount"{{.*}} } +// CHECK-ARM-EABI-RTEMS-NOT: attributes #{{[0-9]+}} = { {{.*}}"instrument-function-entry-inlined"="\01__gnu_mcount_nc"{{.*}} } +// CHECK-ARM64-EABI-RTEMS: attributes #{{[0-9]+}} = { {{.*}}"instrument-function-entry-inlined"="mcount"{{.*}} } +// CHECK-ARM64-EABI-RTEMS-NOT: attributes #{{[0-9]+}} = { {{.*}}"instrument-function-entry-inlined"="\01__gnu_mcount_nc"{{.*}} } +// CHECK-ARM-EABI-CLOUDABI: attributes #{{[0-9]+}} = { {{.*}}"instrument-function-entry-inlined"="mcount"{{.*}} } +// CHECK-ARM-EABI-CLOUDABI-NOT: attributes #{{[0-9]+}} = { {{.*}}"instrument-function-entry-inlined"="\01__gnu_mcount_nc"{{.*}} } +// CHECK-ARM64-EABI-CLOUDABI: attributes #{{[0-9]+}} = { {{.*}}"instrument-function-entry-inlined"="mcount"{{.*}} } +// CHECK-ARM64-EABI-CLOUDABI-NOT: attributes #{{[0-9]+}} = { {{.*}}"instrument-function-entry-inlined"="\01__gnu_mcount_nc"{{.*}} } diff --git a/test/Frontend/optimization-remark-extra-analysis.c b/test/Frontend/optimization-remark-extra-analysis.c new file mode 100644 index 000000000000..1a8415e69cff --- /dev/null +++ b/test/Frontend/optimization-remark-extra-analysis.c @@ -0,0 +1,11 @@ +// Test that the is*RemarkEnabled overrides are working properly. This remark +// requiring extra analysis is only conditionally enabled. + +// RUN: %clang_cc1 %s -Rpass-missed=gvn -O2 -emit-llvm-only -verify + +int foo(int *x, int *y) { + int a = *x; + *y = 2; + // expected-remark@+1 {{load of type i32 not eliminated}} + return a + *x; +} diff --git a/test/Frontend/optimization-remark-options.c b/test/Frontend/optimization-remark-options.c index a2d717a2422d..38dbbfbaccec 100644 --- a/test/Frontend/optimization-remark-options.c +++ b/test/Frontend/optimization-remark-options.c @@ -14,7 +14,7 @@ double foo(int N) { // CHECK: {{.*}}:17:3: remark: loop not vectorized: cannot prove it is safe to reorder memory operations; allow reordering by specifying '#pragma clang loop vectorize(enable)' before the loop. If the arrays will always be independent specify '#pragma clang loop vectorize(assume_safety)' before the loop or provide the '__restrict__' qualifier with the independent array arguments. Erroneous results will occur if these options are incorrectly applied! void foo2(int *dw, int *uw, int *A, int *B, int *C, int *D, int N) { - for (int i = 0; i < N; i++) { + for (long i = 0; i < N; i++) { dw[i] = A[i] + B[i - 1] + C[i - 2] + D[i - 3]; uw[i] = A[i] + B[i + 1] + C[i + 2] + D[i + 3]; } diff --git a/test/Frontend/optimization-remark-with-hotness.c b/test/Frontend/optimization-remark-with-hotness.c index 875fc75ae159..6d3ab0697a21 100644 --- a/test/Frontend/optimization-remark-with-hotness.c +++ b/test/Frontend/optimization-remark-with-hotness.c @@ -11,18 +11,22 @@ // RUN: -fprofile-instrument-use-path=%t.profdata -Rpass=inline \ // RUN: -Rpass-analysis=inline -Rpass-missed=inline \ // RUN: -fdiagnostics-show-hotness -verify +// The clang version of the previous test. +// RUN: %clang -target x86_64-apple-macosx10.9 %s -c -emit-llvm -o /dev/null \ +// RUN: -fprofile-instr-use=%t.profdata -Rpass=inline \ +// RUN: -Rpass-analysis=inline -Rpass-missed=inline \ +// RUN: -fdiagnostics-show-hotness -Xclang -verify // RUN: %clang_cc1 -triple x86_64-apple-macosx10.9 -main-file-name \ // RUN: optimization-remark-with-hotness.c %s -emit-llvm-only \ // RUN: -fprofile-sample-use=%t-sample.profdata -Rpass=inline \ // RUN: -Rpass-analysis=inline -Rpass-missed=inline \ // RUN: -fdiagnostics-show-hotness -fdiagnostics-hotness-threshold=10 \ // RUN: -verify -// The clang version of the previous test. -// RUN: %clang -target x86_64-apple-macosx10.9 %s -c -emit-llvm -o /dev/null \ -// RUN: -fprofile-instr-use=%t.profdata -Rpass=inline \ +// RUN: %clang_cc1 -triple x86_64-apple-macosx10.9 -main-file-name \ +// RUN: optimization-remark-with-hotness.c %s -emit-llvm-only \ +// RUN: -fprofile-instrument-use-path=%t.profdata -Rpass=inline \ // RUN: -Rpass-analysis=inline -Rpass-missed=inline \ -// RUN: -fdiagnostics-show-hotness -fdiagnostics-hotness-threshold=10 \ -// RUN: -Xclang -verify +// RUN: -fdiagnostics-show-hotness -fdiagnostics-hotness-threshold=10 -verify // RUN: %clang_cc1 -triple x86_64-apple-macosx10.9 -main-file-name \ // RUN: optimization-remark-with-hotness.c %s -emit-llvm-only \ // RUN: -fprofile-instrument-use-path=%t.profdata -Rpass=inline \ @@ -56,14 +60,13 @@ void bar(int x) { // THRESHOLD-NOT: hotness // NO_PGO: '-fdiagnostics-show-hotness' requires profile-guided optimization information // NO_PGO: '-fdiagnostics-hotness-threshold=' requires profile-guided optimization information - // expected-remark@+2 {{foo should always be inlined (cost=always) (hotness: 30)}} - // expected-remark@+1 {{foo inlined into bar (hotness: 30)}} + // expected-remark@+1 {{foo inlined into bar with cost=always (hotness:}} sum += foo(x, x - 2); } int main(int argc, const char *argv[]) { for (int i = 0; i < 30; i++) - // expected-remark@+1 {{bar not inlined into main because it should never be inlined}} + // expected-remark@+1 {{bar not inlined into main because it should never be inlined (cost=never) (hotness:}} bar(argc); return sum; } diff --git a/test/Frontend/optimization-remark.c b/test/Frontend/optimization-remark.c index 7c02233d6835..29eaa03243e0 100644 --- a/test/Frontend/optimization-remark.c +++ b/test/Frontend/optimization-remark.c @@ -42,9 +42,8 @@ float foz(int x, int y) { return x * y; } // twice. // int bar(int j) { -// expected-remark@+4 {{foz not inlined into bar because it should never be inlined (cost=never)}} // expected-remark@+3 {{foz not inlined into bar because it should never be inlined (cost=never)}} -// expected-remark@+2 {{foo should always be inlined}} +// expected-remark@+2 {{foz not inlined into bar because it should never be inlined (cost=never)}} // expected-remark@+1 {{foo inlined into bar}} return foo(j, j - 2) * foz(j - 2, j); } diff --git a/test/Frontend/remove-file-on-signal.c b/test/Frontend/remove-file-on-signal.c new file mode 100644 index 000000000000..95d9b105f092 --- /dev/null +++ b/test/Frontend/remove-file-on-signal.c @@ -0,0 +1,7 @@ +// RUN: rm -rf %t && mkdir -p %t && cd %t +// RUN: not --crash %clang_cc1 %s -emit-llvm -o foo.ll +// RUN: ls . | FileCheck %s --allow-empty +// CHECK-NOT: foo.ll + +#pragma clang __debug crash +FOO diff --git a/test/Frontend/system-header-line-directive-ms-lineendings.c b/test/Frontend/system-header-line-directive-ms-lineendings.c new file mode 100644 index 000000000000..8ed1e5401047 --- /dev/null +++ b/test/Frontend/system-header-line-directive-ms-lineendings.c @@ -0,0 +1,21 @@ +// RUN: %clang_cc1 %s -E -o - -I %S/Inputs -isystem %S/Inputs/SystemHeaderPrefix | FileCheck %s +#include <noline.h> +#include <line-directive-in-system.h> + +#include "line-directive.h" + +// This tests that the line numbers for the current file are correctly outputted +// for the include-file-completed test case. This file should be CRLF. + +// CHECK: # 1 "{{.*}}system-header-line-directive-ms-lineendings.c" 2 +// CHECK: # 1 "{{.*}}noline.h" 1 3 +// CHECK: foo(); +// CHECK: # 3 "{{.*}}system-header-line-directive-ms-lineendings.c" 2 +// CHECK: # 1 "{{.*}}line-directive-in-system.h" 1 3 +// The "3" below indicates that "foo.h" is considered a system header. +// CHECK: # 1 "foo.h" 3 +// CHECK: foo(); +// CHECK: # 4 "{{.*}}system-header-line-directive-ms-lineendings.c" 2 +// CHECK: # 1 "{{.*}}line-directive.h" 1 +// CHECK: # 10 "foo.h"{{$}} +// CHECK: # 6 "{{.*}}system-header-line-directive-ms-lineendings.c" 2 diff --git a/test/Frontend/verify-prefixes.c b/test/Frontend/verify-prefixes.c new file mode 100644 index 000000000000..c5b545cf84c0 --- /dev/null +++ b/test/Frontend/verify-prefixes.c @@ -0,0 +1,118 @@ +#if GC +# define GCONST const +#else +# define GCONST +#endif + +// gconst-note@8 {{variable 'glb' declared const here}} +GCONST int glb = 5; + + +// Check various correct prefix spellings and combinations. +// +// RUN: %clang_cc1 -DGC -verify=gconst %s +// RUN: %clang_cc1 -Wcast-qual -DLC -verify=lconst %s +// RUN: %clang_cc1 -DSC -verify=expected %s +// RUN: %clang_cc1 -DSC -verify %s +// RUN: %clang_cc1 -DSC -verify -verify %s +// RUN: %clang_cc1 -verify=nconst %s +// RUN: %clang_cc1 -verify=n-const %s +// RUN: %clang_cc1 -verify=n_const %s +// RUN: %clang_cc1 -verify=NConst %s +// RUN: %clang_cc1 -verify=NConst2 %s +// RUN: %clang_cc1 -Wcast-qual -DGC -DLC -verify=gconst,lconst %s +// RUN: %clang_cc1 -Wcast-qual -DGC -DLC -DSC -verify=gconst,lconst,expected %s +// RUN: %clang_cc1 -Wcast-qual -DGC -DLC -verify=gconst -verify=lconst %s +// RUN: %clang_cc1 -Wcast-qual -DGC -DLC -DSC -verify=gconst,lconst -verify %s +// RUN: %clang_cc1 -DGC -DSC -verify -verify=gconst -verify %s +// +// Duplicate prefixes. +// RUN: %clang_cc1 -Wcast-qual -DGC -DLC -verify=gconst,lconst,gconst %s +// RUN: %clang_cc1 -DGC -verify=gconst -verify=gconst,gconst %s +// RUN: %clang_cc1 -DSC -verify=expected -verify=expected %s +// RUN: %clang_cc1 -DSC -verify -verify=expected %s +// +// Various tortured cases: multiple directives with different prefixes per +// line, prefixes used as comments, prefixes prefixing prefixes, and prefixes +// with special suffixes. +// RUN: %clang_cc1 -Wcast-qual -DLC -verify=foo %s +// RUN: %clang_cc1 -DSC -verify=bar %s +// RUN: %clang_cc1 -Wcast-qual -DLC -DSC -verify=foo,bar %s +// RUN: %clang_cc1 -Wcast-qual -DLC -DSC -verify=bar,foo %s +// RUN: %clang_cc1 -DSC -verify=foo-bar %s +// RUN: %clang_cc1 -Wcast-qual -DLC -verify=bar-foo %s +// RUN: %clang_cc1 -Wcast-qual -DLC -DSC -verify=foo,foo-bar %s +// RUN: %clang_cc1 -Wcast-qual -DLC -DSC -verify=foo-bar,foo %s +// RUN: %clang_cc1 -Wcast-qual -DLC -DSC -verify=bar,bar-foo %s +// RUN: %clang_cc1 -Wcast-qual -DLC -DSC -verify=bar-foo,bar %s +// RUN: %clang_cc1 -Wcast-qual -DLC -DSC -verify=foo-bar,bar-foo %s +// RUN: %clang_cc1 -DSC -verify=foo-warning %s +// RUN: %clang_cc1 -Wcast-qual -DLC -verify=bar-warning-re %s +// RUN: %clang_cc1 -Wcast-qual -DLC -DSC -verify=foo,foo-warning %s +// RUN: %clang_cc1 -Wcast-qual -DLC -DSC -verify=foo-warning,foo %s +// RUN: %clang_cc1 -Wcast-qual -DLC -DSC -verify=bar,bar-warning-re %s +// RUN: %clang_cc1 -Wcast-qual -DLC -DSC -verify=bar-warning-re,bar %s + + +// Check invalid prefixes. Check that there's no additional output, which +// might indicate that diagnostic verification became enabled even though it +// was requested incorrectly. Check that prefixes are reported in command-line +// order. +// +// RUN: not %clang_cc1 -verify=5abc,-xy,foo,_k -verify='#a,b$' %s 2> %t +// RUN: FileCheck --check-prefixes=ERR %s < %t +// +// ERR-NOT: {{.}} +// ERR: error: invalid value '5abc' in '-verify=' +// ERR-NEXT: note: -verify prefixes must start with a letter and contain only alphanumeric characters, hyphens, and underscores +// ERR-NEXT: error: invalid value '-xy' in '-verify=' +// ERR-NEXT: note: -verify prefixes must start with a letter and contain only alphanumeric characters, hyphens, and underscores +// ERR-NEXT: error: invalid value '_k' in '-verify=' +// ERR-NEXT: note: -verify prefixes must start with a letter and contain only alphanumeric characters, hyphens, and underscores +// ERR-NEXT: error: invalid value '#a' in '-verify=' +// ERR-NEXT: note: -verify prefixes must start with a letter and contain only alphanumeric characters, hyphens, and underscores +// ERR-NEXT: error: invalid value 'b$' in '-verify=' +// ERR-NEXT: note: -verify prefixes must start with a letter and contain only alphanumeric characters, hyphens, and underscores +// ERR-NOT: {{.}} + + +// Check that our test code actually has expected diagnostics when there's no +// -verify. +// +// RUN: not %clang_cc1 -Wcast-qual -DGC -DLC -DSC %s 2> %t +// RUN: FileCheck --check-prefix=ALL %s < %t +// +// ALL: cannot assign to variable 'glb' with const-qualified type 'const int' +// ALL: variable 'glb' declared const here +// ALL: cast from 'const int *' to 'int *' drops const qualifier +// ALL: initializing 'int *' with an expression of type 'const int *' discards qualifiers + + +#if LC +# define LCONST const +#else +# define LCONST +#endif + +#if SC +# define SCONST const +#else +# define SCONST +#endif + +void foo() { + LCONST int loc = 5; + SCONST static int sta = 5; + // We don't actually expect 1-2 occurrences of this error. We're just + // checking the parsing. + glb = 6; // gconst-error1-2 {{cannot assign to variable 'glb' with const-qualified type 'const int'}} + *(int*)(&loc) = 6; // lconst-warning {{cast from 'const int *' to 'int *' drops const qualifier}} + ; // Code, comments, and many directives with different prefixes per line, including cases where some prefixes (foo and bar) prefix others (such as foo-bar and bar-foo), such that some prefixes appear as normal comments and some have special suffixes (-warning and -re): foo-warning@-1 {{cast from 'const int *' to 'int *' drops const qualifier}} foo-bar-warning@+1 {{initializing 'int *' with an expression of type 'const int *' discards qualifiers}} foo-warning-warning@+1 {{initializing 'int *' with an expression of type 'const int *' discards qualifiers}} bar-warning-re-warning@-1 {{cast from 'const int *' to 'int *' drops const qualifier}} bar-foo-warning@-1 {{cast from 'const int *' to 'int *' drops const qualifier}} bar-warning@+1 {{initializing 'int *' with an expression of type 'const int *' discards qualifiers}} + int *p = &sta; // expected-warning {{initializing 'int *' with an expression of type 'const int *' discards qualifiers}} +} + +// nconst-no-diagnostics +// n-const-no-diagnostics +// n_const-no-diagnostics +// NConst-no-diagnostics +// NConst2-no-diagnostics diff --git a/test/Frontend/x86-target-cpu.c b/test/Frontend/x86-target-cpu.c index 4e0db5568a93..b5103d238c9d 100644 --- a/test/Frontend/x86-target-cpu.c +++ b/test/Frontend/x86-target-cpu.c @@ -13,7 +13,9 @@ // RUN: %clang_cc1 -triple x86_64-unknown-unknown -target-cpu skylake-avx512 -verify %s // RUN: %clang_cc1 -triple x86_64-unknown-unknown -target-cpu skx -verify %s // RUN: %clang_cc1 -triple x86_64-unknown-unknown -target-cpu cannonlake -verify %s +// RUN: %clang_cc1 -triple x86_64-unknown-unknown -target-cpu icelake -verify %s // RUN: %clang_cc1 -triple x86_64-unknown-unknown -target-cpu knl -verify %s +// RUN: %clang_cc1 -triple x86_64-unknown-unknown -target-cpu knm -verify %s // RUN: %clang_cc1 -triple x86_64-unknown-unknown -target-cpu bonnell -verify %s // RUN: %clang_cc1 -triple x86_64-unknown-unknown -target-cpu silvermont -verify %s // RUN: %clang_cc1 -triple x86_64-unknown-unknown -target-cpu k8 -verify %s |