diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2015-01-18 16:23:48 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2015-01-18 16:23:48 +0000 |
commit | 06d4ba388873e6d1cfa9cd715a8935ecc8cd2097 (patch) | |
tree | 3eb853da77d46cc77c4b017525a422f9ddb1385b /test/CodeGenObjCXX/block-id.mm | |
parent | 30d791273d07fac9c0c1641a0731191bca6e8606 (diff) | |
download | src-06d4ba388873e6d1cfa9cd715a8935ecc8cd2097.tar.gz src-06d4ba388873e6d1cfa9cd715a8935ecc8cd2097.zip |
Notes
Diffstat (limited to 'test/CodeGenObjCXX/block-id.mm')
-rw-r--r-- | test/CodeGenObjCXX/block-id.mm | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/test/CodeGenObjCXX/block-id.mm b/test/CodeGenObjCXX/block-id.mm new file mode 100644 index 000000000000..e324841b37f2 --- /dev/null +++ b/test/CodeGenObjCXX/block-id.mm @@ -0,0 +1,22 @@ +// RUN: %clang_cc1 -emit-llvm -fblocks -o - -triple x86_64-apple-darwin10 -fobjc-runtime=macosx-fragile-10.5 %s | FileCheck %s + +// N.B. This test verifies that two blocks which are otherwise +// indistinguishable receive distinct manglings. +// We had a bug where the first two blocks in the global block map could +// get the same unqualified-block mangling because the logic to handle +// block-ids believed it was handling Itanium-style discriminators. + +template<typename T> +int tf() { + return T::value; +} +int i1 = ^int { + struct S { enum { value = 1 };}; + // CHECK-DAG: @_Z2tfIZUb_E1SEiv + return tf<S>(); +}(); +int i2 = ^int(int p1) { + struct S { enum { value = 2 };}; + // CHECK-DAG: @_Z2tfIZUb0_E1SEiv + return tf<S>() + p1; +}(1); |