mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-05-13 17:37:00 +00:00

Previously these would be transformed into annotation tokens and the preprocessor would then assume they were real tokens with source locations and assert/UB. Other pragmas that produce annotation tokens aren't a problem because they aren't handled if the parser isn't hooked up - ParsePragma.cpp registers those handlers & isn't run for pure preprocessing. So they're treated as unknown pragmas & printed verbatim by the preprocessor. Perhaps these pragmas should be treated the same way? But they got mixed in with other __debug pragmas that do need to be handled during preprocessing. The third __debug pragma that produces an annotation token is 'captured' - which had its own fix for this issue - by not inserting the annotation token in the first place if it detected that it was in preprocessing mode. I've removed that fix (from Lex/Pragma.cpp) in favor of the more general one in Frontend/PrintPreprocessedOutput.cpp. llvm-svn: 346928
9 lines
237 B
C
9 lines
237 B
C
// RUN: %clang_cc1 -E %s | FileCheck %s
|
|
|
|
#pragma clang __debug parser_crash
|
|
#pragma clang __debug dump Test
|
|
|
|
// CHECK: #pragma clang __debug parser_crash
|
|
// FIXME: The dump parameter is dropped.
|
|
// CHECK: #pragma clang __debug dump{{$}}
|