diff options
author | Chris Lattner <sabre@nondot.org> | 2008-02-06 21:20:34 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2008-02-06 21:20:34 +0000 |
commit | c8edf6bd5f76bf50411d037c83d36847edfa68f0 (patch) | |
tree | a0c9b7491e488438c88f1618965a7ad6bfb1fdf6 | |
parent | dac2b54b1c6e91569585ef9904295feda2ef3ae9 (diff) |
explicitly document that return statement argument does not necessarily follow the result type of the function. Add testcase.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@46823 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/clang/AST/Stmt.h | 9 | ||||
-rw-r--r-- | test/CodeGen/statements.c | 8 |
2 files changed, 14 insertions, 3 deletions
diff --git a/include/clang/AST/Stmt.h b/include/clang/AST/Stmt.h index dae7fbf49b..e92c4faea7 100644 --- a/include/clang/AST/Stmt.h +++ b/include/clang/AST/Stmt.h @@ -722,7 +722,14 @@ public: }; -/// 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; diff --git a/test/CodeGen/statements.c b/test/CodeGen/statements.c index 46d19dbc52..4092121393 100644 --- a/test/CodeGen/statements.c +++ b/test/CodeGen/statements.c @@ -1,9 +1,13 @@ -// 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; } + |