};
-/// ReturnStmt - This represents a return, optionally of an expression.
+/// ReturnStmt - This represents a return, optionally of an expression:
+/// return;
+/// return 4;
+///
+/// Note that GCC allows return with no argument in a function declared to
+/// return a value, and it allows returning a value in functions declared to
+/// return void. We explicitly model this in the AST, which means you can't
+/// depend on the return type of the function and the presence of an argument.
///
class ReturnStmt : public Stmt {
Expr *RetExpr;
-// RUN: clang %s -emit-llvm
+// RUN: clang < %s -emit-llvm
-void foo(int x) {
+void test1(int x) {
switch (x) {
case 111111111111111111111111111111111111111:
bar();
}
}
+// Mismatched type between return and function result.
+int test2() { return; }
+void test3() { return 4; }
+