74 lines · cpp
1// RUN: %clang_cc1 -emit-llvm -o - -triple i686-pc-win32 %s | FileCheck %s2// Define macros, using token pasting, to build up an identifier of any length3#define C_(P1, P2) P1##P24#define C2(P1, P2) C_(P1, P2)5#define C4(P1, P2, P3, P4) C2(C2(P1, P2), C2(P3, P4))6 7#define X2(X) C2(X, X)8#define X4(X) X2(X2(X))9#define X8(X) X2(X4(X))10#define X16(X) X2(X8(X))11#define X32(X) X2(X16(X))12#define X64(X) X2(X32(X))13#define X128(X) X2(X64(X))14#define X256(X) X2(X128(X))15#define X512(X) X2(X256(X))16#define X1024(X) X2(X512(X))17#define X2048(X) X2(X1024(X))18#define X4096(X) X2(X2048(X))19 20#define X4095(X) \21 C2(C2( \22 C4(X, X2(X), X4(X), X8(X)), \23 C4(X16(X), X32(X), X64(X), X128(X))), \24 C4(X256(X), X512(X), X1024(X), X2048(X)))25 26int X4095(x);27#define Y4095 X4095(y)28// CHECK-DAG: @"??@bf7ea7b95f260b0b24e7f1e8fc8370ab@" = dso_local global i32 0, align 429 30struct Y4095 {31 Y4095 ();32 virtual void f();33};34Y4095::Y4095() {}35// CHECK-DAG: @"??@a6a285da2eea70dba6b578022be61d81@??_R4@" = linkonce_odr constant %rtti.CompleteObjectLocator36// CHECK-DAG: @"??@a6a285da2eea70dba6b578022be61d81@" = unnamed_addr alias37 38// RUN: %clang_cc1 -DTHROW -fcxx-exceptions -fms-compatibility-version=18.0 -emit-llvm -o - -triple i686-pc-win32 %s | FileCheck --check-prefix=HAVECTOR %s39// RUN: %clang_cc1 -DTHROW -fcxx-exceptions -fms-compatibility-version=19.0 -emit-llvm -o - -triple i686-pc-win32 %s | FileCheck --check-prefix=OMITCTOR %s40// RUN: %clang_cc1 -DTHROW -fcxx-exceptions -fms-compatibility-version=19.10 -emit-llvm -o - -triple i686-pc-win32 %s | FileCheck --check-prefix=OMITCTOR %s41// RUN: %clang_cc1 -DTHROW -fcxx-exceptions -fms-compatibility-version=19.11 -emit-llvm -o - -triple i686-pc-win32 %s | FileCheck --check-prefix=OMITCTOR %s42// FIXME: Not known where between 19.11 and 19.14 this changed.43// RUN: %clang_cc1 -DTHROW -fcxx-exceptions -fms-compatibility-version=19.14 -emit-llvm -o - -triple i686-pc-win32 %s | FileCheck --check-prefix=HAVECTOR %s44// RUN: %clang_cc1 -DTHROW -fcxx-exceptions -fms-compatibility-version=19.20 -emit-llvm -o - -triple i686-pc-win32 %s | FileCheck --check-prefix=HAVECTOR %s45#ifdef THROW46void g() {47 throw Y4095();48// OMITCTOR: "_CT??@c14087f0ec22b387aea7c59083f4f546@4"49// HAVECTOR: "_CT??@c14087f0ec22b387aea7c59083f4f546@??@4ef4f8979c81f9d2224b32bf327e6bdf@4"50}51#endif52 53// Verify the threshold where md5 mangling kicks in54// Test an ident with 4088 characters, pre-hash, MangleName.size() is 409555#define X4088(X) \56 C2(C2( \57 C4(X, X4(X), X4(X), X8(X)), \58 C4(X8(X), X32(X), X64(X), X128(X))), \59 C4(X256(X), X512(X), X1024(X), X2048(X)))60#define Z4088 X4088(z)61// Use initialization to verify mangled name association in the il62int X4088(z) = 1515;63// CHECK-DAG: @"?{{z+}}@@3HA" = dso_local global i32 1515, align 464 65// Test an ident with 4089 characters, pre-hash, MangleName.size() is 409666#define X4089(X) \67 C2(C2( \68 C4(X2(X), X4(X), X4(X), X8(X)), \69 C4(X8(X), X32(X), X64(X), X128(X))), \70 C4(X256(X), X512(X), X1024(X), X2048(X)))71// Use initialization to verify mangled name association in the il72int X4089(z) = 1717;73// CHECK-DAG: @"??@0269945400a3474730d6880df0967d8f@" = dso_local global i32 1717, align 474