summaryrefslogtreecommitdiffstats
path: root/clang
diff options
context:
space:
mode:
authorDaniel Sanders <daniel.sanders@imgtec.com>2014-08-21 10:13:49 +0000
committerDaniel Sanders <daniel.sanders@imgtec.com>2014-08-21 10:13:49 +0000
commit3ecaf02be9c4d284cc9b9bbed3143a492f901e0f (patch)
treec5fa013701a37f6b95c08dc32da44fd98aebc20b /clang
parent31f2f1befe7232e29c93070b2190122b75818b22 (diff)
downloadbcm5719-llvm-3ecaf02be9c4d284cc9b9bbed3143a492f901e0f.tar.gz
bcm5719-llvm-3ecaf02be9c4d284cc9b9bbed3143a492f901e0f.zip
Fix invalid test generation by utils/ABITest/ABITestGen.py when the same enum is generated more than once.
When generating records/unions, the same enum type may be generated more than once (with different names). In these cases, the name of the enum values are not sufficiently unique to prevent multiple declarations. E.g: typedef enum T3 { enum0val0 } T3; typedef T3 T2[3]; typedef enum T4 { enum0val0 } T4; typedef union T1 { T2 field0; T4 field1; char field2; } T1; Added a unique suffix to enum values so that multiple identical enum types do not use the same enum value names. One example of this bug is produced by: ABITestGen.py --no-unsigned --no-vector --no-complex --no-bool \ --max-args 0 --max-record-depth 1 -o inputs/test.9921.a.c \ -T inputs/test.9921.b.c -D inputs/test.9921.driver.c \ --min=9921 --count=1 llvm-svn: 216166
Diffstat (limited to 'clang')
-rwxr-xr-xclang/utils/ABITest/ABITestGen.py2
-rw-r--r--clang/utils/ABITest/TypeGen.py6
2 files changed, 6 insertions, 2 deletions
diff --git a/clang/utils/ABITest/ABITestGen.py b/clang/utils/ABITest/ABITestGen.py
index 4855f4893c9..27cc5ec2582 100755
--- a/clang/utils/ABITest/ABITestGen.py
+++ b/clang/utils/ABITest/ABITestGen.py
@@ -214,7 +214,7 @@ class TypePrinter:
yield '(%s) 1'%(t.name,)
elif isinstance(t, EnumType):
for i in range(0, len(t.enumerators)):
- yield 'enum%dval%d' % (t.index, i)
+ yield 'enum%dval%d_%d' % (t.index, i, t.unique_id)
elif isinstance(t, RecordType):
nonPadding = [f for f in t.fields
if not f.isPaddingBitField()]
diff --git a/clang/utils/ABITest/TypeGen.py b/clang/utils/ABITest/TypeGen.py
index 7a99d628cd2..1e4471c71e5 100644
--- a/clang/utils/ABITest/TypeGen.py
+++ b/clang/utils/ABITest/TypeGen.py
@@ -56,16 +56,20 @@ class BuiltinType(Type):
return self.name
class EnumType(Type):
+ unique_id = 0
+
def __init__(self, index, enumerators):
self.index = index
self.enumerators = enumerators
+ self.unique_id = self.__class__.unique_id
+ self.__class__.unique_id += 1
def getEnumerators(self):
result = ''
for i, init in enumerate(self.enumerators):
if i > 0:
result = result + ', '
- result = result + 'enum%dval%d' % (self.index, i)
+ result = result + 'enum%dval%d_%d' % (self.index, i, self.unique_id)
if init:
result = result + ' = %s' % (init)
OpenPOWER on IntegriCloud