r204566 - CodeGen: Make string tests exercise the MS ABI

Richard Smith richard at metafoo.co.uk
Sun Mar 23 11:48:44 PDT 2014


On Sun, Mar 23, 2014 at 11:22 AM, David Majnemer
<david.majnemer at gmail.com>wrote:

> Author: majnemer
> Date: Sun Mar 23 13:22:10 2014
> New Revision: 204566
>
> URL: http://llvm.org/viewvc/llvm-project?rev=204566&view=rev
> Log:
> CodeGen: Make string tests exercise the MS ABI
>
> r204562 unwittingly failed tests for some bots.  Make those tests work
> with both the Itanium and MS ABIs.
>
> Modified:
>     cfe/trunk/test/CodeGen/c-strings.c
>     cfe/trunk/test/CodeGen/string-literal-short-wstring.c
>
> Modified: cfe/trunk/test/CodeGen/c-strings.c
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/c-strings.c?rev=204566&r1=204565&r2=204566&view=diff
>
> ==============================================================================
> --- cfe/trunk/test/CodeGen/c-strings.c (original)
> +++ cfe/trunk/test/CodeGen/c-strings.c Sun Mar 23 13:22:10 2014
> @@ -1,15 +1,23 @@
> -// RUN: %clang_cc1 -emit-llvm -o - %s | FileCheck %s
> +// RUN: %clang_cc1 -triple %itanium_abi_triple -emit-llvm -o - %s |
> FileCheck %s
> +// RUN: %clang_cc1 -triple %ms_abi_triple -emit-llvm -o - %s | FileCheck
> %s --check-prefix=WIN32
>
>  // Should be 3 hello strings, two global (of different sizes), the rest
> are
>  // shared.
>
>  // CHECK: @align = global i8 [[ALIGN:[0-9]+]]
> +// WIN32: @align = global i8 [[ALIGN:[0-9]+]]
>

You don't need to duplicate the common checks for both runs of this test.
You can give FileCheck multiple --check-prefixes: for instance, give the
first one --check-prefix=CHECK --check-prefix=ITANIUM and the second
--check-prefix=CHECK --check-prefix=WIN32, and use CHECK: for the things
that should match in both runs.


>  // CHECK: @.str = private unnamed_addr constant [6 x i8] c"hello\00"
> +// WIN32: @"\01??_C at _05CJBACGMB@hello?$AA@" = linkonce_odr unnamed_addr
> constant [6 x i8] c"hello\00", align 1
>  // CHECK: @f1.x = internal global i8* getelementptr inbounds ([6 x i8]*
> @.str, i32 0, i32 0)
> +// WIN32: @f1.x = internal global i8* getelementptr inbounds ([6 x i8]*
> @"\01??_C at _05CJBACGMB@hello?$AA@", i32 0, i32 0)
>  // CHECK: @f2.x = internal global [6 x i8] c"hello\00", align [[ALIGN]]
> +// WIN32: @f2.x = internal global [6 x i8] c"hello\00", align [[ALIGN]]
>  // CHECK: @f3.x = internal global [8 x i8] c"hello\00\00\00", align
> [[ALIGN]]
> +// WIN32: @f3.x = internal global [8 x i8] c"hello\00\00\00", align
> [[ALIGN]]
>  // CHECK: @f4.x = internal global %struct.s { i8* getelementptr inbounds
> ([6 x i8]* @.str, i32 0, i32 0) }
> +// WIN32: @f4.x = internal global %struct.s { i8* getelementptr inbounds
> ([6 x i8]* @"\01??_C at _05CJBACGMB@hello?$AA@", i32 0, i32 0) }
>  // CHECK: @x = global [3 x i8] c"ola", align [[ALIGN]]
> +// WIN32: @x = global [3 x i8] c"ola", align [[ALIGN]]
>
>  #if defined(__s390x__)
>  unsigned char align = 2;
> @@ -20,42 +28,53 @@ unsigned char align = 1;
>  void bar(const char *);
>
>  // CHECK-LABEL: define void @f0()
> +// WIN32-LABEL: define void @f0()
>  void f0() {
>    bar("hello");
>    // CHECK: call void @bar({{.*}} @.str
> +  // WIN32: call void @bar({{.*}} @"\01??_C at _05CJBACGMB@hello?$AA@"
>  }
>
>  // CHECK-LABEL: define void @f1()
> +// WIN32-LABEL: define void @f1()
>  void f1() {
>    static char *x = "hello";
>    bar(x);
>    // CHECK: [[T1:%.*]] = load i8** @f1.x
>    // CHECK: call void @bar(i8* [[T1:%.*]])
> +  // WIN32: [[T1:%.*]] = load i8** @f1.x
> +  // WIN32: call void @bar(i8* [[T1:%.*]])
>  }
>
>  // CHECK-LABEL: define void @f2()
> +// WIN32-LABEL: define void @f2()
>  void f2() {
>    static char x[] = "hello";
>    bar(x);
>    // CHECK: call void @bar({{.*}} @f2.x
> +  // WIN32: call void @bar({{.*}} @f2.x
>  }
>
>  // CHECK-LABEL: define void @f3()
> +// WIN32-LABEL: define void @f3()
>  void f3() {
>    static char x[8] = "hello";
>    bar(x);
>    // CHECK: call void @bar({{.*}} @f3.x
> +  // WIN32: call void @bar({{.*}} @f3.x
>  }
>
>  void gaz(void *);
>
>  // CHECK-LABEL: define void @f4()
> +// WIN32-LABEL: define void @f4()
>  void f4() {
>    static struct s {
>      char *name;
>    } x = { "hello" };
>    gaz(&x);
>    // CHECK: call void @gaz({{.*}} @f4.x
> +  // WIN32: call void @gaz({{.*}} @f4.x
>  }
>
>  char x[3] = "ola";
>
> Modified: cfe/trunk/test/CodeGen/string-literal-short-wstring.c
> URL:
> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/string-literal-short-wstring.c?rev=204566&r1=204565&r2=204566&view=diff
>
> ==============================================================================
> --- cfe/trunk/test/CodeGen/string-literal-short-wstring.c (original)
> +++ cfe/trunk/test/CodeGen/string-literal-short-wstring.c Sun Mar 23
> 13:22:10 2014
> @@ -1,32 +1,40 @@
> -// RUN: %clang_cc1 -x c++ -emit-llvm -fshort-wchar %s -o - | FileCheck %s
> +// RUN: %clang_cc1 -x c++ -triple %itanium_abi_triple -emit-llvm
> -fshort-wchar %s -o - | FileCheck %s
> +// RUN: %clang_cc1 -x c++ -triple %ms_abi_triple -emit-llvm -fshort-wchar
> %s -o - | FileCheck %s --check-prefix=WIN32
>  // Runs in c++ mode so that wchar_t is available.
>
>  int main() {
>    // This should convert to utf8.
>    // CHECK: private unnamed_addr constant [10 x i8]
> c"\E1\84\A0\C8\A0\F4\82\80\B0\00", align 1
> +  // WIN32: private unnamed_addr constant [10 x i8]
> c"\E1\84\A0\C8\A0\F4\82\80\B0\00", align 1
>    char b[10] = "\u1120\u0220\U00102030";
>
>    // CHECK: private unnamed_addr constant [3 x i16] [i16 65, i16 66, i16
> 0]
> +  // WIN32: linkonce_odr unnamed_addr constant [3 x i16] [i16 65, i16 66,
> i16 0]
>    const wchar_t *foo = L"AB";
>
>    // This should convert to utf16.
>    // CHECK: private unnamed_addr constant [5 x i16] [i16 4384, i16 544,
> i16 -9272, i16 -9168, i16 0]
> +  // WIN32: linkonce_odr unnamed_addr constant [5 x i16] [i16 4384, i16
> 544, i16 -9272, i16 -9168, i16 0]
>    const wchar_t *bar = L"\u1120\u0220\U00102030";
>
>
>
>    // Should pick second character.
>    // CHECK: store i8 98
> +  // WIN32: store i8 98
>    char c = 'ab';
>
>    // CHECK: store i16 97
> +  // WIN32: store i16 97
>    wchar_t wa = L'a';
>
>    // Should pick second character.
>    // CHECK: store i16 98
> +  // WIN32: store i16 98
>    wchar_t wb = L'ab';
>
>    // -4085 == 0xf00b
>    // CHECK: store i16 -4085
> +  // WIN32: store i16 -4085
>    wchar_t wc = L'\uF00B';
>  }
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140323/63bf7a60/attachment.html>


More information about the cfe-commits mailing list