misc-ps-region-store.cpp revision 077a40df258beb46cb746af61da115e9718a6aff
1d87682ed3c3e5d748d13a5c4f1cbb267aa756b31Ted Kremenek// RUN: %clang_cc1 -triple i386-apple-darwin9 -analyze -analyzer-experimental-internal-checks -checker-cfref -analyzer-store=region -verify -fblocks -analyzer-opt-analyze-nested-blocks %s
2d87682ed3c3e5d748d13a5c4f1cbb267aa756b31Ted Kremenek// RUN: %clang_cc1 -triple x86_64-apple-darwin9 -analyze -analyzer-experimental-internal-checks -checker-cfref -analyzer-store=region -verify -fblocks   -analyzer-opt-analyze-nested-blocks %s
3d87682ed3c3e5d748d13a5c4f1cbb267aa756b31Ted Kremenek
453287518f69b8f06f82a6cdbd13e4e3a13b58186Ted Kremenek// Test basic handling of references.
5d87682ed3c3e5d748d13a5c4f1cbb267aa756b31Ted Kremenekchar &test1_aux();
6d87682ed3c3e5d748d13a5c4f1cbb267aa756b31Ted Kremenekchar *test1() {
7d87682ed3c3e5d748d13a5c4f1cbb267aa756b31Ted Kremenek  return &test1_aux();
8d87682ed3c3e5d748d13a5c4f1cbb267aa756b31Ted Kremenek}
953287518f69b8f06f82a6cdbd13e4e3a13b58186Ted Kremenek
10910e4080986045cc2036f8d1f55398acc7fbb257Zhongxing Xu// Test test1_aux() evaluates to char &.
1153287518f69b8f06f82a6cdbd13e4e3a13b58186Ted Kremenekchar test1_as_rvalue() {
1253287518f69b8f06f82a6cdbd13e4e3a13b58186Ted Kremenek  return test1_aux();
1353287518f69b8f06f82a6cdbd13e4e3a13b58186Ted Kremenek}
1453287518f69b8f06f82a6cdbd13e4e3a13b58186Ted Kremenek
15949bdb43bf370b23a79a37b017e0a0566c0d66e0Ted Kremenek// Test passing a value as a reference.  The 'const' in test2_aux() adds
16949bdb43bf370b23a79a37b017e0a0566c0d66e0Ted Kremenek// an ImplicitCastExpr, which is evaluated as an lvalue.
17949bdb43bf370b23a79a37b017e0a0566c0d66e0Ted Kremenekint test2_aux(const int &n);
18949bdb43bf370b23a79a37b017e0a0566c0d66e0Ted Kremenekint test2(int n) {
19949bdb43bf370b23a79a37b017e0a0566c0d66e0Ted Kremenek  return test2_aux(n);
20949bdb43bf370b23a79a37b017e0a0566c0d66e0Ted Kremenek}
21949bdb43bf370b23a79a37b017e0a0566c0d66e0Ted Kremenek
22949bdb43bf370b23a79a37b017e0a0566c0d66e0Ted Kremenekint test2_b_aux(const short &n);
23949bdb43bf370b23a79a37b017e0a0566c0d66e0Ted Kremenekint test2_b(int n) {
24949bdb43bf370b23a79a37b017e0a0566c0d66e0Ted Kremenek  return test2_b_aux(n);
25949bdb43bf370b23a79a37b017e0a0566c0d66e0Ted Kremenek}
26077a40df258beb46cb746af61da115e9718a6affTed Kremenek
27077a40df258beb46cb746af61da115e9718a6affTed Kremenek// Test getting the lvalue of a derived and converting it to a base.  This
28077a40df258beb46cb746af61da115e9718a6affTed Kremenek// previously crashed.
29077a40df258beb46cb746af61da115e9718a6affTed Kremenekclass Test3_Base {};
30077a40df258beb46cb746af61da115e9718a6affTed Kremenekclass Test3_Derived : public Test3_Base {};
31077a40df258beb46cb746af61da115e9718a6affTed Kremenek
32077a40df258beb46cb746af61da115e9718a6affTed Kremenekint test3_aux(Test3_Base &x);
33077a40df258beb46cb746af61da115e9718a6affTed Kremenekint test3(Test3_Derived x) {
34077a40df258beb46cb746af61da115e9718a6affTed Kremenek  return test3_aux(x);
35077a40df258beb46cb746af61da115e9718a6affTed Kremenek}
36077a40df258beb46cb746af61da115e9718a6affTed Kremenek
37