| # REQUIRES: system-darwin |
| |
| # Tests whether the expression evaluator can handle the `NS_ENUM`/`NS_OPTIONS` |
| # typedefs from Objective-C `CoreFoundation`. |
| # Here `module.h` mimicks the `NS_OPTIONS` typedef from `CoreFoundation`. |
| # |
| # The `ClangModulesDeclVendor` currently compiles modules as |
| # C++, so the `MyInt` Clang decl in the module will be a `TypedefType`, |
| # while the DWARF AST parser will produce an `EnumType` (since that's what |
| # the debug-info says). When the `ASTImporter` imports these decls into the |
| # scratch AST, it will fail to re-use one or the other decl because they |
| # aren't structurally equivalent (one is a typedef, the other an enum), |
| # so we end up with two conflicting `MyInt` declarations in the scratch AST |
| # and the expression fails to run due to ambiguity in name lookup. |
| |
| # RUN: split-file %s %t |
| # RUN: %clang_host -g %t/main.m -fmodules -fcxx-modules -o %t.out |
| # RUN: %lldb -x -b -s %t/commands.input %t.out -o exit 2>&1 \ |
| # RUN: | FileCheck %s |
| |
| #--- main.m |
| |
| #import "module.h" |
| |
| int main() { |
| MyInt i; |
| return i; |
| } |
| |
| #--- module.h |
| |
| #if (__cplusplus) |
| typedef int MyInt; |
| enum : MyInt { CASE }; |
| #else |
| typedef enum MyInt : int MyInt; |
| enum MyInt : int { CASE }; |
| #endif |
| |
| #--- module.modulemap |
| module Int { |
| header "module.h" |
| } |
| |
| #--- commands.input |
| |
| break set -n main |
| run |
| expression -l objective-c -- (MyInt)5 |
| |
| # CHECK: error: reference to 'MyInt' is ambiguous |
| # CHECK: error: reference to 'MyInt' is ambiguous |
| # CHECK: note: note: candidate found by name lookup is 'MyInt' |
| # CHECK: note: note: candidate found by name lookup is 'MyInt' |