blob: 87fbad0c72131daefdaf469a4637f49a8d80076b [file] [log] [blame]
// This test checks that we don't crash when we load two conflicting PCM files
// and instead emit the appropriate diagnostics.
// RUN: rm -rf %t
// RUN: split-file %s %t
// RUN: mkdir %t/frameworks1
// RUN: clang-scan-deps -format experimental-full -o %t/deps1.json -- \
// RUN: %clang -fmodules -fmodules-cache-path=%t/cache \
// RUN: -F %t/frameworks1 -F %t/frameworks2 \
// RUN: -c %t/tu1.m -o %t/tu1.o
// RUN: cp -r %t/frameworks2/A.framework %t/frameworks1
// RUN: not clang-scan-deps -format experimental-full -o %t/deps2.json 2>%t/errs -- \
// RUN: %clang -fmodules -fmodules-cache-path=%t/cache \
// RUN: -F %t/frameworks1 -F %t/frameworks2 \
// RUN: -c %t/tu2.m -o %t/tu2.o
// RUN: FileCheck --input-file=%t/errs %s
// CHECK: fatal error: module 'A' is defined in both '{{.*}}.pcm' and '{{.*}}.pcm'
// CHECK-NEXT: note: compiled from '{{.*}}frameworks1{{.*}}' and '{{.*}}frameworks2{{.*}}'
//--- frameworks2/A.framework/Modules/module.modulemap
framework module A { header "A.h" }
//--- frameworks2/A.framework/Headers/A.h
#define MACRO_A 1
//--- frameworks2/B.framework/Modules/module.modulemap
framework module B { header "B.h" }
//--- frameworks2/B.framework/Headers/B.h
#include <A/A.h>
//--- tu1.m
#include <B/B.h>
//--- tu2.m
#include <A/A.h>
#include <B/B.h> // This results in a conflict and a fatal loader error.
#if MACRO_A // This crashes with lexer that does not respect `cutOfLexing()`.
#endif