It brings bunch of warnings in c-index-test.c with c89 mode. Shall we tweak c-index-test.c as c89-compliant, or should I suppress warnings with -Wno-c99-extensions in my builders?
2013/7/22 Enea Zaffanella <[email protected]>: > Author: enea > Date: Mon Jul 22 05:58:26 2013 > New Revision: 186817 > > URL: http://llvm.org/viewvc/llvm-project?rev=186817&view=rev > Log: > Implement the part of C89 6.5.7 p3 requiring a constant initializer list > when initializing aggregate/union types, no matter if static or not. > > Modified: > cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td > cfe/trunk/lib/Sema/SemaDecl.cpp > cfe/trunk/test/Sema/c89.c > > Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=186817&r1=186816&r2=186817&view=diff > ============================================================================== > --- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original) > +++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Mon Jul 22 05:58:26 > 2013 > @@ -3626,6 +3626,8 @@ def warn_typecheck_zero_static_array_siz > def err_array_size_non_int : Error<"size of array has non-integer type %0">; > def err_init_element_not_constant : Error< > "initializer element is not a compile-time constant">; > +def ext_aggregate_init_not_constant : Extension< > + "initializer for aggregate is not a compile-time constant">, InGroup<C99>; > def err_local_cant_init : Error< > "'__local' variable cannot have an initializer">; > def err_block_extern_cant_init : Error< > > Modified: cfe/trunk/lib/Sema/SemaDecl.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=186817&r1=186816&r2=186817&view=diff > ============================================================================== > --- cfe/trunk/lib/Sema/SemaDecl.cpp (original) > +++ cfe/trunk/lib/Sema/SemaDecl.cpp Mon Jul 22 05:58:26 2013 > @@ -7777,9 +7777,19 @@ void Sema::AddInitializerToDecl(Decl *Re > // C99 6.7.8p4: All the expressions in an initializer for an object that > has > // static storage duration shall be constant expressions or string > literals. > // C++ does not have this restriction. > - if (!getLangOpts().CPlusPlus && !VDecl->isInvalidDecl() && > - VDecl->getStorageClass() == SC_Static) > - CheckForConstantInitializer(Init, DclT); > + if (!getLangOpts().CPlusPlus && !VDecl->isInvalidDecl()) { > + if (VDecl->getStorageClass() == SC_Static) > + CheckForConstantInitializer(Init, DclT); > + // C89 is stricter than C99 for non-static aggregate types. > + // C89 6.5.7p3: All the expressions [...] in an initializer list > + // for an object that has aggregate or union type shall be > + // constant expressions. > + else if (!getLangOpts().C99 && VDecl->getType()->isAggregateType() && > + !Init->isConstantInitializer(Context, false)) > + Diag(Init->getExprLoc(), > + diag::ext_aggregate_init_not_constant) > + << Init->getSourceRange(); > + } > } else if (VDecl->isStaticDataMember() && > VDecl->getLexicalDeclContext()->isRecord()) { > // This is an in-class initialization for a static data member, e.g., > > Modified: cfe/trunk/test/Sema/c89.c > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/c89.c?rev=186817&r1=186816&r2=186817&view=diff > ============================================================================== > --- cfe/trunk/test/Sema/c89.c (original) > +++ cfe/trunk/test/Sema/c89.c Mon Jul 22 05:58:26 2013 > @@ -116,3 +116,7 @@ long long ll1 = /* expected-warning {{'l > unsigned long long ull1 = /* expected-warning {{'long long' is an extension > when C99 mode is not enabled}} */ > 42ULL; /* expected-warning {{'long long' is an extension > when C99 mode is not enabled}} */ > > +void test17(int v, int w) { > + int a[2] = { v, w }; /* expected-warning {{initializer for aggregate is > not a compile-time constant}} */ > +} > + > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
