10a77d919SArtem Dergachev // FIXME: Figure out how to use %clang_analyze_cc1 with our lit.local.cfg.
20a77d919SArtem Dergachev // RUN: %clang_cc1 -analyze -triple x86_64-unknown-linux-gnu \
30a77d919SArtem Dergachev // RUN:                     -analyzer-checker=core \
40a77d919SArtem Dergachev // RUN:                     -analyzer-dump-egraph=%t.dot %s
50a77d919SArtem Dergachev // RUN: %exploded_graph_rewriter %t.dot | FileCheck %s
60a77d919SArtem Dergachev // REQUIRES: asserts
70a77d919SArtem Dergachev 
80a77d919SArtem Dergachev // FIXME: Substitution doesn't seem to work on Windows.
90a77d919SArtem Dergachev // UNSUPPORTED: system-windows
100a77d919SArtem Dergachev 
110a77d919SArtem Dergachev struct S {
120a77d919SArtem Dergachev   S() {}
130a77d919SArtem Dergachev };
140a77d919SArtem Dergachev 
150a77d919SArtem Dergachev void test() {
160a77d919SArtem Dergachev   // CHECK: Objects Under Construction:
170a77d919SArtem Dergachev   // CHECK-SAME: <tr>
180a77d919SArtem Dergachev   // CHECK-SAME:   <td align="left"><b>#0 Call</b></td>
190a77d919SArtem Dergachev   // CHECK-SAME:   <td align="left" colspan="2">
20*ad38e58eSArtem Dergachev   // CHECK-SAME:     <font color="gray60">test </font>
210a77d919SArtem Dergachev   // CHECK-SAME:   </td>
220a77d919SArtem Dergachev   // CHECK-SAME: </tr>
230a77d919SArtem Dergachev   // CHECK-SAME: <tr>
240a77d919SArtem Dergachev   // CHECK-SAME:   <td align="left"><i>S{{[0-9]*}}</i></td>
250a77d919SArtem Dergachev   // CHECK-SAME:   <td align="left"><font color="darkgreen"><i>
260a77d919SArtem Dergachev   // CHECK-SAME:     (materialize temporary)
270a77d919SArtem Dergachev   // CHECK-SAME:   </i></font></td>
280a77d919SArtem Dergachev   // CHECK-SAME:   <td align="left">S()</td>
290a77d919SArtem Dergachev   // CHECK-SAME:   <td align="left">&amp;s</td>
300a77d919SArtem Dergachev   // CHECK-SAME: </tr>
310a77d919SArtem Dergachev   // CHECK-SAME: <tr>
320a77d919SArtem Dergachev   // CHECK-SAME:   <td align="left"><i>S{{[0-9]*}}</i></td>
330a77d919SArtem Dergachev   // CHECK-SAME:   <td align="left"><font color="darkgreen"><i>
340a77d919SArtem Dergachev   // CHECK-SAME:     (elide constructor)
350a77d919SArtem Dergachev   // CHECK-SAME:   </i></font></td>
360a77d919SArtem Dergachev   // CHECK-SAME:   <td align="left">S()</td>
370a77d919SArtem Dergachev   // CHECK-SAME:   <td align="left">&amp;s</td>
380a77d919SArtem Dergachev   // CHECK-SAME: </tr>
390a77d919SArtem Dergachev   // CHECK-SAME: <tr>
400a77d919SArtem Dergachev   // CHECK-SAME:   <td align="left"><i>S{{[0-9]*}}</i></td>
410a77d919SArtem Dergachev   // CHECK-SAME:   <td align="left"><font color="darkgreen"><i>
420a77d919SArtem Dergachev   // CHECK-SAME:     (construct into local variable)
430a77d919SArtem Dergachev   // CHECK-SAME:   </i></font></td>
440a77d919SArtem Dergachev   // CHECK-SAME:   <td align="left">S s = S();</td>
450a77d919SArtem Dergachev   // CHECK-SAME:   <td align="left">&amp;s</td>
460a77d919SArtem Dergachev   // CHECK-SAME: </tr>
470a77d919SArtem Dergachev   S s = S();
480a77d919SArtem Dergachev }
49