ChuanqiXu9 wrote:
> > I concluded that the local queue introduced in the previous commits isn’t
> > necessary in C mode. Since attribute equivalence is currently checked only
> > for C23, I removed the code entirely.
> > If we later enable attribute equivalence checking in C++ mode, we may need
> > to revisit this and adopt a similar approach. For example, without a
> > separate queue, clang will diagnose the attribute but fail to report the
> > mismatch in the type of member `a` when attempting to merge the following
> > struct:
> > ```
> > struct GuardedBy {
> > int b __attribute__((guarded_by(lock)));
> > // The pair of S is added to NonEquivalentDecls, but the pair of Lock
> > isn't.
> > struct __attribute__ ((lockable)) Lock {
> > struct S {
> > #ifdef D1
> > unsigned a;
> > #else
> > int a;
> > #endif
> > } s;
> > } lock;
> > };
> > ```
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > $ clang -cc1 -std=c++20 -emit-pch -o f1.ast -x c++ test.h $ clang -cc1
> > -std=c++20 -emit-pch -o f2.ast -DD1 -x c++ test.h $ clang -cc1 -std=c++20
> > -ast-merge f1.ast -ast-merge f2.ast -x c++ test.cpp
>
> CC @ChuanqiXu9 @Bigcheese as C++ modules maintainers. I am under the
> impression we need this for both C++ modules support and C23's redefinition
> checking. If we don't need the more complicated approach right now, I think
> the current approach is reasonable for C (but CC @erichkeane for awareness of
> the tablegen changes), I just want to make sure we're not making further work
> harder for ourselves.
In modules (Serialization), we already have ODR checks to check the
redefinitions are the same. So this is not needed for modules.
https://github.com/llvm/llvm-project/pull/168769
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits