aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Preud'homme <robotux@celest.fr>2014-03-31 22:58:17 +0800
committerThomas Preud'homme <robotux@celest.fr>2014-03-31 22:59:10 +0800
commit3e56584223a67a6c2f41a43cf38e0960e9992238 (patch)
tree6e3c4fd4ee3dce993b114170cbbcecd772336545
parenta620b12dc18e7e40c7497dcfb976a5628c3e57f9 (diff)
downloadtinycc-3e56584223a67a6c2f41a43cf38e0960e9992238.tar.gz
tinycc-3e56584223a67a6c2f41a43cf38e0960e9992238.tar.bz2
Allow local redefinition of enumerator
-rw-r--r--tccgen.c2
-rw-r--r--tests/tests2/63_local_enumerator_redefinition.c14
-rw-r--r--tests/tests2/63_local_enumerator_redefinition.expect0
-rw-r--r--tests/tests2/Makefile3
4 files changed, 17 insertions, 2 deletions
diff --git a/tccgen.c b/tccgen.c
index 3171720..84188ad 100644
--- a/tccgen.c
+++ b/tccgen.c
@@ -2827,7 +2827,7 @@ static void struct_decl(CType *type, int u, int tdef)
if (v < TOK_UIDENT)
expect("identifier");
ss = sym_find(v);
- if (ss)
+ if (ss && !local_stack)
tcc_error("redefinition of enumerator '%s'",
get_tok_str(v, NULL));
next();
diff --git a/tests/tests2/63_local_enumerator_redefinition.c b/tests/tests2/63_local_enumerator_redefinition.c
new file mode 100644
index 0000000..dd4d8e0
--- /dev/null
+++ b/tests/tests2/63_local_enumerator_redefinition.c
@@ -0,0 +1,14 @@
+enum {
+ FOO,
+ BAR
+};
+
+int main(void)
+{
+ enum {
+ FOO = 2,
+ BAR
+ };
+
+ return BAR - FOO;
+}
diff --git a/tests/tests2/63_local_enumerator_redefinition.expect b/tests/tests2/63_local_enumerator_redefinition.expect
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/tests2/63_local_enumerator_redefinition.expect
diff --git a/tests/tests2/Makefile b/tests/tests2/Makefile
index fa564f9..bd6f2c1 100644
--- a/tests/tests2/Makefile
+++ b/tests/tests2/Makefile
@@ -74,7 +74,8 @@ TESTS = \
59_function_array.test \
60_enum_redefinition.test \
61_undefined_enum.test \
- 62_enumerator_redefinition.test
+ 62_enumerator_redefinition.test \
+ 63_local_enumerator_redefinition.test
# 30_hanoi.test -- seg fault in the code, gcc as well
# 34_array_assignment.test -- array assignment is not in C standard