From: Dario Domizioli Date: Mon, 28 Jul 2014 14:33:17 +0000 (+0000) Subject: [TEST] Improve tests for #pragma clang optimize off/on X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=852e1d59f8dc5fba7d79c7dfc9e5514eb212b8eb;p=clang [TEST] Improve tests for #pragma clang optimize off/on Added coverage for: * More than one "off region" in the same file * An "off region" falling off the end of an included file git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@214086 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/PCH/pragma-optimize.c b/test/PCH/pragma-optimize.c index 2206fe75cd..9570117448 100644 --- a/test/PCH/pragma-optimize.c +++ b/test/PCH/pragma-optimize.c @@ -5,6 +5,12 @@ // RUN: %clang_cc1 %s -emit-pch -o %t // RUN: %clang_cc1 %s -emit-llvm -include-pch %t -o - | FileCheck %s +// The first run line creates a pch, and since at that point HEADER is not +// defined, the only thing contained in the pch is the pragma. The second line +// then includes that pch, so HEADER is defined and the actual code is compiled. +// The check then makes sure that the pragma is in effect in the file that +// includes the pch. + // expected-no-diagnostics #ifndef HEADER diff --git a/test/SemaCXX/Inputs/header-with-pragma-optimize-off.h b/test/SemaCXX/Inputs/header-with-pragma-optimize-off.h new file mode 100644 index 0000000000..ac5020697e --- /dev/null +++ b/test/SemaCXX/Inputs/header-with-pragma-optimize-off.h @@ -0,0 +1,5 @@ + +// Open an "off" region in this header. +#pragma clang optimize off + +// Let the "off" region fall through to anything including this header. diff --git a/test/SemaCXX/pragma-optimize.cpp b/test/SemaCXX/pragma-optimize.cpp index 0f03b81f5f..0a9f041070 100644 --- a/test/SemaCXX/pragma-optimize.cpp +++ b/test/SemaCXX/pragma-optimize.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -x c++ -std=c++11 -triple x86_64-unknown-linux -emit-llvm -O2 < %s | FileCheck %s +// RUN: %clang_cc1 -I %S/Inputs -x c++ -std=c++11 -triple x86_64-unknown-linux -emit-llvm -O2 < %s | FileCheck %s #pragma clang optimize off @@ -96,11 +96,50 @@ int container3 (int par) { // CHECK-DAG: @_Z6thriceIiET_S0_{{.*}} [[ATTRTHRICEINT:#[0-9]+]] +// Test that we can re-open and re-close an "off" region after the first one, +// and that this works as expected. + +#pragma clang optimize off + +int another_optnone(int x) { + return x << 1; +} +// CHECK-DAG: @_Z15another_optnonei{{.*}} [[ATTRANOTHEROPTNONE:#[0-9]+]] + +#pragma clang optimize on + +int another_normal(int x) { + return x << 2; +} +// CHECK-DAG: @_Z14another_normali{{.*}} [[ATTRANOTHERNORMAL:#[0-9]+]] + + +// Test that we can re-open an "off" region by including a header with the +// pragma and that this works as expected (i.e. the off region "falls through" +// the end of the header into this file). + +#include + +int yet_another_optnone(int x) { + return x << 3; +} +// CHECK-DAG: @_Z19yet_another_optnonei{{.*}} [[ATTRYETANOTHEROPTNONE:#[0-9]+]] + +#pragma clang optimize on + +int yet_another_normal(int x) { + return x << 4; +} +// CHECK-DAG: @_Z18yet_another_normali{{.*}} [[ATTRYETANOTHERNORMAL:#[0-9]+]] + + // Check for both noinline and optnone on each function that should have them. // CHECK-DAG: attributes [[ATTRBAR]] = { {{.*}}noinline{{.*}}optnone{{.*}} } // CHECK-DAG: attributes [[ATTRCREATED]] = { {{.*}}noinline{{.*}}optnone{{.*}} } // CHECK-DAG: attributes [[ATTRMETHOD]] = { {{.*}}noinline{{.*}}optnone{{.*}} } // CHECK-DAG: attributes [[ATTRTHRICEFLOAT]] = { {{.*}}noinline{{.*}}optnone{{.*}} } +// CHECK-DAG: attributes [[ATTRANOTHEROPTNONE]] = { {{.*}}noinline{{.*}}optnone{{.*}} } +// CHECK-DAG: attributes [[ATTRYETANOTHEROPTNONE]] = { {{.*}}noinline{{.*}}optnone{{.*}} } // Check that the other functions do NOT have optnone. // CHECK-DAG-NOT: attributes [[ATTRFOO]] = { {{.*}}optnone{{.*}} } @@ -111,3 +150,5 @@ int container3 (int par) { // CHECK-DAG-NOT: attributes [[ATTRCONTAINER2]] = { {{.*}}optnone{{.*}} } // CHECK-DAG-NOT: attributes [[ATTRCONTAINER3]] = { {{.*}}optnone{{.*}} } // CHECK-DAG-NOT: attributes [[ATTRTHRICEINT]] = { {{.*}}optnone{{.*}} } +// CHECK-DAG-NOT: attributes [[ATTRANOTHERNORMAL]] = { {{.*}}optnone{{.*}} } +// CHECK-DAG-NOT: attributes [[ATTRYETANOTHERNORMAL]] = { {{.*}}optnone{{.*}} }