[PATCH] D58322: remove microsoft intrinsics test that passes on osx but fails on linux
davidb created this revision. Herald added subscribers: cfe-commits, jdoerfert. Herald added a project: clang. davidb abandoned this revision. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D58322 Files: clang/test/CodeGen/ms-x86-intrinsics.c Index: clang/test/CodeGen/ms-x86-intrinsics.c === --- clang/test/CodeGen/ms-x86-intrinsics.c +++ /dev/null @@ -1,172 +0,0 @@ -// XFAIL: colossus -// RUN: %clang_cc1 -ffreestanding -fms-extensions -fms-compatibility -fms-compatibility-version=17.00 \ -// RUN: -triple i686--windows -Oz -emit-llvm %s -o - \ -// RUN: | FileCheck %s -check-prefix=CHECK -check-prefix=CHECK-I386 -// RUN: %clang_cc1 -ffreestanding -fms-extensions -fms-compatibility -fms-compatibility-version=17.00 \ -// RUN: -triple x86_64--windows -Oz -emit-llvm %s -o - \ -// RUN: | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-X64 - -#if defined(__i386__) -char test__readfsbyte(unsigned long Offset) { - return __readfsbyte(++Offset); -} -// CHECK-I386-LABEL: define dso_local signext i8 @test__readfsbyte(i32 %Offset) -// CHECK-I386: %inc = add i32 %Offset, 1 -// CHECK-I386: [[PTR:%[0-9]+]] = inttoptr i32 %inc to i8 addrspace(257)* -// CHECK-I386: [[VALUE:%[0-9]+]] = load volatile i8, i8 addrspace(257)* [[PTR]], align 1 -// CHECK-I386: ret i8 [[VALUE:%[0-9]+]] - -short test__readfsword(unsigned long Offset) { - return __readfsword(++Offset); -} -// CHECK-I386-LABEL: define dso_local signext i16 @test__readfsword(i32 %Offset) -// CHECK-I386: %inc = add i32 %Offset, 1 -// CHECK-I386: [[PTR:%[0-9]+]] = inttoptr i32 %inc to i16 addrspace(257)* -// CHECK-I386: [[VALUE:%[0-9]+]] = load volatile i16, i16 addrspace(257)* [[PTR]], align 2 -// CHECK-I386: ret i16 [[VALUE:%[0-9]+]] - -long test__readfsdword(unsigned long Offset) { - return __readfsdword(++Offset); -} -// CHECK-I386-LABEL: define dso_local i32 @test__readfsdword(i32 %Offset) -// CHECK-I386: %inc = add i32 %Offset, 1 -// CHECK-I386: [[PTR:%[0-9]+]] = inttoptr i32 %inc to i32 addrspace(257)* -// CHECK-I386: [[VALUE:%[0-9]+]] = load volatile i32, i32 addrspace(257)* [[PTR]], align 4 -// CHECK-I386: ret i32 [[VALUE:%[0-9]+]] - -long long test__readfsqword(unsigned long Offset) { - return __readfsqword(++Offset); -} -// CHECK-I386-LABEL: define dso_local i64 @test__readfsqword(i32 %Offset) -// CHECK-I386: %inc = add i32 %Offset, 1 -// CHECK-I386: [[PTR:%[0-9]+]] = inttoptr i32 %inc to i64 addrspace(257)* -// CHECK-I386: [[VALUE:%[0-9]+]] = load volatile i64, i64 addrspace(257)* [[PTR]], align 8 -// CHECK-I386: ret i64 [[VALUE:%[0-9]+]] -#endif - -__int64 test__emul(int a, int b) { - return __emul(a, b); -} -// CHECK-LABEL: define dso_local i64 @test__emul(i32 %a, i32 %b) -// CHECK: [[X:%[0-9]+]] = sext i32 %a to i64 -// CHECK: [[Y:%[0-9]+]] = sext i32 %b to i64 -// CHECK: [[RES:%[0-9]+]] = mul nsw i64 [[Y]], [[X]] -// CHECK: ret i64 [[RES]] - -unsigned __int64 test__emulu(unsigned int a, unsigned int b) { - return __emulu(a, b); -} -// CHECK-LABEL: define dso_local i64 @test__emulu(i32 %a, i32 %b) -// CHECK: [[X:%[0-9]+]] = zext i32 %a to i64 -// CHECK: [[Y:%[0-9]+]] = zext i32 %b to i64 -// CHECK: [[RES:%[0-9]+]] = mul nuw i64 [[Y]], [[X]] -// CHECK: ret i64 [[RES]] - -#if defined(__x86_64__) - -char test__readgsbyte(unsigned long Offset) { - return __readgsbyte(++Offset); -} -// CHECK-X64-LABEL: define dso_local i8 @test__readgsbyte(i32 %Offset) -// CHECK-X64: %inc = add i32 %Offset, 1 -// CHECK-X64: [[ZEXT:%[0-9]+]] = zext i32 %inc to i64 -// CHECK-X64: [[PTR:%[0-9]+]] = inttoptr i64 [[ZEXT]] to i8 addrspace(256)* -// CHECK-X64: [[VALUE:%[0-9]+]] = load volatile i8, i8 addrspace(256)* [[PTR]], align 1 -// CHECK-X64: ret i8 [[VALUE:%[0-9]+]] - -short test__readgsword(unsigned long Offset) { - return __readgsword(++Offset); -} -// CHECK-X64-LABEL: define dso_local i16 @test__readgsword(i32 %Offset) -// CHECK-X64: %inc = add i32 %Offset, 1 -// CHECK-X64: [[ZEXT:%[0-9]+]] = zext i32 %inc to i64 -// CHECK-X64: [[PTR:%[0-9]+]] = inttoptr i64 [[ZEXT]] to i16 addrspace(256)* -// CHECK-X64: [[VALUE:%[0-9]+]] = load volatile i16, i16 addrspace(256)* [[PTR]], align 2 -// CHECK-X64: ret i16 [[VALUE:%[0-9]+]] - -long test__readgsdword(unsigned long Offset) { - return __readgsdword(++Offset); -} -// CHECK-X64-LABEL: define dso_local i32 @test__readgsdword(i32 %Offset) -// CHECK-X64: %inc = add i32 %Offset, 1 -// CHECK-X64: [[ZEXT:%[0-9]+]] = zext i32 %inc to i64 -// CHECK-X64: [[PTR:%[0-9]+]] = inttoptr i64 [[ZEXT]] to i32 addrspace(256)* -// CHECK-X64: [[VALUE:%[0-9]+]] = load volatile i32, i32 addrspace(256)* [[PTR]], align 4 -// CHECK-X64: ret i32 [[VALUE:%[0-9]+]] - -long long test__readgsqword(unsigned long Offset) { - return __readgsqword(++Offset); -} -// CHECK-X64-LABEL: define dso_local i64 @test__readgsqword(i32 %Offset) -// CHECK-X64: %inc = add i32 %Offset, 1 -
[PATCH] D27985: Add demangling support for C++11 thread_local variables
davidb created this revision. davidb added reviewers: howard.hinnant, mclow.lists. davidb added a subscriber: cfe-commits. davidb set the repository for this revision to rL LLVM. Add support for demangling C++11 thread_local variables. In clang, the grammar for mangling for these names are " ::= TW " for wrapper variables or " ::= TH " for initialization variables. Repository: rL LLVM https://reviews.llvm.org/D27985 Files: src/cxa_demangle.cpp test/test_demangle.pass.cpp Index: test/test_demangle.pass.cpp === --- test/test_demangle.pass.cpp +++ test/test_demangle.pass.cpp @@ -29594,6 +29594,8 @@ // NOTE: disable this test since it is a negative test case, you cannot demangle a non-mangled symbol // {"\x6D", nullptr}, // This use to crash with ASAN {"_ZTIU4_farrVKPi", "typeinfo for int* const volatile restrict _far"}, +{"_ZTW1x", "thread-local wrapper routine for x"}, +{"_ZTHN3fooE", "thread-local initialization routine for foo"}, }; const unsigned N = sizeof(cases) / sizeof(cases[0]); Index: src/cxa_demangle.cpp === --- src/cxa_demangle.cpp +++ src/cxa_demangle.cpp @@ -4343,6 +4343,8 @@ //# base is the nominal target function of thunk //::= GV # Guard variable for one-time initialization // # No +//::= TW # Thread-local wrapper +//::= TH # Thread-local initialization // extension ::= TC _ # construction vtable for second-in-first // extension ::= GR # reference temporary for object @@ -4446,6 +4448,28 @@ } } break; +case 'W': +// TW # Thread-local wrapper +t = parse_name(first + 2, last, db); +if (t != first + 2) +{ +if (db.names.empty()) +return first; +db.names.back().first.insert(0, "thread-local wrapper routine for "); +first = t; +} +break; +case 'H': +//TH # Thread-local initialization +t = parse_name(first + 2, last, db); +if (t != first + 2) +{ +if (db.names.empty()) +return first; +db.names.back().first.insert(0, "thread-local initialization routine for "); +first = t; +} +break; default: // T { Index: test/test_demangle.pass.cpp === --- test/test_demangle.pass.cpp +++ test/test_demangle.pass.cpp @@ -29594,6 +29594,8 @@ // NOTE: disable this test since it is a negative test case, you cannot demangle a non-mangled symbol // {"\x6D", nullptr}, // This use to crash with ASAN {"_ZTIU4_farrVKPi", "typeinfo for int* const volatile restrict _far"}, +{"_ZTW1x", "thread-local wrapper routine for x"}, +{"_ZTHN3fooE", "thread-local initialization routine for foo"}, }; const unsigned N = sizeof(cases) / sizeof(cases[0]); Index: src/cxa_demangle.cpp === --- src/cxa_demangle.cpp +++ src/cxa_demangle.cpp @@ -4343,6 +4343,8 @@ //# base is the nominal target function of thunk //::= GV # Guard variable for one-time initialization // # No +//::= TW # Thread-local wrapper +//::= TH # Thread-local initialization // extension ::= TC _ # construction vtable for second-in-first // extension ::= GR # reference temporary for object @@ -4446,6 +4448,28 @@ } } break; +case 'W': +// TW # Thread-local wrapper +t = parse_name(first + 2, last, db); +if (t != first + 2) +{ +if (db.names.empty()) +return first; +db.names.back().first.insert(0, "thread-local wrapper routine for "); +first = t; +} +break; +case 'H': +//TH # Thread-local initialization +t = parse_name(first + 2, last, db); +if (t != first + 2) +{ +if (db.names.empty()) +return first; +db.names.back().first.insert(0, "thread-local initialization routine for "); +first = t; +} +break; default: // T { __
[PATCH] D27985: Add demangling support for C++11 thread_local variables
davidb added a comment. ping Repository: rL LLVM https://reviews.llvm.org/D27985 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D27985: Add demangling support for C++11 thread_local variables
davidb added a comment. ping Repository: rL LLVM https://reviews.llvm.org/D27985 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D27985: Add demangling support for C++11 thread_local variables
davidb added a comment. In https://reviews.llvm.org/D27985#660029, @mehdi_amini wrote: > LGTM. > > Can you apply the patch in LLVM (libDemangle) as well please? Thank you Mehdi. I have an LLVM (libDemangle) with an identical change (minus the tests) waiting. Would you like my to submit it as a separate patch? I've just requested commit access so fingers crossed I can apply them both soon. Repository: rL LLVM https://reviews.llvm.org/D27985 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D27985: Add demangling support for C++11 thread_local variables
davidb closed this revision. davidb added a comment. Closed by revision r293638. Repository: rL LLVM https://reviews.llvm.org/D27985 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits