xref: /llvm-project/clang/test/Analysis/conditional-operator.cpp (revision a393e68b27fcc8b78256407c99c6179acea056fe)
1*a393e68bSGeorge Karpenkov // RUN: %clang_analyze_cc1 -analyzer-checker=core,debug.ExprInspection -analyzer-config eagerly-assume=false %s -analyzer-output=text -verify
28591aa78SAnna Zaks 
38591aa78SAnna Zaks void clang_analyzer_eval(bool);
48591aa78SAnna Zaks 
58591aa78SAnna Zaks // Test that the analyzer does not crash on GNU extension operator "?:".
NoCrashTest(int x,int y)68591aa78SAnna Zaks void NoCrashTest(int x, int y) {
78591aa78SAnna Zaks 	int w = x ?: y;
88591aa78SAnna Zaks }
98591aa78SAnna Zaks 
OperatorEvaluationTest(int y)108591aa78SAnna Zaks void OperatorEvaluationTest(int y) {
118591aa78SAnna Zaks   int x = 1;
128591aa78SAnna Zaks 	int w = x ?: y;  // expected-note {{'?' condition is true}}
138591aa78SAnna Zaks 
148591aa78SAnna Zaks 	// TODO: We are not precise when processing the "?:" operator in C++.
158591aa78SAnna Zaks   clang_analyzer_eval(w == 1); // expected-warning{{UNKNOWN}}
168591aa78SAnna Zaks                                // expected-note@-1{{UNKNOWN}}
178591aa78SAnna Zaks }
18