Clang:编译c ++预期成员名称或';'时出错声明后声明符

时间:2019-10-20 02:47:20

标签: c++ linux cmake clang llvm

我正在尝试根据LLVM的Test Suite Guide使用llvm testsuite运行SPEC2017基准测试。我的cmake命令成功执行,但是使用make时,在诸如numeric_traits.h之类的包含文件中出现错误。我在 #include <stdio.h> #include <string.h> #include <stdlib.h> char *ltrim(char *s) { while (*s == ' ' || *s == '\t') s++; return s; } char getRegister(char *text) { if (*text == 'r' || *text=='R') text++; return atoi(text); } char getHex(char *text){ int number = (int)strtol(text, NULL, 16); char reservednum[5]; if(number <= 0xFFFF){ sprintf(&reservednum[0], "%04x", number); } return atoi(reservednum); } int assembleLine(char *text, unsigned char* bytes) { text = ltrim(text); char *keyWord = strtok(text," "); if (strcmp("add",keyWord) == 0) { bytes[0] = 0x10; bytes[0] |= getRegister(strtok(NULL," ")); bytes[1] = getRegister(strtok(NULL," ")) << 4 | getRegister(strtok(NULL," ")); return 2; } else if(strcmp("subtract", keyWord) == 0){ bytes[0] = 0x50; bytes[0] |= getRegister(strtok(NULL, " ")); bytes[1] = getRegister(strtok(NULL, " ")) << 4 | getRegister(strtok(NULL, " ")); return 2; } else if(strcmp("and", keyWord) == 0){ bytes[0] = 0x20; bytes[0] |= getRegister(strtok(NULL, " ")); bytes[1] = getRegister(strtok(NULL, " ")) << 4 | getRegister(strtok(NULL, " ")); return 2; } else if(strcmp("divide", keyWord) == 0){ bytes[0] = 0x30; bytes[0] |= getRegister(strtok(NULL, " ")); bytes[1] = getRegister(strtok(NULL, " ")) << 4 | getRegister(strtok(NULL, " ")); return 2; } else if(strcmp("multiply", keyWord) == 0){ bytes[0] = 0x40; bytes[0] |= getRegister(strtok(NULL, " ")); bytes[1] = getRegister(strtok(NULL, " ")) << 4 | getRegister(strtok(NULL, " ")); return 2; } else if(strcmp("or", keyWord) == 0){ bytes[0] = 0x60; bytes[0] |= getRegister(strtok(NULL, " ")); bytes[1] = getRegister(strtok(NULL, " ")) << 4 | getRegister(strtok(NULL, " ")); return 2; } else if(strcmp("halt", keyWord) == 0){ bytes[0] = 0x00; bytes[1] = 0x00; return 2; } else if(strcmp("return", keyWord) == 0){ bytes[0] = 0x70; bytes[1] = 0x00; return 2; } else if(strcmp("addimmediate", keyWord) == 0){ bytes[0] = 0x90; bytes[0] |= getRegister(strtok(NULL, " ")); bytes[1] = getHex(strtok(NULL, " ")); return 2; } else if(strcmp("interrupt", keyWord) == 0){ bytes[0] = 0x80; bytes[0] |= getHex(strtok(NULL, " ")); bytes[1] = 0x00; return 2; } else if(strcmp("push", keyWord) == 0){ bytes[0] = 0x70; bytes[0] |= getRegister(strtok(NULL, " ")); bytes[1] = 0x40; return 2; } else if(strcmp("pop", keyWord) == 0){ bytes[0] = 0x70; bytes[0] |= getRegister(strtok(NULL, " ")); bytes[1] = 0x80; return 2; } else if(strcmp("jump", keyWord) == 0){ bytes[0] = 0xC0; bytes[1] = 0x00; bytes[2] = 0x00; bytes[3] = getHex(strtok(NULL, " ")); return 4; } else if(strcmp("branchifequal", keyWord) == 0){ bytes[0] = 0xA0; bytes[0] |= getRegister(strtok(NULL, " ")); bytes[1] = getRegister(strtok(NULL, " ")) << 4; bytes[2] = 0x00; bytes[3] = getHex(strtok(NULL, " ")); return 4; } } int main(int argc, char **argv) { FILE *src = fopen(argv[1],"r"); FILE *dst = fopen(argv[2],"w"); while (!feof(src)) { unsigned char bytes[4]; char line[1000]; if (NULL != fgets(line, 1000, src)) { printf ("read: %s\n",line); int byteCount = assembleLine(line,bytes); fwrite(bytes,byteCount,1,dst); } } fclose(src); fclose(dst); return 0; } __is_signal中每次出现numeric_traits.h时都会收到错误。

CMake命令:

stl_algobase.h

设置:

  • Clang版本7
  • 操作系统:Ubuntu 18.04
  • linux:4.18.0-25(通用)
  • 规范版本:2017

1 个答案:

答案 0 :(得分:0)

将其放入CXX https://www.spec.org/cpu2017/Docs/benchmarks/flags/526.blender_r.flags.html#b526.blender_r_D__BOOL_DEFINED的可移植性标志

FYI,<SPEC_SRC>/config/Example-clang-llvm-linux-x86.cfg<SPEC_SRC>/config/Example-aocc-linux-x86.cfg包含特定于Clang的可移植性标志。