Aaron Ballman 30a5d569b2
[C23] AST equivalence of attributes (#151196)
Implicitly declared types (like __NSConstantString_tag, etc) will be
declared with visibility attributes. This causes problems when merging
ASTs because we currently reject declaration merging for declarations
with attributes.

This relaxes that restriction somewhat; implicit declarations can now
have attributes when merging; we assume that if the compiler generated
it, it's fine.
2025-07-29 14:09:02 -04:00

15 lines
1.0 KiB
C

// RUN: %clang_cc1 -std=c23 -emit-pch -o %t.1.ast %S/Inputs/enum3.c
// RUN: %clang_cc1 -std=c23 -emit-pch -o %t.2.ast %S/Inputs/enum4.c
// RUN: %clang_cc1 -std=c23 -ast-merge %t.1.ast -ast-merge %t.2.ast -fsyntax-only %s 2>&1 | FileCheck %s
// CHECK: enum3.c:2:6: warning: type 'enum E1' has incompatible definitions in different translation units
// CHECK: enum4.c:2:6: note: enumeration 'E1' missing fixed underlying type here
// CHECK: enum3.c:2:6: note: enumeration 'E1' has fixed underlying type here
// CHECK: enum3.c:6:6: warning: type 'enum E2' has incompatible definitions in different translation units
// CHECK: enum4.c:6:6: note: enumeration 'E2' has fixed underlying type here
// CHECK: enum3.c:6:6: note: enumeration 'E2' missing fixed underlying type here
// CHECK: enum3.c:11:6: warning: type 'enum E3' has incompatible definitions in different translation units
// CHECK: enum3.c:11:6: note: enumeration 'E3' declared with incompatible fixed underlying types ('long' vs. 'short')
// CHECK: 3 warnings generated