mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 06:44:35 +00:00
68 lines
2.4 KiB
Python
68 lines
2.4 KiB
Python
|
import sys
|
||
|
|
||
|
|
||
|
def check_duplicates():
|
||
|
auto_content = ""
|
||
|
manual_content = ""
|
||
|
|
||
|
with open("src/intrinsic/llvm.rs", "r", encoding="utf8") as f:
|
||
|
manual_content = f.read()
|
||
|
with open("src/intrinsic/archs.rs", "r", encoding="utf8") as f:
|
||
|
auto_content = f.read()
|
||
|
|
||
|
intrinsics_map = {}
|
||
|
for line in auto_content.splitlines():
|
||
|
line = line.strip()
|
||
|
if not line.startswith('"'):
|
||
|
continue
|
||
|
parts = line.split('"')
|
||
|
if len(parts) != 5:
|
||
|
continue
|
||
|
intrinsics_map[parts[1]] = parts[3]
|
||
|
|
||
|
if len(intrinsics_map) == 0:
|
||
|
print("No intrinsics found in auto code... Aborting.")
|
||
|
return 1
|
||
|
print("Found {} intrinsics in auto code".format(len(intrinsics_map)))
|
||
|
errors = []
|
||
|
lines = manual_content.splitlines()
|
||
|
pos = 0
|
||
|
found = 0
|
||
|
while pos < len(lines):
|
||
|
line = lines[pos].strip()
|
||
|
# This is our marker.
|
||
|
if line == "let gcc_name = match name {":
|
||
|
while pos < len(lines):
|
||
|
line = lines[pos].strip()
|
||
|
pos += 1
|
||
|
if line == "};":
|
||
|
# We're done!
|
||
|
if found == 0:
|
||
|
print("No intrinsics found in manual code even though we found the "
|
||
|
"marker... Aborting...")
|
||
|
return 1
|
||
|
for error in errors:
|
||
|
print("ERROR => {}".format(error))
|
||
|
return 1 if len(errors) != 0 else 0
|
||
|
parts = line.split('"')
|
||
|
if len(parts) != 5:
|
||
|
continue
|
||
|
found += 1
|
||
|
if parts[1] in intrinsics_map:
|
||
|
if parts[3] != intrinsics_map[parts[1]]:
|
||
|
print("Same intrinsics (`{}` at line {}) but different GCC "
|
||
|
"translations: `{}` != `{}`".format(
|
||
|
parts[1], pos, intrinsics_map[parts[1]], parts[3]))
|
||
|
else:
|
||
|
errors.append("Duplicated intrinsics: `{}` at line {}. Please remove it "
|
||
|
" from manual code".format(parts[1], pos))
|
||
|
# Weird but whatever...
|
||
|
return 1 if len(errors) != 0 else 0
|
||
|
pos += 1
|
||
|
print("No intrinsics found in manual code... Aborting")
|
||
|
return 1
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
sys.exit(check_duplicates())
|